bevy_window/cursor/
mod.rs

1//! Components to customize the window cursor.
2
3#[cfg(feature = "custom_cursor")]
4mod custom_cursor;
5mod system_cursor;
6
7#[cfg(feature = "custom_cursor")]
8pub use custom_cursor::*;
9pub use system_cursor::*;
10
11use bevy_ecs::component::Component;
12#[cfg(feature = "bevy_reflect")]
13use bevy_ecs::reflect::ReflectComponent;
14#[cfg(feature = "bevy_reflect")]
15use bevy_reflect::{std_traits::ReflectDefault, Reflect};
16
17#[cfg(feature = "custom_cursor")]
18pub use crate::cursor::{CustomCursor, CustomCursorImage};
19
20/// Insert into a window entity to set the cursor for that window.
21#[derive(Component, Debug, Clone, PartialEq, Eq)]
22#[cfg_attr(
23    feature = "bevy_reflect",
24    derive(Reflect),
25    reflect(Component, Debug, Default, PartialEq, Clone)
26)]
27
28pub enum CursorIcon {
29    #[cfg(feature = "custom_cursor")]
30    /// Custom cursor image.
31    Custom(CustomCursor),
32    /// System provided cursor icon.
33    System(SystemCursorIcon),
34}
35
36impl Default for CursorIcon {
37    fn default() -> Self {
38        CursorIcon::System(Default::default())
39    }
40}
41
42impl From<SystemCursorIcon> for CursorIcon {
43    fn from(icon: SystemCursorIcon) -> Self {
44        CursorIcon::System(icon)
45    }
46}
47
48impl CursorIcon {
49    /// Returns the system cursor icon if this is a system cursor.
50    pub fn as_system(&self) -> Option<&SystemCursorIcon> {
51        #[cfg(feature = "custom_cursor")]
52        {
53            if let CursorIcon::System(icon) = self {
54                Some(icon)
55            } else {
56                None
57            }
58        }
59        #[cfg(not(feature = "custom_cursor"))]
60        {
61            let CursorIcon::System(icon) = self;
62            Some(icon)
63        }
64    }
65}