[PATCH libinput] touchpad: only use the last two coordinates for delta calculation
Hans de Goede
hdegoede at redhat.com
Tue Nov 22 09:10:43 UTC 2016
Hi,
On 22-11-16 02:34, Peter Hutterer wrote:
> 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 at who-t.net>
> ---
> I'm leaving the motion history as-is for now even though it's largely unused
> now. This can be fixed up later once we know this patch has the desired
> effect (it does here, but that could be confirmation bias)
Patch looks good to me and is:
Reviewed-by: Hans de Goede <hdegoede at redhat.com>
Regards,
Hans
>
> src/evdev-mt-touchpad.c | 20 +++++---------------
> 1 file changed, 5 insertions(+), 15 deletions(-)
>
> diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
> index d72cb19..7b8514c 100644
> --- a/src/evdev-mt-touchpad.c
> +++ b/src/evdev-mt-touchpad.c
> @@ -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);
> }
>
More information about the wayland-devel
mailing list