From 890a53fef1fbcba14ea31a3c718a4314a6e34c2e Mon Sep 17 00:00:00 2001 From: Hojjat Date: Tue, 4 Aug 2026 10:34:36 -0600 Subject: [PATCH] fix: add tablet support for toplevel windows --- winit/src/conversion.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/winit/src/conversion.rs b/winit/src/conversion.rs index 8ce3ed66..e10c633d 100644 --- a/winit/src/conversion.rs +++ b/winit/src/conversion.rs @@ -269,6 +269,13 @@ pub fn window_event( scale_factor, ))) } + winit::event::PointerSource::TabletTool { .. } => { + let position = position.to_logical::(scale_factor); + + Some(Event::Mouse(mouse::Event::CursorMoved { + position: Point::new(position.x as f32, position.y as f32), + })) + } _ => None, }, // TODO how to handle this for Touch? Is it different than a press? Need to double check winit impl @@ -306,6 +313,24 @@ pub fn window_event( } })) } + WindowEvent::PointerButton { + button: ButtonSource::TabletTool { button, .. }, + state, + .. + } => { + let button: Option = button.into(); + + button.map(mouse_button).map(|button| { + Event::Mouse(match state { + winit::event::ElementState::Pressed => { + mouse::Event::ButtonPressed(button) + } + winit::event::ElementState::Released => { + mouse::Event::ButtonReleased(button) + } + }) + }) + } WindowEvent::PointerButton { button: ButtonSource::Touch { finger_id, force }, state,