[PATCH wayland v2] protocol: Add pointer gestures (swipe/pinch) protocol
Carlos Garnacho
carlosg at gnome.org
Thu Jul 16 10:59:10 PDT 2015
The lifetime and progress of gestures is maintained by the separate
wl_pointer_gesture_pinch and wl_pointer_gesture_swipe interfaces,
each of these has begin/update(optional)/end phases, as transmitted
by their events.
The gesture interfaces can be obtained from the wl_pointer, and
must be interpreted on the last surface entered by the pointer,
starting from the pointer coordinates.
Signed-off-by: Carlos Garnacho <carlosg at gnome.org>
Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
---
protocol/wayland.xml | 153 ++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 151 insertions(+), 2 deletions(-)
diff --git a/protocol/wayland.xml b/protocol/wayland.xml
index 42c9309..e122841 100644
--- a/protocol/wayland.xml
+++ b/protocol/wayland.xml
@@ -1329,7 +1329,7 @@
</request>
</interface>
- <interface name="wl_seat" version="4">
+ <interface name="wl_seat" version="5">
<description summary="group of input devices">
A seat is a group of keyboards, pointer and touch devices. This
object is published as a global during start up, or when such a
@@ -1402,7 +1402,139 @@
</interface>
- <interface name="wl_pointer" version="3">
+ <interface name="wl_pointer_gesture_swipe" version="5">
+ <description summary="a swipe gesture object">
+ A swipe gesture object notifies a client about a multi-finger swipe
+ gesture detected on an indirect input device such as a touchpad.
+ The gesture is usually initiated by multiple fingers moving in the
+ same direction but once initiated the direction may change.
+ The precise conditions of when such a gesture is detected are
+ implementation-dependent.
+
+ A gesture consists of three stages: begin, update (optional) and end.
+ There cannot be multiple simultaneous pinch or swipe gestures, how
+ compositors prevent these situations is implementation-dependent.
+
+ A gesture may be cancelled by the compositor or the hardware.
+ Destructive actions should not be considered until the end of a
+ gesture has been received.
+ </description>
+
+ <request name="destroy" since="5">
+ <description summary="destroy the pointer swipe gesture object"/>
+ </request>
+
+ <event name="begin" since="5">
+ <description summary="multi-finger swipe begin">
+ This event is sent when a multi-finger swipe gesture is detected
+ on the device.
+ </description>
+ <arg name="serial" type="uint"/>
+ <arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
+ <arg name="fingers" type="uint" summary="number of fingers"/>
+ </event>
+
+ <event name="update" since="5">
+ <description summary="multi-finger swipe motion">
+ This event is sent when a multi-finger swipe gesture changes the
+ position of the logical center.
+
+ The dx and dy coordinates are relative coordinates of the logical
+ center of the gesture compared to the previous event.
+ </description>
+ <arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
+ <arg name="dx" type="fixed" summary="delta x coordinate in surface coordinate space"/>
+ <arg name="dy" type="fixed" summary="delta y coordinate in surface coordinate space"/>
+ </event>
+
+ <event name="end" since="5">
+ <description summary="multi-finger swipe end">
+ This event is sent when a multi-finger swipe gesture ceases to
+ be valid. This may happen when one or more finger is lifted or
+ the gesture is cancelled.
+
+ When a gesture is cancelled, the client should undo state changes
+ caused by this gesture. What causes a gesture to be cancelled is
+ implementation-dependent.
+ </description>
+ <arg name="serial" type="uint"/>
+ <arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
+ <arg name="cancelled" type="int" summary="whether the gesture was cancelled"/>
+ </event>
+ </interface>
+
+ <interface name="wl_pointer_gesture_pinch" version="5">
+ <description summary="a pinch gesture object">
+ A pinch gesture object notifies a client about a multi-finger pinch
+ gesture detected on an indirect input device such as a touchpad.
+ The gesture is usually initiated by multiple fingers moving towards
+ each other or away from each other, or by two or more fingers rotating
+ around a logical center of gravity. The precise conditions of when
+ such a gesture is detected are implementation-dependent.
+
+ A gesture consists of three stages: begin, update (optional) and end.
+ There cannot be multiple simultaneous pinch or swipe gestures, how
+ compositors prevent these situations is implementation-dependent.
+
+ A gesture may be cancelled by the compositor or the hardware.
+ Destructive actions should not be considered until the end of a
+ gesture has been received.
+ </description>
+
+ <request name="destroy" since="5">
+ <description summary="destroy the pinch gesture object"/>
+ </request>
+
+ <event name="begin" since="5">
+ <description summary="multi-finger pinch begin">
+ This event is sent when a multi-finger pinch gesture is detected
+ on the device.
+ </description>
+ <arg name="serial" type="uint"/>
+ <arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
+ <arg name="fingers" type="uint" summary="number of fingers"/>
+ </event>
+
+ <event name="update" since="5">
+ <description summary="multi-finger pinch motion">
+ This event is sent when a multi-finger pinch gesture changes the
+ position of the logical center, the rotation or the relative scale.
+
+ The dx and dy coordinates are relative coordinates in the
+ surface coordinate space of the logical center of the gesture.
+
+ The scale factor is an absolute scale compared to the
+ pointer_gesture_pinch.begin event, e.g. a scale of 2 means the fingers
+ are now twice as far apart as on pointer_gesture_pinch.begin.
+
+ The rotation is the relative angle in degrees clockwise compared to the previous
+ pointer_gesture_pinch.begin or pointer_gesture_pinch.update event.
+ </description>
+ <arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
+ <arg name="dx" type="fixed" summary="delta x coordinate in surface coordinate space"/>
+ <arg name="dy" type="fixed" summary="delta y coordinate in surface coordinate space"/>
+ <arg name="scale" type="fixed" summary="scale relative to the initial finger position"/>
+ <arg name="rotation" type="fixed" summary="angle in degrees cw relative to the previous event"/>
+ </event>
+
+ <event name="end" since="5">
+ <description summary="multi-finger pinch end">
+ This event is sent when a multi-finger pinch gesture ceases to
+ be valid. This may happen when one or more finger is lifted or
+ the gesture is cancelled.
+
+ When a gesture is cancelled, the client should undo state changes
+ caused by this gesture. What causes a gesture to be cancelled is
+ implementation-dependent.
+ </description>
+ <arg name="serial" type="uint"/>
+ <arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
+ <arg name="cancelled" type="int" summary="whether the gesture was cancelled"/>
+ </event>
+
+ </interface>
+
+ <interface name="wl_pointer" version="5">
<description summary="pointer input device">
The wl_pointer interface represents one or more input devices,
such as mice, which control the pointer location and pointer_focus
@@ -1569,6 +1701,23 @@
</description>
</request>
+ <!-- Version 5 additions -->
+
+ <request name="get_swipe_gesture" since="5">
+ <description summary="get swipe gesture">
+ Create a swipe gesture object for the given pointer. See the
+ wl_pointer_gesture_swipe interface for details.
+ </description>
+ <arg name="id" type="new_id" interface="wl_pointer_gesture_swipe"/>
+ </request>
+
+ <request name="get_pinch_gesture" since="5">
+ <description summary="get pinch gesture">
+ Create a pinch gesture object for the given pointer. See the
+ wl_pointer_gesture_pinch interface for details.
+ </description>
+ <arg name="id" type="new_id" interface="wl_pointer_gesture_pinch"/>
+ </request>
</interface>
<interface name="wl_keyboard" version="4">
--
2.4.3
More information about the wayland-devel
mailing list