use crate::cursor::CursorIcon;
use alloc::string::String;
use bevy_asset::Handle;
use bevy_image::{Image, TextureAtlas};
use bevy_math::URect;
#[cfg(feature = "bevy_reflect")]
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
#[derive(Debug, Clone, Default, PartialEq, Eq, Hash)]
#[cfg_attr(
feature = "bevy_reflect",
derive(Reflect),
reflect(Debug, Default, Hash, PartialEq, Clone)
)]
pub struct CustomCursorImage {
pub handle: Handle<Image>,
pub texture_atlas: Option<TextureAtlas>,
pub flip_x: bool,
pub flip_y: bool,
pub rect: Option<URect>,
pub hotspot: (u16, u16),
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Hash)]
#[cfg_attr(
feature = "bevy_reflect",
derive(Reflect),
reflect(Debug, Default, Hash, PartialEq, Clone)
)]
pub struct CustomCursorUrl {
pub url: String,
pub hotspot: (u16, u16),
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(
feature = "bevy_reflect",
derive(Reflect),
reflect(Clone, PartialEq, Hash)
)]
pub enum CustomCursor {
Image(CustomCursorImage),
Url(CustomCursorUrl),
}
impl From<CustomCursor> for CursorIcon {
fn from(cursor: CustomCursor) -> Self {
CursorIcon::Custom(cursor)
}
}