cotis_utils/element_state.rs
1use crate::math::{BoundingBox, Vector2};
2use cotis::utils::ElementId;
3
4/// Lists known elements and parent relationships for a layout tree snapshot.
5pub trait ElementsList {
6 /// Returns all known element IDs.
7 fn get_element_ids(&self) -> Vec<ElementId>;
8 /// Returns the parent ID for `id`, if any.
9 ///
10 /// Returns `None` when the element is the root or unknown.
11 fn get_parent_id(&self, id: ElementId) -> Option<ElementId>;
12}
13
14/// Resolves human-readable debug names for elements.
15pub trait ElementDebugName {
16 /// Returns the debug name for `id`, if available.
17 fn debug_name(&self, id: ElementId) -> Option<&str>;
18}
19
20/// Resolves axis-aligned layout bounds for elements.
21pub trait ElementBoundingBox {
22 /// Returns the bounding box of `id`.
23 ///
24 /// Returns `None` when `id` is unknown.
25 fn bounding_box(&self, id: ElementId) -> Option<BoundingBox>;
26}
27
28/// Resolves clip offset values for elements.
29pub trait ElementClipOffset {
30 /// Returns clipping child offset for `id`.
31 ///
32 /// Returns `None` when `id` is unknown.
33 fn clip_offset(&self, id: ElementId) -> Option<Vector2>;
34}
35
36/// Resolves the internal clipped content size for elements.
37pub trait ElementClipInternalSize {
38 /// Returns clip internal size for `id`.
39 ///
40 /// Returns `None` when `id` is unknown.
41 fn clip_internal_size(&self, id: ElementId) -> Option<Vector2>;
42}