mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2025-12-25 08:10:05 +01:00
touchpad: only use the last two coordinates for delta calculation
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>
This commit is contained in:
parent
ab83c8e626
commit
cfdaaa32a7
1 changed files with 5 additions and 15 deletions
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue