Skip to content

Commit 74fce3f

Browse files
committed
Fix square sizing
Fixes typst#85.
1 parent 022b945 commit 74fce3f

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

library/src/visualize/shape.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,7 @@ fn layout(
483483

484484
let mut frame;
485485
if let Some(child) = body {
486-
let mut region = resolved.unwrap_or(regions.base());
486+
let region = resolved.unwrap_or(regions.base());
487487
if kind.is_round() {
488488
inset = inset.map(|side| side + Ratio::new(0.5 - SQRT_2 / 4.0));
489489
}
@@ -494,17 +494,23 @@ fn layout(
494494
let pod = Regions::one(region, expand);
495495
frame = child.layout(vt, styles, pod)?.into_frame();
496496

497+
// Enforce correct size.
498+
*frame.size_mut() = expand.select(region, frame.size());
499+
497500
// Relayout with full expansion into square region to make sure
498501
// the result is really a square or circle.
499502
if kind.is_quadratic() {
503+
frame.set_size(Size::splat(frame.size().max_by_side()));
500504
let length = frame.size().max_by_side().min(region.min_by_side());
501-
region = Size::splat(length);
502-
let pod = Regions::one(region, Axes::splat(true));
505+
let pod = Regions::one(Size::splat(length), Axes::splat(true));
503506
frame = child.layout(vt, styles, pod)?.into_frame();
504507
}
505508

506-
// Enforce correct size.
509+
// Enforce correct size again.
507510
*frame.size_mut() = expand.select(region, frame.size());
511+
if kind.is_quadratic() {
512+
frame.set_size(Size::splat(frame.size().max_by_side()));
513+
}
508514
} else {
509515
// The default size that a shape takes on if it has no child and
510516
// enough space.

tests/ref/visualize/shape-aspect.png

11 Bytes
Loading

0 commit comments

Comments
 (0)