diff options
| -rw-r--r-- | include/grail-types.h | 59 | ||||
| -rw-r--r-- | src/Makefile.am | 3 | ||||
| -rw-r--r-- | src/gestures-combo.c | 70 | ||||
| -rw-r--r-- | src/gestures-drag.c (renamed from src/gestures-pan.c) | 14 | ||||
| -rw-r--r-- | src/gestures-pinch.c | 8 | ||||
| -rw-r--r-- | src/gestures-rotate.c | 8 | ||||
| -rw-r--r-- | src/grail-gestures.h | 4 | ||||
| -rw-r--r-- | src/grail-recognizer.c | 3 | ||||
| -rw-r--r-- | src/grail-recognizer.h | 3 | ||||
| -rw-r--r-- | test/grail-gesture.c | 2 |
10 files changed, 53 insertions, 121 deletions
diff --git a/include/grail-types.h b/include/grail-types.h index 7de11b0..028a71b 100644 --- a/include/grail-types.h +++ b/include/grail-types.h | |||
| @@ -23,32 +23,37 @@ | |||
| 23 | #ifndef _GRAIL_TYPES_H | 23 | #ifndef _GRAIL_TYPES_H |
| 24 | #define _GRAIL_TYPES_H | 24 | #define _GRAIL_TYPES_H |
| 25 | 25 | ||
| 26 | #define GRAIL_TYPE_POINTER 0 /* reserved */ | 26 | #define GRAIL_TYPE_DRAG1 0 /* one-finger drag/pan/scroll */ |
| 27 | 27 | #define GRAIL_TYPE_PINCH1 1 /* one-finger pinch-to-zoom */ | |
| 28 | #define GRAIL_TYPE_PAN 1 /* two-finger pan/scroll */ | 28 | #define GRAIL_TYPE_ROTATE1 2 /* one-finger rotation */ |
| 29 | #define GRAIL_TYPE_PINCH 2 /* two-finger pinch-to-zoom */ | 29 | |
| 30 | #define GRAIL_TYPE_ROTATE 3 /* two-finger rotation */ | 30 | #define GRAIL_TYPE_DRAG2 3 /* two-finger drag/pan/scroll */ |
| 31 | #define GRAIL_TYPE_COMBO2 4 /* two-finger combo */ | 31 | #define GRAIL_TYPE_PINCH2 4 /* two-finger pinch-to-zoom */ |
| 32 | 32 | #define GRAIL_TYPE_ROTATE2 5 /* two-finger rotation */ | |
| 33 | #define GRAIL_TYPE_SWIPE 5 /* three-finger pan */ | 33 | |
| 34 | #define GRAIL_TYPE_SCALE 6 /* three-finger pinch */ | 34 | #define GRAIL_TYPE_DRAG3 6 /* three-finger drag/pan */ |
| 35 | #define GRAIL_TYPE_TURN 7 /* three-finger rotate */ | 35 | #define GRAIL_TYPE_PINCH3 7 /* three-finger pinch */ |
| 36 | #define GRAIL_TYPE_COMBO3 8 /* three-finger combo */ | 36 | #define GRAIL_TYPE_ROTATE3 8 /* three-finger rotate */ |
| 37 | 37 | ||
| 38 | #define GRAIL_TYPE_BRUSH 9 /* four-finger pan */ | 38 | #define GRAIL_TYPE_DRAG4 9 /* four-finger drag/pan */ |
| 39 | #define GRAIL_TYPE_PICK 10 /* four-finger pinch */ | 39 | #define GRAIL_TYPE_PINCH4 10 /* four-finger pinch */ |
| 40 | #define GRAIL_TYPE_WHIRL 11 /* four-finger rotate */ | 40 | #define GRAIL_TYPE_ROTATE4 11 /* four-finger rotate */ |
| 41 | #define GRAIL_TYPE_COMBO4 12 /* four-finger combo */ | 41 | |
| 42 | 42 | #define GRAIL_TYPE_DRAG5 12 /* five-finger drag/pan */ | |
| 43 | #define GRAIL_TYPE_HAND 13 /* five-finger pan */ | 43 | #define GRAIL_TYPE_PINCH5 13 /* five-finger pinch */ |
| 44 | #define GRAIL_TYPE_GRAB 14 /* five-finger pinch */ | 44 | #define GRAIL_TYPE_ROTATE5 14 /* five-finger rotate */ |
| 45 | #define GRAIL_TYPE_REVOLVE 15 /* five-finger rotate */ | 45 | |
| 46 | #define GRAIL_TYPE_COMBO5 16 /* five-finger combo */ | 46 | #define GRAIL_TYPE_TAP1 15 /* one-finger single tap */ |
| 47 | 47 | #define GRAIL_TYPE_TAP2 16 /* two-finger single tap */ | |
| 48 | #define GRAIL_TYPE_TAP1 17 /* single one-finger tap */ | 48 | #define GRAIL_TYPE_TAP3 17 /* three-finger single tap */ |
| 49 | #define GRAIL_TYPE_TAP2 18 /* single two-finger tap */ | 49 | #define GRAIL_TYPE_TAP4 18 /* four-finger single tap */ |
| 50 | #define GRAIL_TYPE_TAP3 19 /* single three-finger tap */ | 50 | #define GRAIL_TYPE_TAP5 19 /* five-finger single tap */ |
| 51 | #define GRAIL_TYPE_TAP4 20 /* single four-finger tap */ | 51 | |
| 52 | #define GRAIL_TYPE_TAP5 21 /* single five-finger tap */ | 52 | #define GRAIL_PROP_DRAG_DX 0 /* horizontal position delta */ |
| 53 | #define GRAIL_PROP_DRAG_DY 1 /* vertical position delta */ | ||
| 54 | #define GRAIL_PROP_DRAG_VX 2 /* horizontal velocity */ | ||
| 55 | #define GRAIL_PROP_DRAG_VY 3 /* vertical velocity */ | ||
| 56 | #define GRAIL_PROP_DRAG_X 4 /* horizontal position */ | ||
| 57 | #define GRAIL_PROP_DRAG_Y 5 /* vertical position */ | ||
| 53 | 58 | ||
| 54 | #endif | 59 | #endif |
diff --git a/src/Makefile.am b/src/Makefile.am index 7dc3ac2..96ac7ed 100644 --- a/src/Makefile.am +++ b/src/Makefile.am | |||
| @@ -15,10 +15,9 @@ libgrail_la_SOURCES = \ | |||
| 15 | grail-inserter.h \ | 15 | grail-inserter.h \ |
| 16 | grail-gestures.c \ | 16 | grail-gestures.c \ |
| 17 | grail-gestures.h \ | 17 | grail-gestures.h \ |
| 18 | gestures-pan.c \ | 18 | gestures-drag.c \ |
| 19 | gestures-pinch.c \ | 19 | gestures-pinch.c \ |
| 20 | gestures-rotate.c \ | 20 | gestures-rotate.c \ |
| 21 | gestures-combo.c \ | ||
| 22 | gestures-tapping.c \ | 21 | gestures-tapping.c \ |
| 23 | grail-recognizer.c \ | 22 | grail-recognizer.c \ |
| 24 | grail-recognizer.h \ | 23 | grail-recognizer.h \ |
diff --git a/src/gestures-combo.c b/src/gestures-combo.c deleted file mode 100644 index 5b6de5b..0000000 --- a/src/gestures-combo.c +++ /dev/null | |||
| @@ -1,70 +0,0 @@ | |||
| 1 | /***************************************************************************** | ||
| 2 | * | ||
| 3 | * grail - Gesture Recognition And Instantiation Library | ||
| 4 | * | ||
| 5 | * Copyright (C) 2010 Canonical Ltd. | ||
| 6 | * Copyright (C) 2010 Henrik Rydberg <rydberg@bitmath.org> | ||
| 7 | * | ||
| 8 | * This program is free software: you can redistribute it and/or modify it | ||
| 9 | * under the terms of the GNU General Public License as published by the | ||
| 10 | * Free Software Foundation, either version 3 of the License, or (at your | ||
| 11 | * option) any later version. | ||
| 12 | * | ||
| 13 | * This program is distributed in the hope that it will be useful, but | ||
| 14 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| 16 | * General Public License for more details. | ||
| 17 | * | ||
| 18 | * You should have received a copy of the GNU General Public License along | ||
| 19 | * with this program. If not, see <http://www.gnu.org/licenses/>. | ||
| 20 | * | ||
| 21 | ****************************************************************************/ | ||
| 22 | |||
| 23 | #include "grail-recognizer.h" | ||
| 24 | #include <math.h> | ||
| 25 | #include <stdio.h> | ||
| 26 | |||
| 27 | static const int getype[DIM_TOUCH + 1] = { | ||
| 28 | 0, | ||
| 29 | 0, | ||
| 30 | GRAIL_TYPE_COMBO2, | ||
| 31 | GRAIL_TYPE_COMBO3, | ||
| 32 | GRAIL_TYPE_COMBO4, | ||
| 33 | GRAIL_TYPE_COMBO5, | ||
| 34 | }; | ||
| 35 | |||
| 36 | static const int fm_mask = 0x0f; | ||
| 37 | |||
| 38 | int gru_combo(struct grail *ge, | ||
| 39 | const struct touch_frame *frame) | ||
| 40 | { | ||
| 41 | struct gesture_recognizer *gru = ge->gru; | ||
| 42 | struct combo_model *state = &gru->combo; | ||
| 43 | struct move_model *move = &gru->move; | ||
| 44 | grail_prop_t prop[DIM_GRAIL_PROP]; | ||
| 45 | int mask = state->active ? (move->active & fm_mask) : fm_mask; | ||
| 46 | if (!move->multi) { | ||
| 47 | if (state->active) { | ||
| 48 | gru_end(ge, state->gid, move); | ||
| 49 | state->active = 0; | ||
| 50 | } | ||
| 51 | return 0; | ||
| 52 | } | ||
| 53 | if (!(move->tickle & mask)) | ||
| 54 | return 0; | ||
| 55 | if (!state->active) { | ||
| 56 | int type = getype[move->ntouch]; | ||
| 57 | if (!type) | ||
| 58 | return 0; | ||
| 59 | state->gid = gin_gid_begin(ge, type, PRIO_GESTURE, frame); | ||
| 60 | state->active = 1; | ||
| 61 | } | ||
| 62 | if (!(move->active & fm_mask)) | ||
| 63 | return 0; | ||
| 64 | prop[0] = move->fm[FM_X].action_delta; | ||
| 65 | prop[1] = move->fm[FM_Y].action_delta; | ||
| 66 | prop[2] = move->fm[FM_R].action_delta; | ||
| 67 | prop[3] = move->fm[FM_A].action_delta; | ||
| 68 | gru_event(ge, state->gid, move, prop, 4); | ||
| 69 | return 1; | ||
| 70 | } | ||
diff --git a/src/gestures-pan.c b/src/gestures-drag.c index c951b78..3f21041 100644 --- a/src/gestures-pan.c +++ b/src/gestures-drag.c | |||
| @@ -26,20 +26,20 @@ | |||
| 26 | 26 | ||
| 27 | static const int getype[DIM_TOUCH + 1] = { | 27 | static const int getype[DIM_TOUCH + 1] = { |
| 28 | -1, | 28 | -1, |
| 29 | GRAIL_TYPE_POINTER, | 29 | GRAIL_TYPE_DRAG1, |
| 30 | GRAIL_TYPE_PAN, | 30 | GRAIL_TYPE_DRAG2, |
| 31 | GRAIL_TYPE_SWIPE, | 31 | GRAIL_TYPE_DRAG3, |
| 32 | GRAIL_TYPE_BRUSH, | 32 | GRAIL_TYPE_DRAG4, |
| 33 | GRAIL_TYPE_HAND, | 33 | GRAIL_TYPE_DRAG5, |
| 34 | }; | 34 | }; |
| 35 | 35 | ||
| 36 | static const int fm_mask = 0x03; | 36 | static const int fm_mask = 0x03; |
| 37 | 37 | ||
| 38 | int gru_pan(struct grail *ge, | 38 | int gru_drag(struct grail *ge, |
| 39 | const struct touch_frame *frame) | 39 | const struct touch_frame *frame) |
| 40 | { | 40 | { |
| 41 | struct gesture_recognizer *gru = ge->gru; | 41 | struct gesture_recognizer *gru = ge->gru; |
| 42 | struct combo_model *state = &gru->pan; | 42 | struct combo_model *state = &gru->drag; |
| 43 | struct move_model *move = &gru->move; | 43 | struct move_model *move = &gru->move; |
| 44 | grail_prop_t prop[DIM_GRAIL_PROP]; | 44 | grail_prop_t prop[DIM_GRAIL_PROP]; |
| 45 | int mask = state->active ? (move->active & fm_mask) : fm_mask; | 45 | int mask = state->active ? (move->active & fm_mask) : fm_mask; |
diff --git a/src/gestures-pinch.c b/src/gestures-pinch.c index 62f6601..3b94a66 100644 --- a/src/gestures-pinch.c +++ b/src/gestures-pinch.c | |||
| @@ -27,10 +27,10 @@ | |||
| 27 | static const int getype[DIM_TOUCH + 1] = { | 27 | static const int getype[DIM_TOUCH + 1] = { |
| 28 | 0, | 28 | 0, |
| 29 | 0, | 29 | 0, |
| 30 | GRAIL_TYPE_PINCH, | 30 | GRAIL_TYPE_PINCH2, |
| 31 | GRAIL_TYPE_SCALE, | 31 | GRAIL_TYPE_PINCH3, |
| 32 | GRAIL_TYPE_PICK, | 32 | GRAIL_TYPE_PINCH4, |
| 33 | GRAIL_TYPE_GRAB, | 33 | GRAIL_TYPE_PINCH5, |
| 34 | }; | 34 | }; |
| 35 | 35 | ||
| 36 | static const int fm_mask = 0x04; | 36 | static const int fm_mask = 0x04; |
diff --git a/src/gestures-rotate.c b/src/gestures-rotate.c index fa0db22..ebab6d3 100644 --- a/src/gestures-rotate.c +++ b/src/gestures-rotate.c | |||
| @@ -27,10 +27,10 @@ | |||
| 27 | static const int getype[DIM_TOUCH + 1] = { | 27 | static const int getype[DIM_TOUCH + 1] = { |
| 28 | 0, | 28 | 0, |
| 29 | 0, | 29 | 0, |
| 30 | GRAIL_TYPE_ROTATE, | 30 | GRAIL_TYPE_ROTATE2, |
| 31 | GRAIL_TYPE_TURN, | 31 | GRAIL_TYPE_ROTATE3, |
| 32 | GRAIL_TYPE_WHIRL, | 32 | GRAIL_TYPE_ROTATE4, |
| 33 | GRAIL_TYPE_REVOLVE, | 33 | GRAIL_TYPE_ROTATE5, |
| 34 | }; | 34 | }; |
| 35 | 35 | ||
| 36 | static const int fm_mask = 0x08; | 36 | static const int fm_mask = 0x08; |
diff --git a/src/grail-gestures.h b/src/grail-gestures.h index 2acbb6d..6846ed0 100644 --- a/src/grail-gestures.h +++ b/src/grail-gestures.h | |||
| @@ -63,8 +63,8 @@ struct combo_model { | |||
| 63 | int active, gid; | 63 | int active, gid; |
| 64 | }; | 64 | }; |
| 65 | 65 | ||
| 66 | int gru_pan(struct grail *ge, | 66 | int gru_drag(struct grail *ge, |
| 67 | const struct touch_frame *frame); | 67 | const struct touch_frame *frame); |
| 68 | int gru_pinch(struct grail *ge, | 68 | int gru_pinch(struct grail *ge, |
| 69 | const struct touch_frame *frame); | 69 | const struct touch_frame *frame); |
| 70 | int gru_rotate(struct grail *ge, | 70 | int gru_rotate(struct grail *ge, |
diff --git a/src/grail-recognizer.c b/src/grail-recognizer.c index bcfbc2c..5f4bee0 100644 --- a/src/grail-recognizer.c +++ b/src/grail-recognizer.c | |||
| @@ -47,10 +47,9 @@ void gru_recognize(struct grail *ge, const struct touch_frame *frame) | |||
| 47 | if (!ge->gin || !ge->gru) | 47 | if (!ge->gin || !ge->gru) |
| 48 | return; | 48 | return; |
| 49 | gru_motion(ge, frame); | 49 | gru_motion(ge, frame); |
| 50 | gru_pan(ge, frame); | 50 | gru_drag(ge, frame); |
| 51 | gru_pinch(ge, frame); | 51 | gru_pinch(ge, frame); |
| 52 | gru_rotate(ge, frame); | 52 | gru_rotate(ge, frame); |
| 53 | gru_combo(ge, frame); | ||
| 54 | gru_tapping(ge, frame); | 53 | gru_tapping(ge, frame); |
| 55 | ge->gru->frame = *frame; | 54 | ge->gru->frame = *frame; |
| 56 | } | 55 | } |
diff --git a/src/grail-recognizer.h b/src/grail-recognizer.h index 11b44ce..1c36819 100644 --- a/src/grail-recognizer.h +++ b/src/grail-recognizer.h | |||
| @@ -28,10 +28,9 @@ | |||
| 28 | struct gesture_recognizer { | 28 | struct gesture_recognizer { |
| 29 | struct touch_frame frame; | 29 | struct touch_frame frame; |
| 30 | struct move_model move; | 30 | struct move_model move; |
| 31 | struct combo_model pan; | 31 | struct combo_model drag; |
| 32 | struct combo_model pinch; | 32 | struct combo_model pinch; |
| 33 | struct combo_model rotate; | 33 | struct combo_model rotate; |
| 34 | struct combo_model combo; | ||
| 35 | struct tapping_model tapping; | 34 | struct tapping_model tapping; |
| 36 | int pointer_gesture; | 35 | int pointer_gesture; |
| 37 | }; | 36 | }; |
diff --git a/test/grail-gesture.c b/test/grail-gesture.c index 16b33ac..8e34f84 100644 --- a/test/grail-gesture.c +++ b/test/grail-gesture.c | |||
| @@ -46,7 +46,7 @@ static int tp_get_clients(struct grail *ge, | |||
| 46 | 46 | ||
| 47 | static void tp_event(struct grail *ge, const struct input_event *ev) | 47 | static void tp_event(struct grail *ge, const struct input_event *ev) |
| 48 | { | 48 | { |
| 49 | if (!grail_mask_get(flag_mask, GRAIL_TYPE_POINTER)) | 49 | if (!grail_mask_get(flag_mask, GRAIL_TYPE_DRAG1)) |
| 50 | return; | 50 | return; |
| 51 | fprintf(stderr, "event %d 0x%x %d\n", ev->type, ev->code, ev->value); | 51 | fprintf(stderr, "event %d 0x%x %d\n", ev->type, ev->code, ev->value); |
| 52 | } | 52 | } |
