use kas::prelude::*;
impl_scope! {
#[autoimpl(Deref, DerefMut using self.inner)]
#[autoimpl(class_traits using self.inner where W: trait)]
#[widget{ derive = self.inner; }]
pub struct Reserve<W: Widget> {
pub inner: W,
reserve: Box<dyn Fn(SizeCx, AxisInfo) -> SizeRules + 'static>,
}
impl Self {
#[inline]
pub fn new(inner: W, reserve: impl Fn(SizeCx, AxisInfo) -> SizeRules + 'static) -> Self {
let reserve = Box::new(reserve);
Reserve { inner, reserve }
}
}
impl Layout for Self {
fn size_rules(&mut self, sizer: SizeCx, axis: AxisInfo) -> SizeRules {
let inner_rules = self.inner.size_rules(sizer.re(), axis);
let reserve_rules = (self.reserve)(sizer.re(), axis);
inner_rules.max(reserve_rules)
}
}
}