summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-10-02 18:41:03 +0200
committerLaurenz <laurmaedje@gmail.com>2021-10-02 18:41:03 +0200
commit1d60525690ebc40745ffa1f51080539fc9448aff (patch)
treec1c1de05fc82ad5327a05d6602310bc61f586ec2 /src
parent2818ceee44a523308d83643b8d2f921b4a5e5d2e (diff)
Fix panic in grid due to empty auto row
Diffstat (limited to 'src')
-rw-r--r--src/layout/grid.rs43
1 files changed, 25 insertions, 18 deletions
diff --git a/src/layout/grid.rs b/src/layout/grid.rs
index f2a38d7c..7ed5dd7a 100644
--- a/src/layout/grid.rs
+++ b/src/layout/grid.rs
@@ -387,30 +387,37 @@ impl<'a> GridLayouter<'a> {
}
}
- // Layout the row.
+ // Nothing to layout.
+ if resolved.is_empty() {
+ return;
+ }
+
+ // Layout into a single region.
if let &[first] = resolved.as_slice() {
let frame = self.layout_single_row(ctx, first, y);
self.push_row(ctx, frame);
- } else {
- // Expand all but the last region if the space is not eaten up by any fr
- // rows.
- if self.fr.is_zero() {
- let len = resolved.len();
- for (target, (current, _)) in
- resolved[.. len - 1].iter_mut().zip(self.regions.iter())
- {
- target.set_max(current.get(self.block));
- }
+ return;
+ }
+
+ // Expand all but the last region if the space is not
+ // eaten up by any fr rows.
+ if self.fr.is_zero() {
+ let len = resolved.len();
+ for (target, (current, _)) in
+ resolved[.. len - 1].iter_mut().zip(self.regions.iter())
+ {
+ target.set_max(current.get(self.block));
}
+ }
- let frames = self.layout_multi_row(ctx, &resolved, y);
- let len = frames.len();
- for (i, frame) in frames.into_iter().enumerate() {
- if i + 1 < len {
- self.constraints.exact.set(self.block, Some(self.full));
- }
- self.push_row(ctx, frame);
+ // Layout into multiple regions.
+ let frames = self.layout_multi_row(ctx, &resolved, y);
+ let len = frames.len();
+ for (i, frame) in frames.into_iter().enumerate() {
+ if i + 1 < len {
+ self.constraints.exact.set(self.block, Some(self.full));
}
+ self.push_row(ctx, frame);
}
}