From 4b081e27d46246eb7b38b793e13c8bc9bcb2a9bd Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Wed, 24 Apr 2024 19:44:26 -0700 Subject: [PATCH] libei touch events --- src/backend/libei/mod.rs | 76 +++++++++++++++++++++++++++++++++++----- 1 file changed, 67 insertions(+), 9 deletions(-) diff --git a/src/backend/libei/mod.rs b/src/backend/libei/mod.rs index ba3d009c2971..87bbee6012fe 100644 --- a/src/backend/libei/mod.rs +++ b/src/backend/libei/mod.rs @@ -117,13 +117,9 @@ impl InputBackend for EiInput { type GestureHoldBeginEvent = input::UnusedEvent; type GestureHoldEndEvent = input::UnusedEvent; - // TODO - // type TouchDownEvent = request::TouchDown; - // type TouchUpEvent = request::TouchUp; - // type TouchMotionEvent = request::TouchMotion; - type TouchDownEvent = input::UnusedEvent; - type TouchUpEvent = input::UnusedEvent; - type TouchMotionEvent = input::UnusedEvent; + type TouchDownEvent = request::TouchDown; + type TouchUpEvent = request::TouchUp; + type TouchMotionEvent = request::TouchMotion; type TouchCancelEvent = input::UnusedEvent; // XXX? type TouchFrameEvent = input::UnusedEvent; // XXX @@ -312,7 +308,62 @@ impl input::AbsolutePositionEvent for request::PointerMotionAbsolute { } } -// Want event source producing (among others?) InputEvent +impl input::TouchDownEvent for request::TouchDown {} +impl input::TouchEvent for request::TouchDown { + fn slot(&self) -> input::TouchSlot { + Some(self.touch_id).into() + } +} +impl input::AbsolutePositionEvent for request::TouchDown { + fn x(&self) -> f64 { + self.x.into() + } + + fn y(&self) -> f64 { + self.y.into() + } + + fn x_transformed(&self, _width: i32) -> f64 { + // XXX ? + self.x.into() + } + + fn y_transformed(&self, _height: i32) -> f64 { + self.y.into() + } +} + +impl input::TouchUpEvent for request::TouchUp {} +impl input::TouchEvent for request::TouchUp { + fn slot(&self) -> input::TouchSlot { + Some(self.touch_id).into() + } +} + +impl input::TouchMotionEvent for request::TouchMotion {} +impl input::TouchEvent for request::TouchMotion { + fn slot(&self) -> input::TouchSlot { + Some(self.touch_id).into() + } +} +impl input::AbsolutePositionEvent for request::TouchMotion { + fn x(&self) -> f64 { + self.x.into() + } + + fn y(&self) -> f64 { + self.y.into() + } + + fn x_transformed(&self, _width: i32) -> f64 { + // XXX ? + self.x.into() + } + + fn y_transformed(&self, _height: i32) -> f64 { + self.y.into() + } +} impl EventSource for EiInput { type Event = InputEvent; @@ -487,7 +538,14 @@ fn convert_request(request: EisRequest) -> Option> { EisRequest::ScrollDiscrete(event) => Some(InputEvent::PointerAxis { event: ScrollEvent::Discrete(event), }), - _ => None, + EisRequest::TouchDown(event) => Some(InputEvent::TouchDown { event }), + EisRequest::TouchUp(event) => Some(InputEvent::TouchUp { event }), + EisRequest::TouchMotion(event) => Some(InputEvent::TouchMotion { event }), + EisRequest::Frame(_) => None, // TODO + EisRequest::Disconnect + | EisRequest::Bind(_) + | EisRequest::DeviceStartEmulating(_) + | EisRequest::DeviceStopEmulating(_) => None, } }