diff options
author | Derek Foreman <derekf@osg.samsung.com> | 2016-05-12 16:21:30 -0500 |
---|---|---|
committer | Derek Foreman <derekf@osg.samsung.com> | 2016-05-12 16:22:35 -0500 |
commit | 923fa535b573f23909337c5eba7d1f11c37cb9dc (patch) | |
tree | 71c51e9ab5e896c767c792ff36f072be6eba7c02 | |
parent | e80d8d9a7134fdc00fc2ea791205eee5d208e175 (diff) | |
download | efl-devs/derekf/scroll.tar.gz |
ecore_drm: Handle wheel scrolling separately from finger scrollingdevs/derekf/scroll
Wheels are discrete and scroll in clicks, fingers are continuous and scroll
in fractional pixels.
This change causes wheel based scrolling to be returned in "clicks"
instead of "degrees" - allowing us to roll a single menu item with a click.
It also will allow us to reduce the speed of two finger scrolling without
messing up the speed of wheel scrolling.
-rw-r--r-- | src/lib/ecore_drm/ecore_drm_evdev.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/lib/ecore_drm/ecore_drm_evdev.c b/src/lib/ecore_drm/ecore_drm_evdev.c index b389e5c86d..3b851b5566 100644 --- a/src/lib/ecore_drm/ecore_drm_evdev.c +++ b/src/lib/ecore_drm/ecore_drm_evdev.c @@ -585,6 +585,22 @@ _device_handle_button(struct libinput_device *device, struct libinput_event_poin ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_UP, ev, NULL, NULL); } +#if LIBINPUT_HIGHER_08 +static double +_event_scroll_get(struct libinput_event_pointer *pe, enum libinput_pointer_axis axis) +{ + switch (libinput_event_pointer_get_axis_source(pe)) + { + case LIBINPUT_POINTER_AXIS_SOURCE_WHEEL: + return libinput_event_pointer_get_axis_value_discrete(pe, axis); + case LIBINPUT_POINTER_AXIS_SOURCE_FINGER: + case LIBINPUT_POINTER_AXIS_SOURCE_CONTINUOUS: + return libinput_event_pointer_get_axis_value(pe, axis); + } + return 0.0; +} +#endif + static void _device_handle_axis(struct libinput_device *device, struct libinput_event_pointer *event) { @@ -618,13 +634,13 @@ _device_handle_axis(struct libinput_device *device, struct libinput_event_pointe #if LIBINPUT_HIGHER_08 axis = LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL; if (libinput_event_pointer_has_axis(event, axis)) - ev->z = libinput_event_pointer_get_axis_value(event, axis); + ev->z = _event_scroll_get(event, axis); axis = LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL; if (libinput_event_pointer_has_axis(event, axis)) { ev->direction = 1; - ev->z = libinput_event_pointer_get_axis_value(event, axis); + ev->z = _event_scroll_get(event, axis); } #else axis = libinput_event_pointer_get_axis(event); |