use crate::{Axis, Holds, PxVec2, UiRegion}; /// Dependencies of one evaluation, before the frame and extent are composed. #[derive(Clone, Copy, Debug, PartialEq)] pub struct LayoutHolds { pub frame: [Holds; 2], pub extent: [Holds; 2], pub placement: Option, } impl LayoutHolds { pub const ANY: Self = Self { frame: [Holds::ANY; 2], extent: [Holds::ANY; 2], placement: None, }; pub fn contains(self, px: PxVec2, placement: UiRegion) -> bool { self.placement.is_none_or(|old| old == placement) && [Axis::X, Axis::Y].into_iter().all(|axis| { self.frame[axis as usize].contains(px.axis(axis)) && self.extent[axis as usize] .contains(placement.axis(axis).len().to_px(px.axis(axis))) }) } pub fn in_frame(self, placement: UiRegion) -> [Holds; 2] { [Axis::X, Axis::Y].map(|axis| { self.frame[axis as usize] .and(self.extent[axis as usize].through(placement.axis(axis).len())) }) } }