polyhorn_ui/layout/algorithm/
mod.rs1#[cfg(feature = "layout-stretch")]
2pub mod stretch;
3
4#[cfg(feature = "layout-yoga")]
6pub mod yoga;
7
8#[cfg(feature = "layout-stretch")]
9pub use self::stretch::*;
10
11#[cfg(feature = "layout-yoga")]
12pub use self::yoga::*;
13
14use std::hash::Hash;
15
16use crate::geometry::Dimension;
17use crate::styles::ViewStyle;
18
19use super::{Layout, MeasureFunc, Size};
20
21pub trait Algorithm {
23 type Node: Copy + Clone + Hash + Eq;
25
26 fn new() -> Self;
28
29 fn new_node(&mut self, style: ViewStyle, children: &[Self::Node]) -> Self::Node;
31
32 fn new_leaf(&mut self, style: ViewStyle, measure: MeasureFunc) -> Self::Node;
35
36 fn add_child(&mut self, parent: Self::Node, child: Self::Node);
38
39 fn remove_child(&mut self, parent: Self::Node, child: Self::Node);
41
42 fn child_count(&self, parent: Self::Node) -> usize;
44
45 fn remove(&mut self, node: Self::Node);
47
48 fn set_style(&mut self, node: Self::Node, style: ViewStyle);
50
51 fn set_measure(&mut self, node: Self::Node, measure: MeasureFunc);
53
54 fn compute_layout(&mut self, node: Self::Node, size: Size<Dimension<f32>>);
57
58 fn layout(&self, node: Self::Node) -> Layout;
60}