1 #ifdef HAVE_CONFIG_H
2 # include "elementary_config.h"
3 #endif
4 #include <Elementary.h>
5
6 #define TAP_NAME "tap"
7 #define DOUBLE_TAP_NAME "double_tap"
8 #define TRIPLE_TAP_NAME "triple_tap"
9 #define LONG_TAP_NAME "long_tap"
10 #define FLICK_NAME "flick"
11 #define LINE_NAME "line"
12 #define MOMENTUM_NAME "momentum"
13 #define ROTATE_NAME "rotate"
14 #define ZOOM_NAME "zoom"
15
16 #define N_GESTURE_TYPE 9
17 #define MAX_DOUBLE_TAP 5
18 #define MAX_FLICK 5
19 #define MAX_LINE 5
20 #define MAX_LONG_TAP 5
21 #define MAX_MOMENTUM 5
22 #define MAX_ROTATE 1
23 #define MAX_TAP 5
24 #define MAX_TRIPLE_TAP 5
25 #define MAX_ZOOM 1
26
27 #define TB_PADDING_X 4
28 #define TB_PADDING_Y 12
29
30 #define BX_PADDING_X 0
31 #define BX_PADDING_Y 2
32
33 /* Define initial RGBA values for icons */
34 #define INI_R 60
35 #define INI_G 66
36 #define INI_B 64
37 #define INI_A 128
38 #define COLOR_STEP 4
39
40 #define START_COLOR 220, 220, 200, 255
41 #define MOVE_COLOR 255, 255, 0, 255
42 #define ABORT_COLOR 255, 0, 0, 255
43 #define END_COLOR 0, 255, 0, 255
44
45 struct _icon_properties
46 {
47 Evas_Object *icon;
48 int r; /* current r */
49 int g;
50 int b;
51 int a;
52
53 const char *name;
54 };
55 typedef struct _icon_properties icon_properties;
56
57 struct _infra_data
58 { /* Some data that is passed aroung between callbacks (replacing globals) */
59 icon_properties *icons;
60 Ecore_Timer *colortimer;
61 char buf[1024];
62 int long_tap_count;
63 };
64 typedef struct _infra_data infra_data;
65
66 void
_infra_data_free(infra_data * infra)67 _infra_data_free(infra_data *infra)
68 {
69 if (infra)
70 {
71 if (infra->colortimer)
72 ecore_timer_del(infra->colortimer);
73
74 if (infra->icons)
75 free(infra->icons);
76
77 free (infra);
78 }
79 }
80
81 infra_data *
_infra_data_alloc(void)82 _infra_data_alloc(void)
83 {
84 infra_data *infra = malloc(sizeof(infra_data));
85 if (!infra) return NULL;
86
87 infra->icons = calloc(N_GESTURE_TYPE, sizeof(icon_properties ));
88 infra->colortimer = NULL;
89
90 return infra;
91 }
92
93 static void
my_win_del(void * data,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)94 my_win_del(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
95 { /* called when my_win_main is requested to be deleted */
96 _infra_data_free(data);
97 }
98
99 icon_properties *
_icon_properties_find(icon_properties * icons,char * name)100 _icon_properties_find(icon_properties *icons, char *name)
101 {
102 int n;
103
104 for (n = 0; n < N_GESTURE_TYPE; n++)
105 if (!strcmp(icons[n].name, name))
106 return &icons[n];
107
108 return NULL;
109 }
110
111 void
_icon_color_set(icon_properties * i,int r,int g,int b,int a)112 _icon_color_set(icon_properties *i, int r, int g, int b, int a)
113 {
114 i->r = r;
115 i->g = g;
116 i->b = b;
117 i->a = a;
118 evas_object_color_set(i->icon, i->r, i->g, i->b, i->a);
119 }
120
121 static Eina_Bool
_icon_color_set_cb(void * data)122 _icon_color_set_cb(void *data)
123 {
124 #define INC_COLOR(C, NC) \
125 do { \
126 if (abs(i->C - NC) < COLOR_STEP) \
127 i->C = NC; \
128 else \
129 i->C += ((i->C < NC) ? COLOR_STEP : (-COLOR_STEP)); \
130 } while (0)
131
132 int n;
133 icon_properties *icons = data;
134 icon_properties *i;
135
136 for (n = 0; n < N_GESTURE_TYPE; n++)
137 {
138 i = &icons[n];
139
140 INC_COLOR(r,INI_R);
141 INC_COLOR(g,INI_G);
142 INC_COLOR(b,INI_B);
143 INC_COLOR(a,INI_A);
144
145 /* Change Icon color */
146 evas_object_color_set(i->icon, i->r, i->g, i->b, i->a);
147 }
148
149 return ECORE_CALLBACK_RENEW;
150 }
151
152 void
_color_and_icon_set(infra_data * infra,char * name,int n,int max,int r,int g,int b,int a)153 _color_and_icon_set(infra_data *infra, char *name, int n, int max,
154 int r, int g, int b, int a)
155 {
156 icon_properties *i;
157 int nn = n;
158 i = _icon_properties_find(infra->icons, name);
159 if (i)
160 {
161 if (n < 1)
162 nn = 1;
163
164 if (n > max)
165 nn = max;
166
167 snprintf(infra->buf, sizeof(infra->buf),
168 "%s/images/g_layer/%s_%d.png", elm_app_data_dir_get(), i->name, nn);
169 elm_image_file_set(i->icon, infra->buf, NULL);
170 _icon_color_set(i, r, g, b, a);
171 }
172 }
173
174 /* START - Callbacks for gestures */
175 static Evas_Event_Flags
n_finger_tap_start(void * data,void * event_info)176 n_finger_tap_start(void *data , void *event_info)
177 {
178 Elm_Gesture_Taps_Info *p = (Elm_Gesture_Taps_Info *) event_info;
179 _color_and_icon_set(data, TAP_NAME, p->n, MAX_TAP, START_COLOR);
180 printf("N tap started <%p> x,y=<%d,%d> count=<%d>\n",
181 event_info, p->x, p->y, p->n);
182 return EVAS_EVENT_FLAG_ON_HOLD;
183 }
184
185 static Evas_Event_Flags
n_finger_tap_end(void * data,void * event_info)186 n_finger_tap_end(void *data , void *event_info)
187 {
188 Elm_Gesture_Taps_Info *p = (Elm_Gesture_Taps_Info *) event_info;
189
190 printf("N tap ended <%p> x,y=<%d,%d> count=<%d>\n",
191 event_info, p->x, p->y, p->n);
192 _color_and_icon_set(data, TAP_NAME, p->n, MAX_TAP, END_COLOR);
193 return EVAS_EVENT_FLAG_ON_HOLD;
194 }
195
196 static Evas_Event_Flags
n_finger_tap_abort(void * data,void * event_info)197 n_finger_tap_abort(void *data , void *event_info)
198 {
199 Elm_Gesture_Taps_Info *p = (Elm_Gesture_Taps_Info *) event_info;
200 printf("N tap abort\n");
201 _color_and_icon_set(data, TAP_NAME, p->n, MAX_TAP, ABORT_COLOR);
202 return EVAS_EVENT_FLAG_ON_HOLD;
203 }
204
205 static Evas_Event_Flags
n_long_tap_start(void * data,void * event_info)206 n_long_tap_start(void *data , void *event_info)
207 {
208 Elm_Gesture_Taps_Info *p = (Elm_Gesture_Taps_Info *) event_info;
209 infra_data *infra = data;
210
211 printf("N long tap started <%p> x,y=<%d,%d> count=<%d>\n",
212 event_info, p->x, p->y, p->n);
213 _color_and_icon_set(data, LONG_TAP_NAME, p->n, MAX_LONG_TAP, START_COLOR);
214 infra->long_tap_count = 0;
215 return EVAS_EVENT_FLAG_ON_HOLD;
216 }
217
218 static Evas_Event_Flags
n_long_tap_move(void * data,void * event_info)219 n_long_tap_move(void *data , void *event_info)
220 {
221 Elm_Gesture_Taps_Info *p = (Elm_Gesture_Taps_Info *) event_info;
222 infra_data *infra = data;
223
224 infra->long_tap_count++;
225 _color_and_icon_set(data, LONG_TAP_NAME, p->n, MAX_LONG_TAP, MOVE_COLOR);
226
227 printf("N long tap moved <%p> x,y=<%d,%d> count=<%d>\n",
228 event_info, p->x, p->y, p->n);
229 if (infra->long_tap_count == 1)
230 printf("This is a first long tap.\n");
231
232 return EVAS_EVENT_FLAG_ON_HOLD;
233 }
234
235 static Evas_Event_Flags
n_long_tap_end(void * data,void * event_info)236 n_long_tap_end(void *data , void *event_info)
237 {
238 Elm_Gesture_Taps_Info *p = (Elm_Gesture_Taps_Info *) event_info;
239
240 printf("N long tap ended <%p> x,y=<%d,%d> count=<%d>\n",
241 event_info, p->x, p->y, p->n);
242 _color_and_icon_set(data, LONG_TAP_NAME, p->n, MAX_LONG_TAP, END_COLOR);
243 return EVAS_EVENT_FLAG_ON_HOLD;
244 }
245
246 static Evas_Event_Flags
n_long_tap_abort(void * data,void * event_info)247 n_long_tap_abort(void *data , void *event_info)
248 {
249 Elm_Gesture_Taps_Info *p = (Elm_Gesture_Taps_Info *) event_info;
250 _color_and_icon_set(data, LONG_TAP_NAME, p->n, MAX_LONG_TAP, ABORT_COLOR);
251 printf("N long tap abort\n");
252 return EVAS_EVENT_FLAG_ON_HOLD;
253 }
254
255 static Evas_Event_Flags
dbl_click_start(void * data,void * event_info)256 dbl_click_start(void *data , void *event_info)
257 {
258 Elm_Gesture_Taps_Info *p = (Elm_Gesture_Taps_Info *) event_info;
259
260 _color_and_icon_set(data,DOUBLE_TAP_NAME, p->n, MAX_DOUBLE_TAP, START_COLOR);
261 printf("Double click started <%p> x,y=<%d,%d> count=<%d>\n",
262 event_info, p->x, p->y, p->n);
263 return EVAS_EVENT_FLAG_ON_HOLD;
264 }
265
266 static Evas_Event_Flags
dbl_click_move(void * data,void * event_info)267 dbl_click_move(void *data , void *event_info)
268 {
269 Elm_Gesture_Taps_Info *p = (Elm_Gesture_Taps_Info *) event_info;
270 _color_and_icon_set(data, DOUBLE_TAP_NAME, p->n, MAX_DOUBLE_TAP, MOVE_COLOR);
271
272 printf("Double click move <%p> x,y=<%d,%d> count=<%d>\n",
273 event_info, p->x, p->y, p->n);
274 return EVAS_EVENT_FLAG_ON_HOLD;
275 }
276
277 static Evas_Event_Flags
dbl_click_end(void * data,void * event_info)278 dbl_click_end(void *data , void *event_info)
279 {
280 Elm_Gesture_Taps_Info *p = (Elm_Gesture_Taps_Info *) event_info;
281 _color_and_icon_set(data, DOUBLE_TAP_NAME, p->n, MAX_DOUBLE_TAP, END_COLOR);
282
283 printf("Double click ended <%p> x,y=<%d,%d> count=<%d>\n",
284 event_info, p->x, p->y, p->n);
285 return EVAS_EVENT_FLAG_ON_HOLD;
286 }
287
288 static Evas_Event_Flags
dbl_click_abort(void * data,void * event_info)289 dbl_click_abort(void *data , void *event_info)
290 {
291 Elm_Gesture_Taps_Info *p = (Elm_Gesture_Taps_Info *) event_info;
292 _color_and_icon_set(data,DOUBLE_TAP_NAME, p->n, MAX_DOUBLE_TAP, ABORT_COLOR);
293
294 printf("Double click abort\n");
295 return EVAS_EVENT_FLAG_ON_HOLD;
296 }
297
298 static Evas_Event_Flags
triple_click_start(void * data,void * event_info)299 triple_click_start(void *data , void *event_info)
300 {
301 Elm_Gesture_Taps_Info *p = (Elm_Gesture_Taps_Info *) event_info;
302 _color_and_icon_set(data,TRIPLE_TAP_NAME, p->n, MAX_TRIPLE_TAP, START_COLOR);
303
304 printf("Triple click started <%p> x,y=<%d,%d> count=<%d>\n",
305 event_info, p->x, p->y, p->n);
306 return EVAS_EVENT_FLAG_ON_HOLD;
307 }
308
309 static Evas_Event_Flags
triple_click_move(void * data,void * event_info)310 triple_click_move(void *data , void *event_info)
311 {
312 Elm_Gesture_Taps_Info *p = (Elm_Gesture_Taps_Info *) event_info;
313
314 _color_and_icon_set(data, TRIPLE_TAP_NAME, p->n, MAX_TRIPLE_TAP, MOVE_COLOR);
315 printf("Triple click move <%p> x,y=<%d,%d> count=<%d>\n",
316 event_info, p->x, p->y, p->n);
317 return EVAS_EVENT_FLAG_ON_HOLD;
318 }
319
320 static Evas_Event_Flags
triple_click_end(void * data,void * event_info)321 triple_click_end(void *data , void *event_info)
322 {
323 Elm_Gesture_Taps_Info *p = (Elm_Gesture_Taps_Info *) event_info;
324
325 _color_and_icon_set(data, TRIPLE_TAP_NAME, p->n, MAX_TRIPLE_TAP, END_COLOR);
326 printf("Triple click ended <%p> x,y=<%d,%d> count=<%d>\n",
327 event_info, p->x, p->y, p->n);
328 return EVAS_EVENT_FLAG_ON_HOLD;
329 }
330
331 static Evas_Event_Flags
triple_click_abort(void * data,void * event_info)332 triple_click_abort(void *data , void *event_info)
333 {
334 Elm_Gesture_Taps_Info *p = (Elm_Gesture_Taps_Info *) event_info;
335 _color_and_icon_set(data,TRIPLE_TAP_NAME, p->n, MAX_TRIPLE_TAP, ABORT_COLOR);
336
337 printf("Triple click abort\n");
338 return EVAS_EVENT_FLAG_ON_HOLD;
339 }
340
341 static Evas_Event_Flags
momentum_start(void * data,void * event_info)342 momentum_start(void *data , void *event_info)
343 {
344 Elm_Gesture_Momentum_Info *p = (Elm_Gesture_Momentum_Info *) event_info;
345 _color_and_icon_set(data, MOMENTUM_NAME, p->n, MAX_MOMENTUM, START_COLOR);
346
347 printf("momentum started x1,y1=<%d,%d> tx,ty=<%u,%u> n=<%u>\n",
348 p->x1, p->y1, p->tx, p->ty, p->n);
349 return EVAS_EVENT_FLAG_ON_HOLD;
350 }
351
352 static Evas_Event_Flags
momentum_end(void * data,void * event_info)353 momentum_end(void *data , void *event_info)
354 {
355 Elm_Gesture_Momentum_Info *p = (Elm_Gesture_Momentum_Info *) event_info;
356 _color_and_icon_set(data, MOMENTUM_NAME, p->n, MAX_MOMENTUM, END_COLOR);
357 printf("momentum ended x1,y1=<%d,%d> x2,y2=<%d,%d> tx,ty=<%u,%u> mx=<%d> my=<%d> n=<%u>\n",p->x1, p->y1, p->x2, p->y2, p->tx, p->ty, p->mx, p->my, p->n);
358 return EVAS_EVENT_FLAG_ON_HOLD;
359 }
360
361 static Evas_Event_Flags
momentum_abort(void * data,void * event_info)362 momentum_abort(void *data , void *event_info)
363 {
364 Elm_Gesture_Momentum_Info *p = (Elm_Gesture_Momentum_Info *) event_info;
365 printf("momentum abort\n");
366 _color_and_icon_set(data, MOMENTUM_NAME, p->n, MAX_MOMENTUM, ABORT_COLOR);
367 return EVAS_EVENT_FLAG_ON_HOLD;
368 }
369
370 static Evas_Event_Flags
momentum_move(void * data,void * event_info)371 momentum_move(void *data , void *event_info)
372 {
373 Elm_Gesture_Momentum_Info *p = (Elm_Gesture_Momentum_Info *) event_info;
374 _color_and_icon_set(data, MOMENTUM_NAME, p->n, MAX_MOMENTUM, MOVE_COLOR);
375 printf("momentum move x1,y1=<%d,%d> x2,y2=<%d,%d> tx,ty=<%u,%u> mx=<%d> my=<%d> n=<%u>\n", p->x1, p->y1, p->x2, p->y2, p->tx, p->ty, p->mx, p->my, p->n);
376 return EVAS_EVENT_FLAG_ON_HOLD;
377 }
378
379 static Evas_Event_Flags
line_start(void * data,void * event_info)380 line_start(void *data , void *event_info)
381 {
382 Elm_Gesture_Line_Info *p = (Elm_Gesture_Line_Info *) event_info;
383 _color_and_icon_set(data, LINE_NAME, p->momentum.n, MAX_LINE, START_COLOR);
384
385 printf("line started x1,y1=<%d,%d> x2,y2=<%d,%d> tx,ty=<%u,%u> n=<%u>\n", p->momentum.x1, p->momentum.y1, p->momentum.x2, p->momentum.y2, p->momentum.tx, p->momentum.ty, p->momentum.n);
386 return EVAS_EVENT_FLAG_ON_HOLD;
387 }
388
389 static Evas_Event_Flags
line_move(void * data,void * event_info)390 line_move(void *data , void *event_info)
391 {
392 Elm_Gesture_Line_Info *p = (Elm_Gesture_Line_Info *) event_info;
393 _color_and_icon_set(data, LINE_NAME, p->momentum.n, MAX_LINE, MOVE_COLOR);
394 printf("line move x1,y1=<%d,%d> x2,y2=<%d,%d> tx,ty=<%u,%u> n=<%u>\n", p->momentum.x1, p->momentum.y1, p->momentum.x2, p->momentum.y2, p->momentum.tx, p->momentum.ty, p->momentum.n);
395
396 return EVAS_EVENT_FLAG_ON_HOLD;
397 }
398
399 static Evas_Event_Flags
line_end(void * data,void * event_info)400 line_end(void *data , void *event_info)
401 {
402 Elm_Gesture_Line_Info *p = (Elm_Gesture_Line_Info *) event_info;
403 _color_and_icon_set(data, LINE_NAME, p->momentum.n, MAX_LINE, END_COLOR);
404 printf("line end x1,y1=<%d,%d> x2,y2=<%d,%d> tx,ty=<%u,%u> n=<%u>\n", p->momentum.x1, p->momentum.y1, p->momentum.x2, p->momentum.y2, p->momentum.tx, p->momentum.ty, p->momentum.n);
405 return EVAS_EVENT_FLAG_ON_HOLD;
406 }
407
408 static Evas_Event_Flags
line_abort(void * data,void * event_info)409 line_abort(void *data , void *event_info)
410 {
411 Elm_Gesture_Line_Info *p = (Elm_Gesture_Line_Info *) event_info;
412 _color_and_icon_set(data, LINE_NAME, p->momentum.n, MAX_LINE, ABORT_COLOR);
413 printf("line abort\n");
414 return EVAS_EVENT_FLAG_ON_HOLD;
415 }
416
417 static Evas_Event_Flags
flick_start(void * data,void * event_info)418 flick_start(void *data , void *event_info)
419 {
420 Elm_Gesture_Line_Info *p = (Elm_Gesture_Line_Info *) event_info;
421 _color_and_icon_set(data, FLICK_NAME, p->momentum.n, MAX_FLICK, START_COLOR);
422
423 printf("flick started x1,y1=<%d,%d> tx,ty=<%u,%u> n=<%u>\n",
424 p->momentum.x1, p->momentum.y1, p->momentum.tx,
425 p->momentum.ty, p->momentum.n);
426 return EVAS_EVENT_FLAG_ON_HOLD;
427 }
428
429 static Evas_Event_Flags
flick_end(void * data,void * event_info)430 flick_end(void *data , void *event_info)
431 {
432 Elm_Gesture_Line_Info *p = (Elm_Gesture_Line_Info *) event_info;
433 _color_and_icon_set(data, FLICK_NAME, p->momentum.n, MAX_FLICK, END_COLOR);
434
435 printf("flick ended x1,y1=<%d,%d> x2,y2=<%d,%d> tx,ty=<%u,%u> mx=<%d> my=<%d> n=<%u>\n",p->momentum.x1, p->momentum.y1, p->momentum.x2, p->momentum.y2, p->momentum.tx, p->momentum.ty, p->momentum.mx, p->momentum.my, p->momentum.n);
436 return EVAS_EVENT_FLAG_ON_HOLD;
437 }
438
439 static Evas_Event_Flags
flick_abort(void * data,void * event_info)440 flick_abort(void *data , void *event_info)
441 {
442 Elm_Gesture_Line_Info *p = (Elm_Gesture_Line_Info *) event_info;
443 _color_and_icon_set(data, FLICK_NAME, p->momentum.n, MAX_FLICK, ABORT_COLOR);
444 printf("flick abort\n");
445 return EVAS_EVENT_FLAG_ON_HOLD;
446 }
447
448 static Evas_Event_Flags
zoom_start(void * data,void * event_info)449 zoom_start(void *data , void *event_info)
450 {
451 Elm_Gesture_Zoom_Info *p = (Elm_Gesture_Zoom_Info *) event_info;
452 _color_and_icon_set(data, ZOOM_NAME, MAX_ZOOM, MAX_ZOOM, START_COLOR);
453 printf("zoom started <%d,%d> zoom=<%f> radius=<%d> momentum=<%f>\n",
454 p->x, p->y, p->zoom, p->radius, p->momentum);
455 return EVAS_EVENT_FLAG_ON_HOLD;
456 }
457
458 static Evas_Event_Flags
zoom_move(void * data,void * event_info)459 zoom_move(void *data , void *event_info)
460 {
461 Elm_Gesture_Zoom_Info *p = (Elm_Gesture_Zoom_Info *) event_info;
462 _color_and_icon_set(data, ZOOM_NAME, MAX_ZOOM, MAX_ZOOM, MOVE_COLOR);
463 printf("zoom move <%d,%d> zoom=<%f> radius=<%d> momentum=<%f>\n",
464 p->x, p->y, p->zoom, p->radius, p->momentum);
465 return EVAS_EVENT_FLAG_ON_HOLD;
466 }
467
468 static Evas_Event_Flags
zoom_end(void * data,void * event_info)469 zoom_end(void *data , void *event_info)
470 {
471 Elm_Gesture_Zoom_Info *p = (Elm_Gesture_Zoom_Info *) event_info;
472 _color_and_icon_set(data, ZOOM_NAME, MAX_ZOOM, MAX_ZOOM, END_COLOR);
473 printf("zoom end <%d,%d> zoom=<%f> radius=<%d> momentum=<%f>\n",
474 p->x, p->y, p->zoom, p->radius, p->momentum);
475 return EVAS_EVENT_FLAG_ON_HOLD;
476 }
477
478 static Evas_Event_Flags
zoom_abort(void * data,void * event_info EINA_UNUSED)479 zoom_abort(void *data , void *event_info EINA_UNUSED)
480 {
481 printf("zoom abort\n");
482 _color_and_icon_set(data, ZOOM_NAME, MAX_ZOOM, MAX_ZOOM, ABORT_COLOR);
483 return EVAS_EVENT_FLAG_ON_HOLD;
484 }
485
486 static Evas_Event_Flags
rotate_start(void * data,void * event_info)487 rotate_start(void *data , void *event_info)
488 {
489 Elm_Gesture_Rotate_Info *p = (Elm_Gesture_Rotate_Info *) event_info;
490 _color_and_icon_set(data, ROTATE_NAME, MAX_ROTATE, MAX_ROTATE, START_COLOR);
491 printf("rotate started <%d,%d> base=<%f> angle=<%f> radius=<%d> momentum=<%f>\n", p->x, p->y, p->base_angle, p->angle, p->radius, p->momentum);
492 return EVAS_EVENT_FLAG_ON_HOLD;
493 }
494
495 static Evas_Event_Flags
rotate_move(void * data,void * event_info)496 rotate_move(void *data , void *event_info)
497 {
498 Elm_Gesture_Rotate_Info *p = (Elm_Gesture_Rotate_Info *) event_info;
499 _color_and_icon_set(data, ROTATE_NAME, MAX_ROTATE, MAX_ROTATE, MOVE_COLOR);
500 printf("rotate move <%d,%d> base=<%f> angle=<%f> radius=<%d> momentum=<%f>\n", p->x, p->y, p->base_angle, p->angle, p->radius, p->momentum);
501 return EVAS_EVENT_FLAG_ON_HOLD;
502 }
503
504 static Evas_Event_Flags
rotate_end(void * data,void * event_info)505 rotate_end(void *data , void *event_info)
506 {
507 Elm_Gesture_Rotate_Info *p = (Elm_Gesture_Rotate_Info *) event_info;
508 _color_and_icon_set(data, ROTATE_NAME, MAX_ROTATE, MAX_ROTATE, END_COLOR);
509 printf("rotate end <%d,%d> base=<%f> angle=<%f> radius=<%d> momentum=<%f>\n", p->x, p->y, p->base_angle, p->angle, p->radius, p->momentum);
510 return EVAS_EVENT_FLAG_ON_HOLD;
511 }
512
513 static Evas_Event_Flags
rotate_abort(void * data,void * event_info EINA_UNUSED)514 rotate_abort(void *data , void *event_info EINA_UNUSED)
515 {
516 _color_and_icon_set(data, ROTATE_NAME, MAX_ROTATE, MAX_ROTATE, ABORT_COLOR);
517 printf("rotate abort\n");
518 return EVAS_EVENT_FLAG_ON_HOLD;
519 }
520 /* END - Callbacks for gestures */
521
create_gesture_box(Evas_Object * win,icon_properties * icons,int idx,const char * name,const char * lb_txt)522 Evas_Object *create_gesture_box(Evas_Object *win, icon_properties *icons,
523 int idx, const char *name, const char *lb_txt)
524 { /* Creates a box with icon and label, later placed in a table */
525 Evas_Object *lb, *bx = elm_box_add(win);
526 char buf[1024];
527
528 elm_box_padding_set(bx, BX_PADDING_X, BX_PADDING_Y);
529 icons[idx].icon = elm_icon_add(win);
530 icons[idx].name = name;
531 snprintf(buf, sizeof(buf), "%s/images/g_layer/%s_1.png",
532 elm_app_data_dir_get(), icons[idx].name);
533 elm_image_file_set(icons[idx].icon, buf, NULL);
534 elm_image_resizable_set(icons[idx].icon, EINA_FALSE, EINA_FALSE);
535 evas_object_size_hint_align_set(icons[idx].icon, 0.5, 0.5);
536 _icon_color_set(&icons[idx], INI_R, INI_G, INI_B, INI_A);
537 elm_box_pack_end(bx, icons[idx].icon);
538 evas_object_show(icons[idx].icon);
539
540 lb = elm_label_add(win);
541 elm_object_text_set(lb, lb_txt);
542 evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
543 evas_object_size_hint_align_set(lb, 0.5, 0.5);
544 elm_box_pack_end(bx, lb);
545 evas_object_show(lb);
546 evas_object_show(bx);
547
548 return bx;
549 }
550
551 void
test_gesture_layer2(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)552 test_gesture_layer2(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
553 void *event_info EINA_UNUSED)
554 {
555 Evas_Object *win, *tb, *lb, *bx;
556 Evas_Object *r; /* Gesture layer transparent object */
557 Evas_Object *g; /* The Gesture Layer object */
558
559 infra_data *infra = _infra_data_alloc();
560
561 win = elm_win_util_standard_add("gesture-layer2", "Gesture Layer 2");
562 elm_win_autodel_set(win, EINA_TRUE);
563 evas_object_smart_callback_add(win, "delete,request", my_win_del, infra);
564
565 /* START - Building icons table */
566 bx = elm_box_add(win);
567 tb = elm_table_add(win);
568 elm_box_pack_end(bx, tb);
569 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
570 evas_object_size_hint_align_set(tb, 0.5, 0.5);
571 elm_win_resize_object_add(win, bx);
572 evas_object_show(tb);
573 evas_object_show(bx);
574
575 /* Box of Tap icon and label */
576 bx = create_gesture_box(win, infra->icons, 0, TAP_NAME, "Tap");
577 elm_table_pack(tb, bx, 0, 0, 1, 1);
578
579 /* Box of Double Tap icon and label */
580 bx = create_gesture_box(win, infra->icons, 1, DOUBLE_TAP_NAME, "Double Tap");
581 elm_table_pack(tb, bx, 1, 0, 1, 1);
582
583 /* Box of Triple Tap icon and label */
584 bx = create_gesture_box(win, infra->icons, 2, TRIPLE_TAP_NAME, "Triple Tap");
585 elm_table_pack(tb, bx, 2, 0, 1, 1);
586
587 /* Box of Long Tap icon and label */
588 bx = create_gesture_box(win, infra->icons, 3, LONG_TAP_NAME, "Long Tap");
589 elm_table_pack(tb, bx, 3, 0, 1, 1);
590
591 /* Box of Momentum icon and label */
592 bx = create_gesture_box(win, infra->icons, 4, MOMENTUM_NAME, "Momentum");
593 elm_table_pack(tb, bx, 0, 2, 1, 1);
594
595 /* Box of Line icon and label */
596 bx = create_gesture_box(win, infra->icons, 5, LINE_NAME, "Line");
597 elm_table_pack(tb, bx, 1, 2, 1, 1);
598
599 /* Box of Flick icon and label */
600 bx = create_gesture_box(win, infra->icons, 6, FLICK_NAME, "Flick");
601 elm_table_pack(tb, bx, 2, 2, 1, 1);
602
603 /* Box of Zoom icon and label */
604 bx = create_gesture_box(win, infra->icons, 7, ZOOM_NAME, "Zoom");
605 elm_table_pack(tb, bx, 0, 3, 1, 1);
606
607 /* Box of Rotate icon and label */
608 bx = create_gesture_box(win, infra->icons, 8, ROTATE_NAME, "Rotate");
609 elm_table_pack(tb, bx, 1, 3, 1, 1);
610
611 /* Legend of gestures - states */
612 lb = elm_label_add(win);
613 elm_object_text_set(lb, "<b>Gesture States</b>");
614 evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
615 evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
616 elm_table_pack(tb, lb, 0, 6, 4, 2);
617 evas_object_show(lb);
618
619 r = evas_object_rectangle_add(evas_object_evas_get(win));
620 evas_object_resize(r, 64, 64);
621 evas_object_color_set(r, INI_R, INI_G, INI_B, INI_A);
622 evas_object_size_hint_weight_set(r, EVAS_HINT_EXPAND, 0.0);
623 evas_object_size_hint_align_set(r, EVAS_HINT_FILL, EVAS_HINT_FILL);
624 elm_table_pack(tb, r, 0, 7, 1, 1);
625 evas_object_show(r);
626
627 lb = elm_label_add(win);
628 elm_object_text_set(lb, "Not Started");
629 evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
630 evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
631 elm_table_pack(tb, lb, 1, 7, 3, 1);
632 evas_object_show(lb);
633
634 r = evas_object_rectangle_add(evas_object_evas_get(win));
635 evas_object_resize(r, 64, 64);
636 evas_object_color_set(r, START_COLOR);
637 evas_object_size_hint_weight_set(r, EVAS_HINT_EXPAND, 0.0);
638 evas_object_size_hint_align_set(r, EVAS_HINT_FILL, EVAS_HINT_FILL);
639 elm_table_pack(tb, r, 0, 8, 1, 1);
640 evas_object_show(r);
641
642 lb = elm_label_add(win);
643 elm_object_text_set(lb, "Gesture START");
644 evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
645 evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
646 elm_table_pack(tb, lb, 1, 8, 3, 1);
647 evas_object_show(lb);
648
649 r = evas_object_rectangle_add(evas_object_evas_get(win));
650 evas_object_resize(r, 64, 64);
651 evas_object_color_set(r, MOVE_COLOR);
652 evas_object_size_hint_weight_set(r, EVAS_HINT_EXPAND, 0.0);
653 evas_object_size_hint_align_set(r, EVAS_HINT_FILL, EVAS_HINT_FILL);
654 elm_table_pack(tb, r, 0, 9, 1, 1);
655 evas_object_show(r);
656
657 lb = elm_label_add(win);
658 elm_object_text_set(lb, "Gesture MOVE");
659 evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
660 evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
661 elm_table_pack(tb, lb, 1, 9, 3, 1);
662 evas_object_show(lb);
663
664 r = evas_object_rectangle_add(evas_object_evas_get(win));
665 evas_object_resize(r, 64, 64);
666 evas_object_color_set(r, END_COLOR);
667 evas_object_size_hint_weight_set(r, EVAS_HINT_EXPAND, 0.0);
668 evas_object_size_hint_align_set(r, EVAS_HINT_FILL, EVAS_HINT_FILL);
669 elm_table_pack(tb, r, 0, 10, 1, 1);
670 evas_object_show(r);
671
672 lb = elm_label_add(win);
673 elm_object_text_set(lb, "Gesture END");
674 evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
675 evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
676 elm_table_pack(tb, lb, 1, 10, 3, 1);
677 evas_object_show(lb);
678
679 r = evas_object_rectangle_add(evas_object_evas_get(win));
680 evas_object_resize(r, 64, 64);
681 evas_object_color_set(r, ABORT_COLOR);
682 evas_object_size_hint_weight_set(r, EVAS_HINT_EXPAND, 0.0);
683 evas_object_size_hint_align_set(r, EVAS_HINT_FILL, EVAS_HINT_FILL);
684 elm_table_pack(tb, r, 0, 11, 1, 1);
685 evas_object_show(r);
686
687 lb = elm_label_add(win);
688 elm_object_text_set(lb, "Gesture ABORT");
689 evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
690 evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
691 elm_table_pack(tb, lb, 1, 11, 3, 1);
692
693 elm_table_padding_set(tb, TB_PADDING_X, TB_PADDING_Y);
694 evas_object_show(lb);
695 /* END - Building icons table */
696
697 /* Gesture layer transparent object */
698 r = evas_object_rectangle_add(evas_object_evas_get(win));
699 evas_object_move(r, 0, 0);
700 evas_object_color_set(r, 0, 0, 0, 0);
701 elm_win_resize_object_add(win, r);
702
703 g = elm_gesture_layer_add(win);
704 elm_gesture_layer_attach(g, r);
705 evas_object_show(r);
706
707 /* START - Setting gestures callbacks */
708 #if 1
709 elm_gesture_layer_cb_set(g, ELM_GESTURE_N_TRIPLE_TAPS,
710 ELM_GESTURE_STATE_START, triple_click_start, infra);
711 elm_gesture_layer_cb_set(g, ELM_GESTURE_N_TRIPLE_TAPS,
712 ELM_GESTURE_STATE_MOVE, triple_click_move, infra);
713 elm_gesture_layer_cb_set(g, ELM_GESTURE_N_TRIPLE_TAPS,
714 ELM_GESTURE_STATE_END, triple_click_end, infra);
715 elm_gesture_layer_cb_set(g, ELM_GESTURE_N_TRIPLE_TAPS,
716 ELM_GESTURE_STATE_ABORT, triple_click_abort, infra);
717 #endif
718
719 #if 1
720 elm_gesture_layer_cb_set(g, ELM_GESTURE_N_DOUBLE_TAPS,
721 ELM_GESTURE_STATE_START, dbl_click_start, infra);
722 elm_gesture_layer_cb_set(g, ELM_GESTURE_N_DOUBLE_TAPS,
723 ELM_GESTURE_STATE_MOVE, dbl_click_move, infra);
724 elm_gesture_layer_cb_set(g, ELM_GESTURE_N_DOUBLE_TAPS,
725 ELM_GESTURE_STATE_END, dbl_click_end, infra);
726 elm_gesture_layer_cb_set(g, ELM_GESTURE_N_DOUBLE_TAPS,
727 ELM_GESTURE_STATE_ABORT, dbl_click_abort, infra);
728 #endif
729
730 #if 1
731 elm_gesture_layer_cb_set(g, ELM_GESTURE_N_TAPS,
732 ELM_GESTURE_STATE_START, n_finger_tap_start, infra);
733 elm_gesture_layer_cb_set(g, ELM_GESTURE_N_TAPS,
734 ELM_GESTURE_STATE_END, n_finger_tap_end, infra);
735 elm_gesture_layer_cb_set(g, ELM_GESTURE_N_TAPS,
736 ELM_GESTURE_STATE_ABORT, n_finger_tap_abort, infra);
737 #endif
738
739 #if 1
740 elm_gesture_layer_cb_set(g, ELM_GESTURE_N_LONG_TAPS,
741 ELM_GESTURE_STATE_START, n_long_tap_start, infra);
742 elm_gesture_layer_cb_set(g, ELM_GESTURE_N_LONG_TAPS,
743 ELM_GESTURE_STATE_MOVE, n_long_tap_move, infra);
744 elm_gesture_layer_cb_set(g, ELM_GESTURE_N_LONG_TAPS,
745 ELM_GESTURE_STATE_END, n_long_tap_end, infra);
746 elm_gesture_layer_cb_set(g, ELM_GESTURE_N_LONG_TAPS,
747 ELM_GESTURE_STATE_ABORT, n_long_tap_abort, infra);
748 #endif
749
750 #if 1
751 elm_gesture_layer_cb_set(g, ELM_GESTURE_MOMENTUM,
752 ELM_GESTURE_STATE_START, momentum_start, infra);
753 elm_gesture_layer_cb_set(g, ELM_GESTURE_MOMENTUM,
754 ELM_GESTURE_STATE_END, momentum_end, infra);
755 elm_gesture_layer_cb_set(g, ELM_GESTURE_MOMENTUM,
756 ELM_GESTURE_STATE_ABORT, momentum_abort, infra);
757 elm_gesture_layer_cb_set(g, ELM_GESTURE_MOMENTUM,
758 ELM_GESTURE_STATE_MOVE, momentum_move, infra);
759 #endif
760
761 #if 1
762 elm_gesture_layer_cb_set(g, ELM_GESTURE_N_LINES,
763 ELM_GESTURE_STATE_START, line_start, infra);
764 elm_gesture_layer_cb_set(g, ELM_GESTURE_N_LINES,
765 ELM_GESTURE_STATE_MOVE, line_move, infra);
766 elm_gesture_layer_cb_set(g, ELM_GESTURE_N_LINES,
767 ELM_GESTURE_STATE_END, line_end, infra);
768 elm_gesture_layer_cb_set(g, ELM_GESTURE_N_LINES,
769 ELM_GESTURE_STATE_ABORT, line_abort, infra);
770 #endif
771
772 #if 1
773 elm_gesture_layer_cb_set(g, ELM_GESTURE_N_FLICKS,
774 ELM_GESTURE_STATE_START, flick_start, infra);
775 elm_gesture_layer_cb_set(g, ELM_GESTURE_N_FLICKS,
776 ELM_GESTURE_STATE_END, flick_end, infra);
777 elm_gesture_layer_cb_set(g, ELM_GESTURE_N_FLICKS,
778 ELM_GESTURE_STATE_ABORT, flick_abort, infra);
779 #endif
780
781 #if 1
782 elm_gesture_layer_cb_set(g, ELM_GESTURE_ZOOM,
783 ELM_GESTURE_STATE_START, zoom_start, infra);
784 elm_gesture_layer_cb_set(g, ELM_GESTURE_ZOOM,
785 ELM_GESTURE_STATE_END, zoom_end, infra);
786 elm_gesture_layer_cb_set(g, ELM_GESTURE_ZOOM,
787 ELM_GESTURE_STATE_ABORT, zoom_abort, infra);
788 elm_gesture_layer_cb_set(g, ELM_GESTURE_ZOOM,
789 ELM_GESTURE_STATE_MOVE, zoom_move, infra);
790 /* elm_gesture_layer_zoom_step_set(g, 0.2); */
791 #endif
792
793 #if 1
794 elm_gesture_layer_cb_set(g, ELM_GESTURE_ROTATE,
795 ELM_GESTURE_STATE_START, rotate_start, infra);
796 elm_gesture_layer_cb_set(g, ELM_GESTURE_ROTATE,
797 ELM_GESTURE_STATE_END, rotate_end, infra);
798 elm_gesture_layer_cb_set(g, ELM_GESTURE_ROTATE,
799 ELM_GESTURE_STATE_ABORT, rotate_abort, infra);
800 elm_gesture_layer_cb_set(g, ELM_GESTURE_ROTATE,
801 ELM_GESTURE_STATE_MOVE, rotate_move, infra);
802 /* elm_gesture_layer_rotate_step_set(g, 5.2); */
803 #endif
804 /* END - Setting gestures callbacks */
805
806 /* Update color state 20 times a second */
807 infra->colortimer = ecore_timer_add(0.05, _icon_color_set_cb, infra->icons);
808
809 evas_object_show(win);
810 }
811