efl
237 строк · 8.7 Кб
1#ifdef HAVE_CONFIG_H
2# include "elementary_config.h"
3#endif
4#include <Elementary.h>
5
6typedef struct _App_Data
7{
8Efl_Canvas_Animation *cw_45_degrees_anim;
9Efl_Canvas_Animation *ccw_45_degrees_anim;
10Elm_Button *button;
11
12Eina_Bool is_btn_rotated;
13} App_Data;
14
15static void
16_anim_changed_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
17{
18Eo *anim = event->info;
19
20if (anim)
21{
22printf("Animation has been started!\n");
23}
24else
25{
26printf("Animation has been ended!\n");
27}
28}
29
30static void
31_anim_running_cb(void *data EINA_UNUSED, const Efl_Event *event)
32{
33double *progress = event->info;
34printf("Animation is running! Current progress(%lf)\n", *progress);
35}
36
37EFL_CALLBACKS_ARRAY_DEFINE(animation_stats_cb,
38{EFL_CANVAS_OBJECT_ANIMATION_EVENT_ANIMATION_CHANGED, _anim_changed_cb },
39{EFL_CANVAS_OBJECT_ANIMATION_EVENT_ANIMATION_PROGRESS_UPDATED, _anim_running_cb },
40)
41
42static void
43_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
44{
45App_Data *ad = data;
46
47ad->is_btn_rotated = !(ad->is_btn_rotated);
48
49if (ad->is_btn_rotated)
50{
51//Create Animation Object from Animation
52efl_canvas_object_animation_start(ad->button, ad->cw_45_degrees_anim, 1.0, 0.0);
53efl_text_set(obj, "Start Rotate Animation from 45 to 0 degrees");
54}
55else
56{
57//Create Animation Object from Animation
58efl_canvas_object_animation_start(ad->button, ad->ccw_45_degrees_anim, 1.0, 0.0);
59efl_text_set(obj, "Start Rotate Animation from 0 to 45 degrees");
60}
61}
62
63static void
64_win_del_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
65{
66App_Data *ad = data;
67free(ad);
68}
69
70void
71test_efl_anim_rotate(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
72{
73App_Data *ad = calloc(1, sizeof(App_Data));
74if (!ad) return;
75
76Evas_Object *win = elm_win_add(NULL, "Efl Animation Rotate", ELM_WIN_BASIC);
77elm_win_title_set(win, "Efl Animation Rotate");
78elm_win_autodel_set(win, EINA_TRUE);
79evas_object_smart_callback_add(win, "delete,request", _win_del_cb, ad);
80
81//Button to be animated
82Evas_Object *btn = elm_button_add(win);
83elm_object_text_set(btn, "Target");
84evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
85evas_object_resize(btn, 150, 150);
86evas_object_move(btn, 125, 100);
87evas_object_show(btn);
88efl_event_callback_array_add(btn, animation_stats_cb(), ad);
89
90//Rotate from 0 to 45 degrees Animation
91Efl_Canvas_Animation *cw_45_degrees_anim = efl_add(EFL_CANVAS_ROTATE_ANIMATION_CLASS, win);
92efl_animation_rotate_set(cw_45_degrees_anim, 0.0, 45.0, NULL, EINA_VECTOR2(0.5, 0.5));
93efl_animation_duration_set(cw_45_degrees_anim, 1.0);
94efl_animation_final_state_keep_set(cw_45_degrees_anim, EINA_TRUE);
95
96//Rotate from 45 to 0 degrees Animation
97Efl_Canvas_Animation *ccw_45_degrees_anim = efl_add(EFL_CANVAS_ROTATE_ANIMATION_CLASS, win);
98efl_animation_rotate_set(ccw_45_degrees_anim, 45.0, 0.0, NULL, EINA_VECTOR2(0.5, 0.5));
99efl_animation_duration_set(ccw_45_degrees_anim, 1.0);
100efl_animation_final_state_keep_set(ccw_45_degrees_anim, EINA_TRUE);
101
102//Initialize App Data
103ad->cw_45_degrees_anim = cw_45_degrees_anim;
104ad->ccw_45_degrees_anim = ccw_45_degrees_anim;
105ad->button = btn;
106ad->is_btn_rotated = EINA_FALSE;
107
108//Button to start animation
109Evas_Object *btn2 = elm_button_add(win);
110elm_object_text_set(btn2, "Start Rotate Animation from 0 to 45 degrees");
111evas_object_smart_callback_add(btn2, "clicked", _btn_clicked_cb, ad);
112evas_object_size_hint_weight_set(btn2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
113evas_object_resize(btn2, 300, 50);
114evas_object_move(btn2, 50, 300);
115evas_object_show(btn2);
116
117evas_object_resize(win, 400, 400);
118evas_object_show(win);
119}
120
121void
122test_efl_anim_rotate_relative(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
123{
124App_Data *ad = calloc(1, sizeof(App_Data));
125if (!ad) return;
126
127Evas_Object *win = elm_win_add(NULL, "Efl Animation Relative Rotate", ELM_WIN_BASIC);
128elm_win_title_set(win, "Efl Animation Relative Rotate");
129elm_win_autodel_set(win, EINA_TRUE);
130evas_object_smart_callback_add(win, "delete,request", _win_del_cb, ad);
131
132//Button to be animated
133Evas_Object *btn = elm_button_add(win);
134elm_object_text_set(btn, "Target");
135evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
136evas_object_resize(btn, 150, 150);
137evas_object_move(btn, 125, 100);
138evas_object_show(btn);
139efl_event_callback_array_add(btn, animation_stats_cb(), ad);
140
141//Pivot to be center of the rotation
142Evas_Object *pivot = elm_button_add(win);
143elm_object_text_set(pivot, "Pivot");
144evas_object_size_hint_weight_set(pivot, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
145evas_object_resize(pivot, 50, 50);
146evas_object_move(pivot, 350, 150);
147evas_object_show(pivot);
148
149//Rotate from 0 to 45 degrees Animation
150Efl_Canvas_Animation *cw_45_degrees_anim = efl_add(EFL_CANVAS_ROTATE_ANIMATION_CLASS, win);
151efl_animation_rotate_set(cw_45_degrees_anim, 0.0, 45.0, pivot, EINA_VECTOR2(0.5, 0.5));
152efl_animation_duration_set(cw_45_degrees_anim, 1.0);
153efl_animation_final_state_keep_set(cw_45_degrees_anim, EINA_TRUE);
154
155//Rotate from 45 to 0 degrees Animation
156Efl_Canvas_Animation *ccw_45_degrees_anim = efl_add(EFL_CANVAS_ROTATE_ANIMATION_CLASS, win);
157efl_animation_rotate_set(ccw_45_degrees_anim, 45.0, 0.0, pivot, EINA_VECTOR2(0.5, 0.5));
158efl_animation_duration_set(ccw_45_degrees_anim, 1.0);
159efl_animation_final_state_keep_set(ccw_45_degrees_anim, EINA_TRUE);
160
161//Initialize App Data
162ad->cw_45_degrees_anim = cw_45_degrees_anim;
163ad->ccw_45_degrees_anim = ccw_45_degrees_anim;
164ad->is_btn_rotated = EINA_FALSE;
165ad->button = btn;
166
167//Button to start animation
168Evas_Object *btn2 = elm_button_add(win);
169elm_object_text_set(btn2, "Start Rotate Animation from 0 to 45 degrees");
170evas_object_smart_callback_add(btn2, "clicked", _btn_clicked_cb, ad);
171evas_object_size_hint_weight_set(btn2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
172evas_object_resize(btn2, 300, 50);
173evas_object_move(btn2, 50, 300);
174evas_object_show(btn2);
175
176evas_object_resize(win, 400, 400);
177evas_object_show(win);
178}
179
180void
181test_efl_anim_rotate_absolute(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
182{
183App_Data *ad = calloc(1, sizeof(App_Data));
184if (!ad) return;
185
186Evas_Object *win = elm_win_add(NULL, "Efl Animation Absolute Rotate", ELM_WIN_BASIC);
187elm_win_title_set(win, "Efl Animation Absolute Rotate");
188elm_win_autodel_set(win, EINA_TRUE);
189evas_object_smart_callback_add(win, "delete,request", _win_del_cb, ad);
190
191//Button to be animated
192Evas_Object *btn = elm_button_add(win);
193elm_object_text_set(btn, "Target");
194evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
195evas_object_resize(btn, 150, 150);
196evas_object_move(btn, 125, 100);
197evas_object_show(btn);
198efl_event_callback_array_add(btn, animation_stats_cb(), ad);
199
200//Absolute coordinate (0, 0) to be center of the rotation
201Evas_Object *abs_center = elm_button_add(win);
202elm_object_text_set(abs_center, "(0, 0)");
203evas_object_size_hint_weight_set(abs_center, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
204evas_object_resize(abs_center, 50, 50);
205evas_object_move(abs_center, 0, 0);
206evas_object_show(abs_center);
207
208//Rotate from 0 to 45 degrees Animation
209Efl_Canvas_Animation *cw_45_degrees_anim = efl_add(EFL_CANVAS_ROTATE_ANIMATION_CLASS, win);
210efl_animation_rotate_absolute_set(cw_45_degrees_anim, 0.0, 45.0, EINA_POSITION2D(0, 0));
211efl_animation_duration_set(cw_45_degrees_anim, 1.0);
212efl_animation_final_state_keep_set(cw_45_degrees_anim, EINA_TRUE);
213
214//Rotate from 45 to 0 degrees Animation
215Efl_Canvas_Animation *ccw_45_degrees_anim = efl_add(EFL_CANVAS_ROTATE_ANIMATION_CLASS, win);
216efl_animation_rotate_absolute_set(ccw_45_degrees_anim, 45.0, 0.0, EINA_POSITION2D(0, 0));
217efl_animation_duration_set(ccw_45_degrees_anim, 1.0);
218efl_animation_final_state_keep_set(ccw_45_degrees_anim, EINA_TRUE);
219
220//Initialize App Data
221ad->cw_45_degrees_anim = cw_45_degrees_anim;
222ad->ccw_45_degrees_anim = ccw_45_degrees_anim;
223ad->is_btn_rotated = EINA_FALSE;
224ad->button = btn;
225
226//Button to start animation
227Evas_Object *btn2 = elm_button_add(win);
228elm_object_text_set(btn2, "Start Rotate Animation from 0 to 45 degrees");
229evas_object_smart_callback_add(btn2, "clicked", _btn_clicked_cb, ad);
230evas_object_size_hint_weight_set(btn2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
231evas_object_resize(btn2, 300, 50);
232evas_object_move(btn2, 50, 300);
233evas_object_show(btn2);
234
235evas_object_resize(win, 400, 400);
236evas_object_show(win);
237}
238