diff options
Diffstat (limited to 'src/gestures.c')
| -rw-r--r-- | src/gestures.c | 37 |
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 | ||
| 24 | static void extract_movement(struct Gestures *gs, struct MTouch* mt) | 24 | static 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 | ||
| 46 | static void extract_buttons(struct Gestures *gs, struct MTouch* mt) | 51 | static void extract_buttons(struct Gestures *gs, struct MTouch* mt) |
