From 61054d0b404f6c9cb50a4a6785f6728ae92b49da Mon Sep 17 00:00:00 2001 From: Jaehwan Kim Date: Wed, 10 Apr 2013 14:18:58 +0900 Subject: [PATCH] [Scroller] Fix the region_show/region_bring_in don't have a limit at a paging movement. --- src/lib/elm_interface_scrollable.c | 60 ++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 25 deletions(-) diff --git a/src/lib/elm_interface_scrollable.c b/src/lib/elm_interface_scrollable.c index 84bba56..acf5ffa 100644 --- a/src/lib/elm_interface_scrollable.c +++ b/src/lib/elm_interface_scrollable.c @@ -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); } -- 2.7.4