Initial touch support for SSD
This commit is contained in:
parent
18d48665ef
commit
26d2556be0
4 changed files with 224 additions and 15 deletions
|
|
@ -42,6 +42,10 @@ use smithay::{
|
|||
GestureSwipeBeginEvent, GestureSwipeEndEvent, GestureSwipeUpdateEvent, MotionEvent,
|
||||
PointerTarget, RelativeMotionEvent,
|
||||
},
|
||||
touch::{
|
||||
DownEvent, MotionEvent as TouchMotionEvent, OrientationEvent, ShapeEvent, TouchTarget,
|
||||
UpEvent,
|
||||
},
|
||||
Seat,
|
||||
},
|
||||
output::Output,
|
||||
|
|
@ -1428,6 +1432,51 @@ impl PointerTarget<State> for CosmicStack {
|
|||
}
|
||||
}
|
||||
|
||||
impl TouchTarget<State> for CosmicStack {
|
||||
fn down(&self, seat: &Seat<State>, data: &mut State, event: &DownEvent, seq: Serial) {
|
||||
let mut event = event.clone();
|
||||
let active_window_geo = self.0.with_program(|p| {
|
||||
p.windows.lock().unwrap()[p.active.load(Ordering::SeqCst)].geometry()
|
||||
});
|
||||
event.location -= active_window_geo.loc.to_f64();
|
||||
TouchTarget::down(&self.0, seat, data, &event, seq)
|
||||
}
|
||||
|
||||
fn up(&self, seat: &Seat<State>, data: &mut State, event: &UpEvent, seq: Serial) {
|
||||
TouchTarget::up(&self.0, seat, data, &event, seq)
|
||||
}
|
||||
|
||||
fn motion(&self, seat: &Seat<State>, data: &mut State, event: &TouchMotionEvent, seq: Serial) {
|
||||
let mut event = event.clone();
|
||||
let active_window_geo = self.0.with_program(|p| {
|
||||
p.windows.lock().unwrap()[p.active.load(Ordering::SeqCst)].geometry()
|
||||
});
|
||||
event.location -= active_window_geo.loc.to_f64();
|
||||
TouchTarget::motion(&self.0, seat, data, &event, seq)
|
||||
}
|
||||
|
||||
fn frame(&self, seat: &Seat<State>, data: &mut State, seq: Serial) {
|
||||
TouchTarget::frame(&self.0, seat, data, seq)
|
||||
}
|
||||
|
||||
fn cancel(&self, seat: &Seat<State>, data: &mut State, seq: Serial) {
|
||||
TouchTarget::cancel(&self.0, seat, data, seq)
|
||||
}
|
||||
|
||||
fn shape(&self, seat: &Seat<State>, data: &mut State, event: &ShapeEvent, seq: Serial) {
|
||||
TouchTarget::shape(&self.0, seat, data, event, seq)
|
||||
}
|
||||
|
||||
fn orientation(
|
||||
&self,
|
||||
_seat: &Seat<State>,
|
||||
_data: &mut State,
|
||||
_event: &OrientationEvent,
|
||||
_seq: Serial,
|
||||
) {
|
||||
}
|
||||
}
|
||||
|
||||
render_elements! {
|
||||
pub CosmicStackRenderElement<R> where R: ImportAll + ImportMem;
|
||||
Header = MemoryRenderBufferRenderElement<R>,
|
||||
|
|
|
|||
|
|
@ -33,6 +33,10 @@ use smithay::{
|
|||
GestureSwipeBeginEvent, GestureSwipeEndEvent, GestureSwipeUpdateEvent, MotionEvent,
|
||||
PointerTarget, RelativeMotionEvent,
|
||||
},
|
||||
touch::{
|
||||
DownEvent, MotionEvent as TouchMotionEvent, OrientationEvent, ShapeEvent, TouchTarget,
|
||||
UpEvent,
|
||||
},
|
||||
Seat,
|
||||
},
|
||||
output::Output,
|
||||
|
|
@ -832,6 +836,45 @@ impl PointerTarget<State> for CosmicWindow {
|
|||
}
|
||||
}
|
||||
|
||||
impl TouchTarget<State> for CosmicWindow {
|
||||
fn down(&self, seat: &Seat<State>, data: &mut State, event: &DownEvent, seq: Serial) {
|
||||
let mut event = event.clone();
|
||||
event.location -= self.0.with_program(|p| p.window.geometry().loc.to_f64());
|
||||
TouchTarget::down(&self.0, seat, data, &event, seq)
|
||||
}
|
||||
|
||||
fn up(&self, seat: &Seat<State>, data: &mut State, event: &UpEvent, seq: Serial) {
|
||||
TouchTarget::up(&self.0, seat, data, &event, seq)
|
||||
}
|
||||
|
||||
fn motion(&self, seat: &Seat<State>, data: &mut State, event: &TouchMotionEvent, seq: Serial) {
|
||||
let mut event = event.clone();
|
||||
event.location -= self.0.with_program(|p| p.window.geometry().loc.to_f64());
|
||||
TouchTarget::motion(&self.0, seat, data, &event, seq)
|
||||
}
|
||||
|
||||
fn frame(&self, seat: &Seat<State>, data: &mut State, seq: Serial) {
|
||||
TouchTarget::frame(&self.0, seat, data, seq)
|
||||
}
|
||||
|
||||
fn cancel(&self, seat: &Seat<State>, data: &mut State, seq: Serial) {
|
||||
TouchTarget::cancel(&self.0, seat, data, seq)
|
||||
}
|
||||
|
||||
fn shape(&self, seat: &Seat<State>, data: &mut State, event: &ShapeEvent, seq: Serial) {
|
||||
TouchTarget::shape(&self.0, seat, data, event, seq)
|
||||
}
|
||||
|
||||
fn orientation(
|
||||
&self,
|
||||
_seat: &Seat<State>,
|
||||
_data: &mut State,
|
||||
_event: &OrientationEvent,
|
||||
_seq: Serial,
|
||||
) {
|
||||
}
|
||||
}
|
||||
|
||||
impl WaylandFocus for CosmicWindow {
|
||||
fn wl_surface(&self) -> Option<WlSurface> {
|
||||
self.0.with_program(|p| p.window.wl_surface())
|
||||
|
|
|
|||
|
|
@ -493,9 +493,11 @@ impl TouchTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::WlSurface { surface, .. } => {
|
||||
TouchTarget::down(surface, seat, data, event, seq)
|
||||
}
|
||||
// TODO: implement TouchTarget for iced/CosmicWindow/CosmicStack/ResizeFork/Grabs
|
||||
PointerFocusTarget::WindowUI(_window) => {}
|
||||
PointerFocusTarget::StackUI(_stack) => {}
|
||||
PointerFocusTarget::WindowUI(window) => {
|
||||
TouchTarget::down(window, seat, data, event, seq)
|
||||
}
|
||||
PointerFocusTarget::StackUI(stack) => TouchTarget::down(stack, seat, data, event, seq),
|
||||
// TODO: implement TouchTarget for ResizeFork/Grabs
|
||||
PointerFocusTarget::ResizeFork(_fork) => {}
|
||||
}
|
||||
}
|
||||
|
|
@ -505,8 +507,8 @@ impl TouchTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::WlSurface { surface, .. } => {
|
||||
TouchTarget::up(surface, seat, data, event, seq)
|
||||
}
|
||||
PointerFocusTarget::WindowUI(_window) => {}
|
||||
PointerFocusTarget::StackUI(_stack) => {}
|
||||
PointerFocusTarget::WindowUI(window) => TouchTarget::up(window, seat, data, event, seq),
|
||||
PointerFocusTarget::StackUI(stack) => TouchTarget::up(stack, seat, data, event, seq),
|
||||
PointerFocusTarget::ResizeFork(_fork) => {}
|
||||
}
|
||||
}
|
||||
|
|
@ -516,8 +518,12 @@ impl TouchTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::WlSurface { surface, .. } => {
|
||||
TouchTarget::motion(surface, seat, data, event, seq)
|
||||
}
|
||||
PointerFocusTarget::WindowUI(_window) => {}
|
||||
PointerFocusTarget::StackUI(_stack) => {}
|
||||
PointerFocusTarget::WindowUI(window) => {
|
||||
TouchTarget::motion(window, seat, data, event, seq)
|
||||
}
|
||||
PointerFocusTarget::StackUI(stack) => {
|
||||
TouchTarget::motion(stack, seat, data, event, seq)
|
||||
}
|
||||
PointerFocusTarget::ResizeFork(_fork) => {}
|
||||
}
|
||||
}
|
||||
|
|
@ -527,8 +533,8 @@ impl TouchTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::WlSurface { surface, .. } => {
|
||||
TouchTarget::frame(surface, seat, data, seq)
|
||||
}
|
||||
PointerFocusTarget::WindowUI(_window) => {}
|
||||
PointerFocusTarget::StackUI(_stack) => {}
|
||||
PointerFocusTarget::WindowUI(window) => TouchTarget::frame(window, seat, data, seq),
|
||||
PointerFocusTarget::StackUI(stack) => TouchTarget::frame(stack, seat, data, seq),
|
||||
PointerFocusTarget::ResizeFork(_fork) => {}
|
||||
}
|
||||
}
|
||||
|
|
@ -538,8 +544,8 @@ impl TouchTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::WlSurface { surface, .. } => {
|
||||
TouchTarget::cancel(surface, seat, data, seq)
|
||||
}
|
||||
PointerFocusTarget::WindowUI(_window) => {}
|
||||
PointerFocusTarget::StackUI(_stack) => {}
|
||||
PointerFocusTarget::WindowUI(window) => TouchTarget::cancel(window, seat, data, seq),
|
||||
PointerFocusTarget::StackUI(stack) => TouchTarget::cancel(stack, seat, data, seq),
|
||||
PointerFocusTarget::ResizeFork(_fork) => {}
|
||||
}
|
||||
}
|
||||
|
|
@ -549,8 +555,10 @@ impl TouchTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::WlSurface { surface, .. } => {
|
||||
TouchTarget::shape(surface, seat, data, event, seq)
|
||||
}
|
||||
PointerFocusTarget::WindowUI(_window) => {}
|
||||
PointerFocusTarget::StackUI(_stack) => {}
|
||||
PointerFocusTarget::WindowUI(window) => {
|
||||
TouchTarget::shape(window, seat, data, event, seq)
|
||||
}
|
||||
PointerFocusTarget::StackUI(stack) => TouchTarget::shape(stack, seat, data, event, seq),
|
||||
PointerFocusTarget::ResizeFork(_fork) => {}
|
||||
}
|
||||
}
|
||||
|
|
@ -566,8 +574,12 @@ impl TouchTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::WlSurface { surface, .. } => {
|
||||
TouchTarget::orientation(surface, seat, data, event, seq)
|
||||
}
|
||||
PointerFocusTarget::WindowUI(_window) => {}
|
||||
PointerFocusTarget::StackUI(_stack) => {}
|
||||
PointerFocusTarget::WindowUI(window) => {
|
||||
TouchTarget::orientation(window, seat, data, event, seq)
|
||||
}
|
||||
PointerFocusTarget::StackUI(stack) => {
|
||||
TouchTarget::orientation(stack, seat, data, event, seq)
|
||||
}
|
||||
PointerFocusTarget::ResizeFork(_fork) => {}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue