From a32046ea5001ff5f72f278f5efd3d614f288ec3a Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Sun, 7 Jan 2024 08:40:17 +0100 Subject: [PATCH] LibWeb: Fix auto-fill track counting to correctly handle gaps in GFC Fixes the mistake that gaps are counted as if they exist after each track, when actually gaps are present only between tracks. Visual progression on https://kde.org/products/ --- .../grid/columns-auto-fill-with-gap-2.txt | 23 +++++++++++++++++++ .../grid/columns-auto-fill-with-gap-2.html | 10 ++++++++ .../LibWeb/Layout/GridFormattingContext.cpp | 14 +++++------ 3 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 Tests/LibWeb/Layout/expected/grid/columns-auto-fill-with-gap-2.txt create mode 100644 Tests/LibWeb/Layout/input/grid/columns-auto-fill-with-gap-2.html diff --git a/Tests/LibWeb/Layout/expected/grid/columns-auto-fill-with-gap-2.txt b/Tests/LibWeb/Layout/expected/grid/columns-auto-fill-with-gap-2.txt new file mode 100644 index 0000000000..aac42e85a0 --- /dev/null +++ b/Tests/LibWeb/Layout/expected/grid/columns-auto-fill-with-gap-2.txt @@ -0,0 +1,23 @@ +Viewport <#document> at (0,0) content-size 800x600 children: not-inline + BlockContainer at (0,0) content-size 800x33.46875 [BFC] children: not-inline + BlockContainer at (8,8) content-size 784x17.46875 children: not-inline + Box at (8,8) content-size 784x17.46875 [GFC] children: not-inline + BlockContainer
at (8,8) content-size 367x17.46875 [BFC] children: inline + line 0 width: 9.34375, height: 17.46875, bottom: 17.46875, baseline: 13.53125 + frag 0 from TextNode start: 0, length: 1, rect: [8,8 9.34375x17.46875] + "a" + TextNode <#text> + BlockContainer
at (425,8) content-size 367x17.46875 [BFC] children: inline + line 0 width: 9.46875, height: 17.46875, bottom: 17.46875, baseline: 13.53125 + frag 0 from TextNode start: 0, length: 1, rect: [425,8 9.46875x17.46875] + "b" + TextNode <#text> + +ViewportPaintable (Viewport<#document>) [0,0 800x600] + PaintableWithLines (BlockContainer) [0,0 800x33.46875] + PaintableWithLines (BlockContainer) [8,8 784x17.46875] + PaintableBox (Box
.grid) [8,8 784x17.46875] + PaintableWithLines (BlockContainer
) [8,8 367x17.46875] + TextPaintable (TextNode<#text>) + PaintableWithLines (BlockContainer
) [425,8 367x17.46875] + TextPaintable (TextNode<#text>) diff --git a/Tests/LibWeb/Layout/input/grid/columns-auto-fill-with-gap-2.html b/Tests/LibWeb/Layout/input/grid/columns-auto-fill-with-gap-2.html new file mode 100644 index 0000000000..70e953d231 --- /dev/null +++ b/Tests/LibWeb/Layout/input/grid/columns-auto-fill-with-gap-2.html @@ -0,0 +1,10 @@ +
a
b
\ No newline at end of file diff --git a/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp index 832654e67d..0d9b407847 100644 --- a/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp @@ -107,8 +107,8 @@ int GridFormattingContext::count_of_repeated_auto_fill_or_fit_tracks(Vectorwidth.to_px_or_zero()); } - if (sum_of_grid_track_sizes == 0) + auto free_space = get_free_space(*m_available_space, GridDimension::Column).to_px_or_zero(); + auto const& column_gap = grid_container().computed_values().column_gap(); + free_space -= repeat_track_list.size() * column_gap.to_px(grid_container(), m_available_space->width.to_px_or_zero()); + if (free_space <= 0 || sum_of_grid_track_sizes == 0) return 0; - return max(1, (get_free_space(*m_available_space, GridDimension::Column).to_px_or_zero() / sum_of_grid_track_sizes).to_int()); + return (free_space / sum_of_grid_track_sizes).to_int(); // For the purpose of finding the number of auto-repeated tracks in a standalone axis, the UA must // floor the track size to a UA-specified value to avoid division by zero. It is suggested that this