use bevy_a11y::AccessibilityNode;
use bevy_ecs::{
component::Component,
lifecycle::{Add, Remove},
observer::On,
world::DeferredWorld,
};
#[derive(Component, Debug, Clone, Copy, Default)]
pub struct InteractionDisabled;
pub(crate) fn on_add_disabled(add: On<Add, InteractionDisabled>, mut world: DeferredWorld) {
let mut entity = world.entity_mut(add.entity);
if let Some(mut accessibility) = entity.get_mut::<AccessibilityNode>() {
accessibility.set_disabled();
}
}
pub(crate) fn on_remove_disabled(
remove: On<Remove, InteractionDisabled>,
mut world: DeferredWorld,
) {
let mut entity = world.entity_mut(remove.entity);
if let Some(mut accessibility) = entity.get_mut::<AccessibilityNode>() {
accessibility.clear_disabled();
}
}
#[derive(Component, Debug, Clone, Copy, Default)]
pub struct Pressed;
#[derive(Component, Debug, Clone, Copy, Default)]
pub struct Checkable;
#[derive(Component, Debug, Clone, Copy, Default)]
pub struct Checked;
pub(crate) fn on_add_checkable(add: On<Add, Checked>, mut world: DeferredWorld) {
let mut entity = world.entity_mut(add.entity);
let checked = entity.get::<Checked>().is_some();
if let Some(mut accessibility) = entity.get_mut::<AccessibilityNode>() {
accessibility.set_toggled(match checked {
true => accesskit::Toggled::True,
false => accesskit::Toggled::False,
});
}
}
pub(crate) fn on_remove_checkable(add: On<Add, Checked>, mut world: DeferredWorld) {
let mut entity = world.entity_mut(add.entity);
if let Some(mut accessibility) = entity.get_mut::<AccessibilityNode>() {
accessibility.clear_toggled();
}
}
pub(crate) fn on_add_checked(add: On<Add, Checked>, mut world: DeferredWorld) {
let mut entity = world.entity_mut(add.entity);
if let Some(mut accessibility) = entity.get_mut::<AccessibilityNode>() {
accessibility.set_toggled(accesskit::Toggled::True);
}
}
pub(crate) fn on_remove_checked(remove: On<Remove, Checked>, mut world: DeferredWorld) {
let mut entity = world.entity_mut(remove.entity);
if let Some(mut accessibility) = entity.get_mut::<AccessibilityNode>() {
accessibility.set_toggled(accesskit::Toggled::False);
}
}