Merge pull request #2685 from thorn132/interaction_hidden

Mouse interaction to hide system cursor
This commit is contained in:
Héctor 2025-11-18 23:56:13 +01:00 committed by GitHub
commit 80a3ca7af4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 28 additions and 9 deletions

View file

@ -4,6 +4,7 @@
pub enum Interaction { pub enum Interaction {
#[default] #[default]
None, None,
Hidden,
Idle, Idle,
Pointer, Pointer,
Grab, Grab,

View file

@ -286,11 +286,17 @@ pub fn main() -> Result<(), winit::error::EventLoopError> {
.. ..
} = state } = state
{ {
window.set_cursor( // Update the mouse cursor
conversion::mouse_interaction( if let Some(icon) =
iced_winit::conversion::mouse_interaction(
mouse_interaction, mouse_interaction,
), )
); {
window.set_cursor(icon);
window.set_cursor_visible(true);
} else {
window.set_cursor_visible(false);
}
} }
// Draw the interface // Draw the interface

View file

@ -467,10 +467,13 @@ pub fn window_theme(mode: theme::Mode) -> Option<winit::window::Theme> {
/// [`winit`]: https://github.com/rust-windowing/winit /// [`winit`]: https://github.com/rust-windowing/winit
pub fn mouse_interaction( pub fn mouse_interaction(
interaction: mouse::Interaction, interaction: mouse::Interaction,
) -> winit::window::CursorIcon { ) -> Option<winit::window::CursorIcon> {
use mouse::Interaction; use mouse::Interaction;
match interaction { let icon = match interaction {
Interaction::Hidden => {
return None;
}
Interaction::None | Interaction::Idle => { Interaction::None | Interaction::Idle => {
winit::window::CursorIcon::Default winit::window::CursorIcon::Default
} }
@ -497,7 +500,9 @@ pub fn mouse_interaction(
Interaction::Move => winit::window::CursorIcon::Move, Interaction::Move => winit::window::CursorIcon::Move,
Interaction::Copy => winit::window::CursorIcon::Copy, Interaction::Copy => winit::window::CursorIcon::Copy,
Interaction::Help => winit::window::CursorIcon::Help, Interaction::Help => winit::window::CursorIcon::Help,
} };
Some(icon)
} }
/// Converts a `MouseButton` from [`winit`] to an [`iced`] mouse button. /// Converts a `MouseButton` from [`winit`] to an [`iced`] mouse button.

View file

@ -245,8 +245,15 @@ where
pub fn update_mouse(&mut self, interaction: mouse::Interaction) { pub fn update_mouse(&mut self, interaction: mouse::Interaction) {
if interaction != self.mouse_interaction { if interaction != self.mouse_interaction {
self.raw if let Some(icon) = conversion::mouse_interaction(interaction) {
.set_cursor(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; self.mouse_interaction = interaction;
} }