diff options
| author | Laurenz <laurmaedje@gmail.com> | 2021-10-02 18:41:03 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-10-02 18:41:03 +0200 |
| commit | 1d60525690ebc40745ffa1f51080539fc9448aff (patch) | |
| tree | c1c1de05fc82ad5327a05d6602310bc61f586ec2 /src | |
| parent | 2818ceee44a523308d83643b8d2f921b4a5e5d2e (diff) | |
Fix panic in grid due to empty auto row
Diffstat (limited to 'src')
| -rw-r--r-- | src/layout/grid.rs | 43 |
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); } } |
