[PATCH libinput 1/3] touchpad: convert two functions to use the device->phys helpers
Peter Hutterer
peter.hutterer at who-t.net
Wed Dec 14 07:36:16 UTC 2016
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
src/evdev-mt-touchpad.c | 24 +++++++++++++-----------
src/evdev.h | 27 +++++++++++++++++++++++++++
2 files changed, 40 insertions(+), 11 deletions(-)
diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
index 7bac8ec..26b65de 100644
--- a/src/evdev-mt-touchpad.c
+++ b/src/evdev-mt-touchpad.c
@@ -478,18 +478,19 @@ tp_process_key(struct tp_dispatch *tp,
static void
tp_unpin_finger(const struct tp_dispatch *tp, struct tp_touch *t)
{
- double xdist, ydist;
+ struct phys_coords mm;
+ struct device_coords delta;
if (!t->pinned.is_pinned)
return;
- xdist = abs(t->point.x - t->pinned.center.x);
- xdist *= tp->buttons.motion_dist.x_scale_coeff;
- ydist = abs(t->point.y - t->pinned.center.y);
- ydist *= tp->buttons.motion_dist.y_scale_coeff;
+ delta.x = abs(t->point.x - t->pinned.center.x);
+ delta.y = abs(t->point.y - t->pinned.center.y);
+
+ mm = evdev_device_unit_delta_to_mm(tp->device, &delta);
/* 1.5mm movement -> unpin */
- if (hypot(xdist, ydist) >= 1.5) {
+ if (hypot(mm.x, mm.y) >= 1.5) {
t->pinned.is_pinned = false;
return;
}
@@ -962,8 +963,8 @@ tp_need_motion_history_reset(struct tp_dispatch *tp)
static bool
tp_detect_jumps(const struct tp_dispatch *tp, struct tp_touch *t)
{
- struct device_coords *last;
- double dx, dy;
+ struct device_coords *last, delta;
+ struct phys_coords mm;
const int JUMP_THRESHOLD_MM = 20;
/* We haven't seen pointer jumps on Wacom tablets yet, so exclude
@@ -978,10 +979,11 @@ tp_detect_jumps(const struct tp_dispatch *tp, struct tp_touch *t)
/* called before tp_motion_history_push, so offset 0 is the most
* recent coordinate */
last = tp_motion_history_offset(t, 0);
- dx = 1.0 * abs(t->point.x - last->x) / tp->device->abs.absinfo_x->resolution;
- dy = 1.0 * abs(t->point.y - last->y) / tp->device->abs.absinfo_y->resolution;
+ delta.x = abs(t->point.x - last->x);
+ delta.y = abs(t->point.y - last->y);
+ mm = evdev_device_unit_delta_to_mm(tp->device, &delta);
- return hypot(dx, dy) > JUMP_THRESHOLD_MM;
+ return hypot(mm.x, mm.y) > JUMP_THRESHOLD_MM;
}
static void
diff --git a/src/evdev.h b/src/evdev.h
index 071b9ec..c07b09f 100644
--- a/src/evdev.h
+++ b/src/evdev.h
@@ -596,6 +596,33 @@ evdev_libinput_context(const struct evdev_device *device)
}
/**
+ * Convert the pair of delta coordinates in device space to mm.
+ */
+static inline struct phys_coords
+evdev_device_unit_delta_to_mm(const struct evdev_device* device,
+ const struct device_coords *units)
+{
+ struct phys_coords mm = { 0, 0 };
+ const struct input_absinfo *absx, *absy;
+
+ if (device->abs.absinfo_x == NULL ||
+ device->abs.absinfo_y == NULL) {
+ log_bug_libinput(evdev_libinput_context(device),
+ "%s: is not an abs device\n",
+ device->devname);
+ return mm;
+ }
+
+ absx = device->abs.absinfo_x;
+ absy = device->abs.absinfo_y;
+
+ mm.x = 1.0 * units->x/absx->resolution;
+ mm.y = 1.0 * units->y/absy->resolution;
+
+ return mm;
+}
+
+/**
* Convert the pair of coordinates in device space to mm. This takes the
* axis min into account, i.e. a unit of min is equivalent to 0 mm.
*/
--
2.9.3
More information about the wayland-devel
mailing list