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 d1fc9f26e1d29ace049c0eb38e1fe194d8f2aa21..7fdf903bd8f4912aaf71ccb2dd7700880b95b411 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 8a09ea76f1a3d6223b305cf163c68276af3da524..d3d86f35b4177879b3013f61bcd49f12891afe37 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;
 }