1 #ifndef EFL_GESTURE_PRIVATE_H_
2 #define EFL_GESTURE_PRIVATE_H_
3 
4 #include "evas_common_private.h"
5 #include "evas_private.h"
6 
7 #include "efl_canvas_gesture_events.eo.h"
8 
9 #include <Ecore.h>
10 
11 /* milliseconds */
12 #define TAP_TOUCH_TIME_THRESHOLD (0.1 * 1000)
13 
14 int _direction_get(Evas_Coord xx1, Evas_Coord xx2);
15 Eina_Value *_recognizer_config_get(const Eo *obj, const char *name);
16 Eina_Bool _event_multi_touch_get(const Efl_Canvas_Gesture_Touch *event);
17 
18 double _angle_get(Evas_Coord xx1, Evas_Coord yy1, Evas_Coord xx2, Evas_Coord yy2);
19 Evas_Coord _finger_gap_length_get(Evas_Coord xx1, Evas_Coord yy1, Evas_Coord xx2, Evas_Coord yy2, Evas_Coord *x, Evas_Coord *y);
20 
21 typedef struct _Efl_Canvas_Gesture_Manager_Data                Efl_Canvas_Gesture_Manager_Data;
22 typedef struct _Efl_Canvas_Gesture_Recognizer_Data             Efl_Canvas_Gesture_Recognizer_Data;
23 typedef struct _Efl_Canvas_Gesture_Recognizer_Tap_Data         Efl_Canvas_Gesture_Recognizer_Tap_Data;
24 typedef struct _Efl_Canvas_Gesture_Recognizer_Long_Press_Data    Efl_Canvas_Gesture_Recognizer_Long_Press_Data;
25 typedef struct _Efl_Canvas_Gesture_Recognizer_Double_Tap_Data  Efl_Canvas_Gesture_Recognizer_Double_Tap_Data;
26 typedef struct _Efl_Canvas_Gesture_Recognizer_Triple_Tap_Data  Efl_Canvas_Gesture_Recognizer_Triple_Tap_Data;
27 typedef struct _Efl_Canvas_Gesture_Recognizer_Momentum_Data    Efl_Canvas_Gesture_Recognizer_Momentum_Data;
28 typedef struct _Efl_Canvas_Gesture_Recognizer_Flick_Data       Efl_Canvas_Gesture_Recognizer_Flick_Data;
29 typedef struct _Efl_Canvas_Gesture_Recognizer_Rotate_Data        Efl_Canvas_Gesture_Recognizer_Rotate_Data;
30 typedef struct _Efl_Canvas_Gesture_Recognizer_Zoom_Data        Efl_Canvas_Gesture_Recognizer_Zoom_Data;
31 typedef struct _Efl_Canvas_Gesture_Recognizer_Custom_Data        Efl_Canvas_Gesture_Recognizer_Custom_Data;
32 typedef struct _Efl_Canvas_Gesture_Data                        Efl_Canvas_Gesture_Data;
33 typedef struct _Efl_Canvas_Gesture_Momentum_Data               Efl_Canvas_Gesture_Momentum_Data;
34 typedef struct _Efl_Canvas_Gesture_Flick_Data                  Efl_Canvas_Gesture_Flick_Data;
35 typedef struct _Efl_Canvas_Gesture_Zoom_Data                   Efl_Canvas_Gesture_Zoom_Data;
36 typedef struct _Efl_Canvas_Gesture_Rotate_Data                   Efl_Canvas_Gesture_Rotate_Data;
37 typedef struct _Efl_Canvas_Gesture_Custom_Data                 Efl_Canvas_Gesture_Custom_Data;
38 
39 typedef struct _Efl_Canvas_Gesture_Touch_Data
40 {
41    Efl_Canvas_Gesture_Touch_State state;
42    Eina_Array             *touch_points;
43    Efl_Gesture_Touch_Point_Data *cur_touch;
44    Efl_Gesture_Touch_Point_Data *prev_touch;
45    Eo                     *target;
46    int                     touch_down;
47 } Efl_Canvas_Gesture_Touch_Data;
48 
49 struct _Efl_Canvas_Gesture_Recognizer_Data
50 {
51    Eina_Bool                      continues;
52 };
53 
54 struct _Efl_Canvas_Gesture_Recognizer_Tap_Data
55 {
56    Eo                             *target;
57    Eo                             *gesture;
58    Ecore_Timer                    *timeout;
59    int                            finger_size;
60 };
61 
62 struct _Efl_Canvas_Gesture_Recognizer_Long_Press_Data
63 {
64    double                          start_timeout;
65    Eina_List                      *target_timeout;
66    Eo                             *target;
67    Efl_Canvas_Gesture             *gesture;
68    Ecore_Timer                    *timeout;
69    int                            finger_size;
70    Eina_Bool                       is_timeout;
71 };
72 
73 struct _Efl_Canvas_Gesture_Recognizer_Double_Tap_Data
74 {
75    double                          start_timeout;
76    Eina_List                      *target_timeout;
77    Eo                             *target;
78    Eo                             *gesture;
79    Ecore_Timer                    *timeout;
80    int                             tap_count;
81    int                            finger_size;
82    Eina_Bool                       is_timeout;
83 };
84 
85 struct _Efl_Canvas_Gesture_Recognizer_Triple_Tap_Data
86 {
87    double                          start_timeout;
88    Eina_List                      *target_timeout;
89    Eo                             *target;
90    Eo                             *gesture;
91    Ecore_Timer                    *timeout;
92    int                             tap_count;
93    int                            finger_size;
94    Eina_Bool                       is_timeout;
95 };
96 
97 struct _Efl_Canvas_Gesture_Recognizer_Momentum_Data
98 {
99    Eina_Position2D                 st_line;
100    Eina_Position2D                 end_line;
101    unsigned int                    t_st;
102    unsigned int                    t_end;
103    int                             xdir;
104    int                             ydir;
105    Eina_Bool                       touched;
106 };
107 
108 struct _Efl_Canvas_Gesture_Recognizer_Flick_Data
109 {
110    double                          line_angle;
111    Eina_Position2D                 st_line;
112    unsigned int                    t_st;
113    unsigned int                    t_end;
114    int                             line_length;
115    int                            finger_size;
116    Eina_Bool                       touched;
117 };
118 
119 struct _Efl_Canvas_Gesture_Recognizer_Rotate_Data
120 {
121    Efl_Gesture_Touch_Point_Data                    rotate_st;
122    Efl_Gesture_Touch_Point_Data                    rotate_st1;
123 
124    Efl_Gesture_Touch_Point_Data                    rotate_mv;
125    Efl_Gesture_Touch_Point_Data                    rotate_mv1;
126    double                  rotate_step;
127    double     base_angle; /**< Holds start-angle */
128    double                  prev_momentum; /* Snapshot of momentum 0.01
129                                            * sec ago */
130    double                  accum_momentum;
131    double                  rotate_angular_tolerance;
132    double                  next_step;
133    unsigned int            prev_momentum_tm; /* timestamp of prev_momentum */
134    int                            finger_size;
135 };
136 
137 struct _Efl_Canvas_Gesture_Recognizer_Zoom_Data
138 {
139    Efl_Gesture_Touch_Point_Data                    zoom_st;
140    Efl_Gesture_Touch_Point_Data                    zoom_st1;
141 
142    Efl_Gesture_Touch_Point_Data                    zoom_mv;
143    Efl_Gesture_Touch_Point_Data                    zoom_mv1;
144 
145    double                          zoom_distance_tolerance;
146    double                          zoom_finger_factor;
147    double                          zoom_step;
148    double                          next_step;
149 
150    Evas_Coord                      zoom_base; /* Holds gap between fingers on
151 							                   * zoom-start  */
152    int                            finger_size;
153    Eina_Bool                       calc_temp;
154 };
155 
156 struct _Efl_Canvas_Gesture_Recognizer_Custom_Data
157 {
158    Eina_Stringshare *name;
159 };
160 
161 struct _Efl_Canvas_Gesture_Data
162 {
163    Efl_Canvas_Gesture_State        state;
164    Eina_Position2D                 hotspot;
165    unsigned int                    timestamp;
166    unsigned int                    touch_count;
167 };
168 
169 struct _Efl_Canvas_Gesture_Momentum_Data
170 {
171    Eina_Vector2                    momentum;
172    int id;
173 };
174 
175 struct _Efl_Canvas_Gesture_Flick_Data
176 {
177    Eina_Vector2                    momentum;
178    double                          angle;
179    int id;
180 };
181 
182 struct _Efl_Canvas_Gesture_Rotate_Data
183 {
184    //Evas_Coord x, y; /**< Holds rotate center point reported to user      */
185    double     angle; /**< Rotation value: 0.0 means no rotation         */
186    double     momentum; /**< Rotation momentum: rotation done per second (NOT YET SUPPORTED) */
187    Evas_Coord radius; /**< Holds radius between fingers reported to user */
188 };
189 
190 struct _Efl_Canvas_Gesture_Zoom_Data
191 {
192    double                          radius;
193    double                          zoom;
194 };
195 
196 struct _Efl_Canvas_Gesture_Custom_Data
197 {
198    Eina_Stringshare *gesture_name;
199 };
200 
201 #endif
202