diff options
| author | Martin <mhaug@live.de> | 2021-06-17 14:18:43 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-06-17 14:18:43 +0200 |
| commit | e14e8047890afad5896c9f38ccdd8551f869be64 (patch) | |
| tree | e65a448e88c0de84ae0790a92a00fd903ba197da /src/layout/pad.rs | |
| parent | e2cdda67dc0e16b9a482aa3a4bfd5991db06d143 (diff) | |
Constraints (#31)
Diffstat (limited to 'src/layout/pad.rs')
| -rw-r--r-- | src/layout/pad.rs | 25 |
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, ®ions); 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 |
