diff options
| -rw-r--r-- | src/grail-inserter.c | 30 | ||||
| -rw-r--r-- | src/grail-inserter.h | 21 |
2 files changed, 30 insertions, 21 deletions
diff --git a/src/grail-inserter.c b/src/grail-inserter.c index 9769d94..36ab570 100644 --- a/src/grail-inserter.c +++ b/src/grail-inserter.c | |||
| @@ -28,18 +28,6 @@ | |||
| 28 | 28 | ||
| 29 | static const int MAX_GESTURE_ID = 0xfff; | 29 | static const int MAX_GESTURE_ID = 0xfff; |
| 30 | 30 | ||
| 31 | struct gesture_inserter { | ||
| 32 | struct slot_state state[DIM_INSTANCE]; | ||
| 33 | grail_mask_t unused[DIM_INSTANCE_BYTES]; | ||
| 34 | grail_mask_t fresh[DIM_INSTANCE_BYTES]; | ||
| 35 | grail_mask_t used[DIM_INSTANCE_BYTES]; | ||
| 36 | grail_time_t time; | ||
| 37 | int gestureid; | ||
| 38 | int transformed; | ||
| 39 | float scale_x, scale_y, scale_r; | ||
| 40 | float trans_x, trans_y; | ||
| 41 | }; | ||
| 42 | |||
| 43 | static const int grail_main_type[DIM_GRAIL_TYPE] = { | 31 | static const int grail_main_type[DIM_GRAIL_TYPE] = { |
| 44 | GRAIL_MAIN_DRAG, | 32 | GRAIL_MAIN_DRAG, |
| 45 | GRAIL_MAIN_PINCH, | 33 | GRAIL_MAIN_PINCH, |
| @@ -72,19 +60,15 @@ static const int grail_main_type[DIM_GRAIL_TYPE] = { | |||
| 72 | static void transform_pos(const struct gesture_inserter *gin, | 60 | static void transform_pos(const struct gesture_inserter *gin, |
| 73 | struct grail_coord *pos) | 61 | struct grail_coord *pos) |
| 74 | { | 62 | { |
| 75 | if (gin->transformed) { | 63 | pos->x *= gin->scale_x; |
| 76 | pos->x *= gin->scale_x; | 64 | pos->x += gin->trans_x; |
| 77 | pos->x += gin->trans_x; | 65 | pos->y *= gin->scale_y; |
| 78 | pos->y *= gin->scale_y; | 66 | pos->y += gin->trans_y; |
| 79 | pos->y += gin->trans_y; | ||
| 80 | } | ||
| 81 | } | 67 | } |
| 82 | 68 | ||
| 83 | static void transform_prop(const struct gesture_inserter *gin, int type, | 69 | static void transform_prop(const struct gesture_inserter *gin, int type, |
| 84 | grail_prop_t *prop, int nprop) | 70 | grail_prop_t *prop, int nprop) |
| 85 | { | 71 | { |
| 86 | if (!gin->transformed) | ||
| 87 | return; | ||
| 88 | switch (grail_main_type[type]) { | 72 | switch (grail_main_type[type]) { |
| 89 | case GRAIL_MAIN_DRAG: | 73 | case GRAIL_MAIN_DRAG: |
| 90 | prop[GRAIL_PROP_DRAG_DX] *= gin->scale_x; | 74 | prop[GRAIL_PROP_DRAG_DX] *= gin->scale_x; |
| @@ -218,6 +202,11 @@ int gin_init(struct grail *ge) | |||
| 218 | return -ENOMEM; | 202 | return -ENOMEM; |
| 219 | for (i = 0; i < DIM_INSTANCE; i++) | 203 | for (i = 0; i < DIM_INSTANCE; i++) |
| 220 | grail_mask_set(gin->unused, i); | 204 | grail_mask_set(gin->unused, i); |
| 205 | gin->scale_x = 1; | ||
| 206 | gin->scale_y = 1; | ||
| 207 | gin->scale_r = 1; | ||
| 208 | gin->trans_x = 1; | ||
| 209 | gin->trans_y = 1; | ||
| 221 | ge->gin = gin; | 210 | ge->gin = gin; |
| 222 | return 0; | 211 | return 0; |
| 223 | } | 212 | } |
| @@ -395,5 +384,4 @@ void grail_set_bbox(struct grail *ge, | |||
| 395 | gin->scale_r = sqrt((sx * sx + sy * sy) / 2); | 384 | gin->scale_r = sqrt((sx * sx + sy * sy) / 2); |
| 396 | gin->trans_x = tmin->x - dmin.x * sx; | 385 | gin->trans_x = tmin->x - dmin.x * sx; |
| 397 | gin->trans_y = tmin->y - dmin.y * sy; | 386 | gin->trans_y = tmin->y - dmin.y * sy; |
| 398 | gin->transformed = 1; | ||
| 399 | } | 387 | } |
diff --git a/src/grail-inserter.h b/src/grail-inserter.h index a81e431..f8ec5ca 100644 --- a/src/grail-inserter.h +++ b/src/grail-inserter.h | |||
| @@ -46,6 +46,27 @@ struct slot_state { | |||
| 46 | struct gebuf buf; | 46 | struct gebuf buf; |
| 47 | }; | 47 | }; |
| 48 | 48 | ||
| 49 | struct gesture_inserter { | ||
| 50 | struct slot_state state[DIM_INSTANCE]; | ||
| 51 | grail_mask_t unused[DIM_INSTANCE_BYTES]; | ||
| 52 | grail_mask_t fresh[DIM_INSTANCE_BYTES]; | ||
| 53 | grail_mask_t used[DIM_INSTANCE_BYTES]; | ||
| 54 | grail_time_t time; | ||
| 55 | int gestureid; | ||
| 56 | float scale_x, scale_y, scale_r; | ||
| 57 | float trans_x, trans_y; | ||
| 58 | }; | ||
| 59 | |||
| 60 | static inline float gin_prop_x(const struct gesture_inserter *gin, float x) | ||
| 61 | { | ||
| 62 | return gin->scale_x * x + gin->trans_x; | ||
| 63 | } | ||
| 64 | |||
| 65 | static inline float gin_prop_y(const struct gesture_inserter *gin, float y) | ||
| 66 | { | ||
| 67 | return gin->scale_y * y + gin->trans_y; | ||
| 68 | } | ||
| 69 | |||
| 49 | int gin_init(struct grail *ge); | 70 | int gin_init(struct grail *ge); |
| 50 | void gin_destroy(struct grail *ge); | 71 | void gin_destroy(struct grail *ge); |
| 51 | 72 | ||
