summaryrefslogtreecommitdiff
path: root/src/gestures.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gestures.c')
-rw-r--r--src/gestures.c52
1 files changed, 31 insertions, 21 deletions
diff --git a/src/gestures.c b/src/gestures.c
index f5244aa..b6c3bf4 100644
--- a/src/gestures.c
+++ b/src/gestures.c
@@ -65,31 +65,41 @@ static void extract_movement(struct Gestures *gs, struct MTouch* mt)
65 int npoint = bitcount(mt->mem.pointing); 65 int npoint = bitcount(mt->mem.pointing);
66 int nmove = bitcount(mt->mem.moving); 66 int nmove = bitcount(mt->mem.moving);
67 int i; 67 int i;
68 if (nmove && mt->state.evtime >= mt->mem.move_time) { 68 float xm[DIM_FINGER], ym[DIM_FINGER];
69 for (i = 0; i < mt->state.nfinger; i++) { 69 float xmove = 0, ymove = 0;
70 if (GETBIT(mt->mem.moving, i)) { 70
71 gs->dx += mt->mem.dx[i]; 71 if (!nmove || nmove != npoint)
72 gs->dy += mt->mem.dy[i]; 72 return;
73 } 73
74 } 74 foreach_bit(i, mt->mem.moving) {
75 gs->dx /= nmove; 75 xm[i] = mt->mem.dx[i];
76 gs->dy /= nmove; 76 ym[i] = mt->mem.dy[i];
77 memset(mt->mem.dx, 0, sizeof(mt->mem.dx)); 77 mt->mem.dx[i] = 0;
78 memset(mt->mem.dy, 0, sizeof(mt->mem.dy)); 78 mt->mem.dy[i] = 0;
79 xmove += xm[i];
80 ymove += ym[i];
79 } 81 }
80 if (gs->dx || gs->dy) { 82 xmove /= nmove;
81 if (npoint == 1) 83 ymove /= nmove;
84
85 if (nmove == 1) {
86 gs->dx = xmove;
87 gs->dy = ymove;
88 if (gs->dx || gs->dy)
82 SETBIT(gs->type, GS_MOVE); 89 SETBIT(gs->type, GS_MOVE);
83 if (npoint == 2) { 90 } else {
84 if (gs->dx) 91 gs->dx = xmove;
92 gs->dy = ymove;
93 if (abs(gs->dx) > abs(gs->dy)) {
94 if (nmove == 2)
85 SETBIT(gs->type, GS_HSCROLL); 95 SETBIT(gs->type, GS_HSCROLL);
86 if (gs->dy) 96 if (nmove == 3)
87 SETBIT(gs->type, GS_VSCROLL);
88 }
89 if (npoint == 3) {
90 if (gs->dx)
91 SETBIT(gs->type, GS_HSWIPE); 97 SETBIT(gs->type, GS_HSWIPE);
92 if (gs->dy) 98 }
99 if (abs(gs->dy) > abs(gs->dx)) {
100 if (nmove == 2)
101 SETBIT(gs->type, GS_VSCROLL);
102 if (nmove == 3)
93 SETBIT(gs->type, GS_VSWIPE); 103 SETBIT(gs->type, GS_VSWIPE);
94 } 104 }
95 } 105 }