Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions src/backend/input/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@ pub use xkbcommon::xkb::Keycode;
mod tablet;

pub use tablet::{
ProximityState, TabletToolAxisEvent, TabletToolButtonEvent, TabletToolCapabilities, TabletToolDescriptor,
TabletToolEvent, TabletToolProximityEvent, TabletToolTipEvent, TabletToolTipState, TabletToolType,
ProximityState, TabletPadButtonEvent, TabletToolAxisEvent, TabletToolButtonEvent, TabletToolCapabilities,
TabletToolDescriptor, TabletToolEvent, TabletToolProximityEvent, TabletToolTipEvent, TabletToolTipState,
TabletToolType,
};

#[cfg(feature = "wayland_frontend")]
Expand Down Expand Up @@ -671,6 +672,8 @@ pub trait InputBackend: Sized {
type TabletToolTipEvent: TabletToolTipEvent<Self>;
/// Type representing button events on tablet tool devices
type TabletToolButtonEvent: TabletToolButtonEvent<Self>;
/// Type representing button events on tablet pad devices
type TabletPadButtonEvent: TabletPadButtonEvent<Self>;
/// Type representing switch toggle events
type SwitchToggleEvent: SwitchToggleEvent<Self>;

Expand Down Expand Up @@ -809,6 +812,12 @@ pub enum InputEvent<B: InputBackend> {
event: B::TabletToolButtonEvent,
},

/// A tablet pad button was pressed or released
TabletPadButton {
/// The tablet pad button event
event: B::TabletPadButtonEvent,
},

/// A switch was toggled
SwitchToggle {
/// The switch toggle event
Expand Down
21 changes: 21 additions & 0 deletions src/backend/input/tablet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -334,3 +334,24 @@ impl<B: InputBackend> TabletToolButtonEvent<B> for UnusedEvent {
match *self {}
}
}

/// Common methods tablet pad button events implement
pub trait TabletPadButtonEvent<B: InputBackend>: Event<B> {
/// Returns the numerical button code of the tablet pad button.
///
/// Buttons on tablet pads are numbered sequentially starting from 0.
fn button(&self) -> u32;

/// State of the button
fn state(&self) -> ButtonState;
}

impl<B: InputBackend> TabletPadButtonEvent<B> for UnusedEvent {
fn button(&self) -> u32 {
match *self {}
}

fn state(&self) -> ButtonState {
match *self {}
}
}
17 changes: 17 additions & 0 deletions src/backend/libinput/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -606,6 +606,7 @@ impl InputBackend for LibinputInputBackend {
type TabletToolProximityEvent = event::tablet_tool::TabletToolProximityEvent;
type TabletToolTipEvent = event::tablet_tool::TabletToolTipEvent;
type TabletToolButtonEvent = event::tablet_tool::TabletToolButtonEvent;
type TabletPadButtonEvent = event::tablet_pad::TabletPadButtonEvent;

type SwitchToggleEvent = event::switch::SwitchToggleEvent;

Expand Down Expand Up @@ -857,6 +858,22 @@ impl EventSource for LibinputInputBackend {
trace!("Unknown libinput tablet event");
}
},
libinput::Event::TabletPad(tablet_pad_event) => match tablet_pad_event {
event::TabletPadEvent::Button(event) => {
callback(InputEvent::TabletPadButton { event }, &mut ());
}
event::TabletPadEvent::Ring(event) => {
// Handle ring events if needed
trace!("Tablet pad ring event: {:?}", event);
}
event::TabletPadEvent::Strip(event) => {
// Handle strip events if needed
trace!("Tablet pad strip event: {:?}", event);
}
_ => {
trace!("Unknown libinput tablet pad event");
}
},
libinput::Event::Switch(switch_event) => match switch_event {
event::SwitchEvent::Toggle(event) => {
callback(InputEvent::SwitchToggle { event }, &mut ());
Expand Down
20 changes: 20 additions & 0 deletions src/backend/libinput/tablet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -192,3 +192,23 @@ impl backend::TabletToolButtonEvent<LibinputInputBackend> for tablet_tool::Table
tablet_tool::TabletToolButtonEvent::button_state(self).into()
}
}

impl backend::Event<LibinputInputBackend> for event::tablet_pad::TabletPadButtonEvent {
fn time(&self) -> u64 {
event::tablet_pad::TabletPadEventTrait::time_usec(self)
}

fn device(&self) -> libinput::Device {
event::EventTrait::device(self)
}
}

impl backend::TabletPadButtonEvent<LibinputInputBackend> for event::tablet_pad::TabletPadButtonEvent {
fn button(&self) -> u32 {
self.button_number()
}

fn state(&self) -> backend::ButtonState {
self.button_state().into()
}
}
1 change: 1 addition & 0 deletions src/backend/winit/input.rs
Original file line number Diff line number Diff line change
Expand Up @@ -407,6 +407,7 @@ impl InputBackend for WinitInput {
type TabletToolProximityEvent = UnusedEvent;
type TabletToolTipEvent = UnusedEvent;
type TabletToolButtonEvent = UnusedEvent;
type TabletPadButtonEvent = UnusedEvent;

type SwitchToggleEvent = UnusedEvent;

Expand Down
1 change: 1 addition & 0 deletions src/backend/x11/input.rs
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,7 @@ impl InputBackend for X11Input {
type TabletToolProximityEvent = UnusedEvent;
type TabletToolTipEvent = UnusedEvent;
type TabletToolButtonEvent = UnusedEvent;
type TabletPadButtonEvent = UnusedEvent;

type SwitchToggleEvent = UnusedEvent;

Expand Down
Loading