9e80c5596c0874bacaf39e6966f0797e6d40986b
[platform/core/uifw/lottie-player.git] / example / lottieviewer.cpp
1 #include <Elementary.h>
2 #include "lottieview.h"
3 #include<iostream>
4 #include <stdio.h>
5
6 using namespace std;
7
8 typedef struct _AppInfo AppInfo;
9 struct _AppInfo {
10    LottieView *view;
11    Evas_Object *layout;
12 };
13
14 static void
15 _win_del_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
16 {
17     LottieView *view = (LottieView *)data;
18     delete view;
19 }
20
21 static void
22 _slider_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
23 {
24    double val = elm_slider_value_get(obj);
25    AppInfo *info = (AppInfo *)data;
26
27    int frameNo = val * info->view->getTotalFrame();
28    char buf[64];
29
30    sprintf(buf, "%d / %ld", frameNo, info->view->getTotalFrame());
31
32    elm_object_part_text_set(info->layout, "text", buf);
33
34    info->view->seek(val);
35    info->view->render();
36 }
37
38 EAPI_MAIN int
39 elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
40 {
41    Evas_Object *win, *layout, *slider, *image;
42    bool renderMode = true;
43    char buf[64];
44    AppInfo appInfo;
45
46    if (argc > 1) {
47       if (!strcmp(argv[1], "--disable-render"))
48          renderMode = false;
49    }
50
51    elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
52    win = elm_win_util_standard_add("lottie", "LottieViewer");
53    elm_win_autodel_set(win, EINA_TRUE);
54    evas_object_resize(win, 500, 700);
55    evas_object_show(win);
56
57    layout = elm_layout_add(win);
58    evas_object_show(layout);
59    evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
60
61    std::string edjPath = DEMO_DIR;
62    edjPath +="layout.edj";
63
64    elm_layout_file_set(layout, edjPath.c_str(), "layout");
65    elm_win_resize_object_add(win, layout);
66
67    std::string filePath = DEMO_DIR;
68    filePath +="insta_camera.json";
69
70    LottieView *view = new LottieView(evas_object_evas_get(win), renderMode);
71    view->setFilePath(filePath.c_str());
72    view->setSize(500, 500);
73
74    evas_object_smart_callback_add(win, "delete,request", _win_del_cb, (void *)view);
75
76    image = view->getImage();
77    evas_object_show(image);
78    evas_object_size_hint_min_set(image, 500, 500);
79    elm_object_part_content_set(layout, "lottie", image);
80
81    appInfo.view = view;
82    appInfo.layout = layout;
83
84    slider = elm_slider_add(layout);
85    evas_object_show(slider);
86    elm_object_part_content_set(layout, "slider", slider);
87    evas_object_smart_callback_add(slider, "changed", _slider_cb, (void *)&appInfo);
88
89    sprintf(buf, "%d / %ld", 0, view->getTotalFrame());
90    elm_object_part_text_set(layout, "text", buf);
91
92    view->seek(0.0);
93    view->render();
94
95    elm_run();
96
97    return 0;
98 }
99 ELM_MAIN()