efl_ui_animation_view: Update callback is called only actual change time. 70/205270/2
authorJunsuChoi <jsuya.choi@samsung.com>
Fri, 26 Apr 2019 08:42:40 +0000 (17:42 +0900)
committerjunsu choi <jsuya.choi@samsung.com>
Thu, 2 May 2019 06:37:41 +0000 (06:37 +0000)
Summary:
The transit_cb is called from 0 to 1 depending on the duration.
Since the update callback is called even if there is no actual change,
we change it to call when there is a change in the frame.

Test Plan: N/A

Reviewers: Hermet, kimcinoo

Reviewed By: Hermet

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D8715

Change-Id: I3afb40e59261d4d76e8c44ed75c6f87287adfbed

src/lib/elementary/efl_ui_animation_view.c

index ef5bd2a..411736c 100644 (file)
@@ -172,7 +172,10 @@ _transit_cb(Elm_Transit_Effect *effect, Elm_Transit *transit, double progress)
    pd->progress = progress;
    int minframe = (pd->frame_cnt - 1) * pd->min_progress;
    int maxframe = (pd->frame_cnt - 1) * pd->max_progress;
-   evas_object_vg_animated_frame_set(pd->vg, (int)((maxframe - minframe) * progress) + minframe);
+
+   int update_frame = (int)((maxframe - minframe) * progress) + minframe;
+   int current_frame = evas_object_vg_animated_frame_get(pd->vg);
+   evas_object_vg_animated_frame_set(pd->vg, update_frame);
 
    if (pd->auto_repeat)
      {
@@ -184,7 +187,10 @@ _transit_cb(Elm_Transit_Effect *effect, Elm_Transit *transit, double progress)
           }
      }
 
-   evas_object_smart_callback_call(pd->obj, SIG_PLAY_UPDATE, NULL);
+   //transit_cb is always called with a progress value 0 ~ 1.
+   //SIG_PLAY_UPDATE callback is called only when there is a real change.
+   if (update_frame != current_frame)
+     evas_object_smart_callback_call(pd->obj, SIG_PLAY_UPDATE, NULL);
 }
 
 EOLIAN static void