Initialize Tizen 2.3
[adaptation/xorg/driver/xserver-xorg-input-gesture.git] / mobile / src / gesture.h
1 /**************************************************************************
2
3 xserver-xorg-input-gesture
4
5 Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
6
7 Contact: Sung-Jin Park <sj76.park@samsung.com>
8          Sangjin LEE <lsj119@samsung.com>
9
10 Permission is hereby granted, free of charge, to any person obtaining a
11 copy of this software and associated documentation files (the
12 "Software"), to deal in the Software without restriction, including
13 without limitation the rights to use, copy, modify, merge, publish,
14 distribute, sub license, and/or sell copies of the Software, and to
15 permit persons to whom the Software is furnished to do so, subject to
16 the following conditions:
17
18 The above copyright notice and this permission notice (including the
19 next paragraph) shall be included in all copies or substantial portions
20 of the Software.
21
22 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
25 IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
26 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
27 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
28 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29
30 **************************************************************************/
31
32 #ifndef _GESTURE_H_
33 #define _GESTURE_H_
34
35 #include <xorg/events.h>
36 #include <xorg/gestureext.h>
37 #include <X11/extensions/gestureconst.h>
38 #include <pixman.h>
39
40 #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 3
41 #define HAVE_PROPERTIES 1
42 #endif
43
44 #ifndef ABS_CNT
45 #define ABS_CNT (ABS_MAX+1)
46 #endif
47
48 #define NUM_PASSKEYS    20
49
50 #define SYSCALL(call) while (((call) == -1) && (errno == EINTR))
51 #define RootWindow(dev) dev->spriteInfo->sprite->spriteTrace[0]
52 #define CLIENT_BITS(id) ((id) & RESOURCE_CLIENT_MASK)
53 #define CLIENT_ID(id) ((int)(CLIENT_BITS(id) >> CLIENTOFFSET))
54
55 #define MAX_MT_DEVICES          10
56 #define GESTURE_EQ_SIZE 256
57
58 #define GESTURE_RECOGNIZER_ONOFF        "GESTURE_RECOGNIZER_ONOFF"
59
60 #define FINGER_WIDTH            10
61 #define FINGER_HEIGHT           10
62 #define FINGER_WIDTH_2T 20
63 #define FINGER_HEIGHT_2T        20
64 #define AREA_CENTER_X(extents)  ((extents)->x1 + (((extents)->x2-(extents)->x1)/2))
65 #define AREA_CENTER_Y(extents)  ((extents)->y1 + (((extents)->y2-(extents)->y1)/2))
66 #define AREA_SIZE(extents)              (ABS((extents)->x2-(extents)->x1)*ABS((extents)->y2-(extents)->y1))
67 #define INBOX(r,x,y)                            ( ((r)->x2 >  x) && ((r)->x1 <= x) && ((r)->y2 >  y) && ((r)->y1 <= y) )
68 #define AREA_HEIGHT(extents)    (((extents)->y2)-((extents)->y1))
69 #define AREA_WIDTH(extents)     (((extents)->x2)-((extents)->x1))
70 #define AREA_DIAG_LEN(extents)  sqrt((AREA_WIDTH(extents)*AREA_WIDTH(extents))+(AREA_HEIGHT(extents)*AREA_HEIGHT(extents)))
71
72 //tap
73 #define TAP_THRESHOLD                   100//in pixel
74 #define SINGLE_TAP_TIMEOUT              100//in msec
75 #define DOUBLE_TAP_TIMEOUT      250//in msec
76
77 //pinch rotation
78 #define ZOOM_THRESHOLD                  0.05f
79 #define ANGLE_THRESHOLD         0.1f
80
81 typedef int XFixed;
82 typedef double XDouble;
83 #define XDoubleToFixed(f)    ((XFixed) ((f) * 65536))
84 #define XFixedToDouble(f)    (((XDouble) (f)) / 65536)
85
86 #define MIN(x, y) (((x) < (y)) ? (x) : (y))
87 #define MAX(x, y) (((x) > (y)) ? (x) : (y))
88 #define ABS(x) (((x) < 0) ? -(x) : (x))
89
90 enum
91 {
92         FLICK_NORTHWARD = 0,
93         FLICK_NORTHEASTWARD,
94         FLICK_EASTWARD,
95         FLICK_SOUTHEASTWARD,
96         FLICK_SOUTHWARD,
97         FLICK_SOUTHWESTWARD,
98         FLICK_WESTWARD,
99         FLICK_NORTHWESTWARD
100 };
101
102 #define PAN_AREA_THRESHOLD                      10000//=100pixel * 100pixel
103 #define PAN_MOVE_THRESHOLD                      5//pixel
104 #define PAN_UPDATE_MOVE_THRESHOLD       3//pixel
105 #define PAN_TIME_THRESHOLD                      300//ms
106
107 #define PINCHROTATION_TIME_THRESHOLD            500//ms
108 #define PINCHROTATION_INIT_DIST_THRESHOLD       25.0f
109 #define PINCHROTATION_INIT_ANGLE_THRESHOLD      0.2f
110 #define PINCHROTATION_DIST_THRESHOLD            25.0f
111 #define PINCHROTATION_ANGLE_THRESHOLD           0.2f
112
113 #define HOLD_AREA_THRESHOLD                     2500//=50pixel * 50pixel
114 #define HOLD_MOVE_THRESHOLD                     10//pixel
115 #define HOLD_TIME_THRESHOLD                     500//ms
116
117 #define TAP_AREA_THRESHOLD                      10000//= 100pixel * 100pixel
118 #define TAP_MOVE_THRESHOLD                      200//pixel
119 #define SGL_FINGER_TIME_THRESHOLD       50//ms
120 #define SGL_TAP_TIME_THRESHOLD          200//ms
121 #define DBL_TAP_TIME_THRESHOLD          400//ms
122 #define MAX_TAP_REPEATS                         3
123
124 #define TAPNHOLD_AREA_THRESHOLD                 4900//= 70pixel * 70pixel
125 #define TAPNHOLD_MOVE_THRESHOLD                 50//pixel
126 #define TAPNHOLD_TAP_TIME_THRESHOLD             200//ms
127 #define TAPNHOLD_INTV_TIME_THRESHOLD            200//ms
128 #define TAPNHOLD_HOLD_TIME_THRESHOLD    500//ms
129
130 #define FLICK_AREA_THRESHOLD                    22500//=150pixel * 150pixel
131 #define FLICK_AREA_TIMEOUT                              700//ms
132 #define FLICK_MOVE_THRESHOLD                    100//pixel
133 #define FLICK_MOVE_TIMEOUT                              1000//ms
134
135 #define RAD_90DEG  M_PI_2
136 #define RAD_180DEG M_PI
137 #define RAD_270DEG (M_PI_2 * 3)
138 #define RAD_360DEG (M_PI * 2)
139 #define MIN_RAD (RAD_90DEG / 4)
140 #define MAX_RAD ((RAD_90DEG / 4) * 3)
141 #define RAD_180DEG_MIN (RAD_90DEG + MIN_RAD)
142 #define RAD_180DEG_MAX (RAD_90DEG + MAX_RAD)
143
144 #define rad2degree(r) ((r) * 180/M_PI)
145
146 #define AXIS_LABEL_PROP_ABS_X           "Abs X"
147 #define AXIS_LABEL_PROP_ABS_Y           "Abs Y"
148 #define AXIS_LABEL_PROP_ABS_Z           "Abs Z"
149 #define AXIS_LABEL_PROP_ABS_RX          "Abs Rotary X"
150 #define AXIS_LABEL_PROP_ABS_RY          "Abs Rotary Y"
151 #define AXIS_LABEL_PROP_ABS_RZ          "Abs Rotary Z"
152 #define AXIS_LABEL_PROP_ABS_THROTTLE    "Abs Throttle"
153 #define AXIS_LABEL_PROP_ABS_RUDDER      "Abs Rudder"
154 #define AXIS_LABEL_PROP_ABS_WHEEL       "Abs Wheel"
155 #define AXIS_LABEL_PROP_ABS_GAS         "Abs Gas"
156 #define AXIS_LABEL_PROP_ABS_BRAKE       "Abs Brake"
157 #define AXIS_LABEL_PROP_ABS_HAT0X       "Abs Hat 0 X"
158 #define AXIS_LABEL_PROP_ABS_HAT0Y       "Abs Hat 0 Y"
159 #define AXIS_LABEL_PROP_ABS_HAT1X       "Abs Hat 1 X"
160 #define AXIS_LABEL_PROP_ABS_HAT1Y       "Abs Hat 1 Y"
161 #define AXIS_LABEL_PROP_ABS_HAT2X       "Abs Hat 2 X"
162 #define AXIS_LABEL_PROP_ABS_HAT2Y       "Abs Hat 2 Y"
163 #define AXIS_LABEL_PROP_ABS_HAT3X       "Abs Hat 3 X"
164 #define AXIS_LABEL_PROP_ABS_HAT3Y       "Abs Hat 3 Y"
165 #define AXIS_LABEL_PROP_ABS_PRESSURE    "Abs Pressure"
166 #define AXIS_LABEL_PROP_ABS_DISTANCE    "Abs Distance"
167 #define AXIS_LABEL_PROP_ABS_TILT_X      "Abs Tilt X"
168 #define AXIS_LABEL_PROP_ABS_TILT_Y      "Abs Tilt Y"
169 #define AXIS_LABEL_PROP_ABS_TOOL_WIDTH  "Abs Tool Width"
170 #define AXIS_LABEL_PROP_ABS_VOLUME      "Abs Volume"
171 #define AXIS_LABEL_PROP_ABS_MT_SLOT     "Abs MT Slot"
172 #define AXIS_LABEL_PROP_ABS_MT_TOUCH_MAJOR "Abs MT Touch Major"
173 #define AXIS_LABEL_PROP_ABS_MT_TOUCH_MINOR "Abs MT Touch Minor"
174 #define AXIS_LABEL_PROP_ABS_MT_WIDTH_MAJOR "Abs MT Width Major"
175 #define AXIS_LABEL_PROP_ABS_MT_WIDTH_MINOR "Abs MT Width Minor"
176 #define AXIS_LABEL_PROP_ABS_MT_ORIENTATION "Abs MT Orientation"
177 #define AXIS_LABEL_PROP_ABS_MT_POSITION_X  "Abs MT Position X"
178 #define AXIS_LABEL_PROP_ABS_MT_POSITION_Y  "Abs MT Position Y"
179 #define AXIS_LABEL_PROP_ABS_MT_TOOL_TYPE   "Abs MT Tool Type"
180 #define AXIS_LABEL_PROP_ABS_MT_BLOB_ID     "Abs MT Blob ID"
181 #define AXIS_LABEL_PROP_ABS_MT_TRACKING_ID "Abs MT Tracking ID"
182 #define AXIS_LABEL_PROP_ABS_MT_PRESSURE    "Abs MT Pressure"
183 #define AXIS_LABEL_PROP_ABS_MT_DISTANCE    "Abs MT Distance"
184 #define AXIS_LABEL_PROP_ABS_MT_ANGLE       "Abs MT Angle/MT Component"
185 #define AXIS_LABEL_PROP_ABS_MT_PALM        "Abs MT Palm/MT Sumsize"
186 #define AXIS_LABEL_PROP_ABS_MISC           "Abs Misc"
187
188
189 typedef enum _MTSyncType
190 {
191         MTOUCH_FRAME_SYNC_END,
192         MTOUCH_FRAME_SYNC_BEGIN
193 } MTSyncType;
194
195 typedef enum _EventHandleType
196 {
197         PROPAGATE_EVENTS,
198         KEEP_EVENTS,
199         IGNORE_EVENTS
200 } EventHandleType;
201
202 typedef enum _ErrorStatus
203 {
204         ERROR_NONE,
205         ERROR_ABNORMAL,
206         ERROR_INVALPTR,
207         ERROR_EQFULL,
208         ERROR_ALLOCFAIL
209 } ErrorStatus;
210
211 enum EventType
212 {
213     ET_KeyPress = 2,
214     ET_KeyRelease,
215     ET_ButtonPress,
216     ET_ButtonRelease,
217     ET_Motion,
218     /*
219     ...
220     */
221     ET_MTSync = 0x7E,
222     ET_Internal = 0xFF /* First byte */
223 };
224
225 struct _DeviceEvent {
226     unsigned char header; /**< Always ET_Internal */
227     enum EventType type;  /**< One of EventType */
228     int length;           /**< Length in bytes */
229     Time time;            /**< Time in ms */
230     int deviceid;         /**< Device to post this event for */
231     int sourceid;         /**< The physical source device */
232     union {
233         uint32_t button;  /**< Button number (also used in pointer emulating
234                                touch events) */
235         uint32_t key;     /**< Key code */
236     } detail;
237     uint32_t touchid;     /**< Touch ID (client_id) */
238     int16_t root_x;       /**< Pos relative to root window in integral data */
239     float root_x_frac;    /**< Pos relative to root window in frac part */
240     int16_t root_y;       /**< Pos relative to root window in integral part */
241     float root_y_frac;    /**< Pos relative to root window in frac part */
242     uint8_t buttons[(MAX_BUTTONS + 7) / 8];  /**< Button mask */
243     struct {
244         uint8_t mask[(MAX_VALUATORS + 7) / 8];/**< Valuator mask */
245         uint8_t mode[(MAX_VALUATORS + 7) / 8];/**< Valuator mode (Abs or Rel)*/
246         double data[MAX_VALUATORS];           /**< Valuator data */
247     } valuators;
248     struct {
249         uint32_t base;    /**< XKB base modifiers */
250         uint32_t latched; /**< XKB latched modifiers */
251         uint32_t locked;  /**< XKB locked modifiers */
252         uint32_t effective;/**< XKB effective modifiers */
253     } mods;
254     struct {
255         uint8_t base;    /**< XKB base group */
256         uint8_t latched; /**< XKB latched group */
257         uint8_t locked;  /**< XKB locked group */
258         uint8_t effective;/**< XKB effective group */
259     } group;
260     Window root;      /**< Root window of the event */
261     int corestate;    /**< Core key/button state BEFORE the event */
262     int key_repeat;   /**< Internally-generated key repeat event */
263     uint32_t flags;   /**< Flags to be copied into the generated event */
264 };
265
266 typedef struct _AnyEvent AnyEvent;
267 struct _AnyEvent
268 {
269     unsigned char header; /**< Always ET_Internal */
270     enum EventType type;  /**< One of EventType */
271     int length;           /**< Length in bytes */
272     Time time;            /**< Time in ms */
273     int deviceid;
274     MTSyncType sync;
275     int x;
276     int y;
277 };
278
279 union _InternalEvent {
280         struct {
281             unsigned char header; /**< Always ET_Internal */
282             enum EventType type;  /**< One of ET_* */
283             int length;           /**< Length in bytes */
284             Time time;            /**< Time in ms. */
285         } any;
286         AnyEvent any_event;
287         DeviceEvent device_event;
288 };
289
290 #define wUseDefault(w,field,def)        ((w)->optional ? (w)->optional->field : def)
291 #define wBoundingShape(w)       wUseDefault(w, boundingShape, NULL)
292 #define wInputShape(w)          wUseDefault(w, inputShape, NULL)
293 #define wBorderWidth(w)         ((int) (w)->borderWidth)
294
295 /* used as NULL-terminated list */
296 typedef struct _DevCursorNode {
297     CursorPtr                   cursor;
298     DeviceIntPtr                dev;
299     struct _DevCursorNode*      next;
300 } DevCursNodeRec, *DevCursNodePtr, *DevCursorList;
301
302 typedef struct _WindowOpt {
303     VisualID            visual;            /* default: same as parent */
304     CursorPtr           cursor;            /* default: window.cursorNone */
305     Colormap            colormap;          /* default: same as parent */
306     Mask                dontPropagateMask; /* default: window.dontPropagate */
307     Mask                otherEventMasks;   /* default: 0 */
308     struct _OtherClients *otherClients;    /* default: NULL */
309     struct _GrabRec     *passiveGrabs;     /* default: NULL */
310     PropertyPtr         userProps;         /* default: NULL */
311     unsigned long       backingBitPlanes;  /* default: ~0L */
312     unsigned long       backingPixel;      /* default: 0 */
313     RegionPtr           boundingShape;     /* default: NULL */
314     RegionPtr           clipShape;         /* default: NULL */
315     RegionPtr           inputShape;        /* default: NULL */
316     struct _OtherInputMasks *inputMasks;   /* default: NULL */
317     DevCursorList       deviceCursors;     /* default: NULL */
318 } WindowOptRec, *WindowOptPtr;
319
320 typedef struct _Window {
321     DrawableRec         drawable;
322     PrivateRec          *devPrivates;
323     WindowPtr           parent;         /* ancestor chain */
324     WindowPtr           nextSib;        /* next lower sibling */
325     WindowPtr           prevSib;        /* next higher sibling */
326     WindowPtr           firstChild;     /* top-most child */
327     WindowPtr           lastChild;      /* bottom-most child */
328     RegionRec           clipList;       /* clipping rectangle for output */
329     RegionRec           borderClip;     /* NotClippedByChildren + border */
330     union _Validate     *valdata;
331     RegionRec           winSize;
332     RegionRec           borderSize;
333     DDXPointRec         origin;         /* position relative to parent */
334     unsigned short      borderWidth;
335     unsigned short      deliverableEvents; /* all masks from all clients */
336     Mask                eventMask;      /* mask from the creating client */
337     PixUnion            background;
338     PixUnion            border;
339     pointer             backStorage;    /* null when BS disabled */
340     WindowOptPtr        optional;
341     unsigned            backgroundState:2; /* None, Relative, Pixel, Pixmap */
342     unsigned            borderIsPixel:1;
343     unsigned            cursorIsNone:1; /* else real cursor (might inherit) */
344     unsigned            backingStore:2;
345     unsigned            saveUnder:1;
346     unsigned            DIXsaveUnder:1;
347     unsigned            bitGravity:4;
348     unsigned            winGravity:4;
349     unsigned            overrideRedirect:1;
350     unsigned            visibility:2;
351     unsigned            mapped:1;
352     unsigned            realized:1;     /* ancestors are all mapped */
353     unsigned            viewable:1;     /* realized && InputOutput */
354     unsigned            dontPropagate:3;/* index into DontPropagateMasks */
355     unsigned            forcedBS:1;     /* system-supplied backingStore */
356     unsigned            redirectDraw:2; /* COMPOSITE rendering redirect */
357     unsigned            forcedBG:1;     /* must have an opaque background */
358 #ifdef ROOTLESS
359     unsigned            rootlessUnhittable:1;   /* doesn't hit-test */
360 #endif
361 } WindowRec;
362
363 typedef struct _IEvent {
364         InternalEvent *event;
365         int screen_num;
366         DeviceIntPtr device;
367 } IEventRec, *IEventPtr;
368
369 enum
370 {
371         BTN_RELEASED,
372         BTN_PRESSED,
373         BTN_MOVING
374 };
375
376 #ifdef _F_SUPPORT_BEZEL_FLICK_
377 enum
378 {
379         BEZEL_NONE,
380         BEZEL_ON,
381         BEZEL_START,
382         BEZEL_DONE,
383         BEZEL_END
384 };
385
386 enum
387 {
388         NO_BEZEL,
389         BEZEL_TOP_LEFT,
390         BEZEL_TOP_RIGHT,
391         BEZEL_BOTTOM_LEFT,
392         BEZEL_BOTTOM_RIGHT
393 };
394 #endif
395
396 #define PressFlagFlick                  0x01//(1 << 0)
397 #define PressFlagPan                            0x02//(1 << 1)
398 #define PressFlagPinchRotation  0x04//(1 << 2)
399 #define PressFlagTap                            0x08//(1 << 3)
400 #define PressFlagTapNHold               0x10//(1 << 4)
401 #define PressFlagHold                   0x20//(1 << 5)
402
403 #define FlickFilterMask                 0x01//(1 << 0)
404 #define PanFilterMask                   0x02//(1 << 1)
405 #define PinchRotationFilterMask 0x04//(1 << 2)
406 #define TapFilterMask                   0x08//(1 << 3)
407 #define TapNHoldFilterMask              0x10//(1 << 4)
408 #define HoldFilterMask                  0x20//(1 << 5)
409
410 #define GESTURE_FILTER_MASK_ALL 0x3f//(FlickFilterMask | PanFilterMask | PinchRotationFilterMask | TapFilterMask |TapNHoldFilterMask | HoldFilterMask)
411
412 #define PalmHoldFilterMask                              0x01//(1 << 0)
413 #define PalmFlickHorizFilterMask                0x02//(1 << 1)
414 #define PalmFlickVertiFilterMask                0x04//(1 << 2)
415
416 #define GESTURE_PALM_FILTER_MASK_ALL    0x07//(PalmHoldFilterMask | PalmFlickHorizFilterMask | PalmFlickVertiFilterMask)
417
418 #ifdef _F_SUPPORT_BEZEL_FLICK_
419 #define BezelFlickFilterMask            0x01//(1 << 0)
420 #endif
421
422 typedef struct _tagTouchStatus
423 {
424         int status;//One of BTN_RELEASED, BTN_PRESSED and BTN_MOVING
425         uint32_t flags;
426
427         int px;         //press x
428         int py;         //press y
429         int mx;         //motion x
430         int my;         //motion y
431         int rx;         //release x
432         int ry;         //release y
433         Time ptime;     //press time
434         Time mtime;     //motion time
435         Time rtime;     //current/previous release time
436 } TouchStatus;
437
438 typedef struct _tagCurrentTouchStatus
439 {
440         int status;//One of BTN_RELEASED, BTN_PRESSED and BTN_MOVING
441
442         int cx;         //current x
443         int cy;         //current y
444 } CurTouchStatus;
445
446 //palm flick
447 #define PALM_FLICK_INITIAL_TIMEOUT                      300//ms
448 #define PALM_FLICK_FALSE_TIMEOUT                        900//ms
449 #define PALM_FLICK_DETECT_TIMEOUT                       2000//ms
450 #define PALM_HORIZ_ARRAY_COUNT                          4
451 #define PALM_VERTI_ARRAY_COUNT                          7
452 #define PALM_FLICK_MIN_PALM                                     1
453 #define PALM_FLICK_MIN_BASE_WIDTH                       30
454 #define PALM_FLICK_HORIZ_MAX_BASE_WIDTH         400
455 #define PALM_FLICK_VERTI_MAX_BASE_WIDTH         300
456 #define PALM_FALSE_FLICK_BASE_WIDTH                     8
457 #define PALM_FLICK_TOUCH_MAJOR                          80
458 #define PALM_FLICK_FINGER_MIN_TOUCH_MAJOR       15
459 #define PALM_FLICK_HORIZ_MAX_MOVE_Y                     300
460 #define PALM_FLICK_VERTI_MAX_MOVE_X                     300
461
462 //palm tap
463 #define PALM_MIN_MAJOR                                  200
464 #define PALM_SGL_TAP_TIMEOUT                    200//ms
465 #define PALM_DBL_TAP_TIMEOUT                    300//ms
466 #define PALM_TAP_MIN_DEVIATION                  100
467 #define PALM_TAP_FALSE_DEVIATION                20
468 #define PALM_TAP_FALSE_SIZE                             3
469
470 //palm hold
471 #define PALM_HOLD_TIME_THRESHOLD                        150
472 #define PALM_HOLD_UPDATE_THRESHOLD                      500
473 #define PALM_HOLD_MIN_DEVIATION                         120
474 #define PALM_HOLD_MIN_FINGER                            4
475 #define PALM_HOLD_MIN_BASE_WIDTH                        400
476 #define PALM_HOLD_FALSE_WIDTH                           10
477 #define PALM_HOLD_FINGER_MIN_TOUCH_MAJOR        10
478 #define PALM_HOLD_FINGER_MIN_WIDTH_MAJOR        15
479
480 typedef struct _tagPalmTouchInfo
481 {
482         int touch_status;//One of BTN_RELEASED, BTN_PRESSED and BTN_MOVING
483
484         int x;
485         int y;
486         double wmajor;//Value of valuator ABS_MT_WIDTH_MAJOR
487         double tmajor;//Value of valuator ABS_MT_TOUCH_MAJOR
488         double tminor;//Value of valuator ABS_MT_TOUCH_MINOR
489         double tangle;//Value of valuator ABS_MT_ANGLE
490         double tpalm;//Value of valuator ABS_MT_PALM
491 } PalmTouchInfo, *PalmTouchInfoPtr;
492
493 typedef struct _tagQueuedTouchInfo
494 {
495         int devid;
496         int pressed;
497 }QueuedTouchInfo;
498
499 typedef struct _tagPalmStatus
500 {
501         int palmflag;
502         double sum_size;
503         double max_eccen;
504         double max_angle;
505         double max_wmajor;
506         double max_tmajor;
507         double max_tminor;
508         double biggest_tmajor;
509         double biggest_wmajor;
510         double bigger_wmajor;
511         int max_size_idx;
512         int max_touched;
513         int cur_touched;
514         double dispersionX;
515         double deviationX;
516         double dispersionY;
517         double deviationY;
518         int cx;
519         int cy;
520         int max_palm;
521         int single_timer_expired;
522
523         OsTimerPtr palm_single_finger_timer;
524         PalmTouchInfo pti[MAX_MT_DEVICES];
525         QueuedTouchInfo qti[MAX_MT_DEVICES+1];
526         pixman_region16_t area;
527         pixman_region16_t finger_rects[MAX_MT_DEVICES];
528 } PalmStatus, *PalmStatusPtr;
529
530 typedef struct _tagPalmDrvStatus
531 {
532         int enabled;
533         int scrn_width;
534         int scrn_height;
535         unsigned int half_scrn_area_size;
536         int horiz_coord[PALM_HORIZ_ARRAY_COUNT];
537         int verti_coord[PALM_VERTI_ARRAY_COUNT];
538 } PalmMiscInfo, *PalmMiscInfoPtr;
539
540 #ifdef _F_SUPPORT_BEZEL_FLICK_
541 typedef struct _tagBezelStatus
542 {
543         int width;
544         int height;
545 }BezelStatus, *BezelStatusPtr;
546 typedef struct _tagBezelFlickStatus
547 {
548         int is_active;
549         BezelStatus top_left;
550         BezelStatus top_right;
551         BezelStatus bottom_left;
552         BezelStatus bottom_right;
553         int flick_distance;
554         int bezel_angle_ratio;
555         double min_rad;
556         double max_rad;
557         double min_180_rad;
558         double max_180_rad;
559         int bezel_angle_moving_check;
560         int bezelStatus;
561 }BezelFlickStatus, *BezelFlickStatusPtr;
562 #endif
563
564 typedef struct _GestureDeviceRec
565 {
566         char *device;
567         int version;        /* Driver version */
568         OsTimerPtr device_setting_timer;
569
570         int is_active;
571
572         int pinchrotation_time_threshold;
573         double pinchrotation_dist_threshold;
574         double pinchrotation_angle_threshold;
575
576         int singlefinger_threshold;
577         int singletap_threshold;
578         int doubletap_threshold;
579
580         int touchkey_id;
581         MTSyncType mtsync_status;
582
583         int pass_keycodes[NUM_PASSKEYS];
584
585         WindowPtr pRootWin;
586         Window gestureWin;
587         int num_mt_devices;
588
589         Mask grabMask;
590         Mask eventMask;
591         GestureGrabEventPtr GrabEvents;
592         Mask lastSelectedMask;
593         Window lastSelectedWin;
594
595         EventHandleType ehtype;
596         IEventPtr       EQ;
597         int headEQ;
598         int tailEQ;
599
600         int hold_detector_activate;
601         int has_hold_grabmask;
602         pixman_region16_t chold_area;
603         CurTouchStatus cts[MAX_MT_DEVICES];
604
605         PalmStatus palm;
606         PalmMiscInfo palm_misc;
607         int wmajor_idx;
608         int tmajor_idx;
609         int tminor_idx;
610         int tangle_idx;
611         int tpalm_idx;
612         int mt_px_idx;
613         int mt_py_idx;
614
615         pixman_region16_t area;
616         pixman_region16_t finger_rects[MAX_MT_DEVICES];
617
618         WindowPtr pTempWin;
619         WindowPtr pTempPalmWin;
620         int inc_num_pressed;
621
622         int first_fingerid;
623         int num_pressed;
624         int zoom_enabled;
625         int enqueue_fulled;
626         int tap_repeated;
627         TouchStatus fingers[MAX_MT_DEVICES];
628
629         int event_sum[MAX_MT_DEVICES];
630         uint32_t recognized_gesture;
631         uint32_t filter_mask;
632         uint32_t palm_filter_mask;
633         uint32_t recognized_palm;
634 #ifdef _F_SUPPORT_BEZEL_FLICK_
635         uint32_t bezel_filter_mask;
636         uint32_t bezel_recognized_mask;
637 #endif
638
639         DeviceIntPtr this_device;
640         DeviceIntPtr mt_devices[MAX_MT_DEVICES];
641         DeviceIntPtr master_pointer;
642         DeviceIntPtr xtest_pointer;
643 #ifdef _F_SUPPORT_BEZEL_FLICK_
644         BezelFlickStatus bezel;
645 #endif
646 } GestureDeviceRec, *GestureDevicePtr ;
647
648 #endif//_GESTURE_H_