example: lottieviewer - fixed frame no (#528) 40/281440/1 accepted/tizen_7.0_unified_hotfix tizen_7.0_hotfix accepted/tizen/7.0/unified/20221110.062227 accepted/tizen/7.0/unified/hotfix/20221116.110152 accepted/tizen/unified/20220921.091755 tizen_7.0_m2_release
authorMichal Maciola <71131832+mmaciola@users.noreply.github.com>
Mon, 19 Sep 2022 02:03:33 +0000 (04:03 +0200)
committerjykeon <jykeon@samsung.com>
Mon, 19 Sep 2022 05:00:00 +0000 (14:00 +0900)
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.

Change-Id: I051a07c5c0d28bb7c8474eb55a9af31c031c9d1d
Signed-off-by: jykeon <jykeon@samsung.com>
example/lottieview.cpp
example/lottieviewer.cpp

index d1fc9f2..7fdf903 100644 (file)
@@ -109,7 +109,6 @@ void LottieView::seek(float pos)
 {
     if (!mRenderDelegate) return;
 
-
     mPos = mapProgress(pos);
 
     // check if the pos maps to the current frame
index 8a09ea7..d3d86f3 100644 (file)
@@ -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;
 }