Skip to content
Snippets Groups Projects
Commit 8d0a5229 authored by Peter Hutterer's avatar Peter Hutterer
Browse files

tablet: add support for relative dials


Some tablets provide one or more rotary controls (see e.g. the Huion
Inspiroy Dial 2) that provide delta information effectively equivalent
to a mouse wheel. Expose those in the same way as the strip or ring
controls, with the event matching the wl_pointer.axis_v120 approach.

Like a typical mouse wheel we do not expect there to be a source
information, so this is left out of the interface.

Signed-off-by: default avatarPeter Hutterer <peter.hutterer@who-t.net>
parent 96c8caa3
1 merge request!298tablet: add support for relative dials
Pipeline #1387565 passed
...@@ -1016,7 +1016,7 @@ ...@@ -1016,7 +1016,7 @@
<description summary="mode switch event"> <description summary="mode switch event">
Notification that the mode was switched. Notification that the mode was switched.
A mode applies to all buttons, rings and strips in a group A mode applies to all buttons, rings, strips and dials in a group
simultaneously, but a client is not required to assign different actions simultaneously, but a client is not required to assign different actions
for each mode. For example, a client may have mode-specific button for each mode. For example, a client may have mode-specific button
mappings but map the ring to vertical scrolling in all modes. Mode mappings but map the ring to vertical scrolling in all modes. Mode
...@@ -1037,20 +1037,33 @@ ...@@ -1037,20 +1037,33 @@
previous mode, the client should immediately issue a previous mode, the client should immediately issue a
wp_tablet_pad.set_feedback request for each changed button. wp_tablet_pad.set_feedback request for each changed button.
If a ring or strip action in the new mode differs from the action If a ring, strip or dial action in the new mode differs from the action
in the previous mode, the client should immediately issue a in the previous mode, the client should immediately issue a
wp_tablet_ring.set_feedback or wp_tablet_strip.set_feedback request wp_tablet_ring.set_feedback, wp_tablet_strip.set_feedback or
for each changed ring or strip. wp_tablet_dial.set_feedback request for each changed ring, strip or dial.
</description> </description>
<arg name="time" type="uint" summary="the time of the event with millisecond granularity"/> <arg name="time" type="uint" summary="the time of the event with millisecond granularity"/>
<arg name="serial" type="uint"/> <arg name="serial" type="uint"/>
<arg name="mode" type="uint" summary="the new mode of the pad"/> <arg name="mode" type="uint" summary="the new mode of the pad"/>
</event> </event>
<!-- Version 2 additions -->
<event name="dial" since="2">
<description summary="dial announced">
Sent on wp_tablet_pad initialization to announce available dials.
One event is sent for each dial available on this pad group.
This event is sent in the initial burst of events before the
wp_tablet_pad_group.done event.
</description>
<arg name="dial" type="new_id" interface="zwp_tablet_pad_dial_v2"/>
</event>
</interface> </interface>
<interface name="zwp_tablet_pad_v2" version="2"> <interface name="zwp_tablet_pad_v2" version="2">
<description summary="a set of buttons, rings and strips"> <description summary="a set of buttons, rings, strips and dials">
A pad device is a set of buttons, rings and strips A pad device is a set of buttons, rings, strips and dials
usually physically present on the tablet device itself. Some usually physically present on the tablet device itself. Some
exceptions exist where the pad device is physically detached, e.g. the exceptions exist where the pad device is physically detached, e.g. the
Wacom ExpressKey Remote. Wacom ExpressKey Remote.
...@@ -1064,7 +1077,7 @@ ...@@ -1064,7 +1077,7 @@
This initial event sequence is terminated by a wp_tablet_pad.done This initial event sequence is terminated by a wp_tablet_pad.done
event. event.
All pad features (buttons, rings and strips) are logically divided into All pad features (buttons, rings, strips and dials) are logically divided into
groups and all pads have at least one group. The available groups are groups and all pads have at least one group. The available groups are
notified through the wp_tablet_pad.group event; the compositor will notified through the wp_tablet_pad.group event; the compositor will
emit one event per group before emitting wp_tablet_pad.done. emit one event per group before emitting wp_tablet_pad.done.
...@@ -1207,4 +1220,78 @@ ...@@ -1207,4 +1220,78 @@
</description> </description>
</event> </event>
</interface> </interface>
<interface name="zwp_tablet_pad_dial_v2" version="2">
<description summary="pad dial">
A rotary control, e.g. a dial or a wheel.
Events on a dial are logically grouped by the wl_tablet_pad_dial.frame
event.
</description>
<request name="set_feedback">
<description summary="set compositor feedback">
Requests the compositor to use the provided feedback string
associated with this dial. This request should be issued immediately
after a wp_tablet_pad_group.mode_switch event from the corresponding
group is received, or whenever the dial is mapped to a different
action. See wp_tablet_pad_group.mode_switch for more details.
Clients are encouraged to provide context-aware descriptions for
the actions associated with the dial, and compositors may use this
information to offer visual feedback about the button layout
(eg. on-screen displays).
The provided string 'description' is a UTF-8 encoded string to be
associated with this ring, and is considered user-visible; general
internationalization rules apply.
The serial argument will be that of the last
wp_tablet_pad_group.mode_switch event received for the group of this
dial. Requests providing other serials than the most recent one will be
ignored.
</description>
<arg name="description" type="string" summary="dial description"/>
<arg name="serial" type="uint" summary="serial of the mode switch event"/>
</request>
<request name="destroy" type="destructor">
<description summary="destroy the dial object">
This destroys the client's resource for this dial object.
</description>
</request>
<event name="delta">
<description summary="delta movement">
Sent whenever the position on a dial changes.
This event carries the wheel delta as multiples or fractions
of 120 with each multiple of 120 representing one logical wheel detent.
For example, an axis_value120 of 30 is one quarter of
a logical wheel step in the positive direction, a value120 of
-240 are two logical wheel steps in the negative direction within the
same hardware event. See the wl_pointer.axis_value120 for more details.
The value120 must not be zero.
</description>
<arg name="value120" type="int" summary="rotation distance as fraction of 120"/>
</event>
<event name="frame">
<description summary="end of a dial event sequence">
Indicates the end of a set of events that represent one logical
hardware dial event. A client is expected to accumulate the data
in all events within the frame before proceeding.
All wp_tablet_pad_dial events before a wp_tablet_pad_dial.frame event belong
logically together.
A wp_tablet_pad_dial.frame event is sent for every logical event
group, even if the group only contains a single wp_tablet_pad_dial
event. Specifically, a client may get a sequence: delta, frame,
delta, frame, etc.
</description>
<arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
</event>
</interface>
</protocol> </protocol>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment