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_PRESS_NAME "long_press"
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_PRESS 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 UPDATE_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_press_count;
63 };
64 typedef struct _infra_data infra_data;
65
66 static 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 static 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 static 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 static 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 static 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 void
finger_tap_start(void * data,Efl_Canvas_Gesture * tap)176 finger_tap_start(void *data , Efl_Canvas_Gesture *tap)
177 {
178 Eina_Position2D pos = efl_gesture_hotspot_get(tap);
179
180 _color_and_icon_set(data, TAP_NAME, 1, MAX_TAP, START_COLOR);
181 printf("Tap Gesture started x,y=<%d,%d> \n", pos.x, pos.y);
182 }
183
184 static void
finger_tap_end(void * data,Efl_Canvas_Gesture * tap)185 finger_tap_end(void *data , Efl_Canvas_Gesture *tap)
186 {
187 Eina_Position2D pos = efl_gesture_hotspot_get(tap);
188
189 _color_and_icon_set(data, TAP_NAME, 1, MAX_TAP, END_COLOR);
190 printf("Tap Gesture ended x,y=<%d,%d> \n", pos.x, pos.y);
191 }
192
193 static void
finger_tap_abort(void * data,Efl_Canvas_Gesture * tap EINA_UNUSED)194 finger_tap_abort(void *data , Efl_Canvas_Gesture *tap EINA_UNUSED)
195 {
196 _color_and_icon_set(data, TAP_NAME, 1, MAX_TAP, ABORT_COLOR);
197 printf("Tap Aborted\n");
198 }
199
200 static void
finger_flick_start(void * data,Efl_Canvas_Gesture * tap)201 finger_flick_start(void *data , Efl_Canvas_Gesture *tap)
202 {
203 Eina_Position2D pos = efl_gesture_hotspot_get(tap);
204
205 _color_and_icon_set(data, FLICK_NAME, 1, MAX_TAP, START_COLOR);
206 printf("Flick Gesture started x,y=<%d,%d> \n", pos.x, pos.y);
207 }
208
209 static void
finger_flick_end(void * data,Efl_Canvas_Gesture * tap)210 finger_flick_end(void *data , Efl_Canvas_Gesture *tap)
211 {
212 Eina_Position2D pos = efl_gesture_hotspot_get(tap);
213 double angle = efl_gesture_flick_angle_get(tap);
214
215 _color_and_icon_set(data, FLICK_NAME, 1, MAX_TAP, END_COLOR);
216 printf("Flick Gesture ended x,y=<%d,%d> angle=<%f>\n", pos.x, pos.y, angle);
217 }
218
219 static void
finger_flick_abort(void * data,Efl_Canvas_Gesture * tap EINA_UNUSED)220 finger_flick_abort(void *data , Efl_Canvas_Gesture *tap EINA_UNUSED)
221 {
222 _color_and_icon_set(data, FLICK_NAME, 1, MAX_TAP, ABORT_COLOR);
223 printf("Flick Aborted\n");
224 }
225
226 static void
finger_rotate_start(void * data,Efl_Canvas_Gesture * tap)227 finger_rotate_start(void *data , Efl_Canvas_Gesture *tap)
228 {
229 Eina_Position2D pos = efl_gesture_hotspot_get(tap);
230
231 _color_and_icon_set(data, ROTATE_NAME, 1, MAX_TAP, START_COLOR);
232 printf("Rotate Gesture started x,y=<%d,%d> \n", pos.x, pos.y);
233 }
234
235 static void
finger_rotate_end(void * data,Efl_Canvas_Gesture * tap)236 finger_rotate_end(void *data , Efl_Canvas_Gesture *tap)
237 {
238 Eina_Position2D pos = efl_gesture_hotspot_get(tap);
239 double angle = efl_gesture_rotate_angle_get(tap);
240 double radius = efl_gesture_rotate_radius_get(tap);
241
242 _color_and_icon_set(data, ROTATE_NAME, 1, MAX_TAP, END_COLOR);
243 printf("Rotate Gesture ended x,y=<%d,%d> angle=<%g> radius=<%f>\n", pos.x, pos.y, angle, radius);
244 }
245
246 static void
finger_rotate_abort(void * data,Efl_Canvas_Gesture * tap EINA_UNUSED)247 finger_rotate_abort(void *data , Efl_Canvas_Gesture *tap EINA_UNUSED)
248 {
249 _color_and_icon_set(data, ROTATE_NAME, 1, MAX_TAP, ABORT_COLOR);
250 printf("Rotate Aborted\n");
251 }
252
253 static void
finger_zoom_start(void * data,Efl_Canvas_Gesture * tap)254 finger_zoom_start(void *data , Efl_Canvas_Gesture *tap)
255 {
256 Eina_Position2D pos = efl_gesture_hotspot_get(tap);
257
258 _color_and_icon_set(data, ZOOM_NAME, 1, MAX_TAP, START_COLOR);
259 printf("Zoom Gesture started x,y=<%d,%d> \n", pos.x, pos.y);
260 }
261
262 static void
finger_zoom_end(void * data,Efl_Canvas_Gesture * tap)263 finger_zoom_end(void *data , Efl_Canvas_Gesture *tap)
264 {
265 Eina_Position2D pos = efl_gesture_hotspot_get(tap);
266 double zoom = efl_gesture_zoom_get(tap);
267 double radius = efl_gesture_zoom_radius_get(tap);
268
269 _color_and_icon_set(data, ZOOM_NAME, 1, MAX_TAP, END_COLOR);
270 printf("Zoom Gesture ended x,y=<%d,%d> zoom=<%g> radius=<%f>\n", pos.x, pos.y, zoom, radius);
271 }
272
273 static void
finger_zoom_abort(void * data,Efl_Canvas_Gesture * tap EINA_UNUSED)274 finger_zoom_abort(void *data , Efl_Canvas_Gesture *tap EINA_UNUSED)
275 {
276 _color_and_icon_set(data, ZOOM_NAME, 1, MAX_TAP, ABORT_COLOR);
277 printf("Zoom Aborted\n");
278 }
279
280 static void
finger_momentum_start(void * data,Efl_Canvas_Gesture * tap)281 finger_momentum_start(void *data , Efl_Canvas_Gesture *tap)
282 {
283 Eina_Position2D pos = efl_gesture_hotspot_get(tap);
284 unsigned int t = efl_gesture_timestamp_get(tap);
285
286 _color_and_icon_set(data, MOMENTUM_NAME, 1, MAX_TAP, START_COLOR);
287 printf("Momentum Gesture started x,y=<%d,%d> time=<%d>\n", pos.x, pos.y, t);
288 }
289
290 static void
finger_momentum_update(void * data,Efl_Canvas_Gesture * tap EINA_UNUSED)291 finger_momentum_update(void *data , Efl_Canvas_Gesture *tap EINA_UNUSED)
292 {
293 Eina_Position2D pos = efl_gesture_hotspot_get(tap);
294 Eina_Vector2 m = efl_gesture_momentum_get(tap);
295 unsigned int t = efl_gesture_timestamp_get(tap);
296
297 _color_and_icon_set(data, MOMENTUM_NAME, 1, MAX_TAP, UPDATE_COLOR);
298 printf("Momentum Gesture updated x,y=<%d,%d> momentum=<%f %f> time=<%d>\n",
299 pos.x, pos.y, m.x, m.y, t);
300 }
301
302 static void
finger_momentum_end(void * data,Efl_Canvas_Gesture * tap)303 finger_momentum_end(void *data , Efl_Canvas_Gesture *tap)
304 {
305 Eina_Position2D pos = efl_gesture_hotspot_get(tap);
306 Eina_Vector2 m = efl_gesture_momentum_get(tap);
307 unsigned int t = efl_gesture_timestamp_get(tap);
308
309 _color_and_icon_set(data, MOMENTUM_NAME, 1, MAX_TAP, END_COLOR);
310 printf("Momentum Gesture ended x,y=<%d,%d> momentum=<%f %f> time=<%d>\n",
311 pos.x, pos.y, m.x, m.y, t);
312 }
313
314 static void
finger_momentum_abort(void * data,Efl_Canvas_Gesture * tap EINA_UNUSED)315 finger_momentum_abort(void *data , Efl_Canvas_Gesture *tap EINA_UNUSED)
316 {
317 _color_and_icon_set(data, MOMENTUM_NAME, 1, MAX_TAP, ABORT_COLOR);
318 printf("Momentum Aborted\n");
319 }
320
321 static void
finger_triple_tap_start(void * data,Efl_Canvas_Gesture * tap)322 finger_triple_tap_start(void *data , Efl_Canvas_Gesture *tap)
323 {
324 Eina_Position2D pos = efl_gesture_hotspot_get(tap);
325
326 _color_and_icon_set(data, TRIPLE_TAP_NAME, 1, MAX_TAP, START_COLOR);
327 printf("Triple Tap Gesture started x,y=<%d,%d> \n", pos.x, pos.y);
328 }
329
330 static void
finger_triple_tap_update(void * data,Efl_Canvas_Gesture * tap EINA_UNUSED)331 finger_triple_tap_update(void *data , Efl_Canvas_Gesture *tap EINA_UNUSED)
332 {
333 Eina_Position2D pos = efl_gesture_hotspot_get(tap);
334
335 _color_and_icon_set(data, TRIPLE_TAP_NAME, 1, MAX_TAP, UPDATE_COLOR);
336 printf("Triple Tap Gesture updated x,y=<%d,%d> \n", pos.x, pos.y);
337 }
338
339 static void
finger_triple_tap_end(void * data,Efl_Canvas_Gesture * tap)340 finger_triple_tap_end(void *data , Efl_Canvas_Gesture *tap)
341 {
342 Eina_Position2D pos = efl_gesture_hotspot_get(tap);
343
344 _color_and_icon_set(data, TRIPLE_TAP_NAME, 1, MAX_TAP, END_COLOR);
345 printf("Triple Tap Gesture ended x,y=<%d,%d> \n", pos.x, pos.y);
346 }
347
348 static void
finger_triple_tap_abort(void * data,Efl_Canvas_Gesture * tap EINA_UNUSED)349 finger_triple_tap_abort(void *data , Efl_Canvas_Gesture *tap EINA_UNUSED)
350 {
351 _color_and_icon_set(data, TRIPLE_TAP_NAME, 1, MAX_TAP, ABORT_COLOR);
352 printf("Triple Tap Aborted\n");
353 }
354
355 static void
finger_double_tap_start(void * data,Efl_Canvas_Gesture * tap)356 finger_double_tap_start(void *data , Efl_Canvas_Gesture *tap)
357 {
358 Eina_Position2D pos = efl_gesture_hotspot_get(tap);
359
360 _color_and_icon_set(data, DOUBLE_TAP_NAME, 1, MAX_TAP, START_COLOR);
361 printf("Double Tap Gesture started x,y=<%d,%d> \n", pos.x, pos.y);
362 }
363
364 static void
finger_double_tap_update(void * data,Efl_Canvas_Gesture * tap EINA_UNUSED)365 finger_double_tap_update(void *data , Efl_Canvas_Gesture *tap EINA_UNUSED)
366 {
367 Eina_Position2D pos = efl_gesture_hotspot_get(tap);
368
369 _color_and_icon_set(data, DOUBLE_TAP_NAME, 1, MAX_TAP, UPDATE_COLOR);
370 printf("Double Tap Gesture updated x,y=<%d,%d> \n", pos.x, pos.y);
371 }
372
373 static void
finger_double_tap_end(void * data,Efl_Canvas_Gesture * tap)374 finger_double_tap_end(void *data , Efl_Canvas_Gesture *tap)
375 {
376 Eina_Position2D pos = efl_gesture_hotspot_get(tap);
377
378 _color_and_icon_set(data, DOUBLE_TAP_NAME, 1, MAX_TAP, END_COLOR);
379 printf("Double Tap Gesture ended x,y=<%d,%d> \n", pos.x, pos.y);
380 }
381
382 static void
finger_double_tap_abort(void * data,Efl_Canvas_Gesture * tap EINA_UNUSED)383 finger_double_tap_abort(void *data , Efl_Canvas_Gesture *tap EINA_UNUSED)
384 {
385 _color_and_icon_set(data, DOUBLE_TAP_NAME, 1, MAX_TAP, ABORT_COLOR);
386 printf("Double Tap Aborted\n");
387 }
388
389 static void
finger_long_press_start(void * data,Efl_Canvas_Gesture * tap)390 finger_long_press_start(void *data , Efl_Canvas_Gesture *tap)
391 {
392 Eina_Position2D pos = efl_gesture_hotspot_get(tap);
393
394 _color_and_icon_set(data, LONG_PRESS_NAME, 1, MAX_TAP, START_COLOR);
395 printf("Long Tap Gesture started x,y=<%d,%d> \n", pos.x, pos.y);
396 }
397
398 static void
finger_long_press_update(void * data,Efl_Canvas_Gesture * tap EINA_UNUSED)399 finger_long_press_update(void *data , Efl_Canvas_Gesture *tap EINA_UNUSED)
400 {
401 _color_and_icon_set(data, LONG_PRESS_NAME, 1, MAX_TAP, UPDATE_COLOR);
402 printf("Long Tap Gesture updated\n");
403 }
404
405 static void
finger_long_press_end(void * data,Efl_Canvas_Gesture * tap)406 finger_long_press_end(void *data , Efl_Canvas_Gesture *tap)
407 {
408 Eina_Position2D pos = efl_gesture_hotspot_get(tap);
409
410 _color_and_icon_set(data, LONG_PRESS_NAME, 1, MAX_TAP, END_COLOR);
411 printf("Long Tap Gesture ended x,y=<%d,%d> \n",pos.x, pos.y);
412 }
413
414 static void
finger_long_press_abort(void * data,Efl_Canvas_Gesture * tap EINA_UNUSED)415 finger_long_press_abort(void *data , Efl_Canvas_Gesture *tap EINA_UNUSED)
416 {
417 _color_and_icon_set(data, LONG_PRESS_NAME, 1, MAX_TAP, ABORT_COLOR);
418 printf("Long Tap Aborted\n");
419 }
420
421 static void
tap_gesture_cb(void * data,const Efl_Event * ev)422 tap_gesture_cb(void *data , const Efl_Event *ev)
423 {
424 Efl_Canvas_Gesture *g = ev->info;
425 switch(efl_gesture_state_get(g))
426 {
427 case EFL_GESTURE_STATE_STARTED:
428 finger_tap_start(data, g);
429 break;
430 case EFL_GESTURE_STATE_CANCELED:
431 finger_tap_abort(data, g);
432 break;
433 case EFL_GESTURE_STATE_FINISHED:
434 finger_tap_end(data, g);
435 break;
436 default:
437 break;
438 }
439 }
440
441 static void
flick_gesture_cb(void * data,const Efl_Event * ev)442 flick_gesture_cb(void *data , const Efl_Event *ev)
443 {
444 Efl_Canvas_Gesture *g = ev->info;
445 switch(efl_gesture_state_get(g))
446 {
447 case EFL_GESTURE_STATE_STARTED:
448 finger_flick_start(data, g);
449 break;
450 case EFL_GESTURE_STATE_CANCELED:
451 finger_flick_abort(data, g);
452 break;
453 case EFL_GESTURE_STATE_FINISHED:
454 finger_flick_end(data, g);
455 break;
456 default:
457 break;
458 }
459 }
460
461 static void
rotate_gesture_cb(void * data,const Efl_Event * ev)462 rotate_gesture_cb(void *data , const Efl_Event *ev)
463 {
464 Efl_Canvas_Gesture *g = ev->info;
465 switch(efl_gesture_state_get(g))
466 {
467 case EFL_GESTURE_STATE_STARTED:
468 finger_rotate_start(data, g);
469 break;
470 case EFL_GESTURE_STATE_CANCELED:
471 finger_rotate_abort(data, g);
472 break;
473 case EFL_GESTURE_STATE_FINISHED:
474 finger_rotate_end(data, g);
475 break;
476 default:
477 break;
478 }
479 }
480
481 static void
zoom_gesture_cb(void * data,const Efl_Event * ev)482 zoom_gesture_cb(void *data , const Efl_Event *ev)
483 {
484 Efl_Canvas_Gesture *g = ev->info;
485 switch(efl_gesture_state_get(g))
486 {
487 case EFL_GESTURE_STATE_STARTED:
488 finger_zoom_start(data, g);
489 break;
490 case EFL_GESTURE_STATE_CANCELED:
491 finger_zoom_abort(data, g);
492 break;
493 case EFL_GESTURE_STATE_FINISHED:
494 finger_zoom_end(data, g);
495 break;
496 default:
497 break;
498 }
499 }
500
501 static void
momentum_gesture_cb(void * data,const Efl_Event * ev)502 momentum_gesture_cb(void *data , const Efl_Event *ev)
503 {
504 Efl_Canvas_Gesture *g = ev->info;
505 switch(efl_gesture_state_get(g))
506 {
507 case EFL_GESTURE_STATE_STARTED:
508 finger_momentum_start(data, g);
509 break;
510 case EFL_GESTURE_STATE_UPDATED:
511 finger_momentum_update(data, g);
512 break;
513 case EFL_GESTURE_STATE_CANCELED:
514 finger_momentum_abort(data, g);
515 break;
516 case EFL_GESTURE_STATE_FINISHED:
517 finger_momentum_end(data, g);
518 break;
519 default:
520 break;
521 }
522 }
523
524 static void
triple_tap_gesture_cb(void * data,const Efl_Event * ev)525 triple_tap_gesture_cb(void *data , const Efl_Event *ev)
526 {
527 Efl_Canvas_Gesture *g = ev->info;
528 switch(efl_gesture_state_get(g))
529 {
530 case EFL_GESTURE_STATE_STARTED:
531 finger_triple_tap_start(data, g);
532 break;
533 case EFL_GESTURE_STATE_UPDATED:
534 finger_triple_tap_update(data, g);
535 break;
536 case EFL_GESTURE_STATE_CANCELED:
537 finger_triple_tap_abort(data, g);
538 break;
539 case EFL_GESTURE_STATE_FINISHED:
540 finger_triple_tap_end(data, g);
541 break;
542 default:
543 break;
544 }
545 }
546
547 static void
double_tap_gesture_cb(void * data,const Efl_Event * ev)548 double_tap_gesture_cb(void *data , const Efl_Event *ev)
549 {
550 Efl_Canvas_Gesture *g = ev->info;
551 switch(efl_gesture_state_get(g))
552 {
553 case EFL_GESTURE_STATE_STARTED:
554 finger_double_tap_start(data, g);
555 break;
556 case EFL_GESTURE_STATE_UPDATED:
557 finger_double_tap_update(data, g);
558 break;
559 case EFL_GESTURE_STATE_CANCELED:
560 finger_double_tap_abort(data, g);
561 break;
562 case EFL_GESTURE_STATE_FINISHED:
563 finger_double_tap_end(data, g);
564 break;
565 default:
566 break;
567 }
568 }
569
570 static void
long_press_gesture_cb(void * data,const Efl_Event * ev)571 long_press_gesture_cb(void *data , const Efl_Event *ev)
572 {
573 Efl_Canvas_Gesture *g = ev->info;
574 switch(efl_gesture_state_get(g))
575 {
576 case EFL_GESTURE_STATE_STARTED:
577 finger_long_press_start(data, g);
578 break;
579 case EFL_GESTURE_STATE_UPDATED:
580 finger_long_press_update(data, g);
581 break;
582 case EFL_GESTURE_STATE_CANCELED:
583 finger_long_press_abort(data, g);
584 break;
585 case EFL_GESTURE_STATE_FINISHED:
586 finger_long_press_end(data, g);
587 break;
588 default:
589 break;
590 }
591 }
592
593 /* END - Callbacks for gestures */
594
595 static Evas_Object *
create_gesture_box(Evas_Object * win,icon_properties * icons,int idx,const char * name,const char * lb_txt)596 create_gesture_box(Evas_Object *win, icon_properties *icons,
597 int idx, const char *name, const char *lb_txt)
598 { /* Creates a box with icon and label, later placed in a table */
599 Evas_Object *lb, *bx = elm_box_add(win);
600 char buf[1024];
601
602 elm_box_padding_set(bx, BX_PADDING_X, BX_PADDING_Y);
603 icons[idx].icon = elm_icon_add(win);
604 icons[idx].name = name;
605 snprintf(buf, sizeof(buf), "%s/images/g_layer/%s_1.png",
606 elm_app_data_dir_get(), icons[idx].name);
607 elm_image_file_set(icons[idx].icon, buf, NULL);
608 elm_image_resizable_set(icons[idx].icon, EINA_FALSE, EINA_FALSE);
609 evas_object_size_hint_align_set(icons[idx].icon, 0.5, 0.5);
610 _icon_color_set(&icons[idx], INI_R, INI_G, INI_B, INI_A);
611 elm_box_pack_end(bx, icons[idx].icon);
612 evas_object_show(icons[idx].icon);
613
614 lb = elm_label_add(win);
615 elm_object_text_set(lb, lb_txt);
616 evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
617 evas_object_size_hint_align_set(lb, 0.5, 0.5);
618 elm_box_pack_end(bx, lb);
619 evas_object_show(lb);
620 evas_object_show(bx);
621
622 return bx;
623 }
624
625 void
_tb_resize(void * data,Evas * e EINA_UNUSED,Evas_Object * obj,void * event_info EINA_UNUSED)626 _tb_resize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
627 {
628 int w,h;
629
630 evas_object_geometry_get(obj, NULL, NULL, &w, &h);
631 evas_object_resize(data, w, h);
632 evas_object_color_set(data, 0, 0, 0, 0);
633 evas_object_show(data);
634 }
635
636 void
test_gesture_framework(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)637 test_gesture_framework(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
638 void *event_info EINA_UNUSED)
639 {
640 Evas_Object *win, *tb, *lb, *bx;
641 Evas_Object *r, *target; /* Gesture layer transparent object */
642
643 infra_data *infra = _infra_data_alloc();
644
645 win = elm_win_util_standard_add("gesture-layer2", "Gesture (EO)");
646 elm_win_autodel_set(win, EINA_TRUE);
647 evas_object_smart_callback_add(win, "delete,request", my_win_del, infra);
648
649 /* START - Building icons table */
650 bx = elm_box_add(win);
651 tb = elm_table_add(win);
652 elm_box_pack_end(bx, tb);
653 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
654 evas_object_size_hint_align_set(tb, 0.5, 0.5);
655 elm_win_resize_object_add(win, bx);
656 evas_object_show(tb);
657 evas_object_show(bx);
658
659 target = evas_object_rectangle_add(evas_object_evas_get(win));
660 evas_object_event_callback_add(win, EVAS_CALLBACK_RESIZE, _tb_resize, target);
661
662 /* Box of Tap icon and label */
663 bx = create_gesture_box(win, infra->icons, 0, TAP_NAME, "Tap");
664 elm_table_pack(tb, bx, 0, 0, 1, 1);
665
666 /* Box of Double Tap icon and label */
667 bx = create_gesture_box(win, infra->icons, 1, DOUBLE_TAP_NAME, "Double Tap");
668 elm_table_pack(tb, bx, 1, 0, 1, 1);
669
670 /* Box of Triple Tap icon and label */
671 bx = create_gesture_box(win, infra->icons, 2, TRIPLE_TAP_NAME, "Triple Tap");
672 elm_table_pack(tb, bx, 2, 0, 1, 1);
673
674 /* Box of Long Tap icon and label */
675 bx = create_gesture_box(win, infra->icons, 3, LONG_PRESS_NAME, "Long Tap");
676 elm_table_pack(tb, bx, 3, 0, 1, 1);
677
678 /* Box of Momentum icon and label */
679 bx = create_gesture_box(win, infra->icons, 4, MOMENTUM_NAME, "Momentum");
680 elm_table_pack(tb, bx, 0, 2, 1, 1);
681
682 /* Box of Line icon and label */
683 bx = create_gesture_box(win, infra->icons, 5, LINE_NAME, "Line");
684 elm_table_pack(tb, bx, 1, 2, 1, 1);
685
686 /* Box of Flick icon and label */
687 bx = create_gesture_box(win, infra->icons, 6, FLICK_NAME, "Flick");
688 elm_table_pack(tb, bx, 2, 2, 1, 1);
689
690 /* Box of Zoom icon and label */
691 bx = create_gesture_box(win, infra->icons, 7, ZOOM_NAME, "Zoom");
692 elm_table_pack(tb, bx, 0, 3, 1, 1);
693
694 /* Box of Rotate icon and label */
695 bx = create_gesture_box(win, infra->icons, 8, ROTATE_NAME, "Rotate");
696 elm_table_pack(tb, bx, 1, 3, 1, 1);
697
698 /* Legend of gestures - states */
699 lb = elm_label_add(win);
700 elm_object_text_set(lb, "<b>Gesture States</b>");
701 evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
702 evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
703 elm_table_pack(tb, lb, 0, 6, 4, 2);
704 evas_object_show(lb);
705
706 r = evas_object_rectangle_add(evas_object_evas_get(win));
707 evas_object_resize(r, 64, 64);
708 evas_object_color_set(r, INI_R, INI_G, INI_B, INI_A);
709 evas_object_size_hint_weight_set(r, EVAS_HINT_EXPAND, 0.0);
710 evas_object_size_hint_align_set(r, EVAS_HINT_FILL, EVAS_HINT_FILL);
711 elm_table_pack(tb, r, 0, 7, 1, 1);
712 evas_object_show(r);
713
714 lb = elm_label_add(win);
715 elm_object_text_set(lb, "Not Started");
716 evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
717 evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
718 elm_table_pack(tb, lb, 1, 7, 3, 1);
719 evas_object_show(lb);
720
721 r = evas_object_rectangle_add(evas_object_evas_get(win));
722 evas_object_resize(r, 64, 64);
723 evas_object_color_set(r, START_COLOR);
724 evas_object_size_hint_weight_set(r, EVAS_HINT_EXPAND, 0.0);
725 evas_object_size_hint_align_set(r, EVAS_HINT_FILL, EVAS_HINT_FILL);
726 elm_table_pack(tb, r, 0, 8, 1, 1);
727 evas_object_show(r);
728
729 lb = elm_label_add(win);
730 elm_object_text_set(lb, "Gesture START");
731 evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
732 evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
733 elm_table_pack(tb, lb, 1, 8, 3, 1);
734 evas_object_show(lb);
735
736 r = evas_object_rectangle_add(evas_object_evas_get(win));
737 evas_object_resize(r, 64, 64);
738 evas_object_color_set(r, UPDATE_COLOR);
739 evas_object_size_hint_weight_set(r, EVAS_HINT_EXPAND, 0.0);
740 evas_object_size_hint_align_set(r, EVAS_HINT_FILL, EVAS_HINT_FILL);
741 elm_table_pack(tb, r, 0, 9, 1, 1);
742 evas_object_show(r);
743
744 lb = elm_label_add(win);
745 elm_object_text_set(lb, "Gesture UPDATE");
746 evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
747 evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
748 elm_table_pack(tb, lb, 1, 9, 3, 1);
749 evas_object_show(lb);
750
751 r = evas_object_rectangle_add(evas_object_evas_get(win));
752 evas_object_resize(r, 64, 64);
753 evas_object_color_set(r, END_COLOR);
754 evas_object_size_hint_weight_set(r, EVAS_HINT_EXPAND, 0.0);
755 evas_object_size_hint_align_set(r, EVAS_HINT_FILL, EVAS_HINT_FILL);
756 elm_table_pack(tb, r, 0, 10, 1, 1);
757 evas_object_show(r);
758
759 lb = elm_label_add(win);
760 elm_object_text_set(lb, "Gesture END");
761 evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
762 evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
763 elm_table_pack(tb, lb, 1, 10, 3, 1);
764 evas_object_show(lb);
765
766 r = evas_object_rectangle_add(evas_object_evas_get(win));
767 evas_object_resize(r, 64, 64);
768 evas_object_color_set(r, ABORT_COLOR);
769 evas_object_size_hint_weight_set(r, EVAS_HINT_EXPAND, 0.0);
770 evas_object_size_hint_align_set(r, EVAS_HINT_FILL, EVAS_HINT_FILL);
771 elm_table_pack(tb, r, 0, 11, 1, 1);
772 evas_object_show(r);
773
774 lb = elm_label_add(win);
775 elm_object_text_set(lb, "Gesture ABORT");
776 evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
777 evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
778 elm_table_pack(tb, lb, 1, 11, 3, 1);
779
780 elm_table_padding_set(tb, TB_PADDING_X, TB_PADDING_Y);
781 evas_object_show(lb);
782 /* END - Building icons table */
783
784 // LISTEN FOR GESTURES
785 efl_event_callback_add(target, EFL_EVENT_GESTURE_TAP, tap_gesture_cb, infra);
786 efl_event_callback_add(target, EFL_EVENT_GESTURE_LONG_PRESS, long_press_gesture_cb, infra);
787 efl_event_callback_add(target, EFL_EVENT_GESTURE_DOUBLE_TAP, double_tap_gesture_cb, infra);
788 efl_event_callback_add(target, EFL_EVENT_GESTURE_TRIPLE_TAP, triple_tap_gesture_cb, infra);
789 efl_event_callback_add(target, EFL_EVENT_GESTURE_MOMENTUM, momentum_gesture_cb, infra);
790 efl_event_callback_add(target, EFL_EVENT_GESTURE_FLICK, flick_gesture_cb, infra);
791 efl_event_callback_add(target, EFL_EVENT_GESTURE_ROTATE, rotate_gesture_cb, infra);
792 efl_event_callback_add(target, EFL_EVENT_GESTURE_ZOOM, zoom_gesture_cb, infra);
793
794 /* Update color state 20 times a second */
795 infra->colortimer = ecore_timer_add(0.05, _icon_color_set_cb, infra->icons);
796
797 evas_object_show(win);
798 }
799