summaryrefslogtreecommitdiff
path: root/src/layout/pad.rs
diff options
context:
space:
mode:
authorMartin <mhaug@live.de>2021-06-17 14:18:43 +0200
committerGitHub <noreply@github.com>2021-06-17 14:18:43 +0200
commite14e8047890afad5896c9f38ccdd8551f869be64 (patch)
treee65a448e88c0de84ae0790a92a00fd903ba197da /src/layout/pad.rs
parente2cdda67dc0e16b9a482aa3a4bfd5991db06d143 (diff)
Constraints (#31)
Diffstat (limited to 'src/layout/pad.rs')
-rw-r--r--src/layout/pad.rs25
1 files changed, 20 insertions, 5 deletions
diff --git a/src/layout/pad.rs b/src/layout/pad.rs
index ccf0d5e1..c212ec8a 100644
--- a/src/layout/pad.rs
+++ b/src/layout/pad.rs
@@ -10,8 +10,12 @@ pub struct PadNode {
}
impl Layout for PadNode {
- fn layout(&self, ctx: &mut LayoutContext, regions: &Regions) -> Vec<Frame> {
- let regions = regions.map(|size| size - self.padding.resolve(size).size());
+ fn layout(
+ &self,
+ ctx: &mut LayoutContext,
+ regions: &Regions,
+ ) -> Vec<Constrained<Frame>> {
+ let mut regions = regions.map(|size| size - self.padding.resolve(size).size());
let mut frames = self.child.layout(ctx, &regions);
for frame in &mut frames {
@@ -19,12 +23,23 @@ impl Layout for PadNode {
let padding = self.padding.resolve(padded);
let origin = Point::new(padding.left, padding.top);
- frame.size = padded;
- frame.baseline += origin.y;
+ frame.item.size = padded;
+ frame.item.baseline += origin.y;
- for (point, _) in &mut frame.elements {
+ for (point, _) in &mut frame.item.elements {
*point += origin;
}
+
+ frame.constraints.mutate(padding.size() * -1.0);
+
+ if self.padding.left.is_relative() || self.padding.right.is_relative() {
+ frame.constraints.base.horizontal = Some(regions.base.width);
+ }
+ if self.padding.top.is_relative() || self.padding.bottom.is_relative() {
+ frame.constraints.base.vertical = Some(regions.base.height);
+ }
+
+ regions.next();
}
frames