diff --git a/core/src/mouse/interaction.rs b/core/src/mouse/interaction.rs index aad6a3ea..3f75d3b3 100644 --- a/core/src/mouse/interaction.rs +++ b/core/src/mouse/interaction.rs @@ -4,6 +4,7 @@ pub enum Interaction { #[default] None, + Hidden, Idle, Pointer, Grab, diff --git a/winit/src/conversion.rs b/winit/src/conversion.rs index 250918ab..08d8db94 100644 --- a/winit/src/conversion.rs +++ b/winit/src/conversion.rs @@ -467,10 +467,13 @@ pub fn window_theme(mode: theme::Mode) -> Option { /// [`winit`]: https://github.com/rust-windowing/winit pub fn mouse_interaction( interaction: mouse::Interaction, -) -> winit::window::CursorIcon { +) -> Option { use mouse::Interaction; - match interaction { + let icon = match interaction { + Interaction::Hidden => { + return None; + } Interaction::None | Interaction::Idle => { winit::window::CursorIcon::Default } @@ -497,7 +500,9 @@ pub fn mouse_interaction( Interaction::Move => winit::window::CursorIcon::Move, Interaction::Copy => winit::window::CursorIcon::Copy, Interaction::Help => winit::window::CursorIcon::Help, - } + }; + + Some(icon) } /// Converts a `MouseButton` from [`winit`] to an [`iced`] mouse button. diff --git a/winit/src/window.rs b/winit/src/window.rs index 101556f8..fe3929a2 100644 --- a/winit/src/window.rs +++ b/winit/src/window.rs @@ -245,8 +245,15 @@ where pub fn update_mouse(&mut self, interaction: mouse::Interaction) { if interaction != self.mouse_interaction { - self.raw - .set_cursor(conversion::mouse_interaction(interaction)); + if let Some(icon) = conversion::mouse_interaction(interaction) { + self.raw.set_cursor(icon); + + if self.mouse_interaction == mouse::Interaction::Hidden { + self.raw.set_cursor_visible(true); + } + } else { + self.raw.set_cursor_visible(false); + } self.mouse_interaction = interaction; }