From 8951b1923a581f7454ddf4dbe3e55f69ce5799f9 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Sun, 12 Feb 2023 12:15:03 +0100 Subject: [PATCH] Skip grid region if one cell is empty --- library/src/layout/grid.rs | 17 +++++++++++++---- tests/ref/bugs/grid-2.png | Bin 0 -> 9958 bytes tests/ref/layout/grid-3.png | Bin 44308 -> 44312 bytes tests/typ/bugs/grid-2.typ | 18 ++++++++++++++++++ 4 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 tests/ref/bugs/grid-2.png create mode 100644 tests/typ/bugs/grid-2.typ diff --git a/library/src/layout/grid.rs b/library/src/layout/grid.rs index 46518f82b..544b76ed8 100644 --- a/library/src/layout/grid.rs +++ b/library/src/layout/grid.rs @@ -482,6 +482,7 @@ impl<'a, 'v> GridLayouter<'a, 'v> { /// regions. fn layout_auto_row(&mut self, y: usize) -> SourceResult<()> { let mut resolved: Vec = vec![]; + let mut skip = false; // Determine the size for each region of the row. for (x, &rcol) in self.rcols.iter().enumerate() { @@ -490,13 +491,15 @@ impl<'a, 'v> GridLayouter<'a, 'v> { pod.first.x = rcol; pod.base.x = rcol; - let mut sizes = cell - .layout(self.vt, self.styles, pod)? - .into_iter() - .map(|frame| frame.height()); + let frames = cell.layout(self.vt, self.styles, pod)?.into_frames(); + if let [first, rest @ ..] = frames.as_slice() { + skip |= + first.is_empty() && rest.iter().any(|frame| !frame.is_empty()); + } // For each region, we want to know the maximum height any // column requires. + let mut sizes = frames.iter().map(|frame| frame.height()); for (target, size) in resolved.iter_mut().zip(&mut sizes) { target.set_max(size); } @@ -519,6 +522,12 @@ impl<'a, 'v> GridLayouter<'a, 'v> { return Ok(()); } + // Skip the first region if it's empty for some cell. + if skip && !self.regions.in_last() { + self.finish_region()?; + resolved.remove(0); + } + // Expand all but the last region if the space is not // eaten up by any fr rows. if self.fr.is_zero() { diff --git a/tests/ref/bugs/grid-2.png b/tests/ref/bugs/grid-2.png new file mode 100644 index 0000000000000000000000000000000000000000..2d39e1867b61decf44e96dca893dc76addbb242c GIT binary patch literal 9958 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 literal 0 HcmV?d00001 diff --git a/tests/ref/layout/grid-3.png b/tests/ref/layout/grid-3.png index d9562e9a5e7be496e617dc582eabb7955304428e..f6c17835590b91986af1e1cf1e1193721fe91346 100644 GIT binary patch delta 5401 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 a9S%+owfD+j)GT+e-_g*$Rjh9F^nU=#stDWw delta 5292 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