Swiftgram/example/lottieviewer.cpp
Jaeun Choi d2c954d535 lottie/example: add frame information in lottieviewer example
Change-Id: If9245244bfd3e8d8050e18b5ea09fcaf240a867d
2018-08-23 00:36:25 +00:00

100 lines
2.5 KiB
C++

#include <Elementary.h>
#include "lottieview.h"
#include<iostream>
#include <stdio.h>
using namespace std;
typedef struct _AppInfo AppInfo;
struct _AppInfo {
LottieView *view;
Evas_Object *layout;
};
static void
_win_del_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
{
LottieView *view = (LottieView *)data;
delete view;
}
static void
_slider_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
{
double val = elm_slider_value_get(obj);
AppInfo *info = (AppInfo *)data;
int frameNo = val * info->view->getTotalFrame();
char buf[64];
sprintf(buf, "%d / %ld", frameNo, info->view->getTotalFrame());
elm_object_part_text_set(info->layout, "text", buf);
info->view->seek(val);
info->view->render();
}
EAPI_MAIN int
elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
{
Evas_Object *win, *layout, *slider, *image;
bool renderMode = true;
char buf[64];
AppInfo appInfo;
if (argc > 1) {
if (!strcmp(argv[1], "--disable-render"))
renderMode = false;
}
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
win = elm_win_util_standard_add("lottie", "LottieViewer");
elm_win_autodel_set(win, EINA_TRUE);
evas_object_resize(win, 500, 700);
evas_object_show(win);
layout = elm_layout_add(win);
evas_object_show(layout);
evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
std::string edjPath = DEMO_DIR;
edjPath +="layout.edj";
elm_layout_file_set(layout, edjPath.c_str(), "layout");
elm_win_resize_object_add(win, layout);
std::string filePath = DEMO_DIR;
filePath +="insta_camera.json";
LottieView *view = new LottieView(evas_object_evas_get(win), renderMode);
view->setFilePath(filePath.c_str());
view->setSize(500, 500);
evas_object_smart_callback_add(win, "delete,request", _win_del_cb, (void *)view);
image = view->getImage();
evas_object_show(image);
evas_object_size_hint_min_set(image, 500, 500);
elm_object_part_content_set(layout, "lottie", image);
appInfo.view = view;
appInfo.layout = layout;
slider = elm_slider_add(layout);
evas_object_show(slider);
elm_object_part_content_set(layout, "slider", slider);
evas_object_smart_callback_add(slider, "changed", _slider_cb, (void *)&appInfo);
sprintf(buf, "%d / %ld", 0, view->getTotalFrame());
elm_object_part_text_set(layout, "text", buf);
view->seek(0.0);
view->render();
elm_run();
return 0;
}
ELM_MAIN()