diff options
Diffstat (limited to '')
| -rw-r--r-- | native/src/widget/container.rs | 58 | 
1 files changed, 36 insertions, 22 deletions
| diff --git a/native/src/widget/container.rs b/native/src/widget/container.rs index 4444732a..90db7e33 100644 --- a/native/src/widget/container.rs +++ b/native/src/widget/container.rs @@ -118,6 +118,32 @@ where      }  } +/// Computes the layout of a [`Container`]. +pub fn layout<Renderer>( +    renderer: &Renderer, +    limits: &layout::Limits, +    width: Length, +    height: Length, +    padding: Padding, +    horizontal_alignment: alignment::Horizontal, +    vertical_alignment: alignment::Vertical, +    layout_content: impl FnOnce(&Renderer, &layout::Limits) -> layout::Node, +) -> layout::Node { +    let limits = limits.loose().width(width).height(height).pad(padding); + +    let mut content = layout_content(renderer, &limits.loose()); +    let size = limits.resolve(content.size()); + +    content.move_to(Point::new(padding.left.into(), padding.top.into())); +    content.align( +        Alignment::from(horizontal_alignment), +        Alignment::from(vertical_alignment), +        size, +    ); + +    layout::Node::with_children(size.pad(padding), vec![content]) +} +  impl<'a, Message, Renderer> Widget<Message, Renderer>      for Container<'a, Message, Renderer>  where @@ -136,28 +162,16 @@ where          renderer: &Renderer,          limits: &layout::Limits,      ) -> layout::Node { -        let limits = limits -            .loose() -            .max_width(self.max_width) -            .max_height(self.max_height) -            .width(self.width) -            .height(self.height) -            .pad(self.padding); - -        let mut content = self.content.layout(renderer, &limits.loose()); -        let size = limits.resolve(content.size()); - -        content.move_to(Point::new( -            self.padding.left.into(), -            self.padding.top.into(), -        )); -        content.align( -            Alignment::from(self.horizontal_alignment), -            Alignment::from(self.vertical_alignment), -            size, -        ); - -        layout::Node::with_children(size.pad(self.padding), vec![content]) +        layout( +            renderer, +            limits, +            self.width, +            self.height, +            self.padding, +            self.horizontal_alignment, +            self.vertical_alignment, +            |renderer, limits| self.content.layout(renderer, limits), +        )      }      fn on_event( | 
