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