From f3cc3bdae77793e73d4a72bab55ed3331b23e2a1 Mon Sep 17 00:00:00 2001 From: PgBiel <9021226+PgBiel@users.noreply.github.com> Date: Fri, 13 Jun 2025 03:45:42 -0300 Subject: fix space calculation of new footers however, there are widows... --- crates/typst-layout/src/grid/layouter.rs | 12 ------------ crates/typst-layout/src/grid/repeated.rs | 9 +++++++++ tests/ref/grid-subfooters-demo.png | Bin 7234 -> 6989 bytes .../grid-subfooters-repeat-replace-double-widow.png | Bin 1033 -> 973 bytes tests/ref/grid-subfooters-repeat-replace-gutter.png | Bin 772 -> 721 bytes ...grid-subfooters-repeat-replace-multiple-levels.png | Bin 0 -> 910 bytes tests/ref/grid-subfooters-repeat-replace-widow.png | Bin 979 -> 970 bytes tests/ref/grid-subfooters-repeat-replace.png | Bin 975 -> 963 bytes 8 files changed, 9 insertions(+), 12 deletions(-) create mode 100644 tests/ref/grid-subfooters-repeat-replace-multiple-levels.png diff --git a/crates/typst-layout/src/grid/layouter.rs b/crates/typst-layout/src/grid/layouter.rs index d4604091..fd846b6e 100644 --- a/crates/typst-layout/src/grid/layouter.rs +++ b/crates/typst-layout/src/grid/layouter.rs @@ -298,11 +298,6 @@ impl<'a> GridLayouter<'a> { self.prepare_next_repeating_footers(true, engine)?; - // Ensure rows in the first region will be aware of the possible - // presence of the footer. - self.regions.size.y -= self.current.footer_height; - self.current.initial_after_repeats = self.regions.size.y; - let mut y = 0; let mut consecutive_header_count = 0; while y < self.grid.rows.len() { @@ -1785,13 +1780,6 @@ impl<'a> GridLayouter<'a> { )?; } - // Ensure rows don't try to overrun the footer. - // Note that header layout will only subtract this again if it has - // to skip regions to fit headers, so there is no risk of - // subtracting this twice. - self.regions.size.y -= self.current.footer_height; - self.current.initial_after_repeats = self.regions.size.y; - if !self.repeating_headers.is_empty() || !self.pending_headers.is_empty() { // Add headers to the new region. self.layout_active_headers(engine)?; diff --git a/crates/typst-layout/src/grid/repeated.rs b/crates/typst-layout/src/grid/repeated.rs index 1a873310..86506df7 100644 --- a/crates/typst-layout/src/grid/repeated.rs +++ b/crates/typst-layout/src/grid/repeated.rs @@ -632,9 +632,18 @@ impl<'a> GridLayouter<'a> { .simulate_footer_heights(footers, &self.regions, engine, disambiguator)?; } + // Ensure rows don't try to overrun the new footers. + // Note that header layout will only subtract this again if it has + // to skip regions to fit headers, so there is no risk of + // subtracting this twice. + self.regions.size.y -= expected_footer_height; self.current.footer_height += expected_footer_height; self.current.repeating_footer_heights.extend(expected_footer_heights); + if at_region_top { + self.current.initial_after_repeats = self.regions.size.y; + } + Ok(()) } diff --git a/tests/ref/grid-subfooters-demo.png b/tests/ref/grid-subfooters-demo.png index dc64e29a..f4a3f173 100644 Binary files a/tests/ref/grid-subfooters-demo.png and b/tests/ref/grid-subfooters-demo.png differ diff --git a/tests/ref/grid-subfooters-repeat-replace-double-widow.png b/tests/ref/grid-subfooters-repeat-replace-double-widow.png index 86d92a83..37ecbca3 100644 Binary files a/tests/ref/grid-subfooters-repeat-replace-double-widow.png and b/tests/ref/grid-subfooters-repeat-replace-double-widow.png differ diff --git a/tests/ref/grid-subfooters-repeat-replace-gutter.png b/tests/ref/grid-subfooters-repeat-replace-gutter.png index 2ca22153..61bdabeb 100644 Binary files a/tests/ref/grid-subfooters-repeat-replace-gutter.png and b/tests/ref/grid-subfooters-repeat-replace-gutter.png differ diff --git a/tests/ref/grid-subfooters-repeat-replace-multiple-levels.png b/tests/ref/grid-subfooters-repeat-replace-multiple-levels.png new file mode 100644 index 00000000..6247969a Binary files /dev/null and b/tests/ref/grid-subfooters-repeat-replace-multiple-levels.png differ diff --git a/tests/ref/grid-subfooters-repeat-replace-widow.png b/tests/ref/grid-subfooters-repeat-replace-widow.png index 35633b0a..090ebca3 100644 Binary files a/tests/ref/grid-subfooters-repeat-replace-widow.png and b/tests/ref/grid-subfooters-repeat-replace-widow.png differ diff --git a/tests/ref/grid-subfooters-repeat-replace.png b/tests/ref/grid-subfooters-repeat-replace.png index 0d7803b8..95025f8b 100644 Binary files a/tests/ref/grid-subfooters-repeat-replace.png and b/tests/ref/grid-subfooters-repeat-replace.png differ -- cgit v1.2.3