Skip to main content

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}