From: Hosang Kim Date: Tue, 19 Feb 2019 10:07:26 +0000 (+0900) Subject: scrollable: fix page snap behavior. X-Git-Tag: submit/tizen_4.0/20190808.001652~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2f68e91cdd581ef0f9a05f598256ec035d89876d;p=platform%2Fupstream%2Felementary.git scrollable: fix page snap behavior. Sometimes page snap feature is not working. Because there are two points to calculate the location of the current page. @tizen_only Change-Id: I418e093e526ee5d5e54a7f80a9ad0955a8d39a4b --- diff --git a/src/lib/elm_interface_scrollable.c b/src/lib/elm_interface_scrollable.c index 612895fd8..3eac26898 100644 --- a/src/lib/elm_interface_scrollable.c +++ b/src/lib/elm_interface_scrollable.c @@ -1102,33 +1102,46 @@ _elm_scroll_scroll_bar_read_and_update( _elm_scroll_wanted_coordinates_update(sid, x, y); } +//TIZEN_ONLY(20190219): fix page snap behavior. static void -_elm_scroll_drag_start(Elm_Scrollable_Smart_Interface_Data *sid) +_elm_scroll_scroll_start(Elm_Scrollable_Smart_Interface_Data *sid) { sid->current_page.x = _elm_scroll_page_x_get(sid, 0, EINA_FALSE); sid->current_page.y = _elm_scroll_page_y_get(sid, 0, EINA_FALSE); - if (sid->cb_func.drag_start) - sid->cb_func.drag_start(sid->obj, NULL); + sid->scrolling = EINA_TRUE; } static void -_elm_scroll_drag_stop(Elm_Scrollable_Smart_Interface_Data *sid) +_elm_scroll_scroll_stop(Elm_Scrollable_Smart_Interface_Data *sid) { Evas_Coord x, y; + sid->scrolling = EINA_FALSE; + x = _elm_scroll_page_x_get(sid, 0, EINA_FALSE); + y = _elm_scroll_page_y_get(sid, 0, EINA_FALSE); + if ((sid->cb_func.page_change) && + ((x != sid->current_page.x) || (y != sid->current_page.y))) + sid->cb_func.page_change(sid->obj, NULL); + sid->current_page.x = x; + sid->current_page.y = y; +} +// - if (!(sid->down.bounce_x_animator) && !(sid->down.bounce_y_animator) && - !(sid->scrollto.x.animator) && !(sid->scrollto.y.animator)) - { - x = _elm_scroll_page_x_get(sid, 0, EINA_FALSE); - y = _elm_scroll_page_y_get(sid, 0, EINA_FALSE); - if (sid->cb_func.page_change && - ((x != sid->current_page.x) || (y != sid->current_page.y))) - sid->cb_func.page_change(sid->obj, NULL); - sid->current_page.x = x; - sid->current_page.y = y; - } +static void +_elm_scroll_drag_start(Elm_Scrollable_Smart_Interface_Data *sid) +{ + sid->current_page.x = _elm_scroll_page_x_get(sid, 0, EINA_FALSE); + sid->current_page.y = _elm_scroll_page_y_get(sid, 0, EINA_FALSE); + //TIZEN_ONLY(20190219): fix page snap behavior. + if (!sid->scrolling) + _elm_scroll_scroll_start(sid); + // +} + +static void +_elm_scroll_drag_stop(Elm_Scrollable_Smart_Interface_Data *sid) +{ if (sid->cb_func.drag_stop) sid->cb_func.drag_stop(sid->obj, NULL); } @@ -1136,11 +1149,13 @@ _elm_scroll_drag_stop(Elm_Scrollable_Smart_Interface_Data *sid) static void _elm_scroll_anim_start(Elm_Scrollable_Smart_Interface_Data *sid) { - sid->current_page.x = _elm_scroll_page_x_get(sid, 0, EINA_FALSE); - sid->current_page.y = _elm_scroll_page_y_get(sid, 0, EINA_FALSE); - if (sid->cb_func.animate_start) sid->cb_func.animate_start(sid->obj, NULL); + + //TIZEN_ONLY(20190219): fix page snap behavior. + if (!sid->scrolling) + _elm_scroll_scroll_start(sid); + // } static void @@ -1148,18 +1163,13 @@ _elm_scroll_anim_stop(Elm_Scrollable_Smart_Interface_Data *sid) { Evas_Coord x, y; - if (sid->cb_func.page_change) - { - x = _elm_scroll_page_x_get(sid, 0, EINA_FALSE); - y = _elm_scroll_page_y_get(sid, 0, EINA_FALSE); - if ((x != sid->current_page.x) || (y != sid->current_page.y)) - sid->cb_func.page_change(sid->obj, NULL); - sid->current_page.x = x; - sid->current_page.y = y; - } - if (sid->cb_func.animate_stop) sid->cb_func.animate_stop(sid->obj, NULL); + + //TIZEN_ONLY(20190219): fix page snap behavior. + if (sid->scrolling) + _elm_scroll_scroll_stop(sid); + // } static void @@ -3113,6 +3123,14 @@ _elm_scroll_mouse_up_event_cb(void *data, if (!_paging_is_enabled(sid)) _elm_scroll_bounce_eval(sid); + + //TIZEN_ONLY(20190219): fix page snap behavior. + if (sid->scrolling && !sid->down.momentum_animator && + !sid->down.bounce_x_animator && !sid->down.bounce_y_animator && + !sid->scrollto.x.animator && !sid->scrollto.y.animator) + _elm_scroll_scroll_stop(sid); + // + } } @@ -5395,6 +5413,9 @@ _elm_interface_scrollable_evas_object_smart_add(Eo *obj, Elm_Scrollable_Smart_In sid->momentum_animator_disabled = EINA_FALSE; sid->bounce_animator_disabled = EINA_FALSE; sid->block = ELM_SCROLLER_MOVEMENT_NO_BLOCK; + //TIZEN_ONLY(20190219): fix page snap behavior. + sid->scrolling = EINA_FALSE; + // _elm_scroll_scroll_bar_reset(sid); diff --git a/src/lib/elm_interface_scrollable.h b/src/lib/elm_interface_scrollable.h index c032a719b..65844da76 100644 --- a/src/lib/elm_interface_scrollable.h +++ b/src/lib/elm_interface_scrollable.h @@ -256,6 +256,9 @@ struct _Elm_Scrollable_Smart_Interface_Data Eina_Bool go_down : 1; Eina_Bool loop_h : 1; Eina_Bool loop_v : 1; + //TIZEN_ONLY(20190219): fix page snap behavior. + Eina_Bool scrolling : 1; + // Eina_Bool y_forward_scroll : 1; struct