From baf35a3b761172aeeefd7e761b7e29995a37a9e8 Mon Sep 17 00:00:00 2001 From: Henrik Rydberg Date: Thu, 19 Aug 2010 21:17:42 +0200 Subject: Add grail_contact and a method to retrieve the current contacts This patch adds the possibility to extract the current set of contacts from the grail state. Signed-off-by: Henrik Rydberg --- src/grail-event.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/grail-event.c (limited to 'src/grail-event.c') diff --git a/src/grail-event.c b/src/grail-event.c new file mode 100644 index 0000000..6479cc0 --- /dev/null +++ b/src/grail-event.c @@ -0,0 +1,51 @@ +/***************************************************************************** + * + * grail - Gesture Recognition And Instantiation Library + * + * Copyright (C) 2010 Canonical Ltd. + * Copyright (C) 2010 Henrik Rydberg + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + * + ****************************************************************************/ + +#include "grail-inserter.h" +#include "grail-impl.h" +#include + +int grail_get_contacts(const struct grail *ge, + struct grail_contact *touch, int max_touch) +{ + const struct touch_dev *dev = &ge->impl->dev; + const struct gesture_inserter *gin = ge->gin; + const struct touch_frame *frame = &dev->frame; + int i; + if (frame->nactive < max_touch) + max_touch = frame->nactive; + for (i = 0; i < max_touch; i++) { + struct grail_contact *t = &touch[i]; + const struct touch *ct = frame->active[i]; + t->id = ct->id; + t->tool_type = ct->tool_type; + t->pos.x = gin_prop_x(gin, ct->x); + t->pos.y = gin_prop_y(gin, ct->y); + t->touch_major = gin->scale_r * ct->touch_major; + t->touch_minor = gin->scale_r * ct->touch_minor; + t->width_major = gin->scale_r * ct->width_major; + t->width_minor = gin->scale_r * ct->width_minor; + t->angle = touch_angle(dev, ct->orientation); + t->pressure = touch_pressure(dev, ct->pressure); + } + return max_touch; +} -- cgit v1.2.3