diff options
-rw-r--r-- | src/gestures.c | 30 | ||||
-rw-r--r-- | src/gestures.h | 2 |
2 files changed, 18 insertions, 14 deletions
diff --git a/src/gestures.c b/src/gestures.c index 432f3af..28d0417 100644 --- a/src/gestures.c +++ b/src/gestures.c @@ -42,6 +42,15 @@ inline int dyval(const struct FingerState *a, const struct FingerState *b) return a->hw.position_y - b->hw.position_y; } +static void extract_finger_configuration(struct Gestures *gs, struct MTouch* mt) +{ + const struct FingerState *f = mt->state.finger; + int i, same = mt->state.nfinger == mt->prev_state.nfinger; + for (i = 0; i < mt->state.nfinger; i++) + same = same && find_finger(&mt->prev_state, f[i].id); + gs->same_fingers = same; +} + static void extract_pointers(struct Gestures *gs, struct MTouch* mt) { const struct FingerState *f = mt->state.finger; @@ -54,7 +63,7 @@ static void extract_pointers(struct Gestures *gs, struct MTouch* mt) return; } - if (mt->state.nfinger == mt->prev_state.nfinger) { + if (gs->same_fingers) { for (i = 0; i < mt->state.nfinger; i++) { if (GETBIT(mt->mem.pointing, i)) continue; @@ -83,9 +92,8 @@ static void extract_pointers(struct Gestures *gs, struct MTouch* mt) static void extract_movement(struct Gestures *gs, struct MTouch* mt) { - const struct FingerState *prev[DIM_FINGER]; - const struct FingerState *f = mt->state.finger; - int same_fingers, i, x = 0, y = 0; + const struct FingerState *prev, *f = mt->state.finger; + int i, x = 0, y = 0; int dx, dy, xcut, ycut, xmax = 0, ymax = 0; mt->mem.moving = 0; @@ -94,13 +102,7 @@ static void extract_movement(struct Gestures *gs, struct MTouch* mt) if (mt->state.nfinger == 0) return; - same_fingers = mt->state.nfinger == mt->prev_state.nfinger; - for (i = 0; i < mt->state.nfinger; i++) { - prev[i] = find_finger(&mt->prev_state, mt->state.finger[i].id); - same_fingers = same_fingers && prev[i]; - } - - if (!same_fingers) { + if (!gs->same_fingers) { mt->mem.move_time = mt->state.evtime; if (mt->state.nfinger > mt->prev_state.nfinger) mt->mem.move_time += FINGER_ATTACK_MS; @@ -112,8 +114,9 @@ static void extract_movement(struct Gestures *gs, struct MTouch* mt) for (i = 0; i < mt->state.nfinger; i++) { if (!GETBIT(mt->mem.pointing, i)) continue; - dx = dxval(&f[i], prev[i]); - dy = dyval(&f[i], prev[i]); + prev = find_finger(&mt->prev_state, f[i].id); + dx = dxval(&f[i], prev); + dy = dyval(&f[i], prev); mt->mem.dx[i] += dx; mt->mem.dy[i] += dy; xmax = maxval(xmax, abs(mt->mem.dx[i])); @@ -186,6 +189,7 @@ static void extract_type(struct Gestures *gs, struct MTouch* mt) void extract_gestures(struct Gestures *gs, struct MTouch* mt) { memset(gs, 0, sizeof(struct Gestures)); + extract_finger_configuration(gs, mt); extract_pointers(gs, mt); extract_movement(gs, mt); extract_buttons(gs, mt); diff --git a/src/gestures.h b/src/gestures.h index e99bc3d..5630d4c 100644 --- a/src/gestures.h +++ b/src/gestures.h @@ -33,7 +33,7 @@ struct Gestures { unsigned type, btmask, btdata; - int dx, dy; + int same_fingers, dx, dy; }; void extract_gestures(struct Gestures *gs, struct MTouch* mt); |