diff options
| author | Laurenz <laurmaedje@gmail.com> | 2023-04-11 16:20:54 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2023-04-11 16:26:26 +0200 |
| commit | 74fce3fc78604e1d13517f88b8f07dcd738cf865 (patch) | |
| tree | 9b5b5737f7aa582e3a2551072a0ab705444aafe3 /library | |
| parent | 022b945fb3182d3b5df5563a61ec0a24f41c70a1 (diff) | |
Fix square sizing
Fixes #85.
Diffstat (limited to 'library')
| -rw-r--r-- | library/src/visualize/shape.rs | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/library/src/visualize/shape.rs b/library/src/visualize/shape.rs index c899ad6d..51dbabd8 100644 --- a/library/src/visualize/shape.rs +++ b/library/src/visualize/shape.rs @@ -483,7 +483,7 @@ fn layout( let mut frame; if let Some(child) = body { - let mut region = resolved.unwrap_or(regions.base()); + let region = resolved.unwrap_or(regions.base()); if kind.is_round() { inset = inset.map(|side| side + Ratio::new(0.5 - SQRT_2 / 4.0)); } @@ -494,17 +494,23 @@ fn layout( let pod = Regions::one(region, expand); frame = child.layout(vt, styles, pod)?.into_frame(); + // Enforce correct size. + *frame.size_mut() = expand.select(region, frame.size()); + // Relayout with full expansion into square region to make sure // the result is really a square or circle. if kind.is_quadratic() { + frame.set_size(Size::splat(frame.size().max_by_side())); let length = frame.size().max_by_side().min(region.min_by_side()); - region = Size::splat(length); - let pod = Regions::one(region, Axes::splat(true)); + let pod = Regions::one(Size::splat(length), Axes::splat(true)); frame = child.layout(vt, styles, pod)?.into_frame(); } - // Enforce correct size. + // Enforce correct size again. *frame.size_mut() = expand.select(region, frame.size()); + if kind.is_quadratic() { + frame.set_size(Size::splat(frame.size().max_by_side())); + } } else { // The default size that a shape takes on if it has no child and // enough space. |
