5e80f06d9cf202fb06120633760da08371e616f3
[platform/core/uifw/lottie-player.git] / example / efl_animview.cpp
1 /*\r
2  * Copyright (c) 2018 Samsung Electronics Co., Ltd. All rights reserved.\r
3  *\r
4  * Licensed under the Flora License, Version 1.1 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  *     http://floralicense.org/license/\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 #define EFL_BETA_API_SUPPORT 1\r
18 #define EFL_EO_API_SUPPORT 1\r
19 \r
20 #include <Elementary.h>\r
21 \r
22 #define WIDTH 400\r
23 #define HEIGHT 400\r
24 \r
25 Eo *slider = NULL;\r
26 \r
27 void\r
28 win_del(void *data, Eo *o, void *ev)\r
29 {\r
30    elm_exit();\r
31 }\r
32 \r
33 static void\r
34 btn_clicked_cb(void *data, Eo *obj, void *event_info)\r
35 {\r
36    Eo *anim_view = (Eo *) data;\r
37    const char *text = elm_object_text_get(obj);\r
38 \r
39    if (!text) return;\r
40 \r
41    if (!strcmp("Play", text))\r
42      elm_animation_view_play(anim_view);\r
43    else if (!strcmp("Pause", text))\r
44      elm_animation_view_pause(anim_view);\r
45    else if (!strcmp("Resume", text))\r
46      elm_animation_view_resume(anim_view);\r
47    else if (!strcmp("Play Back", text))\r
48      elm_animation_view_play_back(anim_view);\r
49    else if (!strcmp("Stop", text))\r
50      elm_animation_view_stop(anim_view);\r
51 }\r
52 \r
53 static void\r
54 check_changed_cb(void *data, Eo *obj, void *event_info)\r
55 {\r
56    Eo *anim_view = (Eo *) data;\r
57    elm_animation_view_auto_repeat_set(anim_view, elm_check_state_get(obj));\r
58 }\r
59 \r
60 static void\r
61 speed_changed_cb(void *data, Eo *obj, void *event_info)\r
62 {\r
63    Eo *anim_view = (Eo *) data;\r
64    double speed = 1;\r
65    if (elm_check_state_get(obj)) speed = 0.25;\r
66    elm_animation_view_speed_set(anim_view, speed);\r
67 }\r
68 \r
69 static void\r
70 update_anim_view_state(Eo *anim_view, Eo *label)\r
71 {\r
72    Elm_Animation_View_State state = elm_animation_view_state_get(anim_view);\r
73 \r
74    switch (state)\r
75      {\r
76       case ELM_ANIMATION_VIEW_STATE_NOT_READY:\r
77          elm_object_text_set(label, "State = Not Ready");\r
78          break;\r
79       case ELM_ANIMATION_VIEW_STATE_PLAY:\r
80          elm_object_text_set(label, "State = Playing");\r
81          break;\r
82       case ELM_ANIMATION_VIEW_STATE_PLAY_BACK:\r
83          elm_object_text_set(label, "State = Playing Back");\r
84          break;\r
85       case ELM_ANIMATION_VIEW_STATE_PAUSE:\r
86          elm_object_text_set(label, "State = Paused");\r
87          break;\r
88       case ELM_ANIMATION_VIEW_STATE_STOP:\r
89          elm_object_text_set(label, "State = Stopped");\r
90          break;\r
91      }\r
92 }\r
93 \r
94 static void\r
95 _play_done(void *data, Eo *obj, void *ev)\r
96 {\r
97    printf("done!\n");\r
98 }\r
99 \r
100 static void\r
101 _play_updated(void *data, Eo *obj, void *ev)\r
102 {\r
103    Eo *slider = (Eo *) data;\r
104    elm_slider_value_set(slider, elm_animation_view_keyframe_get(obj));\r
105 }\r
106 \r
107 static void\r
108 _state_update(void *data, Eo *obj, void *ev)\r
109 {\r
110    Eo *label = (Eo *) data;\r
111    update_anim_view_state(obj, label);\r
112 }\r
113 \r
114 static void\r
115 _play_repeated(void *data, Eo *obj, void *ev)\r
116 {\r
117    printf("repeated!\n");\r
118 }\r
119 \r
120 static void\r
121 _slider_drag_cb(void *data, Eo *obj, void *ev)\r
122 {\r
123    Eo *anim_view = (Eo *) data;\r
124    elm_animation_view_keyframe_set(anim_view, elm_slider_value_get(obj));\r
125 }\r
126 \r
127 static void\r
128 _slider_reset(void *data, Eo *obj, void *ev)\r
129 {\r
130    Eo *slider = (Eo *) data;\r
131    elm_slider_value_set(slider, 0);\r
132 }\r
133 \r
134 Eo *\r
135 anim_view_test(Eo *parent, const char *path)\r
136 {\r
137    Eo *box = elm_box_add(parent);\r
138    evas_object_size_hint_weight_set(box, 1, 1);\r
139    evas_object_show(box);\r
140 \r
141    //State Text\r
142    Eo *label = elm_label_add(box);\r
143    evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0);\r
144    evas_object_size_hint_align_set(label, 0.5, 0);\r
145    evas_object_show(label);\r
146    elm_box_pack_end(box, label);\r
147 \r
148    //Animation View\r
149    Eo *anim_view = elm_animation_view_add(box);\r
150    evas_object_size_hint_align_set(anim_view, EVAS_HINT_FILL, EVAS_HINT_FILL);\r
151    elm_animation_view_file_set(anim_view, path, NULL);\r
152    evas_object_size_hint_weight_set(anim_view, 1, 1);\r
153    evas_object_show(anim_view);\r
154    elm_box_pack_end(box, anim_view);\r
155 \r
156    //Controller Set: 0\r
157    Eo *box2 = elm_box_add(box);\r
158    evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, 0);\r
159    evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, 1);\r
160    elm_box_horizontal_set(box2, EINA_TRUE);\r
161    elm_box_pack_end(box, box2);\r
162    evas_object_show(box2);\r
163 \r
164 \r
165    //Loop\r
166    Eo *check = elm_check_add(box2);\r
167    evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, 0);\r
168    evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);\r
169    elm_object_text_set(check, "Loop");\r
170    evas_object_smart_callback_add(check, "changed", check_changed_cb, anim_view);\r
171    evas_object_show(check);\r
172    elm_box_pack_end(box2, check);\r
173 \r
174    //Speed: 0.5x\r
175    Eo *check2 = elm_check_add(box2);\r
176    evas_object_size_hint_weight_set(check2, EVAS_HINT_EXPAND, 0);\r
177    evas_object_size_hint_align_set(check2, EVAS_HINT_FILL, EVAS_HINT_FILL);\r
178    elm_object_text_set(check2, "Speed: 0.25x");\r
179    evas_object_smart_callback_add(check2, "changed", speed_changed_cb, anim_view);\r
180    evas_object_show(check2);\r
181    elm_box_pack_end(box2, check2);\r
182 \r
183    //Duration Text\r
184    Eo *label2 = elm_label_add(box2);\r
185    evas_object_size_hint_weight_set(label2, EVAS_HINT_EXPAND, 0);\r
186    evas_object_size_hint_align_set(label2, 0.5, 0);\r
187    evas_object_show(label2);\r
188    elm_box_pack_end(box2, label2);\r
189    char buf[50];\r
190    snprintf(buf, sizeof(buf), "Duration: %1.2fs", elm_animation_view_duration_time_get(anim_view));\r
191    elm_object_text_set(label2, buf);\r
192 \r
193    //Slider\r
194    Eo *slider = elm_slider_add(box);\r
195    elm_slider_indicator_show_set(slider, EINA_TRUE);\r
196    elm_slider_indicator_format_set(slider, "%1.2f");\r
197    elm_slider_min_max_set(slider, 0, 1);\r
198    evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0);\r
199    evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, EVAS_HINT_FILL);\r
200    evas_object_smart_callback_add(slider, "changed", _slider_drag_cb, anim_view);\r
201    evas_object_show(slider);\r
202    elm_box_pack_end(box, slider);\r
203 \r
204    //Controller Set: 1\r
205    Eo *box3 = elm_box_add(box);\r
206    evas_object_size_hint_weight_set(box3, EVAS_HINT_EXPAND, 0);\r
207    evas_object_size_hint_align_set(box3, EVAS_HINT_FILL, 1);\r
208    elm_box_horizontal_set(box3, EINA_TRUE);\r
209    elm_box_pack_end(box, box3);\r
210    evas_object_show(box3);\r
211 \r
212    Eo *btn;\r
213 \r
214    //Play Button\r
215    btn = elm_button_add(box3);\r
216    evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0);\r
217    evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);\r
218    elm_object_text_set(btn, "Play");\r
219    evas_object_show(btn);\r
220    evas_object_smart_callback_add(btn, "clicked", btn_clicked_cb, anim_view);\r
221    elm_box_pack_end(box3, btn);\r
222 \r
223    //Play Back Button\r
224    btn = elm_button_add(box3);\r
225    evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0);\r
226    evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);\r
227    elm_object_text_set(btn, "Play Back");\r
228    evas_object_smart_callback_add(btn, "clicked", btn_clicked_cb, anim_view);\r
229    evas_object_show(btn);\r
230    elm_box_pack_end(box3, btn);\r
231 \r
232    //Stop Button\r
233    btn = elm_button_add(box3);\r
234    evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0);\r
235    evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);\r
236    elm_object_text_set(btn, "Stop");\r
237    evas_object_smart_callback_add(btn, "clicked", btn_clicked_cb, anim_view);\r
238    evas_object_show(btn);\r
239    elm_box_pack_end(box3, btn);\r
240 \r
241    //Controller Set: 2\r
242    Eo *box4 = elm_box_add(box);\r
243    evas_object_size_hint_weight_set(box4, EVAS_HINT_EXPAND, 0);\r
244    evas_object_size_hint_align_set(box4, EVAS_HINT_FILL, 1);\r
245    elm_box_horizontal_set(box4, EINA_TRUE);\r
246    elm_box_pack_end(box, box4);\r
247    evas_object_show(box4);\r
248 \r
249    //Pause Button\r
250    btn = elm_button_add(box4);\r
251    elm_object_text_set(btn, "Pause");\r
252    evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0);\r
253    evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);\r
254    evas_object_smart_callback_add(btn, "clicked", btn_clicked_cb, anim_view);\r
255    evas_object_show(btn);\r
256    elm_box_pack_end(box4, btn);\r
257 \r
258    //Resume Button\r
259    btn = elm_button_add(box4);\r
260    evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0);\r
261    evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);\r
262    elm_object_text_set(btn, "Resume");\r
263    evas_object_smart_callback_add(btn, "clicked", btn_clicked_cb, anim_view);\r
264    evas_object_show(btn);\r
265    elm_box_pack_end(box4, btn);\r
266 \r
267    evas_object_smart_callback_add(anim_view, "play,start", _state_update, label);\r
268    evas_object_smart_callback_add(anim_view, "play,stop", _state_update, label);\r
269    evas_object_smart_callback_add(anim_view, "play,pause", _state_update, label);\r
270    evas_object_smart_callback_add(anim_view, "play,resume", _state_update, label);\r
271 \r
272    evas_object_smart_callback_add(anim_view, "play,repeat", _play_repeated, label);\r
273    evas_object_smart_callback_add(anim_view, "play,done", _play_done, label);\r
274 \r
275    evas_object_smart_callback_add(anim_view, "play,update", _play_updated, slider);\r
276    evas_object_smart_callback_add(anim_view, "play,stop", _slider_reset, slider);\r
277 \r
278    update_anim_view_state(anim_view, label);\r
279 \r
280    return box;\r
281 \r
282 }\r
283 \r
284 int\r
285 main(int argc, char **argv)\r
286 {\r
287    setenv("ECTOR_BACKEND", "default", 1);\r
288    setenv("ELM_ACCEL", "gl", 1);\r
289 \r
290    elm_init(argc, argv);\r
291 \r
292    Eo *win = elm_win_util_standard_add(NULL, "test");\r
293    evas_object_smart_callback_add(win, "delete,request", win_del, 0);\r
294    elm_win_autodel_set(win, 1);\r
295 \r
296    char path[PATH_MAX];\r
297 \r
298    if (argc == 1)\r
299      {\r
300         printf("Usage: efl_animview [input_file]\n");\r
301         return 0;\r
302      }\r
303    else snprintf(path, sizeof(path), "%s/%s", DEMO_DIR, "heart.json");\r
304 \r
305    Eo *content = anim_view_test(win, path);\r
306 \r
307    elm_win_resize_object_add(win, content);\r
308 \r
309    evas_object_resize(win, WIDTH, HEIGHT);\r
310    evas_object_show(win);\r
311 \r
312    elm_run();\r
313 \r
314    elm_shutdown();\r
315 \r
316    return 0;\r
317 }\r