From 9c728079763c4a584443cc7743cd22acec1c109a Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Fri, 5 Jan 2024 21:32:47 +0100 Subject: [PATCH] LibWeb: Account for auto-fill/fit when expanding grid lines in GFC Named line placement now works when auto-fill or auto-fit is used to define grid columns. --- .../grid/auto-fill-and-named-line-placement.txt | 16 ++++++++++++++++ .../grid/auto-fill-and-named-line-placement.html | 13 +++++++++++++ .../LibWeb/Layout/GridFormattingContext.cpp | 12 +++++++++--- 3 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 Tests/LibWeb/Layout/expected/grid/auto-fill-and-named-line-placement.txt create mode 100644 Tests/LibWeb/Layout/input/grid/auto-fill-and-named-line-placement.html diff --git a/Tests/LibWeb/Layout/expected/grid/auto-fill-and-named-line-placement.txt b/Tests/LibWeb/Layout/expected/grid/auto-fill-and-named-line-placement.txt new file mode 100644 index 0000000000..2a2d5e2dbb --- /dev/null +++ b/Tests/LibWeb/Layout/expected/grid/auto-fill-and-named-line-placement.txt @@ -0,0 +1,16 @@ +Viewport <#document> at (0,0) content-size 800x600 children: not-inline + BlockContainer at (0,0) content-size 800x73.46875 [BFC] children: not-inline + BlockContainer at (8,8) content-size 784x57.46875 children: not-inline + Box at (8,8) content-size 784x57.46875 [GFC] children: not-inline + BlockContainer at (28,28) content-size 744x17.46875 [BFC] children: inline + line 0 width: 6.34375, height: 17.46875, bottom: 17.46875, baseline: 13.53125 + frag 0 from TextNode start: 0, length: 1, rect: [397,28 6.34375x17.46875] + "1" + TextNode <#text> + +ViewportPaintable (Viewport<#document>) [0,0 800x600] + PaintableWithLines (BlockContainer) [0,0 800x73.46875] + PaintableWithLines (BlockContainer) [8,8 784x57.46875] + PaintableBox (Box
.grid-container) [8,8 784x57.46875] + PaintableWithLines (BlockContainer
.grid-item) [8,8 784x57.46875] + TextPaintable (TextNode<#text>) diff --git a/Tests/LibWeb/Layout/input/grid/auto-fill-and-named-line-placement.html b/Tests/LibWeb/Layout/input/grid/auto-fill-and-named-line-placement.html new file mode 100644 index 0000000000..c45e130775 --- /dev/null +++ b/Tests/LibWeb/Layout/input/grid/auto-fill-and-named-line-placement.html @@ -0,0 +1,13 @@ +
1
\ No newline at end of file diff --git a/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp index 61f8d1532e..d55d15708d 100644 --- a/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp @@ -2279,11 +2279,17 @@ void GridFormattingContext::init_grid_lines(GridDimension dimension) if (explicit_track.is_default() || explicit_track.is_minmax()) { lines.append({ .names = line_names }); line_names.clear(); - } else if (explicit_track.is_repeat() && explicit_track.repeat().is_default()) { + } else if (explicit_track.is_repeat()) { + int repeat_count = 0; + if (explicit_track.repeat().is_auto_fill() || explicit_track.repeat().is_auto_fit()) + repeat_count = count_of_repeated_auto_fill_or_fit_tracks(lines_definition.track_list(), *m_available_space); + else + repeat_count = explicit_track.repeat().repeat_count(); auto const& repeat_track = explicit_track.repeat(); - for (int i = 0; i < repeat_track.repeat_count(); i++) { + for (int i = 0; i < repeat_count; i++) expand_lines_definition(repeat_track.grid_track_size_list()); - } + } else { + VERIFY_NOT_REACHED(); } } }