filter: don't normalize the const filter approach
authorPeter Hutterer <peter.hutterer@who-t.net>
Sun, 4 Sep 2022 23:35:23 +0000 (09:35 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Wed, 7 Sep 2022 23:03:15 +0000 (09:03 +1000)
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>
src/filter-flat.c
src/filter-low-dpi.c

index 0ee6c92..4fc185b 100644 (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
index ffcf911..51793b5 100644 (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