Fix panic in grid due to empty auto row

This commit is contained in:
Laurenz 2021-10-02 18:41:03 +02:00
parent 2818ceee44
commit 1d60525690

View File

@ -387,31 +387,38 @@ 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;
}
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);
// 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));
}
}
// 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);
}
}
/// Layout a row with a fixed size along the block axis.