mirror of
https://github.com/swaywm/sway.git
synced 2025-10-29 05:40:18 -04:00
input: Add support for tablet protocol.
Sway has basic support for drawing tablets, but does not expose properties such as pressure sensitivity. This implements the wlr tablet v2 protocol, providing tablet events to Wayland clients.
This commit is contained in:
parent
875edc9c2f
commit
7e420cb6e4
10 changed files with 646 additions and 48 deletions
|
|
@ -21,6 +21,8 @@ struct sway_cursor {
|
|||
struct sway_node *node;
|
||||
} previous;
|
||||
struct wlr_xcursor_manager *xcursor_manager;
|
||||
struct wl_list tablets;
|
||||
struct wl_list tablet_pads;
|
||||
|
||||
const char *image;
|
||||
struct wl_client *image_client;
|
||||
|
|
@ -42,6 +44,7 @@ struct sway_cursor {
|
|||
|
||||
struct wl_listener tool_axis;
|
||||
struct wl_listener tool_tip;
|
||||
struct wl_listener tool_proximity;
|
||||
struct wl_listener tool_button;
|
||||
uint32_t tool_buttons;
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,8 @@ struct sway_seat_device {
|
|||
struct sway_input_device *input_device;
|
||||
struct sway_keyboard *keyboard;
|
||||
struct sway_switch *switch_device;
|
||||
struct sway_tablet *tablet;
|
||||
struct sway_tablet_pad *tablet_pad;
|
||||
struct wl_list link; // sway_seat::devices
|
||||
};
|
||||
|
||||
|
|
|
|||
62
include/sway/input/tablet.h
Normal file
62
include/sway/input/tablet.h
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
#ifndef _SWAY_INPUT_TABLET_H
|
||||
#define _SWAY_INPUT_TABLET_H
|
||||
#include <wlr/types/wlr_layer_shell_v1.h>
|
||||
|
||||
struct sway_seat;
|
||||
struct wlr_tablet_tool;
|
||||
|
||||
struct sway_tablet {
|
||||
struct wl_list link;
|
||||
struct sway_seat_device *seat_device;
|
||||
struct wlr_tablet_v2_tablet *tablet_v2;
|
||||
};
|
||||
|
||||
struct sway_tablet_tool {
|
||||
struct sway_seat *seat;
|
||||
struct sway_tablet *tablet;
|
||||
struct wlr_tablet_v2_tablet_tool *tablet_v2_tool;
|
||||
|
||||
double tilt_x, tilt_y;
|
||||
|
||||
struct wl_listener set_cursor;
|
||||
struct wl_listener tool_destroy;
|
||||
};
|
||||
|
||||
struct sway_tablet_pad {
|
||||
struct wl_list link;
|
||||
struct sway_seat_device *seat_device;
|
||||
struct sway_tablet *tablet;
|
||||
struct wlr_tablet_v2_tablet_pad *tablet_v2_pad;
|
||||
|
||||
struct wl_listener attach;
|
||||
struct wl_listener button;
|
||||
struct wl_listener ring;
|
||||
struct wl_listener strip;
|
||||
|
||||
struct wlr_surface *current_surface;
|
||||
struct wl_listener surface_destroy;
|
||||
|
||||
struct wl_listener tablet_destroy;
|
||||
};
|
||||
|
||||
struct sway_tablet *sway_tablet_create(struct sway_seat *seat,
|
||||
struct sway_seat_device *device);
|
||||
|
||||
void sway_configure_tablet(struct sway_tablet *tablet);
|
||||
|
||||
void sway_tablet_destroy(struct sway_tablet *tablet);
|
||||
|
||||
void sway_tablet_tool_configure(struct sway_tablet *tablet,
|
||||
struct wlr_tablet_tool *wlr_tool);
|
||||
|
||||
struct sway_tablet_pad *sway_tablet_pad_create(struct sway_seat *seat,
|
||||
struct sway_seat_device *device);
|
||||
|
||||
void sway_configure_tablet_pad(struct sway_tablet_pad *tablet_pad);
|
||||
|
||||
void sway_tablet_pad_destroy(struct sway_tablet_pad *tablet_pad);
|
||||
|
||||
void sway_tablet_pad_notify_enter(struct sway_tablet_pad *tablet_pad,
|
||||
struct wlr_surface *surface);
|
||||
|
||||
#endif
|
||||
|
|
@ -44,6 +44,8 @@ struct sway_server {
|
|||
struct wlr_xdg_shell *xdg_shell;
|
||||
struct wl_listener xdg_shell_surface;
|
||||
|
||||
struct wlr_tablet_manager_v2 *tablet_v2;
|
||||
|
||||
#if HAVE_XWAYLAND
|
||||
struct sway_xwayland xwayland;
|
||||
struct wl_listener xwayland_surface;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue