[pitivi] TimelineCanvas: More extensive scrollwheel behaviour. Fixes #576326



commit 69dd1b51f19f67accbbf7dbdaa9de4fd493e09e4
Author: Edward Hervey <bilboed bilboed com>
Date:   Thu May 14 19:27:28 2009 +0200

    TimelineCanvas: More extensive scrollwheel behaviour. Fixes #576326
    
    UP/DOWN : scrolls left/right
    SHIFT + UP/DOWN : scrolls up/down
    CTRL + UP/DOWN : zooms in/out
    
    Also made the canvas Loggable (for debug messages).
---
 pitivi/ui/timelinecanvas.py |   32 +++++++++++++++++++++++++++++++-
 1 files changed, 31 insertions(+), 1 deletions(-)

diff --git a/pitivi/ui/timelinecanvas.py b/pitivi/ui/timelinecanvas.py
index 2bdac58..c28d70c 100644
--- a/pitivi/ui/timelinecanvas.py
+++ b/pitivi/ui/timelinecanvas.py
@@ -22,6 +22,7 @@
 import gtk
 import goocanvas
 
+from pitivi.log.loggable import Loggable
 from pitivi.receiver import receiver, handler
 from pitivi.ui.track import Track
 from pitivi.ui.trackobject import TrackObject
@@ -50,13 +51,18 @@ PreferencesDialog.addNumericPreference('edgeSnapDeadband',
         "operations",
     lower = 0)
 
-class TimelineCanvas(goocanvas.Canvas, Zoomable):
+class TimelineCanvas(goocanvas.Canvas, Zoomable, Loggable):
+
+    __gsignals__ = {
+        "scroll-event":"override"
+        }
 
     _tracks = None
 
     def __init__(self, instance, timeline=None):
         goocanvas.Canvas.__init__(self)
         Zoomable.__init__(self)
+        Loggable.__init__(self)
         self.app = instance
         self._selected_sources = []
         self._tracks = []
@@ -103,6 +109,30 @@ class TimelineCanvas(goocanvas.Canvas, Zoomable):
 
         track_ui.setExpanded(expanded)
 
+    def do_scroll_event(self, event):
+        if event.state & gtk.gdk.SHIFT_MASK:
+            # shift + scroll => vertical (up/down) scroll
+            if event.direction == gtk.gdk.SCROLL_LEFT:
+                event.direction = gtk.gdk.SCROLL_UP
+            elif event.direction == gtk.gdk.SCROLL_RIGHT:
+                event.direction = gtk.gdk.SCROLL_DOWN
+            event.state &= ~gtk.gdk.SHIFT_MASK
+        elif event.state & gtk.gdk.CONTROL_MASK:
+            # zoom + scroll => zooming (up: zoom in)
+            if event.direction == gtk.gdk.SCROLL_UP:
+                Zoomable.zoomIn()
+                return True
+            elif event.direction == gtk.gdk.SCROLL_DOWN:
+                Zoomable.zoomOut()
+                return True
+            return False
+        else:
+            if event.direction == gtk.gdk.SCROLL_UP:
+                event.direction = gtk.gdk.SCROLL_LEFT
+            elif event.direction == gtk.gdk.SCROLL_DOWN:
+                event.direction = gtk.gdk.SCROLL_RIGHT
+        return goocanvas.Canvas.do_scroll_event(self, event)
+
 ## sets the cursor as appropriate
 
     def _mouseEnterCb(self, unused_item, unused_target, event):



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]