//! tree structure for masking use crate::layout::UiRegion; pub struct Masks { data: Vec, } #[repr(C)] #[derive(Clone, Copy)] pub struct MaskPtr(u32); #[repr(C)] pub struct MaskNode { /// TODO: this is just a rect for now, /// but would like to support arbitrary masks /// at some point; custom shader /// would probably handle that case /// bc you'd need to render to a special target /// anyways region: UiRegion, prev: MaskPtr, } impl MaskPtr { const NONE: Self = Self(u32::MAX); } impl Masks { pub fn push(&mut self, parent: MaskPtr, region: UiRegion) -> MaskPtr { match parent.0 { _ => { } u32::MAX => { let i = self.data.len(); self.data.push(MaskNode { region, prev: parent, }); MaskPtr(i as u32) } } } pub fn pop(&mut self, i: usize) {} }