From 0a01099cbe3c167a174f85deda437d6b96d817ec Mon Sep 17 00:00:00 2001 From: Michal Maciola Date: Tue, 6 Sep 2022 12:26:02 +0200 Subject: [PATCH] example: lottieviewer - fixed frame no There is a problem (issue #527) with totalFrame() in rlottie. As lottieviewer didn't showed the actual frame number, but calculated it from progress, it camouflaged the problem. Now the actual frame number and the total number of frames are displayed. --- example/lottieview.cpp | 1 - example/lottieviewer.cpp | 23 +++++++++++------------ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/example/lottieview.cpp b/example/lottieview.cpp index d1fc9f26..7fdf903b 100644 --- a/example/lottieview.cpp +++ b/example/lottieview.cpp @@ -109,7 +109,6 @@ void LottieView::seek(float pos) { if (!mRenderDelegate) return; - mPos = mapProgress(pos); // check if the pos maps to the current frame diff --git a/example/lottieviewer.cpp b/example/lottieviewer.cpp index 8a09ea76..d3d86f35 100644 --- a/example/lottieviewer.cpp +++ b/example/lottieviewer.cpp @@ -62,12 +62,13 @@ _layout_del_cb(void *data, Evas *, Evas_Object *, void *) } static void -_update_frame_info(AppInfo *info, double pos) +_update_frame_info(AppInfo *info) { - int frameNo = pos * info->view->getTotalFrame(); - char buf[64]; + long currFrameNo = info->view->mCurFrame; + long totalFrameNo = info->view->getTotalFrame(); - sprintf(buf, "%d / %ld", frameNo, info->view->getTotalFrame()); + char buf[64]; + sprintf(buf, "%ld (total: %ld)", currFrameNo, totalFrameNo); elm_object_part_text_set(info->layout, "text", buf); } @@ -96,7 +97,7 @@ _animator_cb(void *data) if (info && info->autoPlaying && info->view) { float pos = info->view->getPos(); - _update_frame_info(info, pos); + _update_frame_info(info); elm_slider_value_set(info->slider, (double)pos); evas_object_image_pixels_dirty_set(info->view->getImage(), EINA_TRUE); if (pos >= 1.0) @@ -111,20 +112,20 @@ _slider_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) double val = elm_slider_value_get(obj); AppInfo *info = (AppInfo *)data; - _update_frame_info(info, val); - if (!info->autoPlaying) { info->view->seek(val); evas_object_image_pixels_dirty_set(info->view->getImage(), EINA_TRUE); } + + _update_frame_info(info); } static void _button_clicked_cb(void *data, Evas_Object */*obj*/, void */*event_info*/) { AppInfo *info = (AppInfo *)data; - + if (info->view->getPos() >= 1.0f) info->view->mPos = 0.0f; _toggle_start_button(info); } @@ -133,7 +134,6 @@ create_layout(Evas_Object *parent, const char *file) { Evas_Object *layout, *slider, *image, *button; Ecore_Animator *animator; - char buf[64]; AppInfo *info = (AppInfo *)calloc(sizeof(AppInfo), 1); //LAYOUT @@ -176,10 +176,9 @@ create_layout(Evas_Object *parent, const char *file) info->animator = animator; evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _layout_del_cb, (void *)info); - sprintf(buf, "%d / %ld", 0, view->getTotalFrame()); - elm_object_part_text_set(layout, "text", buf); - view->seek(0.0); + _update_frame_info(info); + return layout; }