28c6b616b3d5a0ec7a3bb160504e18653aeebfc4
[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 <<<<<<< HEAD
506    elm_icon_scale_set(icons[idx].icon, 0, 0);
507 =======
508    elm_icon_resizable_set(icons[idx].icon, 0, 0);
509 >>>>>>> remotes/origin/upstream
510    evas_object_size_hint_align_set(icons[idx].icon, 0.5, 0.5);
511    _icon_color_set(&icons[idx], INI_R, INI_G, INI_B, INI_A);
512    elm_box_pack_end(bx, icons[idx].icon);
513    evas_object_show(icons[idx].icon);
514
515    lb = elm_label_add(win);
516    elm_object_text_set(lb, lb_txt);
517    evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
518    evas_object_size_hint_align_set(lb, 0.5, 0.5);
519    elm_box_pack_end(bx, lb);
520    evas_object_show(lb);
521    evas_object_show(bx);
522
523    return bx;
524 }
525
526 void
527 test_gesture_layer2(void *data __UNUSED__, Evas_Object *obj __UNUSED__,
528       void *event_info __UNUSED__)
529 {
530    Evas_Object *win, *bg, *tb, *lb, *bx;
531    Evas_Object *r; /* Gesture layer transparent object */
532    Evas_Object *g; /* The Gesture Layer object */
533
534    infra_data *infra = _infra_data_alloc();
535
536    win = elm_win_add(NULL, "table", ELM_WIN_BASIC);
537    elm_win_title_set(win, "Table");
538    elm_win_autodel_set(win, EINA_TRUE);
539    evas_object_smart_callback_add(win, "delete,request", my_win_del, infra);
540
541    bg = elm_bg_add(win);
542    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
543    elm_win_resize_object_add(win, bg);
544    evas_object_show(bg);
545
546    /* START - Building icons table */
547    bx = elm_box_add(win);
548    tb = elm_table_add(win);
549    elm_box_pack_end(bx, tb);
550    elm_win_resize_object_add(win, bx);
551    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
552    evas_object_size_hint_align_set(tb, 0.5, 0.5);
553    evas_object_show(tb);
554    evas_object_show(bx);
555
556    /* Box of Tap icon and label */
557    bx = create_gesture_box(win, infra->icons, 0, TAP_NAME, "Tap");
558    elm_table_pack(tb, bx, 0, 0, 1, 1);
559
560    /* Box of Double Tap icon and label */
561    bx = create_gesture_box(win, infra->icons, 1, DOUBLE_TAP_NAME, "Double Tap");
562    elm_table_pack(tb, bx, 1, 0, 1, 1);
563
564    /* Box of Triple Tap icon and label */
565    bx = create_gesture_box(win, infra->icons, 2, TRIPLE_TAP_NAME, "Triple Tap");
566    elm_table_pack(tb, bx, 2, 0, 1, 1);
567
568    /* Box of Long Tap icon and label */
569    bx = create_gesture_box(win, infra->icons, 3, LONG_TAP_NAME, "Long Tap");
570    elm_table_pack(tb, bx, 3, 0, 1, 1);
571
572    /* Box of Momentum icon and label */
573    bx = create_gesture_box(win, infra->icons, 4, MOMENTUM_NAME, "Momentum");
574    elm_table_pack(tb, bx, 0, 2, 1, 1);
575
576    /* Box of Line icon and label */
577    bx = create_gesture_box(win, infra->icons, 5, LINE_NAME, "Line");
578    elm_table_pack(tb, bx, 1, 2, 1, 1);
579
580    /* Box of Flick icon and label */
581    bx = create_gesture_box(win, infra->icons, 6, FLICK_NAME, "Flick");
582    elm_table_pack(tb, bx, 2, 2, 1, 1);
583
584    /* Box of Zoom icon and label */
585    bx = create_gesture_box(win, infra->icons, 7, ZOOM_NAME, "Zoom");
586    elm_table_pack(tb, bx, 0, 3, 1, 1);
587
588    /* Box of Rotate icon and label */
589    bx = create_gesture_box(win, infra->icons, 8, ROTATE_NAME, "Rotate");
590    elm_table_pack(tb, bx, 1, 3, 1, 1);
591
592
593    /* Legend of gestures - states */
594    lb = elm_label_add(win);
595    elm_object_text_set(lb, "<b>Gesture States</b>");
596    evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
597    evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
598    elm_table_pack(tb, lb, 0, 6, 4, 2);
599    evas_object_show(lb);
600
601    r = evas_object_rectangle_add(evas_object_evas_get(win));
602    evas_object_resize(r, 64, 64);
603    evas_object_color_set(r, INI_R, INI_G, INI_B, INI_A);
604    evas_object_size_hint_weight_set(r, EVAS_HINT_EXPAND, 0.0);
605    evas_object_size_hint_align_set(r, EVAS_HINT_FILL, EVAS_HINT_FILL);
606    elm_table_pack(tb, r, 0, 7, 1, 1);
607    evas_object_show(r);
608
609    lb = elm_label_add(win);
610    elm_object_text_set(lb, "Not Started");
611    evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
612    evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
613    elm_table_pack(tb, lb, 1, 7, 3, 1);
614    evas_object_show(lb);
615
616    r = evas_object_rectangle_add(evas_object_evas_get(win));
617    evas_object_resize(r, 64, 64);
618    evas_object_color_set(r, START_COLOR);
619    evas_object_size_hint_weight_set(r, EVAS_HINT_EXPAND, 0.0);
620    evas_object_size_hint_align_set(r, EVAS_HINT_FILL, EVAS_HINT_FILL);
621    elm_table_pack(tb, r, 0, 8, 1, 1);
622    evas_object_show(r);
623
624    lb = elm_label_add(win);
625    elm_object_text_set(lb, "Gesture START");
626    evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
627    evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
628    elm_table_pack(tb, lb, 1, 8, 3, 1);
629    evas_object_show(lb);
630
631    r = evas_object_rectangle_add(evas_object_evas_get(win));
632    evas_object_resize(r, 64, 64);
633    evas_object_color_set(r, MOVE_COLOR);
634    evas_object_size_hint_weight_set(r, EVAS_HINT_EXPAND, 0.0);
635    evas_object_size_hint_align_set(r, EVAS_HINT_FILL, EVAS_HINT_FILL);
636    elm_table_pack(tb, r, 0, 9, 1, 1);
637    evas_object_show(r);
638
639    lb = elm_label_add(win);
640    elm_object_text_set(lb, "Gesture MOVE");
641    evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
642    evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
643    elm_table_pack(tb, lb, 1, 9, 3, 1);
644    evas_object_show(lb);
645
646    r = evas_object_rectangle_add(evas_object_evas_get(win));
647    evas_object_resize(r, 64, 64);
648    evas_object_color_set(r, END_COLOR);
649    evas_object_size_hint_weight_set(r, EVAS_HINT_EXPAND, 0.0);
650    evas_object_size_hint_align_set(r, EVAS_HINT_FILL, EVAS_HINT_FILL);
651    elm_table_pack(tb, r, 0, 10, 1, 1);
652    evas_object_show(r);
653
654    lb = elm_label_add(win);
655    elm_object_text_set(lb, "Gesture END");
656    evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
657    evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
658    elm_table_pack(tb, lb, 1, 10, 3, 1);
659    evas_object_show(lb);
660
661    r = evas_object_rectangle_add(evas_object_evas_get(win));
662    evas_object_resize(r, 64, 64);
663    evas_object_color_set(r, ABORT_COLOR);
664    evas_object_size_hint_weight_set(r, EVAS_HINT_EXPAND, 0.0);
665    evas_object_size_hint_align_set(r, EVAS_HINT_FILL, EVAS_HINT_FILL);
666    elm_table_pack(tb, r, 0, 11, 1, 1);
667    evas_object_show(r);
668
669    lb = elm_label_add(win);
670    elm_object_text_set(lb, "Gesture ABORT");
671    evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
672    evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
673    elm_table_pack(tb, lb, 1, 11, 3, 1);
674
675
676    elm_table_padding_set(tb, TB_PADDING_X, TB_PADDING_Y);
677    evas_object_show(lb);
678    /* END   - Building icons table */
679
680    /* Gesture layer transparent object */
681    r = evas_object_rectangle_add(evas_object_evas_get(win));
682    evas_object_color_set(r, 0, 0, 0, 0);
683    elm_win_resize_object_add(win, r);
684    g = elm_gesture_layer_add(r);
685    elm_gesture_layer_attach(g, r);
686    evas_object_show(r);
687
688    /* START - Setting gestures callbacks */
689 #if 1
690    elm_gesture_layer_cb_set(g, ELM_GESTURE_N_TRIPLE_TAPS,
691          ELM_GESTURE_STATE_START, triple_click_start, infra);
692    elm_gesture_layer_cb_set(g, ELM_GESTURE_N_TRIPLE_TAPS,
693          ELM_GESTURE_STATE_END, triple_click_end, infra);
694    elm_gesture_layer_cb_set(g, ELM_GESTURE_N_TRIPLE_TAPS,
695          ELM_GESTURE_STATE_ABORT, triple_click_abort, infra);
696 #endif
697
698 #if 1
699    elm_gesture_layer_cb_set(g, ELM_GESTURE_N_DOUBLE_TAPS,
700          ELM_GESTURE_STATE_START, dbl_click_start, infra);
701    elm_gesture_layer_cb_set(g, ELM_GESTURE_N_DOUBLE_TAPS,
702          ELM_GESTURE_STATE_END, dbl_click_end, infra);
703    elm_gesture_layer_cb_set(g, ELM_GESTURE_N_DOUBLE_TAPS,
704          ELM_GESTURE_STATE_ABORT, dbl_click_abort, infra);
705 #endif
706
707 #if 1
708    elm_gesture_layer_cb_set(g, ELM_GESTURE_N_TAPS,
709          ELM_GESTURE_STATE_START, n_finger_tap_start, infra);
710    elm_gesture_layer_cb_set(g, ELM_GESTURE_N_TAPS,
711          ELM_GESTURE_STATE_END, n_finger_tap_end, infra);
712    elm_gesture_layer_cb_set(g, ELM_GESTURE_N_TAPS,
713          ELM_GESTURE_STATE_ABORT, n_finger_tap_abort, infra);
714 #endif
715
716 #if 1
717    elm_gesture_layer_cb_set(g, ELM_GESTURE_N_LONG_TAPS,
718          ELM_GESTURE_STATE_START, n_long_tap_start, infra);
719    elm_gesture_layer_cb_set(g, ELM_GESTURE_N_LONG_TAPS,
720          ELM_GESTURE_STATE_MOVE, n_long_tap_move, infra);
721    elm_gesture_layer_cb_set(g, ELM_GESTURE_N_LONG_TAPS,
722          ELM_GESTURE_STATE_END, n_long_tap_end, infra);
723    elm_gesture_layer_cb_set(g, ELM_GESTURE_N_LONG_TAPS,
724          ELM_GESTURE_STATE_ABORT, n_long_tap_abort, infra);
725 #endif
726
727 #if 1
728    elm_gesture_layer_cb_set(g, ELM_GESTURE_MOMENTUM,
729          ELM_GESTURE_STATE_START, momentum_start, infra);
730    elm_gesture_layer_cb_set(g, ELM_GESTURE_MOMENTUM,
731          ELM_GESTURE_STATE_END, momentum_end, infra);
732    elm_gesture_layer_cb_set(g, ELM_GESTURE_MOMENTUM,
733          ELM_GESTURE_STATE_ABORT, momentum_abort, infra);
734    elm_gesture_layer_cb_set(g, ELM_GESTURE_MOMENTUM,
735          ELM_GESTURE_STATE_MOVE, momentum_move, infra);
736 #endif
737
738 #if 1
739    elm_gesture_layer_cb_set(g, ELM_GESTURE_N_LINES,
740          ELM_GESTURE_STATE_START, line_start, infra);
741    elm_gesture_layer_cb_set(g, ELM_GESTURE_N_LINES,
742          ELM_GESTURE_STATE_MOVE, line_move, infra);
743    elm_gesture_layer_cb_set(g, ELM_GESTURE_N_LINES,
744          ELM_GESTURE_STATE_END, line_end, infra);
745    elm_gesture_layer_cb_set(g, ELM_GESTURE_N_LINES,
746          ELM_GESTURE_STATE_ABORT, line_abort, infra);
747 #endif
748
749 #if 1
750    elm_gesture_layer_cb_set(g, ELM_GESTURE_N_FLICKS,
751          ELM_GESTURE_STATE_START, flick_start, infra);
752    elm_gesture_layer_cb_set(g, ELM_GESTURE_N_FLICKS,
753          ELM_GESTURE_STATE_END, flick_end, infra);
754    elm_gesture_layer_cb_set(g, ELM_GESTURE_N_FLICKS,
755          ELM_GESTURE_STATE_ABORT, flick_abort, infra);
756 #endif
757
758 #if 1
759    elm_gesture_layer_cb_set(g, ELM_GESTURE_ZOOM,
760          ELM_GESTURE_STATE_START, zoom_start, infra);
761    elm_gesture_layer_cb_set(g, ELM_GESTURE_ZOOM,
762          ELM_GESTURE_STATE_END, zoom_end, infra);
763    elm_gesture_layer_cb_set(g, ELM_GESTURE_ZOOM,
764          ELM_GESTURE_STATE_ABORT, zoom_abort, infra);
765    elm_gesture_layer_cb_set(g, ELM_GESTURE_ZOOM,
766          ELM_GESTURE_STATE_MOVE, zoom_move, infra);
767    /* elm_gesture_layer_zoom_step_set(g, 0.2); */
768 #endif
769
770 #if 1
771    elm_gesture_layer_cb_set(g, ELM_GESTURE_ROTATE,
772          ELM_GESTURE_STATE_START, rotate_start, infra);
773    elm_gesture_layer_cb_set(g, ELM_GESTURE_ROTATE,
774          ELM_GESTURE_STATE_END, rotate_end, infra);
775    elm_gesture_layer_cb_set(g, ELM_GESTURE_ROTATE,
776          ELM_GESTURE_STATE_ABORT, rotate_abort, infra);
777    elm_gesture_layer_cb_set(g, ELM_GESTURE_ROTATE,
778          ELM_GESTURE_STATE_MOVE, rotate_move, infra);
779    /* elm_gesture_layer_rotate_step_set(g, 5.2); */
780 #endif
781    /* END   - Setting gestures callbacks */
782
783    /* Update color state 20 times a second */
784    infra->colortimer = ecore_timer_add(0.05, _icon_color_set_cb, infra->icons);
785
786    evas_object_show(win);
787 }
788 #endif