mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-01-06 06:00:11 +01:00
touchpad: Add support for swipe gestures
Add support for swipe gestures. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Acked-by: Jason Gerecke <jason.gerecke@wacom.com>
This commit is contained in:
parent
b8a2e5bc5f
commit
37c000ad5e
1 changed files with 39 additions and 0 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue