bevy_window/cursor/
mod.rs1#[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#[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(CustomCursor),
31 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 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}