Fix 'scrollto animator' reaching destination 00/144400/2
authorWonki Kim <wonki_.kim@samsung.com>
Wed, 16 Aug 2017 11:52:26 +0000 (20:52 +0900)
committerWonki Kim <wonki_.kim@samsung.com>
Wed, 16 Aug 2017 12:21:03 +0000 (21:21 +0900)
Scrollto animator could never reach destination if animator is generated
while animator is running because animation duration is fixed.

This patch reduces animation duration on the above situation.

@tizen_fix

Change-Id: Id4b3588814c038750e40edefb18a46607db694ec
Signed-off-by: Wonki Kim <wonki_.kim@samsung.com>
src/lib/elm_interface_scrollable.c
src/lib/elm_interface_scrollable.h

index 81ad5316792b4966c9e29934fad2b9459b876142..d7676dd399c50a933af5de4dbb8eec58e6820af2 100644 (file)
@@ -2608,11 +2608,19 @@ _elm_scroll_scroll_to_y(Elm_Scrollable_Smart_Interface_Data *sid,
         return;
      }
    t = ecore_loop_time_get();
+   //TIZEN_ONLY(20170816) Fix 'scrollto animator' reaching destination
+   if ((sid->scrollto.y.t_end > t) && (sid->scrollto.y.end == pos_y))
+     sid->scrollto.y.cancel++;
+   else
+     sid->scrollto.y.cancel = 1;
+   //END
    eo_do(sid->pan_obj, elm_obj_pan_pos_get(&px, &py));
    sid->scrollto.y.start = py;
    sid->scrollto.y.end = pos_y;
    sid->scrollto.y.t_start = t;
-   sid->scrollto.y.t_end = t + t_in;
+   //TIZEN_ONLY(20170816) Fix 'scrollto animator' reaching destination
+   sid->scrollto.y.t_end = t + t_in/(double)sid->scrollto.y.cancel;
+   //END
    if (!sid->scrollto.y.animator)
      {
         sid->scrollto.y.animator =
@@ -2655,11 +2663,19 @@ _elm_scroll_scroll_to_x(Elm_Scrollable_Smart_Interface_Data *sid,
         return;
      }
    t = ecore_loop_time_get();
+   //TIZEN_ONLY(20170816) Fix 'scrollto animator' reaching destination
+   if ((sid->scrollto.x.t_end > t) && (sid->scrollto.x.end == pos_x))
+     sid->scrollto.x.cancel++;
+   else
+     sid->scrollto.x.cancel = 1;
+   //END
    eo_do(sid->pan_obj, elm_obj_pan_pos_get(&px, &py));
    sid->scrollto.x.start = px;
    sid->scrollto.x.end = pos_x;
    sid->scrollto.x.t_start = t;
-   sid->scrollto.x.t_end = t + t_in;
+   //TIZEN_ONLY(20170816) Fix 'scrollto animator' reaching destination
+   sid->scrollto.x.t_end = t + t_in/(double)sid->scrollto.x.cancel;
+   //END
    if (!sid->scrollto.x.animator)
      {
         sid->scrollto.x.animator =
@@ -5329,6 +5345,11 @@ _elm_interface_scrollable_evas_object_smart_add(Eo *obj, Elm_Scrollable_Smart_In
    sid->bounce_animator_disabled = EINA_FALSE;
    sid->block = ELM_SCROLLER_MOVEMENT_NO_BLOCK;
 
+   //TIZEN_ONLY(20170816) Fix 'scrollto animator' reaching destination
+   sid->scrollto.x.cancel = 1;
+   sid->scrollto.y.cancel = 1;
+   //END
+
    _elm_scroll_scroll_bar_reset(sid);
 
    eo_do_super(obj, MY_SCROLLABLE_INTERFACE, evas_obj_smart_add());
index b8e77b359f2848299a1c3a79e027f4ae3bf641ac..6e2e19829b2e7d0e9d619047e29d830a2ab7a09e 100644 (file)
@@ -213,6 +213,9 @@ struct _Elm_Scrollable_Smart_Interface_Data
       {
          Evas_Coord      start, end;
          double          t_start, t_end;
+         //TIZEN_ONLY(20170816) Fix 'scrollto animator' reaching destination
+         int             cancel;
+         //END
          Ecore_Animator *animator;
       } x, y;
    } scrollto;