diff options
-rw-r--r-- | src/gestures.c | 28 | ||||
-rw-r--r-- | src/memory.h | 2 |
2 files changed, 22 insertions, 8 deletions
diff --git a/src/gestures.c b/src/gestures.c index e032214..b04c679 100644 --- a/src/gestures.c +++ b/src/gestures.c @@ -21,11 +21,14 @@ #include "gestures.h" +/* timer for cursor stability on finger touch/release */ +static const int AFTER_FINGER_CHANGE_MS = 70; + 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; + int same_fingers, i, x = 0, y = 0; if (mt->state.nfinger == 0) return; @@ -36,16 +39,25 @@ static void extract_movement(struct Gestures *gs, struct MTouch* mt) same_fingers = same_fingers && prev[i]; } - if (!same_fingers) - return; - for (i = 0; i < mt->state.nfinger; i++) { - gs->dx += f[i].hw.position_x - prev[i]->hw.position_x; - gs->dy += f[i].hw.position_y - prev[i]->hw.position_y; + x += f[i].hw.position_x; + y += f[i].hw.position_y; + } + x /= mt->state.nfinger; + y /= mt->state.nfinger; + + if (!same_fingers) { + mt->mem.move_time = mt->state.evtime + AFTER_FINGER_CHANGE_MS; + } else if (mt->state.evtime >= mt->mem.move_time) { + gs->dx = x - mt->mem.move_x; + gs->dy = y - mt->mem.move_y; + } else { + /* accumulate all movement during delay */ + return; } - gs->dx /= mt->state.nfinger; - gs->dy /= mt->state.nfinger; + mt->mem.move_x = x; + mt->mem.move_y = y; } static void extract_buttons(struct Gestures *gs, struct MTouch* mt) diff --git a/src/memory.h b/src/memory.h index a6c51ec..0ab4d04 100644 --- a/src/memory.h +++ b/src/memory.h @@ -26,6 +26,8 @@ struct Memory { unsigned btdata; + mstime_t move_time; + int move_x, move_y; }; void init_memory(struct Memory *mem); |