summaryrefslogtreecommitdiff
path: root/src/gestures.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gestures.c')
-rw-r--r--src/gestures.c37
1 files changed, 21 insertions, 16 deletions
diff --git a/src/gestures.c b/src/gestures.c
index f26aba8..c837d6c 100644
--- a/src/gestures.c
+++ b/src/gestures.c
@@ -23,24 +23,29 @@
23 23
24static void extract_movement(struct Gestures *gs, struct MTouch* mt) 24static void extract_movement(struct Gestures *gs, struct MTouch* mt)
25{ 25{
26 const struct FingerState *b = mt->state.finger; 26 const struct FingerState *prev[DIM_FINGER];
27 const struct FingerState *e = b + mt->state.nfinger; 27 const struct FingerState *f = mt->state.finger;
28 const struct FingerState *p, *fs; 28 int same_fingers, i;
29 int dn = 0, i; 29
30 if (mt->state.nfinger == mt->prev_state.nfinger) { 30 if (mt->state.nfinger == 0)
31 for (p = b; p != e; p++) { 31 return;
32 fs = find_finger(&mt->prev_state, p->id); 32
33 if (fs) { 33 same_fingers = mt->state.nfinger == mt->prev_state.nfinger;
34 gs->dx += p->hw.position_x - fs->hw.position_x; 34 for (i = 0; i < mt->state.nfinger; i++) {
35 gs->dy += p->hw.position_y - fs->hw.position_y; 35 prev[i] = find_finger(&mt->prev_state, mt->state.finger[i].id);
36 dn++; 36 same_fingers = same_fingers && prev[i];
37 }
38 }
39 } 37 }
40 if (dn) { 38
41 gs->dx /= dn; 39 if (!same_fingers)
42 gs->dy /= dn; 40 return;
41
42 for (i = 0; i < mt->state.nfinger; i++) {
43 gs->dx += f[i].hw.position_x - prev[i]->hw.position_x;
44 gs->dy += f[i].hw.position_y - prev[i]->hw.position_y;
43 } 45 }
46
47 gs->dx /= mt->state.nfinger;
48 gs->dy /= mt->state.nfinger;
44} 49}
45 50
46static void extract_buttons(struct Gestures *gs, struct MTouch* mt) 51static void extract_buttons(struct Gestures *gs, struct MTouch* mt)