wayland: implement tablet-v2
This commit is contained in:
parent
86e283d255
commit
7ed499eabd
62 changed files with 5174 additions and 318 deletions
|
|
@ -3,7 +3,14 @@ use {
|
|||
backend::{InputDeviceId, KeyState},
|
||||
client::Client,
|
||||
fixed::Fixed,
|
||||
ifs::wl_seat::{wl_pointer::PendingScroll, SeatId},
|
||||
ifs::wl_seat::{
|
||||
tablet::{
|
||||
PadButtonState, TabletRingEventSource, TabletStripEventSource, TabletTool,
|
||||
TabletToolChanges, TabletToolId, ToolButtonState,
|
||||
},
|
||||
wl_pointer::PendingScroll,
|
||||
SeatId,
|
||||
},
|
||||
leaks::Tracker,
|
||||
object::{Object, Version},
|
||||
wire::{jay_seat_events::*, JaySeatEventsId},
|
||||
|
|
@ -236,6 +243,231 @@ impl JaySeatEvents {
|
|||
event: event as _,
|
||||
});
|
||||
}
|
||||
|
||||
pub fn send_tablet_tool_proximity_in(
|
||||
&self,
|
||||
seat: SeatId,
|
||||
tablet: InputDeviceId,
|
||||
tool: TabletToolId,
|
||||
time_usec: u64,
|
||||
) {
|
||||
self.client
|
||||
.event(TabletToolProximityIn { self_id: self.id });
|
||||
self.client.event(TabletToolFrame {
|
||||
self_id: self.id,
|
||||
seat: seat.raw(),
|
||||
time_usec,
|
||||
input_device: tablet.raw(),
|
||||
tool: tool.raw() as _,
|
||||
});
|
||||
}
|
||||
|
||||
pub fn send_tablet_tool_proximity_out(
|
||||
&self,
|
||||
seat: SeatId,
|
||||
tablet: InputDeviceId,
|
||||
tool: TabletToolId,
|
||||
time_usec: u64,
|
||||
) {
|
||||
self.client
|
||||
.event(TabletToolProximityOut { self_id: self.id });
|
||||
self.client.event(TabletToolFrame {
|
||||
self_id: self.id,
|
||||
seat: seat.raw(),
|
||||
time_usec,
|
||||
input_device: tablet.raw(),
|
||||
tool: tool.raw() as _,
|
||||
});
|
||||
}
|
||||
|
||||
pub fn send_tablet_tool_changes(
|
||||
&self,
|
||||
seat: SeatId,
|
||||
tablet: InputDeviceId,
|
||||
tool: &TabletTool,
|
||||
time_usec: u64,
|
||||
changes: &TabletToolChanges,
|
||||
) {
|
||||
let self_id = self.id;
|
||||
if let Some(down) = changes.down {
|
||||
match down {
|
||||
true => self.client.event(TabletToolDown { self_id }),
|
||||
false => self.client.event(TabletToolUp { self_id }),
|
||||
}
|
||||
}
|
||||
if changes.pos.is_some() {
|
||||
let (x, y) = tool.cursor().position();
|
||||
self.client.event(TabletToolMotion { self_id, x, y });
|
||||
}
|
||||
if let Some(val) = changes.pressure {
|
||||
self.client.event(TabletToolPressure {
|
||||
self_id,
|
||||
pressure: val,
|
||||
});
|
||||
}
|
||||
if let Some(val) = changes.distance {
|
||||
self.client.event(TabletToolDistance {
|
||||
self_id,
|
||||
distance: val,
|
||||
});
|
||||
}
|
||||
if let Some(val) = changes.tilt {
|
||||
self.client.event(TabletToolTilt {
|
||||
self_id,
|
||||
tilt_x: val.x,
|
||||
tilt_y: val.y,
|
||||
});
|
||||
}
|
||||
if let Some(val) = changes.rotation {
|
||||
self.client.event(TabletToolRotation {
|
||||
self_id,
|
||||
degrees: val,
|
||||
});
|
||||
}
|
||||
if let Some(val) = changes.slider {
|
||||
self.client.event(TabletToolSlider {
|
||||
self_id,
|
||||
position: val,
|
||||
});
|
||||
}
|
||||
if let Some(val) = changes.wheel {
|
||||
self.client.event(TabletToolWheel {
|
||||
self_id,
|
||||
degrees: val.degrees,
|
||||
clicks: val.clicks,
|
||||
});
|
||||
}
|
||||
self.client.event(TabletToolFrame {
|
||||
self_id: self.id,
|
||||
seat: seat.raw(),
|
||||
time_usec,
|
||||
input_device: tablet.raw(),
|
||||
tool: tool.id.raw() as _,
|
||||
});
|
||||
}
|
||||
|
||||
pub fn send_tablet_tool_button(
|
||||
&self,
|
||||
seat: SeatId,
|
||||
tablet: InputDeviceId,
|
||||
tool: &TabletTool,
|
||||
time_usec: u64,
|
||||
button: u32,
|
||||
state: ToolButtonState,
|
||||
) {
|
||||
self.client.event(TabletToolButton {
|
||||
self_id: self.id,
|
||||
button,
|
||||
state: state as _,
|
||||
});
|
||||
self.client.event(TabletToolFrame {
|
||||
self_id: self.id,
|
||||
seat: seat.raw(),
|
||||
time_usec,
|
||||
input_device: tablet.raw(),
|
||||
tool: tool.id.raw() as _,
|
||||
});
|
||||
}
|
||||
|
||||
pub fn send_tablet_pad_mode_switch(
|
||||
&self,
|
||||
seat: SeatId,
|
||||
pad: InputDeviceId,
|
||||
time_usec: u64,
|
||||
group: u32,
|
||||
mode: u32,
|
||||
) {
|
||||
self.client.event(TabletPadModeSwitch {
|
||||
self_id: self.id,
|
||||
seat: seat.raw(),
|
||||
time_usec,
|
||||
input_device: pad.raw(),
|
||||
group,
|
||||
mode,
|
||||
});
|
||||
}
|
||||
|
||||
pub fn send_tablet_pad_button(
|
||||
&self,
|
||||
seat: SeatId,
|
||||
pad: InputDeviceId,
|
||||
time_usec: u64,
|
||||
button: u32,
|
||||
state: PadButtonState,
|
||||
) {
|
||||
self.client.event(TabletPadButton {
|
||||
self_id: self.id,
|
||||
seat: seat.raw(),
|
||||
time_usec,
|
||||
input_device: pad.raw(),
|
||||
button,
|
||||
state: state as _,
|
||||
});
|
||||
}
|
||||
|
||||
pub fn send_tablet_pad_strip(
|
||||
&self,
|
||||
seat: SeatId,
|
||||
pad: InputDeviceId,
|
||||
time_usec: u64,
|
||||
strip: u32,
|
||||
source: Option<TabletStripEventSource>,
|
||||
position: Option<f64>,
|
||||
) {
|
||||
if let Some(source) = source {
|
||||
self.client.event(TabletPadStripSource {
|
||||
self_id: self.id,
|
||||
source: source as _,
|
||||
});
|
||||
}
|
||||
if let Some(position) = position {
|
||||
self.client.event(TabletPadStripPosition {
|
||||
self_id: self.id,
|
||||
position,
|
||||
});
|
||||
} else {
|
||||
self.client.event(TabletPadStripStop { self_id: self.id });
|
||||
}
|
||||
self.client.event(TabletPadStripFrame {
|
||||
self_id: self.id,
|
||||
seat: seat.raw(),
|
||||
time_usec,
|
||||
input_device: pad.raw(),
|
||||
strip,
|
||||
});
|
||||
}
|
||||
|
||||
pub fn send_tablet_pad_ring(
|
||||
&self,
|
||||
seat: SeatId,
|
||||
pad: InputDeviceId,
|
||||
time_usec: u64,
|
||||
ring: u32,
|
||||
source: Option<TabletRingEventSource>,
|
||||
degrees: Option<f64>,
|
||||
) {
|
||||
if let Some(source) = source {
|
||||
self.client.event(TabletPadRingSource {
|
||||
self_id: self.id,
|
||||
source: source as _,
|
||||
});
|
||||
}
|
||||
if let Some(degrees) = degrees {
|
||||
self.client.event(TabletPadRingAngle {
|
||||
self_id: self.id,
|
||||
degrees,
|
||||
});
|
||||
} else {
|
||||
self.client.event(TabletPadRingStop { self_id: self.id });
|
||||
}
|
||||
self.client.event(TabletPadRingFrame {
|
||||
self_id: self.id,
|
||||
seat: seat.raw(),
|
||||
time_usec,
|
||||
input_device: pad.raw(),
|
||||
ring,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
impl JaySeatEventsRequestHandler for JaySeatEvents {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue