1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
use super::*; pub struct ConstraintOverride<T> { core: WidgetCore, child: T, } impl<T: Widget> Widget for ConstraintOverride<T> { fn core(&self) -> &WidgetCore { &self.core } fn core_mut(&mut self) -> &mut WidgetCore { &mut self.core } fn layout_children(&mut self) { self.child.core_mut().position = self.core().position; } fn walk_children_mut<'a>(&mut self, mut f: Box<dyn FnMut(&mut dyn Widget) + 'a>) { f(&mut self.child); } } mod ext { use super::*; pub trait WidgetExt: Widget + Sized { fn fixed_size(self, size: Vec2<f64>) -> ConstraintOverride<Self> { let mut core = WidgetCore::void(); core.constraints.min_size = size; core.constraints.flex = vec2(0.0, 0.0); ConstraintOverride { core, child: self } } fn constraints_override( self, new_constraints: widget::Constraints, ) -> ConstraintOverride<Self> { let mut core = WidgetCore::void(); core.constraints = new_constraints; ConstraintOverride { core, child: self } } } impl<T: Widget> WidgetExt for T {} } pub use ext::WidgetExt as _;