[pitivi] titleeditor: Make new TitleClip visible if first layer is occupied
- From: Alexandru Băluț <alexbalut src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pitivi] titleeditor: Make new TitleClip visible if first layer is occupied
- Date: Sat, 1 Apr 2017 18:23:32 +0000 (UTC)
commit b71b3f39e6fb340a0821cdd6f809256144d8a98c
Author: Suhas Nayak <suhas2go gmail com>
Date: Fri Feb 3 00:50:44 2017 +0530
titleeditor: Make new TitleClip visible if first layer is occupied
If there is not enough space at current playhead position,
a new first layer is created to insert the TitleClip.
This fixes T7687
Reviewed-by: Alex Băluț <alexandru balut gmail com>
Differential Revision: https://phabricator.freedesktop.org/D1635
pitivi/timeline/timeline.py | 15 +++++++++++----
pitivi/titleeditor.py | 12 ++++++------
tests/test_undo_timeline.py | 42 ++++++++++++++++++++++++++++++++++++++++++
3 files changed, 59 insertions(+), 10 deletions(-)
---
diff --git a/pitivi/timeline/timeline.py b/pitivi/timeline/timeline.py
index 77abb51..86c038a 100644
--- a/pitivi/timeline/timeline.py
+++ b/pitivi/timeline/timeline.py
@@ -1305,11 +1305,18 @@ class TimelineContainer(Gtk.Grid, Zoomable, Loggable):
layer = self._getLongestLayer()
self._insertClipsAndAssets(assets, position, layer)
- def insertClips(self, clips, position=None):
+ def insert_clips_on_first_layer(self, clips, position=None):
"""Adds clips to the timeline on the first layer."""
- layers = self.ges_timeline.get_layers()
- layer = layers[0]
- self._insertClipsAndAssets(clips, position, layer)
+ with self.app.action_log.started("insert on first layer",
+ CommitTimelineFinalizingAction(self._project.pipeline)):
+ layers = self.ges_timeline.get_layers()
+ first_layer = layers[0]
+ start = self.__getInsertPosition(position)
+ end = start + sum([clip.get_duration() for clip in clips])
+ intersecting_clips = first_layer.get_clips_in_interval(start, end)
+ if intersecting_clips:
+ first_layer = self.timeline.create_layer(0)
+ self._insertClipsAndAssets(clips, start, first_layer)
def _insertClipsAndAssets(self, objs, position, layer):
if self.ges_timeline is None:
diff --git a/pitivi/titleeditor.py b/pitivi/titleeditor.py
index a4e536b..d379869 100644
--- a/pitivi/titleeditor.py
+++ b/pitivi/titleeditor.py
@@ -206,12 +206,12 @@ class TitleEditor(Loggable):
self.editing_box.hide()
def _createCb(self, unused_button):
- clip = GES.TitleClip()
- clip.set_duration(int(Gst.SECOND * 5))
- self.app.gui.timeline_ui.insertClips([clip])
+ title_clip = GES.TitleClip()
+ title_clip.set_duration(Gst.SECOND * 5)
+ self.app.gui.timeline_ui.insert_clips_on_first_layer([title_clip])
# Now that the clip is inserted in the timeline, it has a source which
# can be used to set its properties.
- source = clip.get_children(False)[0]
+ source = title_clip.get_children(False)[0]
assert source.set_child_property("text", "")
assert source.set_child_property("foreground-color", BACKGROUND_DEFAULT_COLOR)
assert source.set_child_property("color", FOREGROUND_DEFAULT_COLOR)
@@ -219,9 +219,9 @@ class TitleEditor(Loggable):
assert source.set_child_property("valignment", DEFAULT_VALIGNMENT)
assert source.set_child_property("halignment", DEFAULT_HALIGNMENT)
# Select it so the Title editor becomes active.
- self._selection.setSelection([clip], SELECT)
+ self._selection.setSelection([title_clip], SELECT)
self.app.gui.timeline_ui.timeline.resetSelectionGroup()
- self.app.gui.timeline_ui.timeline.current_group.add(clip)
+ self.app.gui.timeline_ui.timeline.current_group.add(title_clip)
def _propertyChangedCb(self, source, unused_gstelement, pspec):
if self._setting_props:
diff --git a/tests/test_undo_timeline.py b/tests/test_undo_timeline.py
index de7e184..f03515e 100644
--- a/tests/test_undo_timeline.py
+++ b/tests/test_undo_timeline.py
@@ -235,6 +235,48 @@ class TestTimelineObserver(BaseTestUndoTimeline):
self.assertEqual(len(clips), 1, clips)
self.assertEqual(len(clips[0].get_children(False)), 2)
+ def test_insert_on_first_layer(self):
+ self.setup_timeline_container()
+ uri = common.get_sample_uri("tears_of_steel.webm")
+ asset = GES.UriClipAsset.request_sync(uri)
+ clip1 = asset.extract()
+ self.timeline_container.insert_clips_on_first_layer(clips=[clip1], position=0)
+ clips = list(self.getTimelineClips())
+ self.assertEqual(len(clips), 1, clips)
+
+ # Undo insert on first layer
+ self.action_log.undo()
+ clips = list(self.getTimelineClips())
+ self.assertEqual(len(clips), 0, clips)
+
+ # Redo insert on first layer
+ self.action_log.redo()
+ clips = list(self.getTimelineClips())
+ self.assertEqual(len(clips), 1, clips)
+
+ # Insert new clip to create a layer
+ clip2 = common.create_test_clip(GES.TitleClip)
+ clip2.set_start(0 * Gst.SECOND)
+ clip2.set_duration(1 * Gst.SECOND)
+ self.timeline_container.insert_clips_on_first_layer(clips=[clip2], position=0)
+ layers = self.timeline.get_layers()
+ self.check_layers([layers[0], self.layer])
+ self.assertEqual(layers[0].get_clips(), [clip2])
+ self.assertEqual(layers[1].get_clips(), [clip1])
+
+ # Undo insert to create a layer
+ self.action_log.undo()
+ layers = self.timeline.get_layers()
+ self.check_layers([self.layer])
+ self.assertEqual(layers[0].get_clips(), [clip1])
+
+ # Redo insert to create a layer
+ self.action_log.redo()
+ layers = self.timeline.get_layers()
+ self.check_layers([layers[0], self.layer])
+ self.assertEqual(layers[0].get_clips(), [clip2])
+ self.assertEqual(layers[1].get_clips(), [clip1])
+
class TestLayerObserver(BaseTestUndoTimeline):
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]