summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorHenrik Rydberg <rydberg@bitmath.org>2010-07-29 15:54:31 +0200
committerHenrik Rydberg <rydberg@euromail.se>2010-08-05 22:48:38 +0200
commite0eb1015bf30fd0913db571b000ba6a83ea22660 (patch)
treea3d62152066cfb8521c80806596a4fb0fe322014 /include
parentb76660d71e2ea77752025089bd71deffad64e325 (diff)
Split the code into recognizer and inserter
Refactor code to make more room for gesture recognition. Also simplify public headers. Signed-off-by: Henrik Rydberg <rydberg@bitmath.org>
Diffstat (limited to 'include')
-rw-r--r--include/grail-gesture.h90
-rw-r--r--include/grail.h80
2 files changed, 63 insertions, 107 deletions
diff --git a/include/grail-gesture.h b/include/grail-gesture.h
deleted file mode 100644
index fe62b95..0000000
--- a/include/grail-gesture.h
+++ /dev/null
@@ -1,90 +0,0 @@
1/*****************************************************************************
2 *
3 * grail - Gesture Recognition And Instantiation Library
4 *
5 * Copyright (C) 2010 Canonical Ltd.
6 *
7 * This program is free software: you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation, either version 3 of the License, or (at your
10 * option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License along
18 * with this program. If not, see <http://www.gnu.org/licenses/>.
19 *
20 * Authors:
21 * Henrik Rydberg <rydberg@bitmath.org>
22 *
23 ****************************************************************************/
24
25#ifndef _GRAIL_GESTURE_H
26#define _GRAIL_GESTURE_H
27
28#include <grail-touch.h>
29
30#define DIM_GESTURE_PROP 8
31typedef int gesture_prop_t;
32
33enum gesture_type {
34 GE_MOVE,
35 GE_VSCROLL,
36 DIM_GESTURE_TYPE
37};
38
39enum gesture_state {
40 GS_CANCEL,
41 GS_BEGIN,
42 GS_END
43};
44
45struct gesture_flag {
46 enum gesture_type type;
47 touch_time_t time;
48 enum gesture_state state;
49};
50
51struct gesture_event {
52 enum gesture_type type;
53 touch_time_t time;
54 gesture_prop_t prop[DIM_GESTURE_PROP];
55};
56
57struct gesture_dev {
58 struct gedev_impl *impl;
59 void *priv;
60};
61
62struct gesture_client {
63 void (*gesture)(struct gesture_client *client,
64 const struct gesture_event *ev);
65 int priority[DIM_GESTURE_TYPE];
66 struct client_impl *impl;
67 void *priv;
68};
69
70int client_init(struct gesture_client *client, void *priv);
71void client_flag(struct gesture_client *client,
72 const struct gesture_flag *flag);
73void client_event(struct gesture_client *client,
74 const struct gesture_event *ev);
75void client_sync(struct gesture_client *client);
76void client_destroy(struct gesture_client *client);
77
78int gedev_init(struct gesture_dev *dev, void *priv);
79int gedev_attach_client(struct gesture_dev *dev,
80 struct gesture_client *client);
81
82void gedev_flag(struct gesture_dev *dev, const struct gesture_flag *flag);
83void gedev_event(struct gesture_dev *dev, const struct gesture_event *ev);
84void gedev_sync(struct gesture_dev *dev);
85
86void gedev_detach_client(struct gesture_dev *dev,
87 struct gesture_client *client);
88void gedev_destroy(struct gesture_dev *dev);
89
90#endif
diff --git a/include/grail.h b/include/grail.h
index c390e22..de202b5 100644
--- a/include/grail.h
+++ b/include/grail.h
@@ -27,31 +27,82 @@
27 27
28#include <linux/input.h> 28#include <linux/input.h>
29 29
30#define DIM_GRAIL_PROP 8 30#define GRAIL_STATUS_BEGIN 0
31#define DIM_GRAIL_TYPE 64 31#define GRAIL_STATUS_UPDATE 1
32#define GRAIL_STATUS_END 2
32 33
34#define DIM_GRAIL_TYPE 64
35#define DIM_GRAIL_TYPE_BYTES (DIM_GRAIL_TYPE >> 3)
36
37#define GRAIL_TYPE_MOVE 0
38#define GRAIL_TYPE_VSCROLL 1
39#define GRAIL_TYPE_HSCROLL 2
40#define GRAIL_TYPE_SCROLL 3
41
42#define DIM_GRAIL_PROP 8
43
44static const int GRAIL_NPROP[] = {
45 2, /* MOVE */
46 1, /* VSCROLL */
47 1, /* HSCROLL */
48 2, /* SCROLL */
49};
50
51typedef unsigned char grail_mask_t;
33typedef int grail_prop_t; 52typedef int grail_prop_t;
34typedef __u64 grail_time_t; 53typedef __u64 grail_time_t;
35typedef unsigned long grail_clientid_t; 54
55static inline void grail_set_mask(grail_mask_t *mask, int i)
56{
57 mask[i >> 3] |= (1 << (i & 7));
58}
59
60static inline void grail_clear_mask(grail_mask_t *mask, int i)
61{
62 mask[i >> 3] &= ~(1 << (i & 7));
63}
64
65static inline int grail_get_mask(const grail_mask_t *mask, int i)
66{
67 return (mask[i >> 3] >> (i & 7)) & 1;
68}
69
70struct grail_coord {
71 int x, y;
72};
73
74struct grail_client_id {
75 int client;
76 int root, event, child;
77};
78
79struct grail_client_info {
80 struct grail_client_id id;
81 grail_mask_t mask[DIM_GRAIL_TYPE_BYTES];
82};
36 83
37struct grail_event { 84struct grail_event {
38 int type; 85 int type;
39 int id; 86 int id;
40 int x; 87 int status;
41 int y; 88 struct grail_coord pos;
42 int status; 89 struct grail_client_id client_id;
43 grail_time_t time; 90 grail_time_t time;
44 grail_prop_t prop[DIM_GRAIL_PROP]; 91 grail_prop_t prop[DIM_GRAIL_PROP];
45}; 92};
46 93
47struct grail { 94struct grail {
48 int (*get_clients)(int x, int y, int screen, 95 int (*get_clients)(struct grail *ge,
49 grail_clientid_t *clients, int nclients); 96 struct grail_client_info *client, int max_clients,
97 const struct grail_coord *coords, int num_coords,
98 const grail_mask_t *types);
50 void (*event)(struct grail *ge, 99 void (*event)(struct grail *ge,
51 const struct input_event *ev); 100 const struct input_event *ev);
52 void (*gesture)(struct grail *ge, 101 void (*gesture)(struct grail *ge,
53 const struct grail_event *ev); 102 const struct grail_event *ev);
54 struct grail_impl *impl; 103 struct grail_impl *impl;
104 struct gesture_inserter *gin;
105 struct gesture_recognizer *gru;
55 void *priv; 106 void *priv;
56}; 107};
57 108
@@ -60,9 +111,4 @@ int grail_idle(struct grail *ge, int fd, int ms);
60int grail_pull(struct grail *ge, int fd); 111int grail_pull(struct grail *ge, int fd);
61void grail_close(struct grail *ge, int fd); 112void grail_close(struct grail *ge, int fd);
62 113
63void grail_add_client(struct grail *ge, grail_clientid_t id,
64 const int *types, const int *priority, int ntypes);
65void grail_remove_client(struct grail *ge, grail_clientid_t id);
66
67
68#endif 114#endif