efl_animview.cpp 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. /*
  2. * Copyright (c) 2018 Samsung Electronics Co., Ltd. All rights reserved.
  3. *
  4. * This library is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU Lesser General Public
  6. * License as published by the Free Software Foundation; either
  7. * version 2.1 of the License, or (at your option) any later version.
  8. *
  9. * This library is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. * Lesser General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU Lesser General Public
  15. * License along with this library; if not, write to the Free Software
  16. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  17. */
  18. #define EFL_BETA_API_SUPPORT 1
  19. #define EFL_EO_API_SUPPORT 1
  20. #include <Elementary.h>
  21. #define WIDTH 400
  22. #define HEIGHT 400
  23. void
  24. win_del(void *data EINA_UNUSED, Eo *o EINA_UNUSED, void *event_info EINA_UNUSED)
  25. {
  26. elm_exit();
  27. }
  28. static void
  29. btn_clicked_cb(void *data, Eo *obj, void *event_info EINA_UNUSED)
  30. {
  31. Eo *anim_view = (Eo *) data;
  32. const char *text = elm_object_text_get(obj);
  33. if (!text) return;
  34. if (!strcmp("Play", text))
  35. elm_animation_view_play(anim_view);
  36. else if (!strcmp("Pause", text))
  37. elm_animation_view_pause(anim_view);
  38. else if (!strcmp("Resume", text))
  39. elm_animation_view_resume(anim_view);
  40. else if (!strcmp("Play Back", text))
  41. elm_animation_view_play_back(anim_view);
  42. else if (!strcmp("Stop", text))
  43. elm_animation_view_stop(anim_view);
  44. }
  45. static void
  46. check_changed_cb(void *data, Eo *obj, void *event_info EINA_UNUSED)
  47. {
  48. Eo *anim_view = (Eo *) data;
  49. elm_animation_view_auto_repeat_set(anim_view, elm_check_state_get(obj));
  50. }
  51. static void
  52. speed_changed_cb(void *data, Eo *obj, void *event_info EINA_UNUSED)
  53. {
  54. Eo *anim_view = (Eo *) data;
  55. double speed = 1;
  56. if (elm_check_state_get(obj)) speed = 0.25;
  57. elm_animation_view_speed_set(anim_view, speed);
  58. }
  59. static void
  60. update_anim_view_state(Eo *anim_view, Eo *label)
  61. {
  62. Elm_Animation_View_State state = elm_animation_view_state_get(anim_view);
  63. switch (state)
  64. {
  65. case ELM_ANIMATION_VIEW_STATE_NOT_READY:
  66. elm_object_text_set(label, "State = Not Ready");
  67. break;
  68. case ELM_ANIMATION_VIEW_STATE_PLAY:
  69. elm_object_text_set(label, "State = Playing");
  70. break;
  71. case ELM_ANIMATION_VIEW_STATE_PLAY_BACK:
  72. elm_object_text_set(label, "State = Playing Back");
  73. break;
  74. case ELM_ANIMATION_VIEW_STATE_PAUSE:
  75. elm_object_text_set(label, "State = Paused");
  76. break;
  77. case ELM_ANIMATION_VIEW_STATE_STOP:
  78. elm_object_text_set(label, "State = Stopped");
  79. break;
  80. }
  81. }
  82. static void
  83. _play_done(void *data EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info EINA_UNUSED)
  84. {
  85. printf("done!\n");
  86. }
  87. static void
  88. _play_updated(void *data, Eo *obj, void *event_info EINA_UNUSED)
  89. {
  90. Eo *slider = (Eo *) data;
  91. elm_slider_value_set(slider, elm_animation_view_progress_get(obj));
  92. }
  93. static void
  94. _state_update(void *data, Eo *obj, void *event_info EINA_UNUSED)
  95. {
  96. Eo *label = (Eo *) data;
  97. update_anim_view_state(obj, label);
  98. }
  99. static void
  100. _play_repeated(void *data EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info EINA_UNUSED)
  101. {
  102. printf("repeated!\n");
  103. }
  104. static void
  105. _slider_drag_cb(void *data, Eo *obj, void *event_info EINA_UNUSED)
  106. {
  107. Eo *anim_view = (Eo *) data;
  108. elm_animation_view_progress_set(anim_view, elm_slider_value_get(obj));
  109. }
  110. static void
  111. _slider_reset(void *data, Eo *obj EINA_UNUSED, void *event_info EINA_UNUSED)
  112. {
  113. Eo *slider = (Eo *) data;
  114. elm_slider_value_set(slider, 0);
  115. }
  116. Eo *
  117. anim_view_test(Eo *parent, const char *path)
  118. {
  119. Eo *box = elm_box_add(parent);
  120. evas_object_size_hint_weight_set(box, 1, 1);
  121. evas_object_show(box);
  122. //State Text
  123. Eo *label = elm_label_add(box);
  124. evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0);
  125. evas_object_size_hint_align_set(label, 0.5, 0);
  126. evas_object_show(label);
  127. elm_box_pack_end(box, label);
  128. //Animation View
  129. Eo *anim_view = elm_animation_view_add(box);
  130. evas_object_size_hint_align_set(anim_view, EVAS_HINT_FILL, EVAS_HINT_FILL);
  131. elm_animation_view_file_set(anim_view, path, NULL);
  132. evas_object_size_hint_weight_set(anim_view, 1, 1);
  133. evas_object_show(anim_view);
  134. elm_box_pack_end(box, anim_view);
  135. //Controller Set: 0
  136. Eo *box2 = elm_box_add(box);
  137. evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, 0);
  138. evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, 1);
  139. elm_box_horizontal_set(box2, EINA_TRUE);
  140. elm_box_pack_end(box, box2);
  141. evas_object_show(box2);
  142. //Loop
  143. Eo *check = elm_check_add(box2);
  144. evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, 0);
  145. evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
  146. elm_object_text_set(check, "Loop");
  147. evas_object_smart_callback_add(check, "changed", check_changed_cb, anim_view);
  148. evas_object_show(check);
  149. elm_box_pack_end(box2, check);
  150. //Speed: 0.5x
  151. Eo *check2 = elm_check_add(box2);
  152. evas_object_size_hint_weight_set(check2, EVAS_HINT_EXPAND, 0);
  153. evas_object_size_hint_align_set(check2, EVAS_HINT_FILL, EVAS_HINT_FILL);
  154. elm_object_text_set(check2, "Speed: 0.25x");
  155. evas_object_smart_callback_add(check2, "changed", speed_changed_cb, anim_view);
  156. evas_object_show(check2);
  157. elm_box_pack_end(box2, check2);
  158. //Duration Text
  159. Eo *label2 = elm_label_add(box2);
  160. evas_object_size_hint_weight_set(label2, EVAS_HINT_EXPAND, 0);
  161. evas_object_size_hint_align_set(label2, 0.5, 0);
  162. evas_object_show(label2);
  163. elm_box_pack_end(box2, label2);
  164. char buf[50];
  165. snprintf(buf, sizeof(buf), "Duration: %1.2fs", elm_animation_view_duration_time_get(anim_view));
  166. elm_object_text_set(label2, buf);
  167. //Slider
  168. Eo *slider = elm_slider_add(box);
  169. elm_slider_indicator_show_set(slider, EINA_TRUE);
  170. elm_slider_indicator_format_set(slider, "%1.2f");
  171. elm_slider_min_max_set(slider, 0, 1);
  172. evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0);
  173. evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, EVAS_HINT_FILL);
  174. evas_object_smart_callback_add(slider, "changed", _slider_drag_cb, anim_view);
  175. evas_object_show(slider);
  176. elm_box_pack_end(box, slider);
  177. //Controller Set: 1
  178. Eo *box3 = elm_box_add(box);
  179. evas_object_size_hint_weight_set(box3, EVAS_HINT_EXPAND, 0);
  180. evas_object_size_hint_align_set(box3, EVAS_HINT_FILL, 1);
  181. elm_box_horizontal_set(box3, EINA_TRUE);
  182. elm_box_pack_end(box, box3);
  183. evas_object_show(box3);
  184. Eo *btn;
  185. //Play Button
  186. btn = elm_button_add(box3);
  187. evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0);
  188. evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
  189. elm_object_text_set(btn, "Play");
  190. evas_object_show(btn);
  191. evas_object_smart_callback_add(btn, "clicked", btn_clicked_cb, anim_view);
  192. elm_box_pack_end(box3, btn);
  193. //Play Back Button
  194. btn = elm_button_add(box3);
  195. evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0);
  196. evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
  197. elm_object_text_set(btn, "Play Back");
  198. evas_object_smart_callback_add(btn, "clicked", btn_clicked_cb, anim_view);
  199. evas_object_show(btn);
  200. elm_box_pack_end(box3, btn);
  201. //Stop Button
  202. btn = elm_button_add(box3);
  203. evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0);
  204. evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
  205. elm_object_text_set(btn, "Stop");
  206. evas_object_smart_callback_add(btn, "clicked", btn_clicked_cb, anim_view);
  207. evas_object_show(btn);
  208. elm_box_pack_end(box3, btn);
  209. //Controller Set: 2
  210. Eo *box4 = elm_box_add(box);
  211. evas_object_size_hint_weight_set(box4, EVAS_HINT_EXPAND, 0);
  212. evas_object_size_hint_align_set(box4, EVAS_HINT_FILL, 1);
  213. elm_box_horizontal_set(box4, EINA_TRUE);
  214. elm_box_pack_end(box, box4);
  215. evas_object_show(box4);
  216. //Pause Button
  217. btn = elm_button_add(box4);
  218. elm_object_text_set(btn, "Pause");
  219. evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0);
  220. evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
  221. evas_object_smart_callback_add(btn, "clicked", btn_clicked_cb, anim_view);
  222. evas_object_show(btn);
  223. elm_box_pack_end(box4, btn);
  224. //Resume Button
  225. btn = elm_button_add(box4);
  226. evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0);
  227. evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
  228. elm_object_text_set(btn, "Resume");
  229. evas_object_smart_callback_add(btn, "clicked", btn_clicked_cb, anim_view);
  230. evas_object_show(btn);
  231. elm_box_pack_end(box4, btn);
  232. evas_object_smart_callback_add(anim_view, "play,start", _state_update, label);
  233. evas_object_smart_callback_add(anim_view, "play,stop", _state_update, label);
  234. evas_object_smart_callback_add(anim_view, "play,pause", _state_update, label);
  235. evas_object_smart_callback_add(anim_view, "play,resume", _state_update, label);
  236. evas_object_smart_callback_add(anim_view, "play,repeat", _play_repeated, label);
  237. evas_object_smart_callback_add(anim_view, "play,done", _play_done, label);
  238. evas_object_smart_callback_add(anim_view, "play,update", _play_updated, slider);
  239. evas_object_smart_callback_add(anim_view, "play,stop", _slider_reset, slider);
  240. update_anim_view_state(anim_view, label);
  241. return box;
  242. }
  243. int
  244. main(int argc, char **argv)
  245. {
  246. setenv("ECTOR_BACKEND", "default", 1);
  247. setenv("ELM_ACCEL", "gl", 1);
  248. elm_init(argc, argv);
  249. Eo *win = elm_win_util_standard_add(NULL, "test");
  250. evas_object_smart_callback_add(win, "delete,request", win_del, 0);
  251. elm_win_autodel_set(win, 1);
  252. char path[PATH_MAX];
  253. if (argc == 1)
  254. {
  255. printf("Usage: efl_animview [input_file]\n");
  256. return 0;
  257. }
  258. else snprintf(path, sizeof(path), "%s", argv[1]);
  259. Eo *content = anim_view_test(win, path);
  260. elm_win_resize_object_add(win, content);
  261. evas_object_resize(win, WIDTH, HEIGHT);
  262. evas_object_show(win);
  263. elm_run();
  264. elm_shutdown();
  265. return 0;
  266. }