Add Hidden variant to mouse::Interaction

This commit is contained in:
thorn132 2024-12-04 18:29:49 -07:00 • committed by Héctor Ramón Jiménez
parent 9565f88cb7
commit 3a6f29ce67
No known key found for this signature in database
GPG key ID: 7CC46565708259A7
3 changed files with 18 additions and 5 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

@ -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;
} }