diff options
author | Henrik Rydberg <rydberg@euromail.se> | 2010-06-16 18:48:53 +0200 |
---|---|---|
committer | Henrik Rydberg <rydberg@euromail.se> | 2010-06-16 18:54:52 +0200 |
commit | 21a363a2486a713434e890fc1f6b86a180755230 (patch) | |
tree | ca788ccf7c8269c5cbd41350463fa478aa499903 /src/gestures.c | |
parent | 523d193b089111849873d9de0ec1bf29f4176fbc (diff) | |
download | xorg-input-kobomultitouch-21a363a2486a713434e890fc1f6b86a180755230.tar.gz xorg-input-kobomultitouch-21a363a2486a713434e890fc1f6b86a180755230.tar.bz2 xorg-input-kobomultitouch-21a363a2486a713434e890fc1f6b86a180755230.zip |
Add tapping logic
This patch adds tap-to-click, tap-and-hold for dragging, two-finger
and three-finger taps. Turned on by default for touch screens only;
switch on in gestures.c.
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Diffstat (limited to 'src/gestures.c')
-rw-r--r-- | src/gestures.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/gestures.c b/src/gestures.c index a5a17ca..3f59a1e 100644 --- a/src/gestures.c +++ b/src/gestures.c @@ -27,6 +27,7 @@ static const int FINGER_THUMB_MS = 600; static const int BUTTON_HOLD_MS = 200; +#define use_tapping 0 /** * extract_buttons @@ -50,6 +51,12 @@ static void extract_buttons(struct Gestures *gs, struct MTouch* mt) gs->btmask = (btdata ^ mt->mem.btdata) & BITONES(DIM_BUTTON); gs->btdata = btdata; mt->mem.btdata = btdata; + } else if (btdata == 0 && mt->mem.ntap) { + if (npoint == 1 && mt->mem.maxtap == 1) + btdata = BITMASK(MT_BUTTON_LEFT); + gs->btmask = (btdata ^ mt->mem.btdata) & BITONES(DIM_BUTTON); + gs->btdata = btdata; + mt->mem.btdata = btdata; } if (gs->btmask) { mt_delay_movement(mt, BUTTON_HOLD_MS); @@ -178,6 +185,40 @@ void extract_gestures(struct Gestures *gs, struct MTouch* mt) mt->prev_state = mt->state; } +/** + * extract_delayed_gestures + * + * Extract delayed gestures, such as tapping + * + * Reset memory after use. + * + */ +void extract_delayed_gestures(struct Gestures *gs, struct MTouch* mt) +{ + mt->mem.wait = 0; + + if (!use_tapping && mt->caps.has_left) + return; + + if (mt->mem.tpdown < mt->mem.tpup) { + switch (mt->mem.maxtap) { + case 1: + gs->tapmask = BITMASK(MT_BUTTON_LEFT); + break; + case 2: + gs->tapmask = BITMASK(MT_BUTTON_RIGHT); + break; + case 3: + gs->tapmask = BITMASK(MT_BUTTON_MIDDLE); + break; + } + } + + if (gs->tapmask) + SETBIT(gs->type, GS_TAP); + + gs->ntap = mt->mem.ntap; +} void output_gesture(const struct Gestures *gs) { @@ -199,4 +240,6 @@ void output_gesture(const struct Gestures *gs) xf86Msg(X_INFO, "scale: %d\n", gs->scale); if (GETBIT(gs->type, GS_ROTATE)) xf86Msg(X_INFO, "rotate: %d\n", gs->rot); + foreach_bit(i, gs->tapmask) + xf86Msg(X_INFO, "tap: %d %d\n", i, gs->ntap); } |