[Scroller] Fix the region_show/region_bring_in don't have a limit at a paging movement.
authorJaehwan Kim <jae.hwan.kim@samsung.com>
Wed, 10 Apr 2013 05:18:58 +0000 (14:18 +0900)
committerSungho Kwak <sungho1.kwak@samsung.com>
Wed, 10 Apr 2013 10:56:49 +0000 (19:56 +0900)
src/lib/elm_interface_scrollable.c

index 84bba56..acf5ffa 100644 (file)
@@ -33,11 +33,6 @@ ELM_INTERNAL_SMART_SUBCLASS_NEW
   evas_object_smart_clipped_class_get, _smart_callbacks);
 
 static void _elm_pan_content_set(Evas_Object *, Evas_Object *);
-static Eina_Bool _paging_is_enabled(Elm_Scrollable_Smart_Interface_Data *sid);
-static Evas_Coord
-_elm_scroll_page_x_get(Elm_Scrollable_Smart_Interface_Data *sid, int offset);
-static Evas_Coord
-_elm_scroll_page_y_get(Elm_Scrollable_Smart_Interface_Data *sid, int offset);
 
 EAPI const Elm_Pan_Smart_Class *
 elm_pan_smart_class_get(void)
@@ -387,6 +382,11 @@ static const char SCROLL_SMART_NAME[] = "elm_scroll";
 static void _elm_scroll_scroll_bar_size_adjust(
   Elm_Scrollable_Smart_Interface_Data *);
 static void _elm_scroll_wanted_region_set(Evas_Object *);
+static Eina_Bool _paging_is_enabled(Elm_Scrollable_Smart_Interface_Data *sid);
+static Evas_Coord _elm_scroll_page_x_get(
+   Elm_Scrollable_Smart_Interface_Data *sid, int offset, Eina_Bool limit);
+static Evas_Coord _elm_scroll_page_y_get(
+   Elm_Scrollable_Smart_Interface_Data *sid, int offset, Eina_Bool limit);
 static void _elm_scroll_content_pos_get(const Evas_Object *,
                                         Evas_Coord *,
                                         Evas_Coord *);
@@ -1607,8 +1607,8 @@ _elm_scroll_content_region_show_internal(Evas_Object *obj,
 
    if (_paging_is_enabled(sid))
      {
-        x = _elm_scroll_page_x_get(sid, nx - px);
-        y = _elm_scroll_page_y_get(sid, ny - py);
+        x = _elm_scroll_page_x_get(sid, nx - px, EINA_FALSE);
+        y = _elm_scroll_page_y_get(sid, ny - py, EINA_FALSE);
      }
    else
      {
@@ -1892,7 +1892,7 @@ _elm_scroll_momentum_animator(void *data)
 
 static Evas_Coord
 _elm_scroll_page_x_get(Elm_Scrollable_Smart_Interface_Data *sid,
-                       int offset)
+                       int offset, Eina_Bool limit)
 {
    Evas_Coord x, y, w, h, dx, cw, ch, minx = 0;
 
@@ -1908,12 +1908,17 @@ _elm_scroll_page_x_get(Elm_Scrollable_Smart_Interface_Data *sid,
    if (sid->pagerel_h > 0.0)
      sid->pagesize_h = w * sid->pagerel_h;
 
-   dx = (sid->pagesize_h * ((double)sid->page_limit_h - 0.5));
-
-   if (offset > 0)
-     x += (abs(offset) < dx ? offset : dx);
+   if (!limit)
+     x += offset;
    else
-     x += (abs(offset) < dx ? offset : -dx);
+     {
+        dx = (sid->pagesize_h * ((double)sid->page_limit_h - 0.5));
+
+        if (offset > 0)
+          x += (abs(offset) < dx ? offset : dx);
+        else
+          x += (abs(offset) < dx ? offset : -dx);
+     }
 
    if (sid->pagesize_h > 0)
      {
@@ -1929,7 +1934,7 @@ _elm_scroll_page_x_get(Elm_Scrollable_Smart_Interface_Data *sid,
 
 static Evas_Coord
 _elm_scroll_page_y_get(Elm_Scrollable_Smart_Interface_Data *sid,
-                       int offset)
+                       int offset, Eina_Bool limit)
 {
    Evas_Coord x, y, w, h, dy, cw, ch, miny = 0;
 
@@ -1945,12 +1950,17 @@ _elm_scroll_page_y_get(Elm_Scrollable_Smart_Interface_Data *sid,
    if (sid->pagerel_v > 0.0)
      sid->pagesize_v = h * sid->pagerel_v;
 
-   dy = (sid->pagesize_v * ((double)sid->page_limit_v - 0.5));
-
-   if (offset > 0)
-     y += (abs(offset) < dy ? offset : dy);
+   if (!limit)
+     y += offset;
    else
-     y += (abs(offset) < dy ? offset : -dy);
+     {
+        dy = (sid->pagesize_v * ((double)sid->page_limit_v - 0.5));
+
+        if (offset > 0)
+          y += (abs(offset) < dy ? offset : dy);
+        else
+          y += (abs(offset) < dy ? offset : -dy);
+     }
 
    if (sid->pagesize_v > 0)
      {
@@ -2255,7 +2265,7 @@ _elm_scroll_mouse_up_event_cb(void *data,
                       (!elm_widget_drag_child_locked_x_get
                          (sid->obj)))
                     {
-                       pgx = _elm_scroll_page_x_get(sid, ox);
+                       pgx = _elm_scroll_page_x_get(sid, ox, EINA_TRUE);
                        if (pgx != x)
                          {
                             ev->event_flags |= EVAS_EVENT_FLAG_ON_SCROLL;
@@ -2267,7 +2277,7 @@ _elm_scroll_mouse_up_event_cb(void *data,
                       (!elm_widget_drag_child_locked_y_get
                          (sid->obj)))
                     {
-                       pgy = _elm_scroll_page_y_get(sid, oy);
+                       pgy = _elm_scroll_page_y_get(sid, oy, EINA_TRUE);
                        if (pgy != y)
                          {
                             ev->event_flags |= EVAS_EVENT_FLAG_ON_SCROLL;
@@ -2290,7 +2300,7 @@ _elm_scroll_mouse_up_event_cb(void *data,
                       (!elm_widget_drag_child_locked_x_get
                          (sid->obj)))
                     {
-                       pgx = _elm_scroll_page_x_get(sid, ox);
+                       pgx = _elm_scroll_page_x_get(sid, ox, EINA_TRUE);
                        if (pgx != x)
                          _elm_scroll_scroll_to_x
                            (sid, _elm_config->page_scroll_friction, pgx);
@@ -2299,7 +2309,7 @@ _elm_scroll_mouse_up_event_cb(void *data,
                       (!elm_widget_drag_child_locked_y_get
                          (sid->obj)))
                     {
-                       pgy = _elm_scroll_page_y_get(sid, oy);
+                       pgy = _elm_scroll_page_y_get(sid, oy, EINA_TRUE);
                        if (pgy != y)
                          _elm_scroll_scroll_to_y
                            (sid, _elm_config->page_scroll_friction, pgy);
@@ -2953,8 +2963,8 @@ _elm_scroll_page_adjust(Elm_Scrollable_Smart_Interface_Data *sid)
 
    _elm_scroll_content_viewport_size_get(sid->obj, &w, &h);
 
-   x = _elm_scroll_page_x_get(sid, 0);
-   y = _elm_scroll_page_y_get(sid, 0);
+   x = _elm_scroll_page_x_get(sid, 0, EINA_TRUE);
+   y = _elm_scroll_page_y_get(sid, 0, EINA_TRUE);
 
    _elm_scroll_content_region_set(sid->obj, x, y, w, h);
 }