Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBert Freudenberg <bert@freudenbergs.de>2012-11-06 18:04:06 (GMT)
committer Bert Freudenberg <bert@freudenbergs.de>2012-11-06 18:04:06 (GMT)
commit7ebde9c5f89b1e55cdbb10ed3d5aee30e1f63fbd (patch)
tree2c834be96102797a77ab60ce6d7e74326258e41c
parente1ac21c4b59ba6a99c02d43ca0edf64ebbdbc489 (diff)
Track time per finger, increase gap to 200 ms
-rw-r--r--activity.py30
1 files changed, 20 insertions, 10 deletions
diff --git a/activity.py b/activity.py
index 45363eb..1245451 100644
--- a/activity.py
+++ b/activity.py
@@ -86,7 +86,6 @@ class TouchArea(Gtk.DrawingArea):
def __init__(self):
Gtk.DrawingArea.__init__(self)
self.fingers = {}
- self.time = 0
self.set_events(Gdk.EventMask.TOUCH_MASK)
self.connect('draw', self.__draw_cb)
self.connect('event', self.__event_cb)
@@ -101,12 +100,11 @@ class TouchArea(Gtk.DrawingArea):
# we make it a string for use as dict key
seq = str(event.touch.sequence)
if event.type == Gdk.EventType.TOUCH_BEGIN:
- if event.touch.time - self.time > 100:
- self.remove_inactive_fingers()
- self.fingers[seq] = Finger(event)
+ new_finger = Finger(event)
+ self.fingers[seq] = new_finger
+ self.remove_inactive_fingers(new_finger)
else:
self.fingers[seq].update(event)
- self.time = event.touch.time
self.queue_draw()
def __draw_cb(self, widget, ctx):
@@ -116,20 +114,25 @@ class TouchArea(Gtk.DrawingArea):
for f in self.fingers:
self.fingers[f].draw(ctx, alloc.width, alloc.height)
- def remove_inactive_fingers(self):
- for f in self.fingers:
- if self.fingers[f].active:
- return
- self.fingers = {}
+ def remove_inactive_fingers(self, new_finger):
+ for f,old_finger in list(self.fingers.items()):
+ if not old_finger.active:
+ del self.fingers[f]
+ if new_finger.time - old_finger.time < 300:
+ new_finger.remember(old_finger)
+
class Finger:
def __init__(self, event):
self.trail = [ Point(event.touch.x, event.touch.y) ]
self.color = (random(), random(), random())
+ self.time = event.touch.time
self.active = True
+ self.other = None
def update(self, event):
+ self.time = event.touch.time
if event.type == Gdk.EventType.TOUCH_UPDATE:
self.trail.append( Point(event.touch.x, event.touch.y) )
elif event.type == Gdk.EventType.TOUCH_END:
@@ -138,7 +141,14 @@ class Finger:
self.active = False
self.color = (1, 0, 0)
+ def remember(self, finger):
+ if self.other:
+ finger.remember(self.other)
+ self.other = finger
+
def draw(self, ctx, width, height):
+ if self.other:
+ self.other.draw(ctx, width, height)
(r, g, b) = self.color
ctx.set_source_rgb(r, g, b)
self.draw_trail(ctx)