diff options
| author | Henrik Rydberg <rydberg@euromail.se> | 2010-05-14 01:29:38 +0200 |
|---|---|---|
| committer | Henrik Rydberg <rydberg@euromail.se> | 2010-05-14 01:41:39 +0200 |
| commit | c8c74659d27b9eb0d45342db9a4969389e20f26a (patch) | |
| tree | cecd1876745b2288cb45007522a046f12d144f31 /src/gestures.c | |
| parent | bfd266660d69e13263e3895fb059040b65255a72 (diff) | |
Refactor parsor memory usage
Add the bitmasks "fingers" and "added" to parsor memory, and extend
time handling to use a hold time and a forget time.
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Diffstat (limited to 'src/gestures.c')
| -rw-r--r-- | src/gestures.c | 52 |
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 | } |
