From: tasn Date: Tue, 15 Feb 2011 15:56:59 +0000 (+0000) Subject: Elementary els_scroller: Move updating of wx/y/w/h into one function. X-Git-Tag: REL_F_I9500_20120323_1~17^2~3151 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0bbc14e0486a59df2e74e25789fb3bd2d09d6d05;p=framework%2Fuifw%2Felementary.git Elementary els_scroller: Move updating of wx/y/w/h into one function. And fixed a bug when updating them to wrong values. - Issue reported and solution suggested by Jaehwan Kim. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@57054 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- diff --git a/src/lib/els_scroller.c b/src/lib/els_scroller.c index 5aedbac..3917928 100644 --- a/src/lib/els_scroller.c +++ b/src/lib/els_scroller.c @@ -355,6 +355,31 @@ elm_smart_scroller_bounce_animator_disabled_set(Evas_Object *obj, Eina_Bool disa } } +/* Update the wanted coordinates according to the x, y passed + * widget directionality, child size and etc. */ +static void +_update_wanted_coordinates(Smart_Data *sd, Evas_Coord x, Evas_Coord y) +{ + Evas_Coord cw, ch; + + sd->pan_func.child_size_get(sd->pan_obj, &cw, &ch); + + /* Update wx/y/w/h - and if the requested positions aren't legal + * adjust a bit. */ + elm_smart_scroller_child_viewport_size_get(sd->smart_obj, &sd->ww, &sd->wh); + if (x < 0) + sd->wx = 0; + else if ((x + sd->ww) > cw) + sd->wx = cw - sd->ww; + else if (sd->is_mirrored) + sd->wx = _elm_smart_scroller_x_mirrored_get(sd->smart_obj, x); + else + sd->wx = x; + if (y < 0) sd->wy = 0; + else if ((y + sd->wh) > ch) sd->wy = ch - sd->wh; + else sd->wy = y; +} + static void _smart_anim_start(Evas_Object *obj) { @@ -414,10 +439,8 @@ _smart_momentum_end(Smart_Data *sd) { Evas_Coord px, py; elm_smart_scroller_child_pos_get(sd->smart_obj, &px, &py); - sd->wx = px; - sd->wy = py; - elm_smart_scroller_child_viewport_size_get(sd->smart_obj, - &sd->ww, &sd->wh); + _update_wanted_coordinates(sd, px, py); + ecore_animator_del(sd->down.momentum_animator); sd->down.momentum_animator = NULL; sd->down.bounce_x_hold = 0; @@ -795,10 +818,8 @@ _smart_momentum_animator(void *data) (no_bounce_x_end && no_bounce_y_end)) { _smart_anim_stop(sd->smart_obj); - sd->wx = x; - sd->wy = y; - elm_smart_scroller_child_viewport_size_get(sd->smart_obj, - &sd->ww, &sd->wh); + _update_wanted_coordinates(sd, px, py); + sd->down.momentum_animator = NULL; sd->down.bounce_x_hold = 0; sd->down.bounce_y_hold = 0; @@ -1507,10 +1528,7 @@ _smart_event_wheel(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, if ((!sd->hold) && (!sd->freeze)) { - sd->wx = x; - sd->wy = y; - elm_smart_scroller_child_viewport_size_get(sd->smart_obj, &sd->ww, &sd->wh); - elm_smart_scroller_child_pos_set(sd->smart_obj, x, y); + _update_wanted_coordinates(sd, x, y); } } @@ -1842,13 +1860,8 @@ _smart_event_mouse_up(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *ev sd->down.now = 0; elm_smart_scroller_child_pos_get(sd->smart_obj, &x, &y); elm_smart_scroller_child_pos_set(sd->smart_obj, x, y); - sd->wx = x; - sd->wy = y; - - if(sd->is_mirrored) - sd->wx = _elm_smart_scroller_x_mirrored_get(sd->smart_obj, sd->wx); + _update_wanted_coordinates(sd, x, y); - elm_smart_scroller_child_viewport_size_get(sd->smart_obj, &sd->ww, &sd->wh); if (!_smart_do_page(sd)) bounce_eval(sd); }