From 8afcddfe29c74178299cba40ed0fd40c307c7c98 Mon Sep 17 00:00:00 2001 From: Yash Agrawal Date: Sun, 17 Feb 2019 04:54:06 +0530 Subject: [PATCH 01/10] Add rotate effect for single clip --- data/ui/cliptransformation.ui | 38 ++++++++++++++++++++++++++++++--- pitivi/clipproperties.py | 21 ++++++++++++++++++ tests/test_timeline_elements.py | 2 +- 3 files changed, 57 insertions(+), 4 deletions(-) diff --git a/data/ui/cliptransformation.ui b/data/ui/cliptransformation.ui index 1609258ee..7ba236bb5 100644 --- a/data/ui/cliptransformation.ui +++ b/data/ui/cliptransformation.ui @@ -206,6 +206,38 @@ 2 + + + > + True + True + False + True + Next keyframe + none + + + True + True + 3 + + + + + > + True + True + False + True + Next keyframe + none + + + True + True + 4 + + True @@ -219,14 +251,14 @@ True True - 3 + 5 0 - 4 - 4 + 6 + 6 diff --git a/pitivi/clipproperties.py b/pitivi/clipproperties.py index b6d7a6257..0a90c5d54 100644 --- a/pitivi/clipproperties.py +++ b/pitivi/clipproperties.py @@ -571,6 +571,8 @@ class TransformationProperties(Gtk.Expander, Loggable): self.spin_buttons = {} self.spin_buttons_handler_ids = {} self.set_label(_("Transformation")) + self.videoflip = GES.Effect.new("videoflip") + self.orientation = 0 self.builder = Gtk.Builder() self.builder.add_from_file(os.path.join(get_ui_dir(), @@ -612,6 +614,12 @@ class TransformationProperties(Gtk.Expander, Loggable): self._activate_keyframes_btn = self.builder.get_object("activate_keyframes_button") self._activate_keyframes_btn.connect("toggled", self.__show_keyframes_toggled_cb) + self._rotate_left_keyframe_btn = self.builder.get_object("rotate_left_keyframe_button") + self._rotate_left_keyframe_btn.connect("clicked", self.__rotate_keyframe, False) + + self._rotate_right_keyframe_btn = self.builder.get_object("rotate_right_keyframe_button") + self._rotate_right_keyframe_btn.connect("clicked", self.__rotate_keyframe, True) + self._next_keyframe_btn = self.builder.get_object("next_keyframe_button") self._next_keyframe_btn.connect("clicked", self.__go_to_keyframe, True) self._next_keyframe_btn.set_sensitive(False) @@ -664,6 +672,17 @@ class TransformationProperties(Gtk.Expander, Loggable): seekval = start + duration pipeline.simple_seek(seekval) + def __rotate_keyframe(self, unused_button, right): + if right: + self.orientation = (self.orientation + 1) % 4 + else: + self.orientation = (self.orientation - 1) % 4 + + with self.app.action_log.started("Rotate clip", + finalizing_action=CommitTimelineFinalizingAction(self._project.pipeline), + toplevel=True): + self.videoflip.set_child_property("video-direction", self.orientation) + def __show_keyframes_toggled_cb(self, unused_button): if self._activate_keyframes_btn.props.active: self.__set_control_bindings() @@ -887,6 +906,8 @@ class TransformationProperties(Gtk.Expander, Loggable): def _selectionChangedCb(self, unused_timeline): if len(self._selection) == 1: clip = list(self._selection)[0] + clip.add(self.videoflip) + self.orientation = 0 source = clip.find_track_element(None, GES.VideoSource) if source: self._selected_clip = clip diff --git a/tests/test_timeline_elements.py b/tests/test_timeline_elements.py index b0ae2e9ff..976c19a51 100644 --- a/tests/test_timeline_elements.py +++ b/tests/test_timeline_elements.py @@ -30,8 +30,8 @@ from matplotlib.backend_bases import MouseEvent from pitivi.timeline.elements import GES_TYPE_UI_TYPE from pitivi.undo.undo import UndoableActionLog from pitivi.utils.timeline import Zoomable -from tests.test_timeline_timeline import BaseTestTimeline from tests import common +from tests.test_timeline_timeline import BaseTestTimeline class TestKeyframeCurve(BaseTestTimeline): -- GitLab From 98dc004e1de10e5b2d3f212fd109a036f4698a7f Mon Sep 17 00:00:00 2001 From: Yash Agrawal Date: Tue, 19 Feb 2019 06:01:11 +0530 Subject: [PATCH 02/10] update icons --- data/ui/cliptransformation.ui | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/data/ui/cliptransformation.ui b/data/ui/cliptransformation.ui index 7ba236bb5..4363d4c1e 100644 --- a/data/ui/cliptransformation.ui +++ b/data/ui/cliptransformation.ui @@ -207,14 +207,13 @@ - - > + True True False True - Next keyframe - none + Rotate clip 90° anti-clockwise + object-rotate-left-symbolic True @@ -223,14 +222,13 @@ - - > + True True False True - Next keyframe - none + Rotate clip 90° clockwise + object-rotate-right-symbolic True -- GitLab From dbc1d24c7936a46d57654fb183ddadce8f6ff7e7 Mon Sep 17 00:00:00 2001 From: Yash Agrawal Date: Sun, 3 Mar 2019 14:09:19 +0530 Subject: [PATCH 03/10] Add rotate spinbutton --- data/ui/cliptransformation.ui | 85 +++++++++++++++++++---------------- pitivi/clipproperties.py | 41 +++++++---------- 2 files changed, 63 insertions(+), 63 deletions(-) diff --git a/data/ui/cliptransformation.ui b/data/ui/cliptransformation.ui index 4363d4c1e..abc47fc5c 100644 --- a/data/ui/cliptransformation.ui +++ b/data/ui/cliptransformation.ui @@ -3,12 +3,6 @@ - - -9999999999 - 9999999999 - 1 - 10 - True False @@ -32,6 +26,18 @@ 1 10 + + -9999999999 + 9999999999 + 1 + 10 + + + -99999999 + 99999999 + 0.01 + 1 + True False @@ -63,6 +69,7 @@ 1 position_x_adjustment + 9 True @@ -79,6 +86,7 @@ 1 position_y_adjustment + 9 True @@ -111,6 +119,18 @@ 3 + + + True + False + Rotate: + 0 + + + 0 + 4 + + True @@ -119,6 +139,7 @@ digits width_adjustment + 9 True @@ -134,6 +155,7 @@ end height_adjustment + 9 True @@ -142,6 +164,23 @@ 3 + + + True + True + end + + rotate_adjustment + 2 + 9 + True + + + 1 + 4 + 3 + + True @@ -206,36 +245,6 @@ 2 - - - True - True - False - True - Rotate clip 90° anti-clockwise - object-rotate-left-symbolic - - - True - True - 3 - - - - - True - True - False - True - Rotate clip 90° clockwise - object-rotate-right-symbolic - - - True - True - 4 - - True @@ -255,8 +264,8 @@ 0 - 6 - 6 + 5 + 4 diff --git a/pitivi/clipproperties.py b/pitivi/clipproperties.py index 0a90c5d54..5a55196f1 100644 --- a/pitivi/clipproperties.py +++ b/pitivi/clipproperties.py @@ -571,8 +571,7 @@ class TransformationProperties(Gtk.Expander, Loggable): self.spin_buttons = {} self.spin_buttons_handler_ids = {} self.set_label(_("Transformation")) - self.videoflip = GES.Effect.new("videoflip") - self.orientation = 0 + self.rotate_effect = GES.Effect.new("rotate") self.builder = Gtk.Builder() self.builder.add_from_file(os.path.join(get_ui_dir(), @@ -614,12 +613,6 @@ class TransformationProperties(Gtk.Expander, Loggable): self._activate_keyframes_btn = self.builder.get_object("activate_keyframes_button") self._activate_keyframes_btn.connect("toggled", self.__show_keyframes_toggled_cb) - self._rotate_left_keyframe_btn = self.builder.get_object("rotate_left_keyframe_button") - self._rotate_left_keyframe_btn.connect("clicked", self.__rotate_keyframe, False) - - self._rotate_right_keyframe_btn = self.builder.get_object("rotate_right_keyframe_button") - self._rotate_right_keyframe_btn.connect("clicked", self.__rotate_keyframe, True) - self._next_keyframe_btn = self.builder.get_object("next_keyframe_button") self._next_keyframe_btn.connect("clicked", self.__go_to_keyframe, True) self._next_keyframe_btn.set_sensitive(False) @@ -634,6 +627,8 @@ class TransformationProperties(Gtk.Expander, Loggable): self.__setup_spin_button("width_spinbtn", "width") self.__setup_spin_button("height_spinbtn", "height") + self.__setup_spin_button("rotate_spinbtn", "angle") + def __get_keyframes_timestamps(self): keyframes_ts = [] for prop in ["posx", "posy", "width", "height"]: @@ -672,17 +667,6 @@ class TransformationProperties(Gtk.Expander, Loggable): seekval = start + duration pipeline.simple_seek(seekval) - def __rotate_keyframe(self, unused_button, right): - if right: - self.orientation = (self.orientation + 1) % 4 - else: - self.orientation = (self.orientation - 1) % 4 - - with self.app.action_log.started("Rotate clip", - finalizing_action=CommitTimelineFinalizingAction(self._project.pipeline), - toplevel=True): - self.videoflip.set_child_property("video-direction", self.orientation) - def __show_keyframes_toggled_cb(self, unused_button): if self._activate_keyframes_btn.props.active: self.__set_control_bindings() @@ -719,7 +703,7 @@ class TransformationProperties(Gtk.Expander, Loggable): if self.source is None: return False - for prop in ["posx", "posy", "width", "height"]: + for prop in ["posx", "posy", "width", "height", "angle"]: binding = self.source.get_control_binding(prop) if binding is None: return False @@ -747,7 +731,7 @@ class TransformationProperties(Gtk.Expander, Loggable): self.app.action_log.begin("Transformation properties keyframes activate", toplevel=True) - for prop in ["posx", "posy", "width", "height"]: + for prop in ["posx", "posy", "width", "height", "angle"]: binding = self.source.get_control_binding(prop) if not binding: @@ -780,6 +764,8 @@ class TransformationProperties(Gtk.Expander, Loggable): for prop in ["posx", "posy", "width", "height"]: self.source.set_child_property(prop, self.source.ui.default_position[prop]) + self.rotate_effect.set_child_property("angle", 0) + self.__update_spin_btn("angle") self.__update_keyframes_ui() def __get_source_property(self, prop): @@ -798,13 +784,15 @@ class TransformationProperties(Gtk.Expander, Loggable): return res, value except PipelineError: pass + elif prop == "angle": + return self.rotate_effect.get_child_property(prop) return self.source.get_child_property(prop) def _position_cb(self, unused_pipeline, unused_position): if not self.__source_uses_keyframes(): return - for prop in ["posx", "posy", "width", "height"]: + for prop in ["posx", "posy", "width", "height", "angle"]: self.__update_spin_btn(prop) # Keep the overlay stack in sync with the spin buttons values self.app.gui.editor.viewer.overlay_stack.update(self.source) @@ -858,11 +846,15 @@ class TransformationProperties(Gtk.Expander, Loggable): except PipelineError: self.warning("Could not get pipeline position") return + else: with self.app.action_log.started("Transformation property change", finalizing_action=CommitTimelineFinalizingAction(self._project.pipeline), toplevel=True): - self.source.set_child_property(prop, value) + if prop == "angle": + self.rotate_effect.set_child_property(prop, value) + else: + self.source.set_child_property(prop, value) def __setup_spin_button(self, widget_name, property_name): """Creates a SpinButton for editing a property value.""" @@ -906,8 +898,7 @@ class TransformationProperties(Gtk.Expander, Loggable): def _selectionChangedCb(self, unused_timeline): if len(self._selection) == 1: clip = list(self._selection)[0] - clip.add(self.videoflip) - self.orientation = 0 + clip.add(self.rotate_effect) source = clip.find_track_element(None, GES.VideoSource) if source: self._selected_clip = clip -- GitLab From 364c5e4c3b0476cc1c48e8d530900c88b5926b69 Mon Sep 17 00:00:00 2001 From: Yash Agrawal Date: Tue, 5 Mar 2019 15:05:31 +0530 Subject: [PATCH 04/10] Make Rotate effect work for multiple clips --- pitivi/clipproperties.py | 14 ++++++++++++-- pitivi/effects.py | 4 ++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/pitivi/clipproperties.py b/pitivi/clipproperties.py index 5a55196f1..2d797ec9a 100644 --- a/pitivi/clipproperties.py +++ b/pitivi/clipproperties.py @@ -571,7 +571,7 @@ class TransformationProperties(Gtk.Expander, Loggable): self.spin_buttons = {} self.spin_buttons_handler_ids = {} self.set_label(_("Transformation")) - self.rotate_effect = GES.Effect.new("rotate") + self.rotate_effect = None self.builder = Gtk.Builder() self.builder.add_from_file(os.path.join(get_ui_dir(), @@ -765,6 +765,7 @@ class TransformationProperties(Gtk.Expander, Loggable): self.source.set_child_property(prop, self.source.ui.default_position[prop]) self.rotate_effect.set_child_property("angle", 0) + # TODO: make it work with undo button self.__update_spin_btn("angle") self.__update_keyframes_ui() @@ -898,7 +899,16 @@ class TransformationProperties(Gtk.Expander, Loggable): def _selectionChangedCb(self, unused_timeline): if len(self._selection) == 1: clip = list(self._selection)[0] - clip.add(self.rotate_effect) + + self.rotate_effect = None + for effect in clip.get_top_effects(): + if effect.props.bin_description == "rotate": + self.rotate_effect = effect + break + if not self.rotate_effect: + self.rotate_effect = GES.Effect.new("rotate") + clip.add(self.rotate_effect) + source = clip.find_track_element(None, GES.VideoSource) if source: self._selected_clip = clip diff --git a/pitivi/effects.py b/pitivi/effects.py index 9e8c07f66..288928214 100644 --- a/pitivi/effects.py +++ b/pitivi/effects.py @@ -99,7 +99,7 @@ VIDEO_EFFECTS_CATEGORIES = ( "cogscale", "aspectratiocrop", "cogdownsample", "videoscale", "videocrop", "videoflip", "videobox", "gdkpixbufscale", "kaleidoscope", "mirror", "pinch", "sphere", "square", "fisheye", - "stretch", "twirl", "waterriple", "rotate", "bulge", "circle", + "stretch", "twirl", "waterriple", "bulge", "circle", "frei0r-filter-letterb0xed", "frei0r-filter-k-means-clustering", "frei0r-filter-lens-correction", "frei0r-filter-defish0r", "frei0r-filter-perspective", "frei0r-filter-c0rners", @@ -142,7 +142,7 @@ BLACKLISTED_PLUGINS = [] HIDDEN_EFFECTS = [ # Overlaying an image onto a video stream can already be done. - "gdkpixbufoverlay"] + "gdkpixbufoverlay", "rotate"] GlobalSettings.addConfigSection('effect-library') -- GitLab From 42fbb97a95fa7771e5483964c84d3f978083e851 Mon Sep 17 00:00:00 2001 From: Yash Agrawal Date: Tue, 5 Mar 2019 17:45:31 +0530 Subject: [PATCH 05/10] Add rotate effect only when rotate value is changed --- pitivi/clipproperties.py | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/pitivi/clipproperties.py b/pitivi/clipproperties.py index 2d797ec9a..e1bbba791 100644 --- a/pitivi/clipproperties.py +++ b/pitivi/clipproperties.py @@ -764,9 +764,13 @@ class TransformationProperties(Gtk.Expander, Loggable): for prop in ["posx", "posy", "width", "height"]: self.source.set_child_property(prop, self.source.ui.default_position[prop]) - self.rotate_effect.set_child_property("angle", 0) - # TODO: make it work with undo button - self.__update_spin_btn("angle") + if self.rotate_effect: + self.rotate_effect.set_child_property("angle", 0) + # TODO: make it work with undo button + self.__update_spin_btn("angle") + clip = list(self._selection)[0] + clip.add(self.rotate_effect) + self.__update_keyframes_ui() def __get_source_property(self, prop): @@ -865,10 +869,24 @@ class TransformationProperties(Gtk.Expander, Loggable): self.spin_buttons[property_name] = spinbtn self.spin_buttons_handler_ids[property_name] = handler_id + def _get_rotate_effect(self): + clip = list(self._selection)[0] + self.rotate_effect = None + for effect in clip.get_top_effects(): + if effect.props.bin_description == "rotate": + self.rotate_effect = effect + break + if not self.rotate_effect: + self.rotate_effect = GES.Effect.new("rotate") + clip.add(self.rotate_effect) + def _onValueChangedCb(self, spinbtn, prop): if not self.source: return + if prop == "angle": + self._get_rotate_effect() + value = spinbtn.get_value() res, cvalue = self.__get_source_property(prop) @@ -890,7 +908,8 @@ class TransformationProperties(Gtk.Expander, Loggable): if self.source: self.__update_control_bindings() for prop in self.spin_buttons: - self.__update_spin_btn(prop) + if prop != "angle": + self.__update_spin_btn(prop) self.__update_keyframes_ui() self.source.connect("deep-notify", self.__source_property_changed_cb) self.source.connect("control-binding-added", self._control_bindings_changed) @@ -899,16 +918,6 @@ class TransformationProperties(Gtk.Expander, Loggable): def _selectionChangedCb(self, unused_timeline): if len(self._selection) == 1: clip = list(self._selection)[0] - - self.rotate_effect = None - for effect in clip.get_top_effects(): - if effect.props.bin_description == "rotate": - self.rotate_effect = effect - break - if not self.rotate_effect: - self.rotate_effect = GES.Effect.new("rotate") - clip.add(self.rotate_effect) - source = clip.find_track_element(None, GES.VideoSource) if source: self._selected_clip = clip -- GitLab From 80af463fe441f5afc65e97a29b737ea029c5f01d Mon Sep 17 00:00:00 2001 From: Yash Agrawal Date: Wed, 6 Mar 2019 03:16:07 +0530 Subject: [PATCH 06/10] Fix failure for multiple clips --- pitivi/clipproperties.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/pitivi/clipproperties.py b/pitivi/clipproperties.py index e1bbba791..c428139f1 100644 --- a/pitivi/clipproperties.py +++ b/pitivi/clipproperties.py @@ -571,7 +571,7 @@ class TransformationProperties(Gtk.Expander, Loggable): self.spin_buttons = {} self.spin_buttons_handler_ids = {} self.set_label(_("Transformation")) - self.rotate_effect = None + self.__rotate_effect = None self.builder = Gtk.Builder() self.builder.add_from_file(os.path.join(get_ui_dir(), @@ -764,12 +764,11 @@ class TransformationProperties(Gtk.Expander, Loggable): for prop in ["posx", "posy", "width", "height"]: self.source.set_child_property(prop, self.source.ui.default_position[prop]) - if self.rotate_effect: - self.rotate_effect.set_child_property("angle", 0) + if self.__rotate_effect: + self.__rotate_effect.set_child_property("angle", 0) # TODO: make it work with undo button self.__update_spin_btn("angle") - clip = list(self._selection)[0] - clip.add(self.rotate_effect) + self._selected_clip.remove(self.__rotate_effect) self.__update_keyframes_ui() @@ -790,7 +789,11 @@ class TransformationProperties(Gtk.Expander, Loggable): except PipelineError: pass elif prop == "angle": - return self.rotate_effect.get_child_property(prop) + self.__rotate_effect = self._get_rotate_effect() + if self.__rotate_effect: + return self.__rotate_effect.get_child_property(prop) + else: + return True, 0 return self.source.get_child_property(prop) @@ -857,7 +860,7 @@ class TransformationProperties(Gtk.Expander, Loggable): finalizing_action=CommitTimelineFinalizingAction(self._project.pipeline), toplevel=True): if prop == "angle": - self.rotate_effect.set_child_property(prop, value) + self.__rotate_effect.set_child_property(prop, value) else: self.source.set_child_property(prop, value) @@ -871,21 +874,19 @@ class TransformationProperties(Gtk.Expander, Loggable): def _get_rotate_effect(self): clip = list(self._selection)[0] - self.rotate_effect = None for effect in clip.get_top_effects(): if effect.props.bin_description == "rotate": - self.rotate_effect = effect - break - if not self.rotate_effect: - self.rotate_effect = GES.Effect.new("rotate") - clip.add(self.rotate_effect) + return effect + return None def _onValueChangedCb(self, spinbtn, prop): if not self.source: return if prop == "angle": - self._get_rotate_effect() + if not self._get_rotate_effect(): + self.__rotate_effect = GES.Effect.new("rotate") + self._selected_clip.add(self.__rotate_effect) value = spinbtn.get_value() @@ -908,8 +909,7 @@ class TransformationProperties(Gtk.Expander, Loggable): if self.source: self.__update_control_bindings() for prop in self.spin_buttons: - if prop != "angle": - self.__update_spin_btn(prop) + self.__update_spin_btn(prop) self.__update_keyframes_ui() self.source.connect("deep-notify", self.__source_property_changed_cb) self.source.connect("control-binding-added", self._control_bindings_changed) -- GitLab From 7b895c864d44a2292aae86532da254d28dd10b3f Mon Sep 17 00:00:00 2001 From: Yash Agrawal Date: Fri, 29 Mar 2019 11:26:15 +0530 Subject: [PATCH 07/10] Minor miscellaneous fixes --- pitivi/clipproperties.py | 18 ++++++------------ pitivi/effects.py | 4 +++- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/pitivi/clipproperties.py b/pitivi/clipproperties.py index c428139f1..efe8b43b2 100644 --- a/pitivi/clipproperties.py +++ b/pitivi/clipproperties.py @@ -703,7 +703,7 @@ class TransformationProperties(Gtk.Expander, Loggable): if self.source is None: return False - for prop in ["posx", "posy", "width", "height", "angle"]: + for prop in ["posx", "posy", "width", "height"]: binding = self.source.get_control_binding(prop) if binding is None: return False @@ -731,7 +731,7 @@ class TransformationProperties(Gtk.Expander, Loggable): self.app.action_log.begin("Transformation properties keyframes activate", toplevel=True) - for prop in ["posx", "posy", "width", "height", "angle"]: + for prop in ["posx", "posy", "width", "height"]: binding = self.source.get_control_binding(prop) if not binding: @@ -765,10 +765,8 @@ class TransformationProperties(Gtk.Expander, Loggable): self.source.set_child_property(prop, self.source.ui.default_position[prop]) if self.__rotate_effect: - self.__rotate_effect.set_child_property("angle", 0) - # TODO: make it work with undo button - self.__update_spin_btn("angle") self._selected_clip.remove(self.__rotate_effect) + self.__update_spin_btn("angle") self.__update_keyframes_ui() @@ -854,12 +852,14 @@ class TransformationProperties(Gtk.Expander, Loggable): except PipelineError: self.warning("Could not get pipeline position") return - else: with self.app.action_log.started("Transformation property change", finalizing_action=CommitTimelineFinalizingAction(self._project.pipeline), toplevel=True): if prop == "angle": + if not self._get_rotate_effect(): + self.__rotate_effect = GES.Effect.new("rotate") + self._selected_clip.add(self.__rotate_effect) self.__rotate_effect.set_child_property(prop, value) else: self.source.set_child_property(prop, value) @@ -883,13 +883,7 @@ class TransformationProperties(Gtk.Expander, Loggable): if not self.source: return - if prop == "angle": - if not self._get_rotate_effect(): - self.__rotate_effect = GES.Effect.new("rotate") - self._selected_clip.add(self.__rotate_effect) - value = spinbtn.get_value() - res, cvalue = self.__get_source_property(prop) if not res: return diff --git a/pitivi/effects.py b/pitivi/effects.py index 288928214..497cae474 100644 --- a/pitivi/effects.py +++ b/pitivi/effects.py @@ -142,7 +142,9 @@ BLACKLISTED_PLUGINS = [] HIDDEN_EFFECTS = [ # Overlaying an image onto a video stream can already be done. - "gdkpixbufoverlay", "rotate"] + "gdkpixbufoverlay", + # This effect was moved to transformation box. + "rotate"] GlobalSettings.addConfigSection('effect-library') -- GitLab From b593ddb47d231dfe1e5bfb69eea2fb20934b2986 Mon Sep 17 00:00:00 2001 From: Yash Agrawal Date: Sat, 22 Jun 2019 11:14:13 +0530 Subject: [PATCH 08/10] fix undo widget update --- pitivi/clipproperties.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/pitivi/clipproperties.py b/pitivi/clipproperties.py index efe8b43b2..c21e3e367 100644 --- a/pitivi/clipproperties.py +++ b/pitivi/clipproperties.py @@ -809,13 +809,22 @@ class TransformationProperties(Gtk.Expander, Loggable): def __update_spin_btn(self, prop): assert self.source + if prop == "alpha": + prop = "angle" + try: spin = self.spin_buttons[prop] spin_handler_id = self.spin_buttons_handler_ids[prop] except KeyError: return - res, value = self.__get_source_property(prop) + if prop == "angle": + self.__rotate_effect = self._get_rotate_effect() + if self.__rotate_effect: + res, value = self.__rotate_effect.get_child_property(prop) + else: + res, value = self.__get_source_property(prop) + assert res if spin.get_value() != value: # Make sure self._onValueChangedCb doesn't get called here. If that @@ -853,9 +862,10 @@ class TransformationProperties(Gtk.Expander, Loggable): self.warning("Could not get pipeline position") return else: - with self.app.action_log.started("Transformation property change", - finalizing_action=CommitTimelineFinalizingAction(self._project.pipeline), - toplevel=True): + with self.app.action_log.started( + "Transformation property change", + finalizing_action=CommitTimelineFinalizingAction(self._project.pipeline), + toplevel=True): if prop == "angle": if not self._get_rotate_effect(): self.__rotate_effect = GES.Effect.new("rotate") -- GitLab From bb40c3fd301360abb8956161d81f2727385f328f Mon Sep 17 00:00:00 2001 From: Yash Agrawal Date: Sun, 23 Jun 2019 13:06:59 +0530 Subject: [PATCH 09/10] Minor miscellaneous fixes --- pitivi/clipproperties.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/pitivi/clipproperties.py b/pitivi/clipproperties.py index c21e3e367..5192711a2 100644 --- a/pitivi/clipproperties.py +++ b/pitivi/clipproperties.py @@ -808,7 +808,6 @@ class TransformationProperties(Gtk.Expander, Loggable): def __update_spin_btn(self, prop): assert self.source - if prop == "alpha": prop = "angle" @@ -822,6 +821,8 @@ class TransformationProperties(Gtk.Expander, Loggable): self.__rotate_effect = self._get_rotate_effect() if self.__rotate_effect: res, value = self.__rotate_effect.get_child_property(prop) + else: + res, value = True, 0 else: res, value = self.__get_source_property(prop) @@ -883,11 +884,9 @@ class TransformationProperties(Gtk.Expander, Loggable): self.spin_buttons_handler_ids[property_name] = handler_id def _get_rotate_effect(self): - clip = list(self._selection)[0] - for effect in clip.get_top_effects(): + for effect in self._selected_clip.get_top_effects(): if effect.props.bin_description == "rotate": return effect - return None def _onValueChangedCb(self, spinbtn, prop): if not self.source: -- GitLab From 38e6289cf6a63a61ecfeb2c64b88ef24beeaac70 Mon Sep 17 00:00:00 2001 From: Yash Agrawal Date: Tue, 25 Jun 2019 19:45:05 +0530 Subject: [PATCH 10/10] add signal callback function for change in effect value --- pitivi/clipproperties.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/pitivi/clipproperties.py b/pitivi/clipproperties.py index 5192711a2..3e2549a9f 100644 --- a/pitivi/clipproperties.py +++ b/pitivi/clipproperties.py @@ -806,10 +806,14 @@ class TransformationProperties(Gtk.Expander, Loggable): def __source_property_changed_cb(self, unused_source, unused_element, param): self.__update_spin_btn(param.name) - def __update_spin_btn(self, prop): - assert self.source - if prop == "alpha": - prop = "angle" + def __effect_property_changed_cb(self, unused_source, unused_element, param): + self.__update_spin_btn(param.name, False) + + def __update_spin_btn(self, prop, source_prop=True): + if source_prop: + assert self.source + else: + assert self.__rotate_effect try: spin = self.spin_buttons[prop] @@ -871,6 +875,8 @@ class TransformationProperties(Gtk.Expander, Loggable): if not self._get_rotate_effect(): self.__rotate_effect = GES.Effect.new("rotate") self._selected_clip.add(self.__rotate_effect) + self.__rotate_effect.connect("deep-notify", self.__effect_property_changed_cb) + self.__rotate_effect.set_child_property(prop, value) else: self.source.set_child_property(prop, value) -- GitLab