filter: don't normalize the const filter approach

The filter vs const filter is supposed to be for accelerated vs
non-accelerated motion (e.g. pointer motion vs scrolling) - in both
cases the returned value is supposed to be in the same coordinate
system, just once with an extra accel factor applied.

This was broken in the flat and low-dpi profiles: in both of those the
accelerated filter does *not* normalize, it merely applies the fixed/adaptive factor.
The constant filter normalized however. The result was that on e.g. a
5000dpi mouse the constant motion was 5 times slower than the
accelerated motion, even with a factor of 1.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2022-09-05 09:35:23 +10:00
parent fc1a28951a
commit cef91f5b43
2 changed files with 10 additions and 8 deletions

View file

@ -65,10 +65,11 @@ accelerator_filter_noop_flat(struct motion_filter *filter,
const struct device_float_coords *unaccelerated,
void *data, uint64_t time)
{
struct pointer_accelerator_flat *accel =
(struct pointer_accelerator_flat *) filter;
return normalize_for_dpi(unaccelerated, accel->dpi);
const struct normalized_coords normalized = {
.x = unaccelerated->x,
.y = unaccelerated->y,
};
return normalized;
}
static bool

View file

@ -150,10 +150,11 @@ accelerator_filter_noop(struct motion_filter *filter,
const struct device_float_coords *unaccelerated,
void *data, uint64_t time)
{
struct pointer_accelerator_low_dpi *accel =
(struct pointer_accelerator_low_dpi *) filter;
return normalize_for_dpi(unaccelerated, accel->dpi);
const struct normalized_coords normalized = {
.x = unaccelerated->x,
.y = unaccelerated->y,
};
return normalized;
}
static void