touchpad: only use the last two coordinates for delta calculation
authorPeter Hutterer <peter.hutterer@who-t.net>
Sun, 20 Nov 2016 22:39:47 +0000 (08:39 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Wed, 23 Nov 2016 00:42:57 +0000 (10:42 +1000)
Taking the last 4 points means factoring in a coordinate that may be more than
40ms in the past - or even more when the finger moves slowly and we don't get
events for a while. This makes the pointer more sluggish and slower to catch up
with what the finger is actually doing.

We already have the motion hysteresis as a separate item to prevent jumps (and
thus adds some delay to the movement), the calculation over time doesn't
provide enough benefit to justify the sluggish pointer.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
src/evdev-mt-touchpad.c

index d72cb191c974ad48332fe7fa3fef8d630916fffb..7b8514cb693bd63299ae30ff9f45c2c2f0653f99 100644 (file)
@@ -262,29 +262,19 @@ tp_end_sequence(struct tp_dispatch *tp, struct tp_touch *t, uint64_t time)
        tp_end_touch(tp, t, time);
 }
 
-static double
-tp_estimate_delta(int x0, int x1, int x2, int x3)
-{
-       return (x0 + x1 - x2 - x3) / 4.0;
-}
-
 struct normalized_coords
 tp_get_delta(struct tp_touch *t)
 {
        struct device_float_coords delta;
        const struct normalized_coords zero = { 0.0, 0.0 };
 
-       if (t->history.count < TOUCHPAD_MIN_SAMPLES)
+       if (t->history.count <= 1)
                return zero;
 
-       delta.x = tp_estimate_delta(tp_motion_history_offset(t, 0)->x,
-                                   tp_motion_history_offset(t, 1)->x,
-                                   tp_motion_history_offset(t, 2)->x,
-                                   tp_motion_history_offset(t, 3)->x);
-       delta.y = tp_estimate_delta(tp_motion_history_offset(t, 0)->y,
-                                   tp_motion_history_offset(t, 1)->y,
-                                   tp_motion_history_offset(t, 2)->y,
-                                   tp_motion_history_offset(t, 3)->y);
+       delta.x = tp_motion_history_offset(t, 0)->x -
+                 tp_motion_history_offset(t, 1)->x;
+       delta.y = tp_motion_history_offset(t, 0)->y -
+                 tp_motion_history_offset(t, 1)->y;
 
        return tp_normalize_delta(t->tp, delta);
 }