diff options
Diffstat (limited to 'src/grail-inserter.c')
| -rw-r--r-- | src/grail-inserter.c | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/src/grail-inserter.c b/src/grail-inserter.c index 847995a..6f9a034 100644 --- a/src/grail-inserter.c +++ b/src/grail-inserter.c | |||
| @@ -40,7 +40,7 @@ static int find_gslot(const struct gesture_inserter *gin, int gid) | |||
| 40 | 40 | ||
| 41 | // todo: spanning tree for multi-user case | 41 | // todo: spanning tree for multi-user case |
| 42 | static void setup_new_gestures(struct grail *ge, | 42 | static void setup_new_gestures(struct grail *ge, |
| 43 | const struct touch_frame *frame) | 43 | const struct utouch_frame *frame) |
| 44 | { | 44 | { |
| 45 | struct gesture_inserter *gin = ge->gin; | 45 | struct gesture_inserter *gin = ge->gin; |
| 46 | grail_mask_t types[DIM_GRAIL_TYPE_BYTES]; | 46 | grail_mask_t types[DIM_GRAIL_TYPE_BYTES]; |
| @@ -100,14 +100,14 @@ void gin_destroy(struct grail *ge) | |||
| 100 | ge->gin = NULL; | 100 | ge->gin = NULL; |
| 101 | } | 101 | } |
| 102 | 102 | ||
| 103 | void gin_frame_begin(struct grail *ge, const struct touch_frame *frame) | 103 | void gin_frame_begin(struct grail *ge, const struct utouch_frame *frame) |
| 104 | { | 104 | { |
| 105 | struct gesture_inserter *gin = ge->gin; | 105 | struct gesture_inserter *gin = ge->gin; |
| 106 | memset(gin->types, 0, sizeof(gin->types)); | 106 | memset(gin->types, 0, sizeof(gin->types)); |
| 107 | gin->time = frame->time; | 107 | gin->time = frame->time; |
| 108 | } | 108 | } |
| 109 | 109 | ||
| 110 | void gin_frame_end(struct grail *ge, const struct touch_frame *frame) | 110 | void gin_frame_end(struct grail *ge, const struct utouch_frame *frame) |
| 111 | { | 111 | { |
| 112 | struct gesture_inserter *gin = ge->gin; | 112 | struct gesture_inserter *gin = ge->gin; |
| 113 | int i, hold = 0, discard = 0; | 113 | int i, hold = 0, discard = 0; |
| @@ -151,11 +151,12 @@ void gin_frame_end(struct grail *ge, const struct touch_frame *frame) | |||
| 151 | } | 151 | } |
| 152 | } | 152 | } |
| 153 | 153 | ||
| 154 | int gin_gid_begin_select(struct grail *ge, int type, int priority, | 154 | int gin_gid_begin(struct grail *ge, int type, int priority, |
| 155 | const grail_mask_t *span, int nspan) | 155 | const struct utouch_frame *frame) |
| 156 | { | 156 | { |
| 157 | struct gesture_inserter *gin = ge->gin; | 157 | struct gesture_inserter *gin = ge->gin; |
| 158 | struct slot_state *s; | 158 | struct slot_state *s; |
| 159 | int slot; | ||
| 159 | int i = grail_mask_get_first(gin->unused, sizeof(gin->unused)); | 160 | int i = grail_mask_get_first(gin->unused, sizeof(gin->unused)); |
| 160 | if (i < 0) | 161 | if (i < 0) |
| 161 | return -1; | 162 | return -1; |
| @@ -165,7 +166,8 @@ int gin_gid_begin_select(struct grail *ge, int type, int priority, | |||
| 165 | s->id = gin->gestureid++ & MAX_GESTURE_ID; | 166 | s->id = gin->gestureid++ & MAX_GESTURE_ID; |
| 166 | s->status = GRAIL_STATUS_BEGIN; | 167 | s->status = GRAIL_STATUS_BEGIN; |
| 167 | s->nclient = 0; | 168 | s->nclient = 0; |
| 168 | memcpy(s->span, span, nspan); | 169 | for (slot = 0; slot < DIM_TOUCH; slot++) |
| 170 | grail_mask_modify(s->span, slot, frame->slots[slot]->active); | ||
| 169 | gebuf_clear(&s->buf); | 171 | gebuf_clear(&s->buf); |
| 170 | grail_mask_clear(gin->unused, i); | 172 | grail_mask_clear(gin->unused, i); |
| 171 | grail_mask_set(gin->fresh, i); | 173 | grail_mask_set(gin->fresh, i); |
| @@ -173,13 +175,6 @@ int gin_gid_begin_select(struct grail *ge, int type, int priority, | |||
| 173 | return s->id; | 175 | return s->id; |
| 174 | } | 176 | } |
| 175 | 177 | ||
| 176 | int gin_gid_begin(struct grail *ge, int type, int priority, | ||
| 177 | const struct touch_frame *frame) | ||
| 178 | { | ||
| 179 | return gin_gid_begin_select(ge, type, priority, | ||
| 180 | frame->touches, sizeof(frame->touches)); | ||
| 181 | } | ||
| 182 | |||
| 183 | void gin_gid_discard(struct grail *ge, int gid) | 178 | void gin_gid_discard(struct grail *ge, int gid) |
| 184 | { | 179 | { |
| 185 | struct gesture_inserter *gin = ge->gin; | 180 | struct gesture_inserter *gin = ge->gin; |
| @@ -248,18 +243,18 @@ void grail_set_bbox(struct grail *ge, | |||
| 248 | const struct grail_coord *tmin, | 243 | const struct grail_coord *tmin, |
| 249 | const struct grail_coord *tmax) | 244 | const struct grail_coord *tmax) |
| 250 | { | 245 | { |
| 251 | struct touch_caps *caps = &ge->impl->dev.caps; | 246 | struct utouch_surface *s = utouch_frame_get_surface(ge->impl->fh); |
| 252 | struct gesture_inserter *gin = ge->gin; | 247 | struct gesture_inserter *gin = ge->gin; |
| 253 | double tx, ty, dx, dy, sx, sy; | 248 | double tx, ty, dx, dy, sx, sy; |
| 254 | tx = tmax->x - tmin->x; | 249 | tx = tmax->x - tmin->x; |
| 255 | ty = tmax->y - tmin->y; | 250 | ty = tmax->y - tmin->y; |
| 256 | dx = caps->max_x - caps->min_x; | 251 | dx = s->max_x - s->min_x; |
| 257 | dy = caps->max_y - caps->min_y; | 252 | dy = s->max_y - s->min_y; |
| 258 | sx = tx / dx; | 253 | sx = tx / dx; |
| 259 | sy = ty / dy; | 254 | sy = ty / dy; |
| 260 | gin->scale_x = sx; | 255 | gin->scale_x = sx; |
| 261 | gin->scale_y = sy; | 256 | gin->scale_y = sy; |
| 262 | gin->scale_r = sqrt((tx * tx + ty * ty) / (dx * dx + dy * dy)); | 257 | gin->scale_r = sqrt((tx * tx + ty * ty) / (dx * dx + dy * dy)); |
| 263 | gin->trans_x = tmin->x - caps->min_x * sx; | 258 | gin->trans_x = tmin->x - s->min_x * sx; |
| 264 | gin->trans_y = tmin->y - caps->min_y * sy; | 259 | gin->trans_y = tmin->y - s->min_y * sy; |
| 265 | } | 260 | } |
