[pitivi] timeline/{elements:timeline} : Unselect keyframes on dragEnd if needed.



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]