@@ -483,7 +483,7 @@ fn layout(
483
483
484
484
let mut frame;
485
485
if let Some ( child) = body {
486
- let mut region = resolved. unwrap_or ( regions. base ( ) ) ;
486
+ let region = resolved. unwrap_or ( regions. base ( ) ) ;
487
487
if kind. is_round ( ) {
488
488
inset = inset. map ( |side| side + Ratio :: new ( 0.5 - SQRT_2 / 4.0 ) ) ;
489
489
}
@@ -494,17 +494,23 @@ fn layout(
494
494
let pod = Regions :: one ( region, expand) ;
495
495
frame = child. layout ( vt, styles, pod) ?. into_frame ( ) ;
496
496
497
+ // Enforce correct size.
498
+ * frame. size_mut ( ) = expand. select ( region, frame. size ( ) ) ;
499
+
497
500
// Relayout with full expansion into square region to make sure
498
501
// the result is really a square or circle.
499
502
if kind. is_quadratic ( ) {
503
+ frame. set_size ( Size :: splat ( frame. size ( ) . max_by_side ( ) ) ) ;
500
504
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 ) ) ;
503
506
frame = child. layout ( vt, styles, pod) ?. into_frame ( ) ;
504
507
}
505
508
506
- // Enforce correct size.
509
+ // Enforce correct size again .
507
510
* 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
+ }
508
514
} else {
509
515
// The default size that a shape takes on if it has no child and
510
516
// enough space.
0 commit comments