freya_core/accessibility/
dirty_nodes.rs

1use rustc_hash::{
2    FxHashMap,
3    FxHashSet,
4};
5
6use crate::{
7    node_id::NodeId,
8    prelude::AccessibilityFocusStrategy,
9};
10
11#[derive(Default)]
12pub struct AccessibilityDirtyNodes {
13    pub requested_focus: Option<AccessibilityFocusStrategy>,
14    pub added_or_updated: FxHashSet<NodeId>,
15    pub removed: FxHashMap<NodeId, NodeId>,
16}
17
18impl AccessibilityDirtyNodes {
19    pub fn request_focus(&mut self, strategy: AccessibilityFocusStrategy) {
20        self.requested_focus = Some(strategy);
21    }
22
23    pub fn add_or_update(&mut self, node_id: NodeId) {
24        self.added_or_updated.insert(node_id);
25    }
26
27    pub fn remove(&mut self, node_id: NodeId, parent_id: NodeId) {
28        self.removed.insert(node_id, parent_id);
29    }
30
31    pub fn clear(&mut self) {
32        self.requested_focus.take();
33        self.added_or_updated.clear();
34        self.removed.clear();
35    }
36}