filter: apply the same factor for constant motion as for normal motion
authorPeter Hutterer <peter.hutterer@who-t.net>
Sun, 4 Sep 2022 23:56:16 +0000 (09:56 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Wed, 7 Sep 2022 23:03:15 +0000 (09:03 +1000)
Users that want a flat pointer acceleration want the input speed to
match 1:1 to the output speed, barring a fixed constant multiplier.
This will apply to things like button scrolling as well, so let's map
the constant accel function to the non-constant accel functions to the
speed setting applies to every movement.

This is applied to both the flat and the touchpad flat filter.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
src/filter-flat.c
src/filter-touchpad-flat.c

index 4fc185b..3f5d9bd 100644 (file)
@@ -65,11 +65,18 @@ accelerator_filter_noop_flat(struct motion_filter *filter,
                             const struct device_float_coords *unaccelerated,
                             void *data, uint64_t time)
 {
-       const struct normalized_coords normalized = {
-               .x = unaccelerated->x,
-               .y = unaccelerated->y,
-       };
-       return normalized;
+       /* We map the unaccelerated flat filter to have the same behavior as
+        * the "accelerated" flat filter.
+        * The filter by definition is flat, i.e. it does not actually
+        * apply any acceleration (merely a constant factor) and we can assume
+        * that a user wants all mouse movement to have the same speed, mapped
+        * 1:1 to the input speed.
+        *
+        * Thus we apply the same factor to our non-accelerated motion - this way
+        * things like button scrolling end up having the same movement as
+        * pointer motion.
+        */
+       return accelerator_filter_flat(filter, unaccelerated, data, time);
 }
 
 static bool
index 34867af..9c0075b 100644 (file)
@@ -69,15 +69,18 @@ accelerator_filter_noop_touchpad_flat(struct motion_filter *filter,
                                      const struct device_float_coords *unaccelerated,
                                      void *data, uint64_t time)
 {
-       struct touchpad_accelerator_flat *accel =
-               (struct touchpad_accelerator_flat *) filter;
-       struct normalized_coords normalized;
-
-       normalized = normalize_for_dpi(unaccelerated, accel->dpi);
-       normalized.x = TP_MAGIC_SLOWDOWN_FLAT * normalized.x;
-       normalized.y = TP_MAGIC_SLOWDOWN_FLAT * normalized.y;
-
-       return normalized;
+       /* We map the unaccelerated flat filter to have the same behavior as
+        * the "accelerated" flat filter.
+        * The filter by definition is flat, i.e. it does not actually
+        * apply any acceleration (merely a constant factor) and we can assume
+        * that a user wants all mouse movement to have the same speed, mapped
+        * 1:1 to the input speed.
+        *
+        * Thus we apply the same factor to our non-accelerated motion - this way
+        * things like gestures end up having the same movement as
+        * pointer motion.
+        */
+       return accelerator_filter_touchpad_flat(filter, unaccelerated, data, time);
 }
 
 static bool