diff --git a/Tests/LibWeb/Layout/expected/grid/auto-track-sizes.txt b/Tests/LibWeb/Layout/expected/grid/auto-track-sizes.txt new file mode 100644 index 00000000000..408805fb35a --- /dev/null +++ b/Tests/LibWeb/Layout/expected/grid/auto-track-sizes.txt @@ -0,0 +1,8 @@ +Viewport <#document> at (0,0) content-size 800x600 children: not-inline + BlockContainer at (0,0) content-size 800x600 [BFC] children: not-inline + BlockContainer at (8,8) content-size 784x60 children: not-inline + Box at (8,8) content-size 784x60 [GFC] children: not-inline + BlockContainer at (8,8) content-size 23x11 [BFC] children: not-inline + BlockContainer at (8,8) content-size 52x24 [BFC] children: not-inline + BlockContainer at (8,8) content-size 83x41 [BFC] children: not-inline + BlockContainer at (8,8) content-size 120x60 [BFC] children: not-inline diff --git a/Tests/LibWeb/Layout/input/grid/auto-track-sizes.html b/Tests/LibWeb/Layout/input/grid/auto-track-sizes.html new file mode 100644 index 00000000000..933d2dd823c --- /dev/null +++ b/Tests/LibWeb/Layout/input/grid/auto-track-sizes.html @@ -0,0 +1,27 @@ + +
\ No newline at end of file diff --git a/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp index 83bb6b95e71..03f5c1738ed 100644 --- a/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp @@ -553,13 +553,33 @@ void GridFormattingContext::initialize_grid_tracks_from_definition(AvailableSpac void GridFormattingContext::initialize_grid_tracks_for_columns_and_rows(AvailableSpace const& available_space) { - initialize_grid_tracks_from_definition(available_space, grid_container().computed_values().grid_template_columns().track_list(), m_grid_columns); - initialize_grid_tracks_from_definition(available_space, grid_container().computed_values().grid_template_rows().track_list(), m_grid_rows); + auto const& grid_computed_values = grid_container().computed_values(); + initialize_grid_tracks_from_definition(available_space, grid_computed_values.grid_template_columns().track_list(), m_grid_columns); + initialize_grid_tracks_from_definition(available_space, grid_computed_values.grid_template_rows().track_list(), m_grid_rows); - for (size_t column_index = m_grid_columns.size(); column_index < m_occupation_grid.column_count(); column_index++) - m_grid_columns.append(TemporaryTrack()); - for (size_t row_index = m_grid_rows.size(); row_index < m_occupation_grid.row_count(); row_index++) - m_grid_rows.append(TemporaryTrack()); + auto const& grid_auto_columns = grid_computed_values.grid_auto_columns().track_list(); + size_t implicit_column_index = 0; + for (size_t column_index = m_grid_columns.size(); column_index < m_occupation_grid.column_count(); column_index++) { + if (grid_auto_columns.size() > 0) { + auto size = grid_auto_columns[implicit_column_index % grid_auto_columns.size()]; + m_grid_columns.append(TemporaryTrack(size.grid_size())); + } else { + m_grid_columns.append(TemporaryTrack()); + } + implicit_column_index++; + } + + auto const& grid_auto_rows = grid_computed_values.grid_auto_rows().track_list(); + size_t implicit_row_index = 0; + for (size_t row_index = m_grid_rows.size(); row_index < m_occupation_grid.row_count(); row_index++) { + if (grid_auto_rows.size() > 0) { + auto size = grid_auto_rows[implicit_row_index % grid_auto_rows.size()]; + m_grid_rows.append(TemporaryTrack(size.grid_size())); + } else { + m_grid_rows.append(TemporaryTrack()); + } + implicit_row_index++; + } } void GridFormattingContext::initialize_gap_tracks(AvailableSpace const& available_space)