From 98da00cfd2b69e738ccc9b37ea7ff9a0304aee7d Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 3 Sep 2019 09:28:11 +0200 Subject: [PATCH] efl_ui/scroll_manager: make scroll direction changes more responsive with wheel Summary: if the wheel event being processed is in a different direction than the existing scroll animation, drop the previous animation and immediately begin scrolling in the opposite direciton fix T8052 Reviewers: segfaultxavi Reviewed By: segfaultxavi Subscribers: segfaultxavi, cedric, #reviewers, #committers Tags: #efl Maniphest Tasks: T8052 Differential Revision: https://phab.enlightenment.org/D9806 --- src/lib/elementary/efl_ui_scroll_manager.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/lib/elementary/efl_ui_scroll_manager.c b/src/lib/elementary/efl_ui_scroll_manager.c index bc6ca2412a..7bf0a1dd1a 100644 --- a/src/lib/elementary/efl_ui_scroll_manager.c +++ b/src/lib/elementary/efl_ui_scroll_manager.c @@ -791,8 +791,16 @@ _scroll_wheel_post_event_cb(void *data, Evas *e EINA_UNUSED) cur = efl_ui_pan_position_get(sd->pan_obj); x = cur.x; y = cur.y; - if (sd->scrollto.x.animator) x = sd->scrollto.x.end; - if (sd->scrollto.y.animator) y = sd->scrollto.y.end; + if (sd->scrollto.x.animator) + { + if (((ev->z > 0) && (sd->scrollto.x.end > x)) || ((ev->z < 0) && (sd->scrollto.x.end < x))) + x = sd->scrollto.x.end; + } + if (sd->scrollto.y.animator) + { + if (((ev->z > 0) && (sd->scrollto.y.end > y)) || ((ev->z < 0) && (sd->scrollto.y.end < y))) + y = sd->scrollto.y.end; + } max = efl_ui_pan_position_max_get(sd->pan_obj); min = efl_ui_pan_position_min_get(sd->pan_obj); if (x < min.x) x = min.x;