|
|
@@ -50,14 +50,17 @@ class DragGesture(Gesture, Positionable):
|
|
|
"""
|
|
|
_type = 'drag'
|
|
|
|
|
|
- def __init__(self, event, initial_position, translation):
|
|
|
+ def __init__(self, event, initial_position, translation, n=1):
|
|
|
Gesture.__init__(self, event)
|
|
|
Positionable.__init__(self, *initial_position.get_position())
|
|
|
self.translation = translation
|
|
|
+ self.n = n
|
|
|
|
|
|
def __str__(self):
|
|
|
- return '<DragGesture at (%s, %s) translation=(%s, %s)>' \
|
|
|
- % (self.get_position() + self.translation.get_position())
|
|
|
+ x, y = self
|
|
|
+ tx, ty = self.translation
|
|
|
+ return '<DragGesture at (%s, %s) translation=(%s, %s) n=%d>' \
|
|
|
+ % (x, y, tx, ty, self.n)
|
|
|
|
|
|
def get_translation(self):
|
|
|
return self.translation
|
|
|
@@ -99,12 +102,19 @@ class TransformationTracker(GestureTracker):
|
|
|
else:
|
|
|
self.centroid = MovingPositionable(x, y)
|
|
|
|
|
|
+ #wx, wy = self.widget.get_screen_offset()
|
|
|
+ #self.centroid.translate(-wx, -wy)
|
|
|
+
|
|
|
def on_point_down(self, event):
|
|
|
self.points.append(event.point)
|
|
|
self.update_centroid()
|
|
|
|
|
|
def on_point_move(self, event):
|
|
|
point = event.point
|
|
|
+
|
|
|
+ if point not in self.points:
|
|
|
+ return
|
|
|
+
|
|
|
l = len(self.points)
|
|
|
|
|
|
if l > 1:
|
|
|
@@ -119,17 +129,19 @@ class TransformationTracker(GestureTracker):
|
|
|
scale = dist / prev
|
|
|
self.trigger(PinchGesture(event, self.centroid, scale))
|
|
|
|
|
|
+ # Update centroid before movement can be detected
|
|
|
+ self.update_centroid()
|
|
|
+
|
|
|
# Movement using multiple touch points
|
|
|
self.trigger(DragGesture(event, self.centroid,
|
|
|
- self.centroid.translation()))
|
|
|
+ self.centroid.translation(), l))
|
|
|
else:
|
|
|
# Movement using one touch point
|
|
|
- self.trigger(DragGesture(event, event.point,
|
|
|
- event.point.translation()))
|
|
|
-
|
|
|
- # Update centroid before movement can be detected
|
|
|
- self.update_centroid()
|
|
|
+ self.trigger(DragGesture(event, point, point.translation()))
|
|
|
|
|
|
def on_point_up(self, event):
|
|
|
+ if event.point not in self.points:
|
|
|
+ return
|
|
|
+
|
|
|
self.points.remove(event.point)
|
|
|
self.update_centroid()
|