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) | |
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 @@ | |||
| 27 | 27 | ||
| 28 | static const int FINGER_THUMB_MS = 600; | 28 | static const int FINGER_THUMB_MS = 600; |
| 29 | static const int BUTTON_HOLD_MS = 200; | 29 | static const int BUTTON_HOLD_MS = 200; |
| 30 | #define use_tapping 0 | ||
| 30 | 31 | ||
| 31 | /** | 32 | /** |
| 32 | * extract_buttons | 33 | * extract_buttons |
| @@ -50,6 +51,12 @@ static void extract_buttons(struct Gestures *gs, struct MTouch* mt) | |||
| 50 | gs->btmask = (btdata ^ mt->mem.btdata) & BITONES(DIM_BUTTON); | 51 | gs->btmask = (btdata ^ mt->mem.btdata) & BITONES(DIM_BUTTON); |
| 51 | gs->btdata = btdata; | 52 | gs->btdata = btdata; |
| 52 | mt->mem.btdata = btdata; | 53 | mt->mem.btdata = btdata; |
| 54 | } else if (btdata == 0 && mt->mem.ntap) { | ||
| 55 | if (npoint == 1 && mt->mem.maxtap == 1) | ||
| 56 | btdata = BITMASK(MT_BUTTON_LEFT); | ||
| 57 | gs->btmask = (btdata ^ mt->mem.btdata) & BITONES(DIM_BUTTON); | ||
| 58 | gs->btdata = btdata; | ||
| 59 | mt->mem.btdata = btdata; | ||
| 53 | } | 60 | } |
| 54 | if (gs->btmask) { | 61 | if (gs->btmask) { |
| 55 | mt_delay_movement(mt, BUTTON_HOLD_MS); | 62 | mt_delay_movement(mt, BUTTON_HOLD_MS); |
| @@ -178,6 +185,40 @@ void extract_gestures(struct Gestures *gs, struct MTouch* mt) | |||
| 178 | mt->prev_state = mt->state; | 185 | mt->prev_state = mt->state; |
| 179 | } | 186 | } |
| 180 | 187 | ||
| 188 | /** | ||
| 189 | * extract_delayed_gestures | ||
| 190 | * | ||
| 191 | * Extract delayed gestures, such as tapping | ||
| 192 | * | ||
| 193 | * Reset memory after use. | ||
| 194 | * | ||
| 195 | */ | ||
| 196 | void extract_delayed_gestures(struct Gestures *gs, struct MTouch* mt) | ||
| 197 | { | ||
| 198 | mt->mem.wait = 0; | ||
| 199 | |||
| 200 | if (!use_tapping && mt->caps.has_left) | ||
| 201 | return; | ||
| 202 | |||
| 203 | if (mt->mem.tpdown < mt->mem.tpup) { | ||
| 204 | switch (mt->mem.maxtap) { | ||
| 205 | case 1: | ||
| 206 | gs->tapmask = BITMASK(MT_BUTTON_LEFT); | ||
| 207 | break; | ||
| 208 | case 2: | ||
| 209 | gs->tapmask = BITMASK(MT_BUTTON_RIGHT); | ||
| 210 | break; | ||
| 211 | case 3: | ||
| 212 | gs->tapmask = BITMASK(MT_BUTTON_MIDDLE); | ||
| 213 | break; | ||
| 214 | } | ||
| 215 | } | ||
| 216 | |||
| 217 | if (gs->tapmask) | ||
| 218 | SETBIT(gs->type, GS_TAP); | ||
| 219 | |||
| 220 | gs->ntap = mt->mem.ntap; | ||
| 221 | } | ||
| 181 | 222 | ||
| 182 | void output_gesture(const struct Gestures *gs) | 223 | void output_gesture(const struct Gestures *gs) |
| 183 | { | 224 | { |
| @@ -199,4 +240,6 @@ void output_gesture(const struct Gestures *gs) | |||
| 199 | xf86Msg(X_INFO, "scale: %d\n", gs->scale); | 240 | xf86Msg(X_INFO, "scale: %d\n", gs->scale); |
| 200 | if (GETBIT(gs->type, GS_ROTATE)) | 241 | if (GETBIT(gs->type, GS_ROTATE)) |
| 201 | xf86Msg(X_INFO, "rotate: %d\n", gs->rot); | 242 | xf86Msg(X_INFO, "rotate: %d\n", gs->rot); |
| 243 | foreach_bit(i, gs->tapmask) | ||
| 244 | xf86Msg(X_INFO, "tap: %d %d\n", i, gs->ntap); | ||
| 202 | } | 245 | } |
