LibWeb: Move grid items placement algorithm into separate method in GFC

Let's follow pattern of other formatting context where steps of layout
are separated into method.
This commit is contained in:
Aliaksandr Kalenik 2023-05-09 18:25:04 +03:00 committed by Andreas Kling
parent 9e8b507fad
commit 62d26a5afb
2 changed files with 20 additions and 10 deletions

View file

@ -542,8 +542,13 @@ finish:
m_grid_items.append(GridItem(child_box, row_start, row_span, column_start, column_span));
}
void GridFormattingContext::initialize_grid_tracks(AvailableSpace const& available_space, int column_count, int row_count)
void GridFormattingContext::initialize_grid_tracks(AvailableSpace const& available_space)
{
auto grid_template_columns = grid_container().computed_values().grid_template_columns();
auto grid_template_rows = grid_container().computed_values().grid_template_rows();
auto column_count = get_count_of_tracks(grid_template_columns.track_list(), available_space);
auto row_count = get_count_of_tracks(grid_template_rows.track_list(), available_space);
for (auto const& track_in_list : grid_container().computed_values().grid_template_columns().track_list()) {
auto repeat_count = (track_in_list.is_repeat() && track_in_list.repeat().is_default()) ? track_in_list.repeat().repeat_count() : 1;
if (track_in_list.is_repeat()) {
@ -1218,10 +1223,12 @@ int GridFormattingContext::find_valid_grid_area(String const& needle)
return -1;
}
void GridFormattingContext::run(Box const& box, LayoutMode, AvailableSpace const& available_space)
void GridFormattingContext::place_grid_items(AvailableSpace const& available_space)
{
auto grid_template_columns = box.computed_values().grid_template_columns();
auto grid_template_rows = box.computed_values().grid_template_rows();
auto grid_template_columns = grid_container().computed_values().grid_template_columns();
auto grid_template_rows = grid_container().computed_values().grid_template_rows();
auto column_count = get_count_of_tracks(grid_template_columns.track_list(), available_space);
auto row_count = get_count_of_tracks(grid_template_rows.track_list(), available_space);
// https://drafts.csswg.org/css-grid/#overview-placement
// 2.2. Placing Items
@ -1229,16 +1236,13 @@ void GridFormattingContext::run(Box const& box, LayoutMode, AvailableSpace const
// flex items), which are then assigned to predefined areas in the grid. They can be explicitly
// placed using coordinates through the grid-placement properties or implicitly placed into
// empty areas using auto-placement.
box.for_each_child_of_type<Box>([&](Box& child_box) {
grid_container().for_each_child_of_type<Box>([&](Box& child_box) {
if (can_skip_is_anonymous_text_run(child_box))
return IterationDecision::Continue;
m_boxes_to_place.append(child_box);
return IterationDecision::Continue;
});
auto column_count = get_count_of_tracks(grid_template_columns.track_list(), available_space);
auto row_count = get_count_of_tracks(grid_template_rows.track_list(), available_space);
m_occupation_grid = OccupationGrid(column_count, row_count);
build_valid_grid_areas();
@ -1306,6 +1310,11 @@ void GridFormattingContext::run(Box const& box, LayoutMode, AvailableSpace const
// FIXME: 4.2. For dense packing:
}
}
void GridFormattingContext::run(Box const& box, LayoutMode, AvailableSpace const& available_space)
{
place_grid_items(available_space);
// https://drafts.csswg.org/css-grid/#overview-sizing
// 2.3. Sizing the Grid
@ -1326,7 +1335,7 @@ void GridFormattingContext::run(Box const& box, LayoutMode, AvailableSpace const
// - A flexible sizing function (<flex>).
// The grid sizing algorithm defines how to resolve these sizing constraints into used track sizes.
initialize_grid_tracks(available_space, column_count, row_count);
initialize_grid_tracks(available_space);
// https://www.w3.org/TR/css-grid-2/#algo-overview
// 12.1. Grid Sizing Algorithm

View file

@ -156,12 +156,13 @@ private:
void build_valid_grid_areas();
int find_valid_grid_area(String const& needle);
void place_grid_items(AvailableSpace const& available_space);
void place_item_with_row_and_column_position(Box const& child_box);
void place_item_with_row_position(Box const& child_box);
void place_item_with_column_position(Box const& child_box, int& auto_placement_cursor_x, int& auto_placement_cursor_y);
void place_item_with_no_declared_position(Box const& child_box, int& auto_placement_cursor_x, int& auto_placement_cursor_y);
void initialize_grid_tracks(AvailableSpace const&, int column_count, int row_count);
void initialize_grid_tracks(AvailableSpace const&);
void run_track_sizing(GridDimension const dimension, AvailableSpace const& available_space, Vector<TemporaryTrack>& tracks);
CSSPixels content_based_minimum_height(GridItem const&);