mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-15 22:05:24 -05:00
input: slow trackpad scrolling now eventually scroll a line
Before, we converted each axis event's scroll amount to an integer and scrolled that many lines. However, axis events are speed sensitive - very slow scrolling will result in events with a scroll amount that is < 1.0. For us, this meant we never scrolled a single line. You could slow scroll all day if you wanted, and still we would never scroll a single line. Fix this by aggregating the scroll amount from axis events until the scroll amount is > 1.0, and then scroll.
This commit is contained in:
parent
03bdb40bd9
commit
00dbe12e41
3 changed files with 19 additions and 1 deletions
18
input.c
18
input.c
|
|
@ -1295,7 +1295,18 @@ wl_pointer_axis(void *data, struct wl_pointer *wl_pointer,
|
|||
if (wayl->mouse.have_discrete)
|
||||
return;
|
||||
|
||||
mouse_scroll(wayl, wl_fixed_to_int(value));
|
||||
/*
|
||||
* Aggregate scrolled amount until we get at least 1.0
|
||||
*
|
||||
* Without this, very slow scrolling will never actually scroll
|
||||
* anything.
|
||||
*/
|
||||
wayl->mouse.axis_aggregated += wl_fixed_to_double(value);
|
||||
|
||||
if (fabs(wayl->mouse.axis_aggregated) >= 1.) {
|
||||
mouse_scroll(wayl, round(wayl->mouse.axis_aggregated));
|
||||
wayl->mouse.axis_aggregated = 0.;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -1327,6 +1338,11 @@ static void
|
|||
wl_pointer_axis_stop(void *data, struct wl_pointer *wl_pointer,
|
||||
uint32_t time, uint32_t axis)
|
||||
{
|
||||
if (axis != WL_POINTER_AXIS_VERTICAL_SCROLL)
|
||||
return;
|
||||
|
||||
struct wayland *wayl = data;
|
||||
wayl->mouse.axis_aggregated = 0.;
|
||||
}
|
||||
|
||||
const struct wl_pointer_listener pointer_listener = {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue