summaryrefslogtreecommitdiffstats
path: root/native/src/widget/container.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-02-12 14:07:04 +0700
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-02-12 14:07:04 +0700
commit182fb9446c577a6be988052a5103010e1a79addd (patch)
tree142dafc8fd6821dd4800828b1063cb3e505a704b /native/src/widget/container.rs
parent8b27083cdaa2ef7b749e0fd2c1a94b5606ed1c3d (diff)
downloadiced-182fb9446c577a6be988052a5103010e1a79addd.tar.gz
iced-182fb9446c577a6be988052a5103010e1a79addd.tar.bz2
iced-182fb9446c577a6be988052a5103010e1a79addd.zip
Implement `Container` widget in `iced_pure`
Diffstat (limited to 'native/src/widget/container.rs')
-rw-r--r--native/src/widget/container.rs58
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(