pitivi r1194 - in branches/SOC_2008_BLEWIS: . pitivi/ui



Author: blewis
Date: Sat Jul 19 19:29:06 2008
New Revision: 1194
URL: http://svn.gnome.org/viewvc/pitivi?rev=1194&view=rev

Log:
* pitivi/ui/complextimeline.py:
edge snapping is here! \o/
* pitivi/ui/util.py:
cleaned up a bug in magnetize(), and also wrapped a really long line
in drag_start()
on the down side, i've noticed wierd freezes during pitivi startup on
occasion.


Modified:
   branches/SOC_2008_BLEWIS/ChangeLog
   branches/SOC_2008_BLEWIS/pitivi/ui/complextimeline.py
   branches/SOC_2008_BLEWIS/pitivi/ui/util.py

Modified: branches/SOC_2008_BLEWIS/pitivi/ui/complextimeline.py
==============================================================================
--- branches/SOC_2008_BLEWIS/pitivi/ui/complextimeline.py	(original)
+++ branches/SOC_2008_BLEWIS/pitivi/ui/complextimeline.py	Sat Jul 19 19:29:06 2008
@@ -147,7 +147,6 @@
     def _adjust_zoom(self, adjustment):
         self._zoom_ratio = adjustment.get_value()
         self._deadband = self.pixel_to_ns(DEADBAND)
-        print self.ns_to_pixel(self._deadband)
         self._zoom()
 
     def set_zoom_ratio(self, ratio):
@@ -201,15 +200,18 @@
     def pixel_to_ns(self, pixel):
         return long(pixel * gst.SECOND / self._zoom_ratio)
 
-    def _edge_snap(self, coord):
+    def _edge_snap(self, element, coord):
+        # need to find the closest edge to both the left and right sides of
+        # the object we are draging.
+        duration = element.duration
         left_res, left_diff = closest_item(self._edges, coord)
-        right_res, right_diff = closest_item(self._edges, coord)
+        right_res, right_diff = closest_item(self._edges, coord + duration)
 
         if left_diff <= right_diff:
             res = left_res
             diff = left_diff
         else:
-            res = right_res - self._draging.duration
+            res = right_res - duration
             diff = right_diff
         if diff <= self._deadband:
             return res
@@ -221,22 +223,25 @@
 
     def _start_drag(self, item):
         item.raise_(None)
-        self._draging = item
+        self._draging = item.element
         self._update_edges()
 
     def _update_edges(self):
+        #FIXME: this might be more efficient if we used a binary sort tree,
+        # updated only when the timeline actually changes instead of before
+        # every drag operation. possibly concerned this could lead to a
+        # noticible lag on large timelines
         edges = {}
         for element in self.widgets:
             edges[element.start] = None
             edges[element.start + element.duration] = None
         self._edges = edges.keys()
         self._edges.sort()
-        print self._edges
 
     def _move_source_cb(self, item, pos):
         element = item.element
-        element.setStartDurationTime(max(self.pixel_to_ns(
-            pos[0]), 0))
+        element.setStartDurationTime(max(self._edge_snap(element,
+            self.pixel_to_ns(pos[0])), 0))
 
     def _trim_source_start_cb(self, item, pos):
         element = item.element

Modified: branches/SOC_2008_BLEWIS/pitivi/ui/util.py
==============================================================================
--- branches/SOC_2008_BLEWIS/pitivi/ui/util.py	(original)
+++ branches/SOC_2008_BLEWIS/pitivi/ui/util.py	Sat Jul 19 19:29:06 2008
@@ -132,7 +132,7 @@
 def magnetize(obj, coord, magnets, deadband):
     # remember that objects have two ends
     left_res, left_diff = closest_item(magnets, coord)
-    right_res, right_diff = closest_item(magnets, coord)
+    right_res, right_diff = closest_item(magnets, coord + width(obj))
 
     if left_diff <= right_diff:
         res = left_res
@@ -172,7 +172,9 @@
 def drag_start(item, target, event, canvas, start_cb, transform, cursor):
     """A callback which starts the drag operation of a dragable 
     object"""
-    mask = gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK | gtk.gdk.POINTER_MOTION_MASK  | gtk.gdk.POINTER_MOTION_HINT_MASK | gtk.gdk.ENTER_NOTIFY_MASK | gtk.gdk.LEAVE_NOTIFY_MASK
+    mask = (gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK 
+        | gtk.gdk.POINTER_MOTION_MASK  | gtk.gdk.POINTER_MOTION_HINT_MASK 
+        | gtk.gdk.ENTER_NOTIFY_MASK | gtk.gdk.LEAVE_NOTIFY_MASK)
     canvas.pointer_grab(item, mask, cursor, event.time)
     item.set_data("dragging", True)
     if start_cb:



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