From d8e8d112aa907f8021ae99e6d7cd7856f1d90b70 Mon Sep 17 00:00:00 2001 From: Henrik Rydberg Date: Thu, 5 Aug 2010 12:40:49 +0200 Subject: Add four-finger and five-finger gestures Add four-finger and five-finger gestures, and move all gesture types out to a separate file. Signed-off-by: Henrik Rydberg --- include/grail-types.h | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++ include/grail.h | 17 +--------------- src/Makefile.am | 1 + src/gestures-combo.c | 12 +++++++++-- src/gestures-pan.c | 12 +++++++++-- src/gestures-pinch.c | 14 +++++++++++-- src/gestures-rotate.c | 12 +++++++++-- 7 files changed, 100 insertions(+), 24 deletions(-) create mode 100644 include/grail-types.h diff --git a/include/grail-types.h b/include/grail-types.h new file mode 100644 index 0000000..7de3d9a --- /dev/null +++ b/include/grail-types.h @@ -0,0 +1,56 @@ +/***************************************************************************** + * + * grail - Gesture Recognition And Instantiation Library + * + * Copyright (C) 2010 Canonical Ltd. + * + * 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 . + * + * Authors: + * Henrik Rydberg + * + ****************************************************************************/ + +#ifndef _GRAIL_TYPES_H +#define _GRAIL_TYPES_H + +#define GRAIL_TYPE_POINTER 0 /* reserved */ + +#define GRAIL_TYPE_PAN 1 /* two-finger pan/scroll */ +#define GRAIL_TYPE_PINCH 2 /* two-finger pinch-to-zoom */ +#define GRAIL_TYPE_ROTATE 3 /* two-finger rotation */ +#define GRAIL_TYPE_COMBO2 4 /* two-finger combo */ + +#define GRAIL_TYPE_SWIPE 5 /* three-finger pan */ +#define GRAIL_TYPE_SCALE 6 /* three-finger pinch */ +#define GRAIL_TYPE_TURN 7 /* three-finger rotate */ +#define GRAIL_TYPE_COMBO3 8 /* three-finger combo */ + +#define GRAIL_TYPE_BRUSH 9 /* four-finger pan */ +#define GRAIL_TYPE_PICK 10 /* four-finger pinch */ +#define GRAIL_TYPE_WHIRL 11 /* four-finger rotate */ +#define GRAIL_TYPE_COMBO4 12 /* four-finger combo */ + +#define GRAIL_TYPE_HAND 13 /* five-finger pan */ +#define GRAIL_TYPE_GRAB 14 /* five-finger pinch */ +#define GRAIL_TYPE_REVOLVE 15 /* five-finger rotate */ +#define GRAIL_TYPE_COMBO5 16 /* five-finger combo */ + +#define GRAIL_TYPE_TAP1 17 /* single one-finger tap */ +#define GRAIL_TYPE_TAP2 18 /* single two-finger tap */ +#define GRAIL_TYPE_TAP3 19 /* single three-finger tap */ +#define GRAIL_TYPE_TAP4 20 /* single four-finger tap */ +#define GRAIL_TYPE_TAP5 21 /* single five-finger tap */ + +#endif diff --git a/include/grail.h b/include/grail.h index 1113188..a100b36 100644 --- a/include/grail.h +++ b/include/grail.h @@ -26,6 +26,7 @@ #define _GRAIL_H #include +#include #include #define DIM_GRAIL_TYPE 64 @@ -34,22 +35,6 @@ #define DIM_GRAIL_PROP 16 #define DIM_GRAIL_PROP_BYTES ((DIM_GRAIL_PROP + 7) >> 3) -#define GRAIL_TYPE_POINTER 0 /* reserved */ -#define GRAIL_TYPE_PAN 1 /* two-finger pan/scroll */ -#define GRAIL_TYPE_PINCH 2 /* two-finger pinch-to-zoom */ -#define GRAIL_TYPE_ROTATE 3 /* two-finger rotation */ -#define GRAIL_TYPE_COMBO2 4 /* two-finger combo */ -#define GRAIL_TYPE_SWIPE 5 /* three-finger pan */ -#define GRAIL_TYPE_SCALE 6 /* three-finger pinch */ -#define GRAIL_TYPE_TURN 7 /* three-finger rotate */ -#define GRAIL_TYPE_COMBO3 8 /* three-finger combo */ - -#define GRAIL_TYPE_TAP1 9 /* single one-finger tap */ -#define GRAIL_TYPE_TAP2 10 /* single two-finger tap */ -#define GRAIL_TYPE_TAP3 11 /* single three-finger tap */ -#define GRAIL_TYPE_TAP4 12 /* single four-finger tap */ -#define GRAIL_TYPE_TAP5 13 /* single five-finger tap */ - #define GRAIL_STATUS_BEGIN 0 #define GRAIL_STATUS_UPDATE 1 #define GRAIL_STATUS_END 2 diff --git a/src/Makefile.am b/src/Makefile.am index 53b4300..4556610 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -25,5 +25,6 @@ INCLUDES = -I$(top_srcdir)/include/ libgrailincludedir = $(includedir) libgrailinclude_HEADERS = \ $(top_srcdir)/include/grail-bits.h \ + $(top_srcdir)/include/grail-types.h \ $(top_srcdir)/include/grail-touch.h \ $(top_srcdir)/include/grail.h diff --git a/src/gestures-combo.c b/src/gestures-combo.c index 8b4ad8c..7b8dbd5 100644 --- a/src/gestures-combo.c +++ b/src/gestures-combo.c @@ -26,6 +26,15 @@ #include #include +static const int getype[DIM_TOUCH + 1] = { + 0, + 0, + GRAIL_TYPE_COMBO2, + GRAIL_TYPE_COMBO3, + GRAIL_TYPE_COMBO4, + GRAIL_TYPE_COMBO5, +}; + int gru_combo(struct grail *ge, const struct touch_frame *frame) { @@ -44,8 +53,7 @@ int gru_combo(struct grail *ge, !move->r.tickle && !move->a.tickle) return 0; if (!state->active) { - int type = move->ntouch == 2 ? GRAIL_TYPE_COMBO2 : - move->ntouch == 3 ? GRAIL_TYPE_COMBO3 : 0; + int type = getype[move->ntouch]; if (!type) return 0; state->gid = gin_gid_begin(ge, type, PRIO_GESTURE, frame); diff --git a/src/gestures-pan.c b/src/gestures-pan.c index 6c34e5d..3094007 100644 --- a/src/gestures-pan.c +++ b/src/gestures-pan.c @@ -26,6 +26,15 @@ #include #include +static const int getype[DIM_TOUCH + 1] = { + 0, + 0, + GRAIL_TYPE_PAN, + GRAIL_TYPE_SWIPE, + GRAIL_TYPE_BRUSH, + GRAIL_TYPE_HAND, +}; + int gru_pan(struct grail *ge, const struct touch_frame *frame) { @@ -43,8 +52,7 @@ int gru_pan(struct grail *ge, if (!move->x.tickle && !move->y.tickle) return 0; if (!state->active) { - int type = move->ntouch == 2 ? GRAIL_TYPE_PAN : - move->ntouch == 3 ? GRAIL_TYPE_SWIPE : 0; + int type = getype[move->ntouch]; if (!type) return 0; state->gid = gin_gid_begin(ge, type, PRIO_GESTURE, frame); diff --git a/src/gestures-pinch.c b/src/gestures-pinch.c index 6c5392d..0721e02 100644 --- a/src/gestures-pinch.c +++ b/src/gestures-pinch.c @@ -26,6 +26,15 @@ #include #include +static const int getype[DIM_TOUCH + 1] = { + 0, + 0, + GRAIL_TYPE_PINCH, + GRAIL_TYPE_SCALE, + GRAIL_TYPE_PICK, + GRAIL_TYPE_GRAB, +}; + int gru_pinch(struct grail *ge, const struct touch_frame *frame) { @@ -40,11 +49,12 @@ int gru_pinch(struct grail *ge, } return 0; } + if (!move->a.tickle) + return 0; if (!move->r.tickle) return 0; if (!state->active) { - int type = move->ntouch == 2 ? GRAIL_TYPE_PINCH : - move->ntouch == 3 ? GRAIL_TYPE_SCALE : 0; + int type = getype[move->ntouch]; if (!type) return 0; state->gid = gin_gid_begin(ge, type, PRIO_GESTURE, frame); diff --git a/src/gestures-rotate.c b/src/gestures-rotate.c index 90f9bdf..6c496d2 100644 --- a/src/gestures-rotate.c +++ b/src/gestures-rotate.c @@ -26,6 +26,15 @@ #include #include +static const int getype[DIM_TOUCH + 1] = { + 0, + 0, + GRAIL_TYPE_ROTATE, + GRAIL_TYPE_TURN, + GRAIL_TYPE_WHIRL, + GRAIL_TYPE_REVOLVE, +}; + int gru_rotate(struct grail *ge, const struct touch_frame *frame) { @@ -43,8 +52,7 @@ int gru_rotate(struct grail *ge, if (!move->a.tickle) return 0; if (!state->active) { - int type = move->ntouch == 2 ? GRAIL_TYPE_ROTATE : - move->ntouch == 3 ? GRAIL_TYPE_TURN : 0; + int type = getype[move->ntouch]; if (!type) return 0; state->gid = gin_gid_begin(ge, type, PRIO_GESTURE, frame); -- cgit v1.2.3