use crate::container::Container;
use crate::fold::FoldSet;
use crate::sizing::Size;
pub type ElementId = usize;
#[derive(Debug, Clone)]
pub struct Element {
pub size: Size,
pub min_size: Size,
pub container: Option<Container>,
pub children: Vec<Element>,
pub fold_set: Option<FoldSet>,
}
impl Element {
pub fn leaf(size: Size) -> Self {
Self {
size,
min_size: Size::new(crate::SizeType::Fix(1), crate::SizeType::Fix(1)),
container: None,
children: Vec::new(),
fold_set: None,
}
}
pub fn membrane(size: Size, container: Container, children: Vec<Element>) -> Self {
Self {
size,
min_size: Size::new(crate::SizeType::Fix(1), crate::SizeType::Fix(1)),
container: Some(container),
children,
fold_set: None,
}
}
pub fn with_min(mut self, min: Size) -> Self {
self.min_size = min;
self
}
pub fn with_fold_set(mut self, fs: FoldSet) -> Self {
self.fold_set = Some(fs);
self
}
pub fn count(&self) -> usize {
1 + self.children.iter().map(Element::count).sum::<usize>()
}
}