From: Till T. <ro...@tt...> - 2012-06-26 14:36:44
|
Git commit d27040769003fecf8a9605040596bb003128e9b5 by Till Theato. Committed on 26/06/2012 at 16:32. Pushed by theato into branch 'refactoring'. Resize background track when necessary. M +1 -0 src/core/project/CMakeLists.txt M +7 -1 src/core/project/timeline.cpp A +51 -0 src/core/project/timelinebackground.cpp [License: GPL] A +41 -0 src/core/project/timelinebackground.h [License: GPL] http://commits.kde.org/kdenlive/d27040769003fecf8a9605040596bb003128e9b5 diff --git a/src/core/project/CMakeLists.txt b/src/core/project/CMakeLists.txt index dc50508..9eeb37a 100644 --- a/src/core/project/CMakeLists.txt +++ b/src/core/project/CMakeLists.txt @@ -13,6 +13,7 @@ set(project_SRCS project/projectfolder.cpp project/projectmanager.cpp project/timeline.cpp + project/timelinebackground.cpp project/timelinetrack.cpp ${commands_SRCS} diff --git a/src/core/project/timeline.cpp b/src/core/project/timeline.cpp index 82955a1..ab06e12 100644 --- a/src/core/project/timeline.cpp +++ b/src/core/project/timeline.cpp @@ -12,6 +12,7 @@ the Free Software Foundation, either version 3 of the License, or #include "project.h" #include "producerwrapper.h" #include "timelinetrack.h" +#include "timelinebackground.h" #include "monitor/monitormodel.h" #include "kdenlivesettings.h" #include <mlt++/Mlt.h> @@ -104,7 +105,12 @@ void Timeline::loadTracks() Q_ASSERT(m_tracks.count() == 0); Mlt::Multitrack *multitrack = m_tractor->multitrack(); - for (int i = multitrack->count() - 1; i > 0; --i) { + int min = 0; + if (multitrack->track(0)->get("id") == QString("black_track")) { + new TimelineBackground(new ProducerWrapper(multitrack->track(0)), this); + ++min; + } + for (int i = multitrack->count() - 1; i >= min; --i) { TimelineTrack *track = new TimelineTrack(new ProducerWrapper(multitrack->track(i)), this); if (track) { m_tracks.append(track); diff --git a/src/core/project/timelinebackground.cpp b/src/core/project/timelinebackground.cpp new file mode 100644 index 0000000..d883ecf --- /dev/null +++ b/src/core/project/timelinebackground.cpp @@ -0,0 +1,51 @@ +/* +Copyright (C) 2012 Till Theato <ro...@tt...> +This file is part of Kdenlive. See www.kdenlive.org. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +*/ + +#include "timelinebackground.h" +#include "timeline.h" +#include "producerwrapper.h" + + +TimelineBackground::TimelineBackground(ProducerWrapper* track, Timeline* parent) : + QObject(parent), + m_parent(parent), + m_playlist(new Mlt::Playlist((mlt_playlist)track->get_service())) +{ + connect(parent, SIGNAL(durationChanged(int)), this, SLOT(onTimelineDurationChange())); +} + +TimelineBackground::~TimelineBackground() +{ + delete m_playlist; +} + +void TimelineBackground::onTimelineDurationChange() +{ + int duration = m_playlist->get_playtime(); + + m_parent->producer()->block(); + m_playlist->set_in_and_out(0, 0); + int timelineDuration = m_parent->duration(); + m_playlist->set_in_and_out(0, duration - 1); + m_parent->producer()->unblock(); + + if (timelineDuration == duration) { + return; + } + + Mlt::Producer *clip = m_playlist->get_clip(0); + if (timelineDuration > clip->get_length()) { + clip->parent().set("length", timelineDuration); + clip->parent().set("out", timelineDuration - 1); + clip->set("length", timelineDuration); + } + m_playlist->resize_clip(0, 0, timelineDuration - 1); + delete clip; +} diff --git a/src/core/project/timelinebackground.h b/src/core/project/timelinebackground.h new file mode 100644 index 0000000..56da0b5 --- /dev/null +++ b/src/core/project/timelinebackground.h @@ -0,0 +1,41 @@ +/* +Copyright (C) 2012 Till Theato <ro...@tt...> +This file is part of Kdenlive. See www.kdenlive.org. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +*/ + +#ifndef TIMELINEBACKGROUND_H +#define TIMELINEBACKGROUND_H + +#include <QObject> + +class Timeline; +class ProducerWrapper; + +namespace Mlt +{ + class Playlist; +} + + +class TimelineBackground : public QObject +{ + Q_OBJECT + +public: + explicit TimelineBackground(ProducerWrapper *track, Timeline *parent); + virtual ~TimelineBackground(); + +private slots: + void onTimelineDurationChange(); + +private: + Timeline *m_parent; + Mlt::Playlist *m_playlist; +}; + +#endif |