148 lines
3.9 KiB
Rust
148 lines
3.9 KiB
Rust
use smithay::{
|
|
desktop::Window,
|
|
input::pointer::{
|
|
AxisFrame, ButtonEvent, GestureHoldBeginEvent, GestureHoldEndEvent, GesturePinchBeginEvent,
|
|
GesturePinchEndEvent, GesturePinchUpdateEvent, GestureSwipeBeginEvent,
|
|
GestureSwipeEndEvent, GestureSwipeUpdateEvent, GrabStartData, MotionEvent, PointerGrab,
|
|
PointerInnerHandle, RelativeMotionEvent,
|
|
},
|
|
reexports::wayland_server::protocol::wl_surface::WlSurface,
|
|
utils::{Logical, Point},
|
|
};
|
|
|
|
use crate::Ferese;
|
|
|
|
pub struct MoveSurfaceGrab {
|
|
pub start_data: GrabStartData<Ferese>,
|
|
pub window: Window,
|
|
pub initial_location: Point<i32, Logical>,
|
|
}
|
|
|
|
impl PointerGrab<Ferese> for MoveSurfaceGrab {
|
|
fn motion(
|
|
&mut self,
|
|
data: &mut Ferese,
|
|
handle: &mut PointerInnerHandle<'_, Ferese>,
|
|
_focus: Option<(WlSurface, Point<f64, Logical>)>,
|
|
event: &MotionEvent,
|
|
) {
|
|
handle.motion(data, None, event);
|
|
let location = self.initial_location.to_f64() + (event.location - self.start_data.location);
|
|
data.space
|
|
.map_element(self.window.clone(), location.to_i32_round(), true);
|
|
}
|
|
|
|
fn relative_motion(
|
|
&mut self,
|
|
data: &mut Ferese,
|
|
handle: &mut PointerInnerHandle<'_, Ferese>,
|
|
focus: Option<(WlSurface, Point<f64, Logical>)>,
|
|
event: &RelativeMotionEvent,
|
|
) {
|
|
handle.relative_motion(data, focus, event);
|
|
}
|
|
|
|
fn button(
|
|
&mut self,
|
|
data: &mut Ferese,
|
|
handle: &mut PointerInnerHandle<'_, Ferese>,
|
|
event: &ButtonEvent,
|
|
) {
|
|
handle.button(data, event);
|
|
if handle.current_pressed().is_empty() {
|
|
handle.unset_grab(self, data, event.serial, event.time, true);
|
|
}
|
|
}
|
|
|
|
fn axis(
|
|
&mut self,
|
|
data: &mut Ferese,
|
|
handle: &mut PointerInnerHandle<'_, Ferese>,
|
|
frame: AxisFrame,
|
|
) {
|
|
handle.axis(data, frame);
|
|
}
|
|
|
|
fn frame(&mut self, data: &mut Ferese, handle: &mut PointerInnerHandle<'_, Ferese>) {
|
|
handle.frame(data);
|
|
}
|
|
|
|
fn gesture_swipe_begin(
|
|
&mut self,
|
|
data: &mut Ferese,
|
|
handle: &mut PointerInnerHandle<'_, Ferese>,
|
|
event: &GestureSwipeBeginEvent,
|
|
) {
|
|
handle.gesture_swipe_begin(data, event);
|
|
}
|
|
|
|
fn gesture_swipe_update(
|
|
&mut self,
|
|
data: &mut Ferese,
|
|
handle: &mut PointerInnerHandle<'_, Ferese>,
|
|
event: &GestureSwipeUpdateEvent,
|
|
) {
|
|
handle.gesture_swipe_update(data, event);
|
|
}
|
|
|
|
fn gesture_swipe_end(
|
|
&mut self,
|
|
data: &mut Ferese,
|
|
handle: &mut PointerInnerHandle<'_, Ferese>,
|
|
event: &GestureSwipeEndEvent,
|
|
) {
|
|
handle.gesture_swipe_end(data, event);
|
|
}
|
|
|
|
fn gesture_pinch_begin(
|
|
&mut self,
|
|
data: &mut Ferese,
|
|
handle: &mut PointerInnerHandle<'_, Ferese>,
|
|
event: &GesturePinchBeginEvent,
|
|
) {
|
|
handle.gesture_pinch_begin(data, event);
|
|
}
|
|
|
|
fn gesture_pinch_update(
|
|
&mut self,
|
|
data: &mut Ferese,
|
|
handle: &mut PointerInnerHandle<'_, Ferese>,
|
|
event: &GesturePinchUpdateEvent,
|
|
) {
|
|
handle.gesture_pinch_update(data, event);
|
|
}
|
|
|
|
fn gesture_pinch_end(
|
|
&mut self,
|
|
data: &mut Ferese,
|
|
handle: &mut PointerInnerHandle<'_, Ferese>,
|
|
event: &GesturePinchEndEvent,
|
|
) {
|
|
handle.gesture_pinch_end(data, event);
|
|
}
|
|
|
|
fn gesture_hold_begin(
|
|
&mut self,
|
|
data: &mut Ferese,
|
|
handle: &mut PointerInnerHandle<'_, Ferese>,
|
|
event: &GestureHoldBeginEvent,
|
|
) {
|
|
handle.gesture_hold_begin(data, event);
|
|
}
|
|
|
|
fn gesture_hold_end(
|
|
&mut self,
|
|
data: &mut Ferese,
|
|
handle: &mut PointerInnerHandle<'_, Ferese>,
|
|
event: &GestureHoldEndEvent,
|
|
) {
|
|
handle.gesture_hold_end(data, event);
|
|
}
|
|
|
|
fn start_data(&self) -> &GrabStartData<Ferese> {
|
|
&self.start_data
|
|
}
|
|
|
|
fn unset(&mut self, _data: &mut Ferese) {}
|
|
}
|