From 9600de46fdc55d168ed43f954a87018697353b41 Mon Sep 17 00:00:00 2001 From: heeya Date: Tue, 18 May 2010 17:44:44 +0900 Subject: [PATCH] Add scroller api --- src/lib/Elementary.h.in | 1 + src/lib/elm_scroller.c | 17 +++++++++++++++++ src/lib/els_scroller.c | 45 ++++++++++++++++++++++++++++++++++++++++++++- src/lib/els_scroller.h | 1 + 4 files changed, 63 insertions(+), 1 deletion(-) mode change 100644 => 100755 src/lib/Elementary.h.in mode change 100644 => 100755 src/lib/elm_scroller.c mode change 100644 => 100755 src/lib/els_scroller.c mode change 100644 => 100755 src/lib/els_scroller.h diff --git a/src/lib/Elementary.h.in b/src/lib/Elementary.h.in old mode 100644 new mode 100755 index bd04dbb..d921e1b --- a/src/lib/Elementary.h.in +++ b/src/lib/Elementary.h.in @@ -486,6 +486,7 @@ extern "C" { EAPI void elm_scroller_page_relative_set(Evas_Object *obj, double h_pagerel, double v_pagerel); EAPI void elm_scroller_page_size_set(Evas_Object *obj, Evas_Coord h_pagesize, Evas_Coord v_pagesize); EAPI void elm_scroller_region_bring_in(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h); + EAPI void elm_scroller_page_move_set(Evas_Object *obj, Eina_Bool set); /* smart callbacks called: * "edge,left" * "edge,right" diff --git a/src/lib/elm_scroller.c b/src/lib/elm_scroller.c old mode 100644 new mode 100755 index 2c365c8..7cea324 --- a/src/lib/elm_scroller.c +++ b/src/lib/elm_scroller.c @@ -651,3 +651,20 @@ elm_scroller_region_bring_in(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_ if (wd->scr) elm_smart_scroller_region_bring_in(wd->scr, x, y, w, h); } + +/** + * Set scroll only one page + * + * @param obj The scroller object + * @param set Flag + * + * @ingroup Scroller + */ +EAPI void +elm_scroller_page_move_set(Evas_Object *obj, Eina_Bool set) +{ + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; + + elm_smart_scroller_page_move_set(wd->scr, set); +} diff --git a/src/lib/els_scroller.c b/src/lib/els_scroller.c old mode 100644 new mode 100755 index 0af0fd4..fc9afed --- a/src/lib/els_scroller.c +++ b/src/lib/els_scroller.c @@ -86,7 +86,7 @@ struct _Smart_Data double pagerel_h, pagerel_v; Evas_Coord pagesize_h, pagesize_v; - + Eina_Bool one_page :1; unsigned char hbar_visible : 1; unsigned char vbar_visible : 1; unsigned char extern_pan : 1; @@ -423,11 +423,13 @@ static Evas_Coord _smart_page_x_get(Smart_Data *sd, int offset) { Evas_Coord x, y, w, h, cw, ch; + Evas_Coord t; elm_smart_scroller_child_pos_get(sd->smart_obj, &x, &y); elm_smart_scroller_child_viewport_size_get(sd->smart_obj, &w, &h); sd->pan_func.child_size_get(sd->pan_obj, &cw, &ch); + t = x; x += offset; if (sd->pagerel_h > 0.0) @@ -435,12 +437,38 @@ _smart_page_x_get(Smart_Data *sd, int offset) x = x + (w * sd->pagerel_h * 0.5); x = x / (w * sd->pagerel_h); x = x * (w * sd->pagerel_h); + + if(sd->one_page){ + if(offset == 0){ + if(t > x) x = x + (w * sd->pagerel_h); + if(t < x) x = x - (w * sd->pagerel_h); + } + if(offset > 0){ + if(t > x) x = x + (w * sd->pagerel_h); + } + if(offset < 0){ + if(t < x) x = x - (w * sd->pagerel_h); + } + } } else if (sd->pagesize_h > 0) { x = x + (sd->pagesize_h * 0.5); x = x / (sd->pagesize_h); x = x * (sd->pagesize_h); + + if(sd->one_page){ + if(offset == 0){ + if(t > x) x = x + (sd->pagesize_h); + if(t < x) x = x - (sd->pagesize_h); + } + if(offset > 0){ + if(t > x) x = x + (sd->pagesize_h); + } + if(offset < 0){ + if(t < x) x = x - (sd->pagesize_h); + } + } } if (x < 0) x = 0; else if ((x + w) > cw) x = cw - w; @@ -1039,6 +1067,13 @@ elm_smart_scroller_paging_set(Evas_Object *obj, double pagerel_h, double pagerel } void +elm_smart_scroller_page_move_set(Evas_Object *obj, Eina_Bool set) +{ + API_ENTRY return; + sd->one_page = set; +} + +void elm_smart_scroller_region_bring_in(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) { Evas_Coord mx = 0, my = 0, cw = 0, ch = 0, px = 0, py = 0, nx, ny; @@ -1491,9 +1526,17 @@ _smart_event_mouse_up(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *ev at *= 4.0; dx = ev->canvas.x - ax; dy = ev->canvas.y - ay; + if(sd->one_page) at = 0.4; + if (at > 0) { vel = sqrt((dx * dx) + (dy * dy)) / at; + + if(sd->one_page) { + if(vel < _elm_config->thumbscroll_momentum_threshhold) + vel = _elm_config->thumbscroll_momentum_threshhold +1; + } + if ((_elm_config->thumbscroll_friction > 0.0) && (vel > _elm_config->thumbscroll_momentum_threshhold) && (!sd->freeze)) diff --git a/src/lib/els_scroller.h b/src/lib/els_scroller.h old mode 100644 new mode 100755 index 4a4acc4..4a750b3 --- a/src/lib/els_scroller.h +++ b/src/lib/els_scroller.h @@ -31,3 +31,4 @@ void elm_smart_scroller_bounce_allow_get (const Evas_Object *obj, Eina_Bo void elm_smart_scroller_paging_set (Evas_Object *obj, double pagerel_h, double pagerel_v, Evas_Coord pagesize_h, Evas_Coord pagesize_v); void elm_smart_scroller_region_bring_in (Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h); void elm_smart_scroller_widget_set (Evas_Object *obj, Evas_Object *wid); +void elm_smart_scroller_page_move_set (Evas_Object *obj, Eina_Bool set); -- 2.7.4