From: Jaehwan Kim Date: Mon, 8 Apr 2013 08:51:07 +0000 (+0900) Subject: Add the API elm_scroller_page_scroll_limit_set/get. X-Git-Tag: accepted/tizen/20130607.213307~63 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=34014e4b9c550ebb9d06b0e9a2acf2c0e06d9175;p=profile%2Fmobile%2Felementary.git Add the API elm_scroller_page_scroll_limit_set/get. It sets the maxium of the movable page at flicking. Change-Id: I1123f59529e3d931e0be95948120969ba82caa88 --- diff --git a/src/lib/elm_interface_scrollable.c b/src/lib/elm_interface_scrollable.c index 175aecf..4668d6d 100644 --- a/src/lib/elm_interface_scrollable.c +++ b/src/lib/elm_interface_scrollable.c @@ -1894,7 +1894,7 @@ static Evas_Coord _elm_scroll_page_x_get(Elm_Scrollable_Smart_Interface_Data *sid, int offset) { - Evas_Coord x, y, w, h, cw, ch, minx = 0; + Evas_Coord x, y, w, h, dx, cw, ch, minx = 0; if (!sid->pan_obj) return 0; @@ -1905,10 +1905,16 @@ _elm_scroll_page_x_get(Elm_Scrollable_Smart_Interface_Data *sid, psd->api->content_size_get(sid->pan_obj, &cw, &ch); psd->api->pos_min_get(sid->pan_obj, &minx, NULL); - x += offset; - 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); + else + x += (abs(offset) < dx ? offset : -dx); + if (sid->pagesize_h > 0) { x = x + (sid->pagesize_h * 0.5); @@ -1925,7 +1931,7 @@ static Evas_Coord _elm_scroll_page_y_get(Elm_Scrollable_Smart_Interface_Data *sid, int offset) { - Evas_Coord x, y, w, h, cw, ch, miny = 0; + Evas_Coord x, y, w, h, dy, cw, ch, miny = 0; if (!sid->pan_obj) return 0; @@ -1936,10 +1942,16 @@ _elm_scroll_page_y_get(Elm_Scrollable_Smart_Interface_Data *sid, psd->api->content_size_get(sid->pan_obj, &cw, &ch); psd->api->pos_min_get(sid->pan_obj, NULL, &miny); - y += offset; - 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); + else + y += (abs(offset) < dy ? offset : -dy); + if (sid->pagesize_v > 0) { y = y + (sid->pagesize_v * 0.5); @@ -3866,6 +3878,28 @@ _elm_scroll_paging_get(const Evas_Object *obj, } static void +_elm_scroll_page_scroll_limit_set(const Evas_Object *obj, + int page_limit_h, + int page_limit_v) +{ + ELM_SCROLL_IFACE_DATA_GET_OR_RETURN(obj, sid); + + sid->page_limit_h = page_limit_h; + sid->page_limit_v = page_limit_v; +} + +static void +_elm_scroll_page_scroll_limit_get(const Evas_Object *obj, + int *page_limit_h, + int *page_limit_v) +{ + ELM_SCROLL_IFACE_DATA_GET_OR_RETURN(obj, sid); + + if (page_limit_h) *page_limit_h = sid->page_limit_h; + if (page_limit_v) *page_limit_v = sid->page_limit_v; +} + +static void _elm_scroll_current_page_get(const Evas_Object *obj, int *pagenumber_h, int *pagenumber_v) @@ -4021,6 +4055,8 @@ _elm_scroll_interface_add(Evas_Object *obj) sid->step.y = 32; sid->page.x = -50; sid->page.y = -50; + sid->page_limit_h = 9999; + sid->page_limit_v = 9999; sid->hbar_flags = ELM_SCROLLER_POLICY_AUTO; sid->vbar_flags = ELM_SCROLLER_POLICY_AUTO; sid->hbar_visible = EINA_TRUE; @@ -4118,6 +4154,8 @@ EAPI const Elm_Scrollable_Smart_Interface ELM_SCROLLABLE_IFACE = _elm_scroll_bounce_allow_get, _elm_scroll_paging_set, _elm_scroll_paging_get, + _elm_scroll_page_scroll_limit_set, + _elm_scroll_page_scroll_limit_get, _elm_scroll_current_page_get, _elm_scroll_last_page_get, _elm_scroll_page_show, diff --git a/src/lib/elm_interface_scrollable.h b/src/lib/elm_interface_scrollable.h index 83ab0a4..389957a 100644 --- a/src/lib/elm_interface_scrollable.h +++ b/src/lib/elm_interface_scrollable.h @@ -306,6 +306,7 @@ struct _Elm_Scrollable_Smart_Interface_Data double pagerel_h, pagerel_v; Evas_Coord pagesize_h, pagesize_v; + int page_limit_h, page_limit_v; Eina_Bool momentum_animator_disabled : 1; Eina_Bool bounce_animator_disabled : 1; @@ -494,6 +495,12 @@ struct _Elm_Scrollable_Smart_Interface double *pagerel_v, Evas_Coord *pagesize_h, Evas_Coord *pagesize_v); + void (*page_scroll_limit_set)(const Evas_Object *obj, + int page_limit_h, + int page_limit_v); + void (*page_scroll_limit_get)(const Evas_Object *obj, + int *page_limit_h, + int *page_limit_v); void (*current_page_get)(const Evas_Object *obj, int *pagenumber_h, int *pagenumber_v); diff --git a/src/lib/elm_scroller.c b/src/lib/elm_scroller.c index 5cd8c04..249fe5e 100644 --- a/src/lib/elm_scroller.c +++ b/src/lib/elm_scroller.c @@ -992,6 +992,31 @@ elm_scroller_page_size_get(const Evas_Object *obj, } EAPI void +elm_scroller_page_scroll_limit_set(Evas_Object *obj, + int page_limit_h, + int page_limit_v) +{ + ELM_SCROLLABLE_CHECK(obj); + + if (page_limit_h < 1) + page_limit_h = 9999; + if (page_limit_v < 1) + page_limit_v = 9999; + + s_iface->page_scroll_limit_set(obj, page_limit_h, page_limit_v); +} + +EAPI void +elm_scroller_page_scroll_limit_get(Evas_Object *obj, + int *page_limit_h, + int *page_limit_v) +{ + ELM_SCROLLABLE_CHECK(obj); + + s_iface->page_scroll_limit_get(obj, page_limit_h, page_limit_v); +} + +EAPI void elm_scroller_current_page_get(const Evas_Object *obj, int *h_pagenumber, int *v_pagenumber) diff --git a/src/lib/elm_scroller.h b/src/lib/elm_scroller.h index 0cf56ed..d550b3d 100644 --- a/src/lib/elm_scroller.h +++ b/src/lib/elm_scroller.h @@ -287,6 +287,39 @@ EAPI void elm_scroller_page_size_set(Evas_Object *obj, E EAPI void elm_scroller_page_size_get(const Evas_Object *obj, Evas_Coord *h_pagesize, Evas_Coord *v_pagesize); /** + * @brief Set the maxium of the movable page at a flicking. + * + * @param obj The scroller object + * @param page_limit_h The maxium of the movable horizontal page + * @param page_limit_v The maxium of the movable vertical page + * + * The value of maxium movable page should be more than 1. + * + * @see elm_scroller_page_scroll_limit_get() + * + * @since 1.8 + * + * @ingroup Scroller + */ +EAPI void elm_scroller_page_scroll_limit_set(Evas_Object *obj, int page_limit_h, int page_limit_v); + +/** + * @brief Get the maxium of the movable page at a flicking. + * + * @param obj The scroller object + * @param page_limit_h The maxium of the movable horizontal page + * @param page_limit_v The maxium of the movable vertical page + * + * + * @see elm_scroller_page_scroll_limit_set() + * + * @since 1.8 + * + * @ingroup Scroller + */ +EAPI void elm_scroller_page_scroll_limit_get(Evas_Object *obj, int *page_limit_h, int *page_limit_v); + +/** * @brief Get scroll current page number. * * @param obj The scroller object