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)]
27pub enum CursorIcon {
28    #[cfg(feature = "custom_cursor")]
29    /// Custom cursor image.
30    Custom(CustomCursor),
31    /// System provided cursor icon.
32    System(SystemCursorIcon),
33}
34
35impl Default for CursorIcon {
36    fn default() -> Self {
37        CursorIcon::System(Default::default())
38    }
39}
40
41impl From<SystemCursorIcon> for CursorIcon {
42    fn from(icon: SystemCursorIcon) -> Self {
43        CursorIcon::System(icon)
44    }
45}
46
47impl CursorIcon {
48    /// Returns the system cursor icon if this is a system cursor.
49    pub fn as_system(&self) -> Option<&SystemCursorIcon> {
50        #[cfg(feature = "custom_cursor")]
51        {
52            if let CursorIcon::System(icon) = self {
53                Some(icon)
54            } else {
55                None
56            }
57        }
58        #[cfg(not(feature = "custom_cursor"))]
59        {
60            let CursorIcon::System(icon) = self;
61            Some(icon)
62        }
63    }
64}