elementary/transit - fixed to repeat times provide infinite times actually.
[framework/uifw/elementary.git] / src / bin / test_transit.c
1 #include <Elementary.h>
2 #ifdef HAVE_CONFIG_H
3 # include "elementary_config.h"
4 #endif
5 #ifndef ELM_LIB_QUICKLAUNCH
6
7 typedef struct _Custom_Effect Custom_Effect;
8
9 struct _Custom_Effect
10 {
11    struct _size
12      {
13         Evas_Coord w, h;
14      } from, to;
15 };
16
17 static void
18 _custom_op(void *data, Elm_Transit *transit, double progress)
19 {
20    if (!data) return;
21    Evas_Coord w, h;
22    Evas_Object *obj;
23    const Eina_List *elist;
24
25    Custom_Effect *custom_effect = data;
26    const Eina_List *objs = elm_transit_objects_get(transit);
27
28    if (progress < 0.5)
29      {
30         h = custom_effect->from.h + (custom_effect->to.h * progress * 2);
31         w = custom_effect->from.w;
32      }
33    else
34      {
35         h = custom_effect->from.h + custom_effect->to.h;
36         w = custom_effect->from.w + \
37             (custom_effect->to.w * (progress - 0.5) * 2);
38      }
39
40    EINA_LIST_FOREACH(objs, elist, obj)
41       evas_object_resize(obj, w, h);
42
43 }
44
45 static void *
46 _custom_context_new(Evas_Coord from_w, Evas_Coord from_h, Evas_Coord to_w, Evas_Coord to_h)
47 {
48    Custom_Effect *custom_effect;
49
50    custom_effect = calloc(1, sizeof(Custom_Effect));
51    if (!custom_effect) return NULL;
52
53    custom_effect->from.w = from_w;
54    custom_effect->from.h = from_h;
55    custom_effect->to.w = to_w - from_w;
56    custom_effect->to.h = to_h - from_h;
57
58    return custom_effect;
59 }
60
61 static void
62 _custom_context_free(void *data, Elm_Transit *transit __UNUSED__)
63 {
64    free(data);
65 }
66
67 static void
68 _transit_rotation_translation_color(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
69 {
70    Elm_Transit *trans;
71
72    trans = elm_transit_add();
73    elm_transit_object_add(trans, obj);
74    elm_transit_auto_reverse_set(trans, EINA_TRUE);
75    elm_transit_repeat_times_set(trans, 2);
76
77    /* Translation Effect */
78    elm_transit_effect_translation_add(trans, -70.0, -150.0, 70.0, 150.0);
79
80    /* Color Effect */
81    elm_transit_effect_color_add(trans, 100, 255, 100, 255, 200, 50, 200, 50); 
82
83    /* Rotation Effect */
84    elm_transit_effect_rotation_add(trans, 0.0, 135.0);
85
86    elm_transit_duration_set(trans, 5.0);
87    elm_transit_go(trans);
88 }
89
90 static void
91 _transit_wipe(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
92 {
93    Elm_Transit *trans;
94
95    trans = elm_transit_add();
96    elm_transit_object_add(trans, obj);
97    elm_transit_auto_reverse_set(trans, EINA_TRUE);
98
99    elm_transit_effect_wipe_add(trans, 
100                                ELM_TRANSIT_EFFECT_WIPE_TYPE_HIDE,
101                                ELM_TRANSIT_EFFECT_WIPE_DIR_RIGHT);
102
103    elm_transit_duration_set(trans, 5.0);
104    elm_transit_go(trans);
105 }
106
107 static void
108 _transit_image_animation(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
109 {
110    Eina_List *images = NULL;
111    char buf[PATH_MAX];
112    Elm_Transit *trans;
113    Evas_Object *ic = data;
114
115    snprintf(buf, sizeof(buf), "%s/images/icon_19.png", PACKAGE_DATA_DIR);
116    images = eina_list_append(images, eina_stringshare_add(buf));
117
118    snprintf(buf, sizeof(buf), "%s/images/icon_00.png", PACKAGE_DATA_DIR);
119    images = eina_list_append(images, eina_stringshare_add(buf));
120
121    snprintf(buf, sizeof(buf), "%s/images/icon_11.png", PACKAGE_DATA_DIR);
122    images = eina_list_append(images, eina_stringshare_add(buf));
123
124    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
125    images = eina_list_append(images, eina_stringshare_add(buf));
126
127    trans = elm_transit_add();
128    elm_transit_object_add(trans, ic);
129
130    elm_transit_effect_image_animation_add(trans, images);
131
132    elm_transit_duration_set(trans, 5.0); 
133    elm_transit_go(trans);
134 }
135
136 static void
137 _transit_resizing(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
138 {
139    Elm_Transit *trans;
140
141    trans = elm_transit_add();
142    elm_transit_object_add(trans, obj);   
143
144    elm_transit_effect_resizing_add(trans, 100, 50, 300, 150);
145
146    elm_transit_duration_set(trans, 5.0);
147    elm_transit_go(trans);
148 }
149
150 static void
151 _transit_flip(void *data, Evas_Object *obj, void *event_info __UNUSED__)
152 {
153    Elm_Transit *trans;
154    Evas_Object *obj2 = data;
155
156    trans = elm_transit_add();
157    elm_transit_object_add(trans, obj);
158    elm_transit_object_add(trans, obj2);
159
160    elm_transit_effect_flip_add(trans, ELM_TRANSIT_EFFECT_FLIP_AXIS_X, EINA_TRUE);
161
162    elm_transit_duration_set(trans, 5.0);
163    elm_transit_go(trans);
164 }
165
166 static void
167 _transit_zoom(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
168 {
169    Elm_Transit *trans;
170
171    trans = elm_transit_add();
172    elm_transit_object_add(trans, obj);
173
174    elm_transit_effect_zoom_add(trans, 1.0, 3.0);
175
176    elm_transit_duration_set(trans, 5.0);
177    elm_transit_go(trans);
178 }
179
180 static void
181 _transit_blend(void *data, Evas_Object *obj, void *event_info __UNUSED__)
182 {
183    Elm_Transit *trans;
184    Evas_Object *obj2 = data;
185
186    trans = elm_transit_add();
187    elm_transit_object_add(trans, obj);
188    elm_transit_object_add(trans, obj2);
189
190    elm_transit_effect_blend_add(trans);
191
192    elm_transit_duration_set(trans, 5.0);
193    elm_transit_go(trans);
194 }
195
196 static void
197 _transit_fade(void *data, Evas_Object *obj, void *event_info __UNUSED__)
198 {
199    Elm_Transit *trans;
200    Evas_Object *obj2 = data;
201
202    trans = elm_transit_add();
203    elm_transit_object_add(trans, obj);
204    elm_transit_object_add(trans, obj2);
205
206    elm_transit_effect_fade_add(trans);
207
208    elm_transit_duration_set(trans, 5.0);
209    elm_transit_go(trans);
210 }
211
212 static void
213 _transit_resizable_flip(void *data, Evas_Object *obj, void *event_info __UNUSED__)
214 {
215    Elm_Transit *trans;
216    Evas_Object *obj2 = data;
217
218    trans = elm_transit_add();
219    elm_transit_object_add(trans, obj);
220    elm_transit_object_add(trans, obj2);
221
222    elm_transit_effect_resizable_flip_add(trans, ELM_TRANSIT_EFFECT_FLIP_AXIS_Y, EINA_TRUE);
223
224    elm_transit_duration_set(trans, 5.0);
225    elm_transit_go(trans);
226 }
227
228 /* Translation, Rotation, Color, Wipe, ImagemAnimation Effect */
229 void
230 test_transit(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
231 {
232    Evas_Object *win, *bg, *bx, *bt, *ic;
233    char buf[PATH_MAX];
234
235    win = elm_win_add(NULL, "transit", ELM_WIN_BASIC);
236    elm_win_title_set(win, "Transit");
237    elm_win_autodel_set(win, EINA_TRUE);
238
239    bg = elm_bg_add(win);
240    elm_win_resize_object_add(win, bg);
241    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
242    evas_object_show(bg);
243
244    bx = elm_box_add(win);
245    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
246    elm_win_resize_object_add(win, bx);
247    evas_object_size_hint_min_set(bx, 318, 318);
248    evas_object_show(bx);
249
250    ic = elm_icon_add(win);
251    snprintf(buf, sizeof(buf), "%s/images/icon_11.png", PACKAGE_DATA_DIR);
252    elm_icon_file_set(ic, buf, NULL);
253    evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
254
255    bt = elm_button_add(win);
256    elm_button_label_set(bt, "ImageAnimation Effect");
257    elm_button_icon_set(bt, ic);
258    elm_box_pack_end(bx, bt);
259    evas_object_show(bt);
260    evas_object_show(ic);
261    evas_object_smart_callback_add(bt, "clicked", _transit_image_animation, ic);
262
263    bt = elm_button_add(win);
264    elm_button_label_set(bt, "Color, Rotation and Translation");
265    elm_box_pack_end(bx, bt);
266    evas_object_show(bt);
267    evas_object_smart_callback_add(bt, "clicked",
268                                   _transit_rotation_translation_color, NULL);
269
270    bt = elm_button_add(win);
271    elm_button_label_set(bt, "Wipe Effect");
272    elm_box_pack_end(bx, bt);
273    evas_object_show(bt);
274    evas_object_smart_callback_add(bt, "clicked", _transit_wipe, NULL);
275
276    evas_object_show(win);
277 }
278
279 /* Resizing Effect */
280 void
281 test_transit2(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
282 {
283    Evas_Object *win, *bg, *bt;
284
285    win = elm_win_add(NULL, "transit2", ELM_WIN_BASIC);
286    elm_win_title_set(win, "Transit 2");
287    elm_win_autodel_set(win, EINA_TRUE);
288    evas_object_resize(win, 400, 400);
289
290    bg = elm_bg_add(win);
291    elm_win_resize_object_add(win, bg);
292    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
293    evas_object_show(bg);
294
295    bt = elm_button_add(win);
296    elm_button_label_set(bt, "Resizing Effect");
297    evas_object_show(bt);
298    evas_object_move(bt, 50, 100);
299    evas_object_resize(bt, 100, 50);
300    evas_object_smart_callback_add(bt, "clicked", _transit_resizing, NULL);
301
302    evas_object_show(win);
303 }
304
305 /* Flip Effect */
306 void
307 test_transit3(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
308 {
309    Evas_Object *win, *bg, *bt, *bt2;
310
311    win = elm_win_add(NULL, "transit3", ELM_WIN_BASIC);
312    elm_win_title_set(win, "Transit 3");
313    elm_win_autodel_set(win, EINA_TRUE);
314    evas_object_resize(win, 300, 300);
315
316    bg = elm_bg_add(win);
317    elm_win_resize_object_add(win, bg);
318    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
319    evas_object_show(bg);
320
321    bt = elm_button_add(win);
322    elm_button_label_set(bt, "Front Button - Flip Effect");
323    evas_object_show(bt);
324    evas_object_move(bt, 50, 50);
325    evas_object_resize(bt, 200, 200);
326
327    bt2 = elm_button_add(win);
328    elm_button_label_set(bt2, "Back Button - Flip Effect");
329    evas_object_move(bt2, 50, 50);
330    evas_object_resize(bt2, 200, 200);
331
332    evas_object_show(win);
333
334    evas_object_smart_callback_add(bt, "clicked", _transit_flip, bt2);
335    evas_object_smart_callback_add(bt2, "clicked", _transit_flip, bt);
336 }
337
338 /* Zoom Effect */
339 void
340 test_transit4(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
341 {
342    Evas_Object *win, *bg, *bt;
343
344    win = elm_win_add(NULL, "transit4", ELM_WIN_BASIC);
345    elm_win_title_set(win, "Transit 4");
346    elm_win_autodel_set(win, EINA_TRUE);
347    evas_object_resize(win, 300, 300);
348
349    bg = elm_bg_add(win);
350    elm_win_resize_object_add(win, bg);
351    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
352    evas_object_show(bg);
353
354    bt = elm_button_add(win);
355    elm_button_label_set(bt, "Zoom Effect");
356    evas_object_resize(bt, 100, 50);
357    evas_object_move(bt, 100, 125); 
358    evas_object_show(bt);
359
360    evas_object_smart_callback_add(bt, "clicked", _transit_zoom, NULL);
361
362    evas_object_show(win);
363 }
364
365 /* Blend Effect */
366 void
367 test_transit5(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
368 {
369    Evas_Object *win, *bg, *bt, *bt2, *ic;
370
371    win = elm_win_add(NULL, "transit5", ELM_WIN_BASIC);
372    elm_win_title_set(win, "Transit 5");
373    elm_win_autodel_set(win, EINA_TRUE);
374    evas_object_resize(win, 300, 300);
375
376    bg = elm_bg_add(win);
377    elm_win_resize_object_add(win, bg);
378    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
379    evas_object_show(bg);
380
381    ic = elm_icon_add(win);
382    elm_icon_file_set(ic, PACKAGE_DATA_DIR"/images/rock_01.jpg", NULL);
383    evas_object_size_hint_max_set(ic, 50, 50);
384
385    bt = elm_button_add(win);
386    elm_button_icon_set(bt, ic);
387    elm_button_label_set(bt, "Before Button - Blend Effect");
388    evas_object_move(bt, 25, 125);
389    evas_object_resize(bt, 250, 50);     
390    evas_object_show(bt);
391
392    ic = elm_icon_add(win);
393    elm_icon_file_set(ic, PACKAGE_DATA_DIR"/images/rock_02.jpg", NULL);
394    evas_object_size_hint_max_set(ic, 50, 50);
395
396    bt2 = elm_button_add(win);
397    elm_button_icon_set(bt2, ic);
398    elm_button_label_set(bt2, "After Button - Blend Effect");
399    evas_object_move(bt2, 25, 125);
400    evas_object_resize(bt2, 250, 50);    
401
402    evas_object_show(win);
403
404    evas_object_smart_callback_add(bt, "clicked", _transit_blend, bt2);
405    evas_object_smart_callback_add(bt2, "clicked", _transit_blend, bt);
406 }
407
408 /* Fade Effect */
409 void
410 test_transit6(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
411 {
412    Evas_Object *win, *bg, *bt, *bt2, *ic;
413
414    win = elm_win_add(NULL, "transit6", ELM_WIN_BASIC);
415    elm_win_title_set(win, "Transit 6");
416    elm_win_autodel_set(win, EINA_TRUE);
417    evas_object_resize(win, 300, 300);
418
419    bg = elm_bg_add(win);
420    elm_win_resize_object_add(win, bg);
421    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
422    evas_object_show(bg);
423
424    ic = elm_icon_add(win);
425    elm_icon_file_set(ic, PACKAGE_DATA_DIR"/images/rock_01.jpg", NULL);
426    evas_object_size_hint_max_set(ic, 50, 50);
427
428    bt = elm_button_add(win);
429    elm_button_icon_set(bt, ic);
430    elm_button_label_set(bt, "Before Button - Fade Effect");
431    evas_object_move(bt, 25, 125);
432    evas_object_resize(bt, 250, 50);     
433    evas_object_show(bt);
434
435    ic = elm_icon_add(win);
436    elm_icon_file_set(ic, PACKAGE_DATA_DIR"/images/rock_02.jpg", NULL);
437    evas_object_size_hint_max_set(ic, 50, 50);
438
439    bt2 = elm_button_add(win);
440    elm_button_icon_set(bt2, ic);
441    elm_button_label_set(bt2, "After Button - Fade Effect");
442    evas_object_move(bt2, 25, 125);
443    evas_object_resize(bt2, 250, 50);    
444
445    evas_object_show(win);
446
447    evas_object_smart_callback_add(bt, "clicked", _transit_fade, bt2);
448    evas_object_smart_callback_add(bt2, "clicked", _transit_fade, bt);
449 }
450
451 /* Resizable Flip Effect */
452 void
453 test_transit7(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
454 {
455    Evas_Object *win, *bg, *bt, *bt2;
456
457    win = elm_win_add(NULL, "transit7", ELM_WIN_BASIC);
458    elm_win_title_set(win, "Transit 7");
459    elm_win_autodel_set(win, EINA_TRUE);
460    evas_object_resize(win, 400, 400);
461
462    bg = elm_bg_add(win);
463    elm_win_resize_object_add(win, bg);
464    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
465    evas_object_show(bg);
466
467    bt = elm_button_add(win);
468    elm_button_label_set(bt, "Front Button - Resizable Flip Effect");
469    evas_object_show(bt);
470    evas_object_move(bt, 50, 100);
471    evas_object_resize(bt, 250, 30); 
472
473    bt2 = elm_button_add(win);
474    elm_button_label_set(bt2, "Back Button - Resizable Flip Effect");
475    evas_object_move(bt2, 50, 100);
476    evas_object_resize(bt2, 300, 200);
477
478    evas_object_show(win);
479
480    evas_object_smart_callback_add(bt, "clicked", _transit_resizable_flip, bt2);
481    evas_object_smart_callback_add(bt2, "clicked", _transit_resizable_flip, bt);
482 }
483
484 /* Custom Effect */
485 void
486 test_transit8(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
487 {
488    Evas_Object *win, *bg, *bt;
489    Elm_Transit *trans;
490    void *effect_context;
491
492    win = elm_win_add(NULL, "transit8", ELM_WIN_BASIC);
493    elm_win_title_set(win, "Transit 8");
494    elm_win_autodel_set(win, EINA_TRUE);
495    evas_object_resize(win, 400, 400);
496
497    bg = elm_bg_add(win);
498    elm_win_resize_object_add(win, bg);
499    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
500    evas_object_show(bg);
501
502    bt = elm_button_add(win);
503    elm_button_label_set(bt, "Button - Custom Effect");
504    evas_object_show(bt);
505    evas_object_move(bt, 50, 100);
506    evas_object_resize(bt, 250, 150);
507
508    evas_object_show(win);
509
510    /* Adding Transit */
511    trans = elm_transit_add();
512    elm_transit_auto_reverse_set(trans, EINA_TRUE);
513    elm_transit_tween_mode_set(trans, ELM_TRANSIT_TWEEN_MODE_DECELERATE);
514    //Negative value makes transition repeate for infinite times. 
515    elm_transit_repeat_times_set(trans, -1);
516    effect_context = _custom_context_new(100, 100, 250, 250);
517    elm_transit_object_add(trans, bt);
518    elm_transit_effect_add(trans,
519                           _custom_op, effect_context,
520                           _custom_context_free);
521    elm_transit_duration_set(trans, 5.0);
522    elm_transit_go(trans);
523 }
524
525 #endif