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)]
27
28pub enum CursorIcon {
29 #[cfg(feature = "custom_cursor")]
30 Custom(CustomCursor),
32 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 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}