bevy_ui/
interaction_states.rs1use bevy_a11y::AccessibilityNode;
3use bevy_ecs::{
4 component::Component,
5 lifecycle::{Add, Remove},
6 observer::On,
7 world::DeferredWorld,
8};
9
10#[derive(Component, Debug, Clone, Copy, Default)]
19pub struct InteractionDisabled;
20
21pub(crate) fn on_add_disabled(add: On<Add, InteractionDisabled>, mut world: DeferredWorld) {
22 let mut entity = world.entity_mut(add.entity);
23 if let Some(mut accessibility) = entity.get_mut::<AccessibilityNode>() {
24 accessibility.set_disabled();
25 }
26}
27
28pub(crate) fn on_remove_disabled(
29 remove: On<Remove, InteractionDisabled>,
30 mut world: DeferredWorld,
31) {
32 let mut entity = world.entity_mut(remove.entity);
33 if let Some(mut accessibility) = entity.get_mut::<AccessibilityNode>() {
34 accessibility.clear_disabled();
35 }
36}
37
38#[derive(Component, Default, Debug)]
41pub struct Pressed;
42
43#[derive(Component, Default, Debug)]
45pub struct Checkable;
46
47#[derive(Component, Default, Debug)]
49pub struct Checked;
50
51pub(crate) fn on_add_checkable(add: On<Add, Checked>, mut world: DeferredWorld) {
52 let mut entity = world.entity_mut(add.entity);
53 let checked = entity.get::<Checked>().is_some();
54 if let Some(mut accessibility) = entity.get_mut::<AccessibilityNode>() {
55 accessibility.set_toggled(match checked {
56 true => accesskit::Toggled::True,
57 false => accesskit::Toggled::False,
58 });
59 }
60}
61
62pub(crate) fn on_remove_checkable(add: On<Add, Checked>, mut world: DeferredWorld) {
63 let mut entity = world.entity_mut(add.entity);
65 if let Some(mut accessibility) = entity.get_mut::<AccessibilityNode>() {
66 accessibility.clear_toggled();
67 }
68}
69
70pub(crate) fn on_add_checked(add: On<Add, Checked>, mut world: DeferredWorld) {
71 let mut entity = world.entity_mut(add.entity);
72 if let Some(mut accessibility) = entity.get_mut::<AccessibilityNode>() {
73 accessibility.set_toggled(accesskit::Toggled::True);
74 }
75}
76
77pub(crate) fn on_remove_checked(remove: On<Remove, Checked>, mut world: DeferredWorld) {
78 let mut entity = world.entity_mut(remove.entity);
79 if let Some(mut accessibility) = entity.get_mut::<AccessibilityNode>() {
80 accessibility.set_toggled(accesskit::Toggled::False);
81 }
82}