Now that the acceleration code doesn't use dpi-normalized coordinates anymore, we don't need to use them in the touchpad code. Switch to physical distances instead, it makes debugging a lot saner.
Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> --- src/evdev-mt-touchpad-gestures.c | 10 ++++++---- src/evdev-mt-touchpad-tap.c | 9 ++++----- src/evdev-mt-touchpad.c | 7 +++---- src/evdev-mt-touchpad.h | 12 ++++++++++++ src/libinput-private.h | 6 ++++++ 5 files changed, 31 insertions(+), 13 deletions(-) diff --git a/src/evdev-mt-touchpad-gestures.c b/src/evdev-mt-touchpad-gestures.c index de3ec4f..9ba5942 100644 --- a/src/evdev-mt-touchpad-gestures.c +++ b/src/evdev-mt-touchpad-gestures.c @@ -186,18 +186,20 @@ tp_gesture_get_direction(struct tp_dispatch *tp, struct tp_touch *touch, unsigned int nfingers) { struct normalized_coords normalized; + struct phys_coords mm; struct device_float_coords delta; - double move_threshold = TP_MM_TO_DPI_NORMALIZED(1); + double move_threshold = 1.0; /* mm */ move_threshold *= (nfingers - 1); delta = device_delta(touch->point, touch->gesture.initial); + mm = tp_phys_delta(tp, delta); - normalized = tp_normalize_delta(tp, delta); - - if (normalized_length(normalized) < move_threshold) + if (length_in_mm(mm) < move_threshold) return UNDEFINED_DIRECTION; + normalized = tp_normalize_delta(tp, delta); + return normalized_get_direction(normalized); } diff --git a/src/evdev-mt-touchpad-tap.c b/src/evdev-mt-touchpad-tap.c index ffd9d0b..9fba521 100644 --- a/src/evdev-mt-touchpad-tap.c +++ b/src/evdev-mt-touchpad-tap.c @@ -36,7 +36,7 @@ #define DEFAULT_TAP_INITIAL_TIMEOUT_PERIOD ms2us(100) #define DEFAULT_TAP_TIMEOUT_PERIOD ms2us(180) #define DEFAULT_DRAG_TIMEOUT_PERIOD ms2us(300) -#define DEFAULT_TAP_MOVE_THRESHOLD TP_MM_TO_DPI_NORMALIZED(1.3) +#define DEFAULT_TAP_MOVE_THRESHOLD 1.3 /* mm */ enum tap_event { TAP_EVENT_TOUCH = 12, @@ -734,11 +734,10 @@ static bool tp_tap_exceeds_motion_threshold(struct tp_dispatch *tp, struct tp_touch *t) { - struct normalized_coords norm = - tp_normalize_delta(tp, device_delta(t->point, - t->tap.initial)); + struct phys_coords mm = + tp_phys_delta(tp, device_delta(t->point, t->tap.initial)); - return normalized_length(norm) > DEFAULT_TAP_MOVE_THRESHOLD; + return length_in_mm(mm) > DEFAULT_TAP_MOVE_THRESHOLD; } static bool diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c index ca00c40..fe9e642 100644 --- a/src/evdev-mt-touchpad.c +++ b/src/evdev-mt-touchpad.c @@ -751,12 +751,11 @@ tp_thumb_detect(struct tp_dispatch *tp, struct tp_touch *t, uint64_t time) t->thumb.initial = t->point; else if (t->state == TOUCH_UPDATE) { struct device_float_coords delta; - struct normalized_coords normalized; + struct phys_coords mm; delta = device_delta(t->point, t->thumb.initial); - normalized = tp_normalize_delta(tp, delta); - if (normalized_length(normalized) > - TP_MM_TO_DPI_NORMALIZED(7)) { + mm = tp_phys_delta(tp, delta); + if (length_in_mm(mm) > 7) { t->thumb.state = THUMB_STATE_NO; goto out; } diff --git a/src/evdev-mt-touchpad.h b/src/evdev-mt-touchpad.h index b9ca5bf..fb15956 100644 --- a/src/evdev-mt-touchpad.h +++ b/src/evdev-mt-touchpad.h @@ -399,6 +399,18 @@ tp_normalize_delta(const struct tp_dispatch *tp, return normalized; } +static inline struct phys_coords +tp_phys_delta(const struct tp_dispatch *tp, + struct device_float_coords delta) +{ + struct phys_coords mm; + + mm.x = delta.x / tp->device->abs.absinfo_x->resolution; + mm.y = delta.y / tp->device->abs.absinfo_y->resolution; + + return mm; +} + /** * Takes a dpi-normalized set of coordinates, returns a set of coordinates * in the x-axis' coordinate space. diff --git a/src/libinput-private.h b/src/libinput-private.h index 40cc926..2bd523e 100644 --- a/src/libinput-private.h +++ b/src/libinput-private.h @@ -699,6 +699,12 @@ normalized_is_zero(struct normalized_coords norm) return norm.x == 0.0 && norm.y == 0.0; } +static inline double +length_in_mm(struct phys_coords mm) +{ + return hypot(mm.x, mm.y); +} + enum directions { N = 1 << 0, NE = 1 << 1, -- 2.9.3 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/wayland-devel