scrollable: fix page snap behavior. 29/200129/2
authorHosang Kim <hosang12.kim@samsung.com>
Tue, 19 Feb 2019 10:07:26 +0000 (19:07 +0900)
committerHosang Kim <hosang12.kim@samsung.com>
Tue, 19 Feb 2019 10:44:16 +0000 (19:44 +0900)
Sometimes page snap feature is not working.
Because there are two points to calculate the location of the current page.

@tizen_only

Change-Id: I418e093e526ee5d5e54a7f80a9ad0955a8d39a4b

src/lib/elm_interface_scrollable.c
src/lib/elm_interface_scrollable.h

index 612895f..3eac268 100644 (file)
@@ -1102,33 +1102,46 @@ _elm_scroll_scroll_bar_read_and_update(
    _elm_scroll_wanted_coordinates_update(sid, x, y);
 }
 
+//TIZEN_ONLY(20190219): fix page snap behavior.
 static void
-_elm_scroll_drag_start(Elm_Scrollable_Smart_Interface_Data *sid)
+_elm_scroll_scroll_start(Elm_Scrollable_Smart_Interface_Data *sid)
 {
    sid->current_page.x = _elm_scroll_page_x_get(sid, 0, EINA_FALSE);
    sid->current_page.y = _elm_scroll_page_y_get(sid, 0, EINA_FALSE);
 
-   if (sid->cb_func.drag_start)
-     sid->cb_func.drag_start(sid->obj, NULL);
+   sid->scrolling = EINA_TRUE;
 }
 
 static void
-_elm_scroll_drag_stop(Elm_Scrollable_Smart_Interface_Data *sid)
+_elm_scroll_scroll_stop(Elm_Scrollable_Smart_Interface_Data *sid)
 {
    Evas_Coord x, y;
+   sid->scrolling = EINA_FALSE;
+   x = _elm_scroll_page_x_get(sid, 0, EINA_FALSE);
+   y = _elm_scroll_page_y_get(sid, 0, EINA_FALSE);
+   if ((sid->cb_func.page_change) &&
+       ((x != sid->current_page.x) || (y != sid->current_page.y)))
+     sid->cb_func.page_change(sid->obj, NULL);
+   sid->current_page.x = x;
+   sid->current_page.y = y;
+}
+//
 
-   if (!(sid->down.bounce_x_animator) && !(sid->down.bounce_y_animator) &&
-       !(sid->scrollto.x.animator) && !(sid->scrollto.y.animator))
-     {
-        x = _elm_scroll_page_x_get(sid, 0, EINA_FALSE);
-        y = _elm_scroll_page_y_get(sid, 0, EINA_FALSE);
-        if (sid->cb_func.page_change &&
-            ((x != sid->current_page.x) || (y != sid->current_page.y)))
-          sid->cb_func.page_change(sid->obj, NULL);
-        sid->current_page.x = x;
-        sid->current_page.y = y;
-     }
+static void
+_elm_scroll_drag_start(Elm_Scrollable_Smart_Interface_Data *sid)
+{
+   sid->current_page.x = _elm_scroll_page_x_get(sid, 0, EINA_FALSE);
+   sid->current_page.y = _elm_scroll_page_y_get(sid, 0, EINA_FALSE);
 
+   //TIZEN_ONLY(20190219): fix page snap behavior.
+   if (!sid->scrolling)
+     _elm_scroll_scroll_start(sid);
+   //
+}
+
+static void
+_elm_scroll_drag_stop(Elm_Scrollable_Smart_Interface_Data *sid)
+{
    if (sid->cb_func.drag_stop)
      sid->cb_func.drag_stop(sid->obj, NULL);
 }
@@ -1136,11 +1149,13 @@ _elm_scroll_drag_stop(Elm_Scrollable_Smart_Interface_Data *sid)
 static void
 _elm_scroll_anim_start(Elm_Scrollable_Smart_Interface_Data *sid)
 {
-   sid->current_page.x = _elm_scroll_page_x_get(sid, 0, EINA_FALSE);
-   sid->current_page.y = _elm_scroll_page_y_get(sid, 0, EINA_FALSE);
-
    if (sid->cb_func.animate_start)
      sid->cb_func.animate_start(sid->obj, NULL);
+
+   //TIZEN_ONLY(20190219): fix page snap behavior.
+   if (!sid->scrolling)
+     _elm_scroll_scroll_start(sid);
+   //
 }
 
 static void
@@ -1148,18 +1163,13 @@ _elm_scroll_anim_stop(Elm_Scrollable_Smart_Interface_Data *sid)
 {
    Evas_Coord x, y;
 
-   if (sid->cb_func.page_change)
-     {
-        x = _elm_scroll_page_x_get(sid, 0, EINA_FALSE);
-        y = _elm_scroll_page_y_get(sid, 0, EINA_FALSE);
-        if ((x != sid->current_page.x) || (y != sid->current_page.y))
-           sid->cb_func.page_change(sid->obj, NULL);
-        sid->current_page.x = x;
-        sid->current_page.y = y;
-     }
-
    if (sid->cb_func.animate_stop)
      sid->cb_func.animate_stop(sid->obj, NULL);
+
+   //TIZEN_ONLY(20190219): fix page snap behavior.
+   if (sid->scrolling)
+     _elm_scroll_scroll_stop(sid);
+   //
 }
 
 static void
@@ -3113,6 +3123,14 @@ _elm_scroll_mouse_up_event_cb(void *data,
 
         if (!_paging_is_enabled(sid))
           _elm_scroll_bounce_eval(sid);
+
+        //TIZEN_ONLY(20190219): fix page snap behavior.
+        if (sid->scrolling && !sid->down.momentum_animator &&
+            !sid->down.bounce_x_animator && !sid->down.bounce_y_animator &&
+            !sid->scrollto.x.animator && !sid->scrollto.y.animator)
+          _elm_scroll_scroll_stop(sid);
+        //
+
      }
 }
 
@@ -5395,6 +5413,9 @@ _elm_interface_scrollable_evas_object_smart_add(Eo *obj, Elm_Scrollable_Smart_In
    sid->momentum_animator_disabled = EINA_FALSE;
    sid->bounce_animator_disabled = EINA_FALSE;
    sid->block = ELM_SCROLLER_MOVEMENT_NO_BLOCK;
+   //TIZEN_ONLY(20190219): fix page snap behavior.
+   sid->scrolling = EINA_FALSE;
+   //
 
    _elm_scroll_scroll_bar_reset(sid);
 
index c032a71..65844da 100644 (file)
@@ -256,6 +256,9 @@ struct _Elm_Scrollable_Smart_Interface_Data
    Eina_Bool  go_down : 1;
    Eina_Bool  loop_h : 1;
    Eina_Bool  loop_v : 1;
+   //TIZEN_ONLY(20190219): fix page snap behavior.
+   Eina_Bool  scrolling : 1;
+   //
 
    Eina_Bool  y_forward_scroll : 1;
    struct