47 lines
984 B
Rust
47 lines
984 B
Rust
//! tree structure for masking
|
|
|
|
use crate::layout::UiRegion;
|
|
|
|
pub struct Masks {
|
|
data: Vec<MaskNode>,
|
|
}
|
|
|
|
#[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) {}
|
|
}
|