[pitivi] timeline/{elements:timeline} : Unselect keyframes on dragEnd if needed.
- From: Jean-François Fortin Tam <jfft src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pitivi] timeline/{elements:timeline} : Unselect keyframes on dragEnd if needed.
- Date: Mon, 8 Jul 2013 00:51:41 +0000 (UTC)
commit 4bd56409383b525aec105ceed0c1248d8fb50847
Author: Mathieu Duponchelle <mathieu duponchelle epitech eu>
Date: Tue Jun 25 15:25:31 2013 +0200
timeline/{elements:timeline} : Unselect keyframes on dragEnd if needed.
+ Get the pointer device in timeline.
+ Check if it is on the keyframe at drag_end in elements.
pitivi/timeline/elements.py | 14 ++++++++++----
pitivi/timeline/timeline.py | 12 ++++++++++++
2 files changed, 22 insertions(+), 4 deletions(-)
---
diff --git a/pitivi/timeline/elements.py b/pitivi/timeline/elements.py
index bd04ef9..81c36af 100644
--- a/pitivi/timeline/elements.py
+++ b/pitivi/timeline/elements.py
@@ -689,6 +689,11 @@ class Keyframe(Clutter.Actor):
self.connect("leave-event", self._leaveEventCb)
self.set_reactive(True)
+ def _unselect(self):
+ self.timelineElement.set_reactive(True)
+ self.set_background_color(Clutter.Color.new(0, 255, 0, 255))
+
self.timelineElement.timeline._container.embed.get_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.ARROW))
+
def _keyPressEventCb(self, actor, event):
print event, dir(event)
@@ -698,9 +703,7 @@ class Keyframe(Clutter.Actor):
self.timelineElement.timeline._container.embed.get_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.HAND1))
def _leaveEventCb(self, actor, event):
- self.timelineElement.set_reactive(True)
- self.set_background_color(Clutter.Color.new(0, 255, 0, 255))
-
self.timelineElement.timeline._container.embed.get_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.ARROW))
+ self._unselect()
def _dragBeginCb(self, action, actor, event_x, event_y, modifiers):
self.dragBeginStartX = event_x
@@ -735,6 +738,8 @@ class Keyframe(Clutter.Actor):
self.lastTs = newTs
self.timelineElement.setKeyframePosition(self, self.value)
+ # Resort the keyframes list each time. Should be cheap as there should never be too much
keyframes,
+ # if optimization is needed, check if resorting is needed, should not be in 99 % of the cases.
self.timelineElement.keyframes = sorted(self.timelineElement.keyframes, key=lambda keyframe:
keyframe.value.timestamp)
self.timelineElement.drawLines()
# This will update the viewer. nifty.
@@ -743,7 +748,8 @@ class Keyframe(Clutter.Actor):
return False
def _dragEndCb(self, action, actor, event_x, event_y, modifiers):
- pass
+ if self.timelineElement.timeline.getActorUnderPointer() != self:
+ self._unselect()
class URISourceElement(TimelineElement):
diff --git a/pitivi/timeline/timeline.py b/pitivi/timeline/timeline.py
index c460c72..255abc5 100644
--- a/pitivi/timeline/timeline.py
+++ b/pitivi/timeline/timeline.py
@@ -157,6 +157,7 @@ class TimelineStage(Clutter.ScrollActor, Zoomable):
self.lastPosition = 0 # Saved for redrawing when paused
self._createPlayhead()
self._createSnapIndicator()
+ self._peekMouse()
# Public API
@@ -302,8 +303,19 @@ class TimelineStage(Clutter.ScrollActor, Zoomable):
self.remove_child(ghostclip)
self.bTimeline.commit()
+ def getActorUnderPointer(self):
+ return self.mouse.get_pointer_actor()
+
# Internal API
+ def _peekMouse(self):
+ manager = Clutter.DeviceManager.get_default()
+
+ for device in manager.peek_devices():
+ if device.props.device_type == Clutter.InputDeviceType.POINTER_DEVICE and device.props.enabled
is True:
+ self.mouse = device
+ break
+
def _createGhostclip(self, trackType, asset):
ghostclip = Ghostclip(trackType)
ghostclip.asset = asset
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]