cotis-utils 0.1.0-alpha

Modular Rust UI framework core
Documentation
use crate::math::{BoundingBox, Vector2};
use cotis::utils::ElementId;

/// Lists known elements and parent relationships for a layout tree snapshot.
pub trait ElementsList {
    /// Returns all known element IDs.
    fn get_element_ids(&self) -> Vec<ElementId>;
    /// Returns the parent ID for `id`, if any.
    ///
    /// Returns `None` when the element is the root or unknown.
    fn get_parent_id(&self, id: ElementId) -> Option<ElementId>;
}

/// Resolves human-readable debug names for elements.
pub trait ElementDebugName {
    /// Returns the debug name for `id`, if available.
    fn debug_name(&self, id: ElementId) -> Option<&str>;
}

/// Resolves axis-aligned layout bounds for elements.
pub trait ElementBoundingBox {
    /// Returns the bounding box of `id`.
    ///
    /// Returns `None` when `id` is unknown.
    fn bounding_box(&self, id: ElementId) -> Option<BoundingBox>;
}

/// Resolves clip offset values for elements.
pub trait ElementClipOffset {
    /// Returns clipping child offset for `id`.
    ///
    /// Returns `None` when `id` is unknown.
    fn clip_offset(&self, id: ElementId) -> Option<Vector2>;
}

/// Resolves the internal clipped content size for elements.
pub trait ElementClipInternalSize {
    /// Returns clip internal size for `id`.
    ///
    /// Returns `None` when `id` is unknown.
    fn clip_internal_size(&self, id: ElementId) -> Option<Vector2>;
}