[pitivi] timeline: Avoid updating layers multiple times
- From: Thibault Saunier <tsaunier src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pitivi] timeline: Avoid updating layers multiple times
- Date: Sun, 19 Feb 2017 23:49:16 +0000 (UTC)
commit 819c13f223d7e76057c6987ca2cee197d5abbdcb
Author: Alexandru Băluț <alexandru balut gmail com>
Date: Sun Feb 12 01:19:16 2017 +0100
timeline: Avoid updating layers multiple times
The layers are updated when their priorities are in good order, in
__update_layers which is called also when the priority of a layer has
been changed.
Reviewed-by: Thibault Saunier <tsaunier gnome org>
Differential Revision: https://phabricator.freedesktop.org/D1661
pitivi/timeline/timeline.py | 52 +++++++++++++++++---------------------
tests/test_timeline_timeline.py | 8 +++---
2 files changed, 27 insertions(+), 33 deletions(-)
---
diff --git a/pitivi/timeline/timeline.py b/pitivi/timeline/timeline.py
index 1011f17..1305d36 100644
--- a/pitivi/timeline/timeline.py
+++ b/pitivi/timeline/timeline.py
@@ -904,7 +904,7 @@ class Timeline(Gtk.EventBox, Zoomable, Loggable):
CommitTimelineFinalizingAction(pipeline)):
if self.__on_separators:
priority = self.separator_priority(self.__on_separators[1])
- created_layer = self.createLayer(priority)
+ created_layer = self.create_layer(priority)
else:
created_layer = None
for layer, clip in self.__last_clips_on_leave:
@@ -1001,6 +1001,21 @@ class Timeline(Gtk.EventBox, Zoomable, Loggable):
for ges_layer in self.ges_timeline.get_layers():
self.__update_layer(ges_layer)
+ def __update_layer(self, ges_layer):
+ """Sets the position of the layer and its controls in their parent."""
+ position = ges_layer.props.priority * 2 + 1
+
+ # Update the position of the LayerControls and Layer widgets and
+ # also the position of the separators below them.
+ controls_separator, layers_separator = self._separators[ges_layer.props.priority + 1]
+ vbox = self.layout.layers_vbox
+ vbox.child_set_property(ges_layer.ui, "position", position)
+ vbox.child_set_property(layers_separator, "position", position + 1)
+
+ vbox = self._layers_controls_vbox
+ vbox.child_set_property(ges_layer.control_ui, "position", position)
+ vbox.child_set_property(controls_separator, "position", position + 1)
+
def _remove_layer(self, ges_layer):
self.info("Removing layer: %s", ges_layer.props.priority)
self.layout.layers_vbox.remove(ges_layer.ui)
@@ -1192,49 +1207,28 @@ class Timeline(Gtk.EventBox, Zoomable, Loggable):
self.editing_context.edit_to(position, self._on_layer)
- def createLayer(self, priority):
+ def create_layer(self, priority):
"""Adds a new layer to the GES timeline."""
self.debug("Creating layer: priority = %s", priority)
+ ges_layers = self.ges_timeline.get_layers()
+ assert 0 <= priority <= len(ges_layers)
new_ges_layer = GES.Layer.new()
new_ges_layer.props.priority = priority
self.ges_timeline.add_layer(new_ges_layer)
- ges_layers = self.ges_timeline.get_layers()
- if priority < len(ges_layers):
- for ges_layer in ges_layers:
- if ges_layer == new_ges_layer:
- continue
-
- if ges_layer.get_priority() >= priority:
- ges_layer.props.priority += 1
- self.__update_layer(ges_layer)
-
- self.__update_layer(new_ges_layer)
+ for ges_layer in ges_layers:
+ if priority <= ges_layer.get_priority():
+ ges_layer.props.priority += 1
return new_ges_layer
- def __update_layer(self, ges_layer):
- """Sets the position of the layer and its controls in their parent."""
- position = ges_layer.props.priority * 2 + 1
-
- # Update the position of the LayerControls and Layer widgets and
- # also the position of the separators below them.
- controls_separator, layers_separator = self._separators[ges_layer.props.priority + 1]
- vbox = self.layout.layers_vbox
- vbox.child_set_property(ges_layer.ui, "position", position)
- vbox.child_set_property(layers_separator, "position", position + 1)
-
- vbox = self._layers_controls_vbox
- vbox.child_set_property(ges_layer.control_ui, "position", position)
- vbox.child_set_property(controls_separator, "position", position + 1)
-
def dragEnd(self):
if self.editing_context:
self._snapEndedCb()
if self.__on_separators and self.__got_dragged and not self.__clickedHandle:
priority = self.separator_priority(self.__on_separators[1])
- ges_layer = self.createLayer(priority)
+ ges_layer = self.create_layer(priority)
position = self.editing_context.new_position
self.editing_context.edit_to(position, ges_layer)
diff --git a/tests/test_timeline_timeline.py b/tests/test_timeline_timeline.py
index 886359f..a83a5f2 100644
--- a/tests/test_timeline_timeline.py
+++ b/tests/test_timeline_timeline.py
@@ -88,7 +88,7 @@ class TestLayers(BaseTestTimeline):
# Allocate layers
y = 0
for priority, height in enumerate(heights):
- ges_layer = timeline.createLayer(priority=priority)
+ ges_layer = timeline.create_layer(priority=priority)
rect = Gdk.Rectangle()
rect.y = y
rect.height = height
@@ -159,7 +159,7 @@ class TestLayers(BaseTestTimeline):
timeline = create_timeline_container().timeline
ges_layers = []
for priority in start_priorities:
- ges_layer = timeline.createLayer(priority)
+ ges_layer = timeline.create_layer(priority)
self.assertEqual(ges_layer.props.priority, priority)
ges_layers.append(ges_layer)
self.check_priorities_and_positions(timeline, ges_layers, expected_priorities)
@@ -218,7 +218,7 @@ class TestLayers(BaseTestTimeline):
# Pitivi doesn't support removing the last remaining layer,
# that's why we create an extra layer.
for priority in range(len(removal_order) + 1):
- ges_layer = timeline.createLayer(priority)
+ ges_layer = timeline.create_layer(priority)
ges_layers.append(ges_layer)
# Remove layers one by one in the specified order.
@@ -243,7 +243,7 @@ class TestLayers(BaseTestTimeline):
# Add layers to move them later.
ges_layers = []
for priority in range(len(expected_priorities)):
- ges_layer = timeline.createLayer(priority)
+ ges_layer = timeline.create_layer(priority)
ges_layers.append(ges_layer)
timeline.moveLayer(ges_layers[from_priority], to_priority)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]