[PATCH libinput 02/11] touchpad: Add support for swipe gestures

Peter Hutterer peter.hutterer at who-t.net
Thu Jul 2 21:15:40 PDT 2015


From: Hans de Goede <hdegoede at redhat.com>

Add support for swipe gestures.

Signed-off-by: Hans de Goede <hdegoede at redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
Acked-by: Jason Gerecke <jason.gerecke at wacom.com>
---
 src/evdev-mt-touchpad-gestures.c | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/src/evdev-mt-touchpad-gestures.c b/src/evdev-mt-touchpad-gestures.c
index e85a9d7..e6fde0d 100644
--- a/src/evdev-mt-touchpad-gestures.c
+++ b/src/evdev-mt-touchpad-gestures.c
@@ -76,6 +76,8 @@ tp_get_average_touches_delta(struct tp_dispatch *tp)
 static void
 tp_gesture_start(struct tp_dispatch *tp, uint64_t time)
 {
+	const struct normalized_coords zero = { 0.0, 0.0 };
+
 	if (tp->gesture.started)
 		return;
 
@@ -83,6 +85,13 @@ tp_gesture_start(struct tp_dispatch *tp, uint64_t time)
 	case 2:
 		/* NOP */
 		break;
+	case 3:
+	case 4:
+		gesture_notify_swipe(&tp->device->base, time,
+				     LIBINPUT_EVENT_GESTURE_SWIPE_BEGIN,
+				     tp->gesture.finger_count,
+				     &zero, &zero);
+		break;
 	}
 	tp->gesture.started = true;
 }
@@ -141,6 +150,23 @@ tp_gesture_post_twofinger_scroll(struct tp_dispatch *tp, uint64_t time)
 			  &delta);
 }
 
+static void
+tp_gesture_post_swipe(struct tp_dispatch *tp, uint64_t time)
+{
+	struct normalized_coords delta, unaccel;
+
+	unaccel = tp_get_average_touches_delta(tp);
+	delta = tp_filter_motion(tp, &unaccel, time);
+
+	if (!normalized_is_zero(delta) || !normalized_is_zero(unaccel)) {
+		tp_gesture_start(tp, time);
+		gesture_notify_swipe(&tp->device->base, time,
+				     LIBINPUT_EVENT_GESTURE_SWIPE_UPDATE,
+				     tp->gesture.finger_count,
+				     &delta, &unaccel);
+	}
+}
+
 void
 tp_gesture_post_events(struct tp_dispatch *tp, uint64_t time)
 {
@@ -165,6 +191,10 @@ tp_gesture_post_events(struct tp_dispatch *tp, uint64_t time)
 	case 2:
 		tp_gesture_post_twofinger_scroll(tp, time);
 		break;
+	case 3:
+	case 4:
+		tp_gesture_post_swipe(tp, time);
+		break;
 	}
 }
 
@@ -182,6 +212,8 @@ tp_gesture_stop_twofinger_scroll(struct tp_dispatch *tp, uint64_t time)
 void
 tp_gesture_stop(struct tp_dispatch *tp, uint64_t time)
 {
+	const struct normalized_coords zero = { 0.0, 0.0 };
+
 	if (!tp->gesture.started)
 		return;
 
@@ -189,6 +221,13 @@ tp_gesture_stop(struct tp_dispatch *tp, uint64_t time)
 	case 2:
 		tp_gesture_stop_twofinger_scroll(tp, time);
 		break;
+	case 3:
+	case 4:
+		gesture_notify_swipe(&tp->device->base, time,
+				     LIBINPUT_EVENT_GESTURE_SWIPE_END,
+				     tp->gesture.finger_count,
+				     &zero, &zero);
+		break;
 	}
 	tp->gesture.started = false;
 }
-- 
2.4.3



More information about the wayland-devel mailing list