mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 03:27:45 +00:00
LibWeb: Use grid_container() to access root grid box in GFC
There is grid_container() method that can be used to access root box in GFC without passing it through methods arguments.
This commit is contained in:
parent
ced862e16f
commit
3d05ed6b53
2 changed files with 52 additions and 52 deletions
|
@ -17,14 +17,14 @@ GridFormattingContext::GridFormattingContext(LayoutState& state, Box const& grid
|
||||||
|
|
||||||
GridFormattingContext::~GridFormattingContext() = default;
|
GridFormattingContext::~GridFormattingContext() = default;
|
||||||
|
|
||||||
CSSPixels GridFormattingContext::resolve_definite_track_size(CSS::GridSize const& grid_size, AvailableSpace const& available_space, Box const& box)
|
CSSPixels GridFormattingContext::resolve_definite_track_size(CSS::GridSize const& grid_size, AvailableSpace const& available_space)
|
||||||
{
|
{
|
||||||
VERIFY(grid_size.is_definite());
|
VERIFY(grid_size.is_definite());
|
||||||
switch (grid_size.type()) {
|
switch (grid_size.type()) {
|
||||||
case CSS::GridSize::Type::Length:
|
case CSS::GridSize::Type::Length:
|
||||||
if (grid_size.length().is_auto())
|
if (grid_size.length().is_auto())
|
||||||
break;
|
break;
|
||||||
return grid_size.length().to_px(box);
|
return grid_size.length().to_px(grid_container());
|
||||||
case CSS::GridSize::Type::Percentage:
|
case CSS::GridSize::Type::Percentage:
|
||||||
if (available_space.width.is_definite())
|
if (available_space.width.is_definite())
|
||||||
return grid_size.percentage().as_fraction() * available_space.width.to_px().value();
|
return grid_size.percentage().as_fraction() * available_space.width.to_px().value();
|
||||||
|
@ -45,18 +45,18 @@ size_t GridFormattingContext::count_of_gap_tracks(Vector<TemporaryTrack> const&
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
CSSPixels GridFormattingContext::resolve_size(CSS::Size const& size, AvailableSize const& available_size, Box const& box)
|
CSSPixels GridFormattingContext::resolve_size(CSS::Size const& size, AvailableSize const& available_size)
|
||||||
{
|
{
|
||||||
if (size.is_calculated()) {
|
if (size.is_calculated()) {
|
||||||
if (size.calculated().contains_percentage()) {
|
if (size.calculated().contains_percentage()) {
|
||||||
if (!available_size.is_definite())
|
if (!available_size.is_definite())
|
||||||
return 0;
|
return 0;
|
||||||
return size.calculated().resolve_length_percentage(box, CSS::Length::make_px(available_size.to_px())).value_or(CSS::Length::make_auto()).to_px(box);
|
return size.calculated().resolve_length_percentage(grid_container(), CSS::Length::make_px(available_size.to_px())).value_or(CSS::Length::make_auto()).to_px(grid_container());
|
||||||
}
|
}
|
||||||
return size.calculated().resolve_length(box)->to_px(box);
|
return size.calculated().resolve_length(grid_container())->to_px(grid_container());
|
||||||
}
|
}
|
||||||
if (size.is_length()) {
|
if (size.is_length()) {
|
||||||
return size.length().to_px(box);
|
return size.length().to_px(grid_container());
|
||||||
}
|
}
|
||||||
if (size.is_percentage()) {
|
if (size.is_percentage()) {
|
||||||
if (!available_size.is_definite())
|
if (!available_size.is_definite())
|
||||||
|
@ -66,7 +66,7 @@ CSSPixels GridFormattingContext::resolve_size(CSS::Size const& size, AvailableSi
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int GridFormattingContext::get_count_of_tracks(Vector<CSS::ExplicitGridTrack> const& track_list, AvailableSpace const& available_space, Box const& box)
|
int GridFormattingContext::get_count_of_tracks(Vector<CSS::ExplicitGridTrack> const& track_list, AvailableSpace const& available_space)
|
||||||
{
|
{
|
||||||
auto track_count = 0;
|
auto track_count = 0;
|
||||||
for (auto const& explicit_grid_track : track_list) {
|
for (auto const& explicit_grid_track : track_list) {
|
||||||
|
@ -79,13 +79,13 @@ int GridFormattingContext::get_count_of_tracks(Vector<CSS::ExplicitGridTrack> co
|
||||||
if (track_list.size() == 1
|
if (track_list.size() == 1
|
||||||
&& track_list.first().is_repeat()
|
&& track_list.first().is_repeat()
|
||||||
&& (track_list.first().repeat().is_auto_fill() || track_list.first().repeat().is_auto_fit())) {
|
&& (track_list.first().repeat().is_auto_fill() || track_list.first().repeat().is_auto_fit())) {
|
||||||
track_count = count_of_repeated_auto_fill_or_fit_tracks(track_list, available_space, box);
|
track_count = count_of_repeated_auto_fill_or_fit_tracks(track_list, available_space);
|
||||||
}
|
}
|
||||||
|
|
||||||
return track_count;
|
return track_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
int GridFormattingContext::count_of_repeated_auto_fill_or_fit_tracks(Vector<CSS::ExplicitGridTrack> const& track_list, AvailableSpace const& available_space, Box const& box)
|
int GridFormattingContext::count_of_repeated_auto_fill_or_fit_tracks(Vector<CSS::ExplicitGridTrack> const& track_list, AvailableSpace const& available_space)
|
||||||
{
|
{
|
||||||
// https://www.w3.org/TR/css-grid-2/#auto-repeat
|
// https://www.w3.org/TR/css-grid-2/#auto-repeat
|
||||||
// 7.2.3.2. Repeat-to-fill: auto-fill and auto-fit repetitions
|
// 7.2.3.2. Repeat-to-fill: auto-fill and auto-fit repetitions
|
||||||
|
@ -107,13 +107,13 @@ int GridFormattingContext::count_of_repeated_auto_fill_or_fit_tracks(Vector<CSS:
|
||||||
auto track_sizing_function = explicit_grid_track;
|
auto track_sizing_function = explicit_grid_track;
|
||||||
if (track_sizing_function.is_minmax()) {
|
if (track_sizing_function.is_minmax()) {
|
||||||
if (track_sizing_function.minmax().max_grid_size().is_definite() && !track_sizing_function.minmax().min_grid_size().is_definite())
|
if (track_sizing_function.minmax().max_grid_size().is_definite() && !track_sizing_function.minmax().min_grid_size().is_definite())
|
||||||
sum_of_grid_track_sizes += resolve_definite_track_size(track_sizing_function.minmax().max_grid_size(), available_space, box);
|
sum_of_grid_track_sizes += resolve_definite_track_size(track_sizing_function.minmax().max_grid_size(), available_space);
|
||||||
else if (track_sizing_function.minmax().min_grid_size().is_definite() && !track_sizing_function.minmax().max_grid_size().is_definite())
|
else if (track_sizing_function.minmax().min_grid_size().is_definite() && !track_sizing_function.minmax().max_grid_size().is_definite())
|
||||||
sum_of_grid_track_sizes += resolve_definite_track_size(track_sizing_function.minmax().min_grid_size(), available_space, box);
|
sum_of_grid_track_sizes += resolve_definite_track_size(track_sizing_function.minmax().min_grid_size(), available_space);
|
||||||
else if (track_sizing_function.minmax().min_grid_size().is_definite() && track_sizing_function.minmax().max_grid_size().is_definite())
|
else if (track_sizing_function.minmax().min_grid_size().is_definite() && track_sizing_function.minmax().max_grid_size().is_definite())
|
||||||
sum_of_grid_track_sizes += min(resolve_definite_track_size(track_sizing_function.minmax().min_grid_size(), available_space, box), resolve_definite_track_size(track_sizing_function.minmax().max_grid_size(), available_space, box));
|
sum_of_grid_track_sizes += min(resolve_definite_track_size(track_sizing_function.minmax().min_grid_size(), available_space), resolve_definite_track_size(track_sizing_function.minmax().max_grid_size(), available_space));
|
||||||
} else {
|
} else {
|
||||||
sum_of_grid_track_sizes += min(resolve_definite_track_size(track_sizing_function.grid_size(), available_space, box), resolve_definite_track_size(track_sizing_function.grid_size(), available_space, box));
|
sum_of_grid_track_sizes += min(resolve_definite_track_size(track_sizing_function.grid_size(), available_space), resolve_definite_track_size(track_sizing_function.grid_size(), available_space));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return max(1, static_cast<int>((get_free_space(available_space.width, m_grid_columns) / sum_of_grid_track_sizes).value()));
|
return max(1, static_cast<int>((get_free_space(available_space.width, m_grid_columns) / sum_of_grid_track_sizes).value()));
|
||||||
|
@ -123,7 +123,7 @@ int GridFormattingContext::count_of_repeated_auto_fill_or_fit_tracks(Vector<CSS:
|
||||||
// floor be 1px.
|
// floor be 1px.
|
||||||
}
|
}
|
||||||
|
|
||||||
void GridFormattingContext::place_item_with_row_and_column_position(Box const& box, Box const& child_box)
|
void GridFormattingContext::place_item_with_row_and_column_position(Box const& child_box)
|
||||||
{
|
{
|
||||||
int row_start = child_box.computed_values().grid_row_start().raw_value() - 1;
|
int row_start = child_box.computed_values().grid_row_start().raw_value() - 1;
|
||||||
int row_end = child_box.computed_values().grid_row_end().raw_value() - 1;
|
int row_end = child_box.computed_values().grid_row_end().raw_value() - 1;
|
||||||
|
@ -188,7 +188,7 @@ void GridFormattingContext::place_item_with_row_and_column_position(Box const& b
|
||||||
if (child_box.computed_values().grid_column_end().has_line_name()) {
|
if (child_box.computed_values().grid_column_end().has_line_name()) {
|
||||||
if (auto grid_area_index = find_valid_grid_area(child_box.computed_values().grid_column_end().line_name()); grid_area_index > -1)
|
if (auto grid_area_index = find_valid_grid_area(child_box.computed_values().grid_column_end().line_name()); grid_area_index > -1)
|
||||||
column_end = m_valid_grid_areas[grid_area_index].column_end;
|
column_end = m_valid_grid_areas[grid_area_index].column_end;
|
||||||
else if (auto line_name_index = get_line_index_by_line_name(child_box.computed_values().grid_column_end().line_name(), box.computed_values().grid_template_columns()); line_name_index > -1)
|
else if (auto line_name_index = get_line_index_by_line_name(child_box.computed_values().grid_column_end().line_name(), grid_container().computed_values().grid_template_columns()); line_name_index > -1)
|
||||||
column_end = line_name_index;
|
column_end = line_name_index;
|
||||||
else
|
else
|
||||||
column_end = 1;
|
column_end = 1;
|
||||||
|
@ -197,7 +197,7 @@ void GridFormattingContext::place_item_with_row_and_column_position(Box const& b
|
||||||
if (child_box.computed_values().grid_column_start().has_line_name()) {
|
if (child_box.computed_values().grid_column_start().has_line_name()) {
|
||||||
if (auto grid_area_index = find_valid_grid_area(child_box.computed_values().grid_column_end().line_name()); grid_area_index > -1)
|
if (auto grid_area_index = find_valid_grid_area(child_box.computed_values().grid_column_end().line_name()); grid_area_index > -1)
|
||||||
column_start = m_valid_grid_areas[grid_area_index].column_start;
|
column_start = m_valid_grid_areas[grid_area_index].column_start;
|
||||||
else if (auto line_name_index = get_line_index_by_line_name(child_box.computed_values().grid_column_start().line_name(), box.computed_values().grid_template_columns()); line_name_index > -1)
|
else if (auto line_name_index = get_line_index_by_line_name(child_box.computed_values().grid_column_start().line_name(), grid_container().computed_values().grid_template_columns()); line_name_index > -1)
|
||||||
column_start = line_name_index;
|
column_start = line_name_index;
|
||||||
else
|
else
|
||||||
column_start = 0;
|
column_start = 0;
|
||||||
|
@ -205,7 +205,7 @@ void GridFormattingContext::place_item_with_row_and_column_position(Box const& b
|
||||||
if (child_box.computed_values().grid_row_end().has_line_name()) {
|
if (child_box.computed_values().grid_row_end().has_line_name()) {
|
||||||
if (auto grid_area_index = find_valid_grid_area(child_box.computed_values().grid_row_end().line_name()); grid_area_index > -1)
|
if (auto grid_area_index = find_valid_grid_area(child_box.computed_values().grid_row_end().line_name()); grid_area_index > -1)
|
||||||
row_end = m_valid_grid_areas[grid_area_index].row_end;
|
row_end = m_valid_grid_areas[grid_area_index].row_end;
|
||||||
else if (auto line_name_index = get_line_index_by_line_name(child_box.computed_values().grid_row_end().line_name(), box.computed_values().grid_template_rows()); line_name_index > -1)
|
else if (auto line_name_index = get_line_index_by_line_name(child_box.computed_values().grid_row_end().line_name(), grid_container().computed_values().grid_template_rows()); line_name_index > -1)
|
||||||
row_end = line_name_index;
|
row_end = line_name_index;
|
||||||
else
|
else
|
||||||
row_end = 1;
|
row_end = 1;
|
||||||
|
@ -214,7 +214,7 @@ void GridFormattingContext::place_item_with_row_and_column_position(Box const& b
|
||||||
if (child_box.computed_values().grid_row_start().has_line_name()) {
|
if (child_box.computed_values().grid_row_start().has_line_name()) {
|
||||||
if (auto grid_area_index = find_valid_grid_area(child_box.computed_values().grid_row_end().line_name()); grid_area_index > -1)
|
if (auto grid_area_index = find_valid_grid_area(child_box.computed_values().grid_row_end().line_name()); grid_area_index > -1)
|
||||||
row_start = m_valid_grid_areas[grid_area_index].row_start;
|
row_start = m_valid_grid_areas[grid_area_index].row_start;
|
||||||
else if (auto line_name_index = get_line_index_by_line_name(child_box.computed_values().grid_row_start().line_name(), box.computed_values().grid_template_rows()); line_name_index > -1)
|
else if (auto line_name_index = get_line_index_by_line_name(child_box.computed_values().grid_row_start().line_name(), grid_container().computed_values().grid_template_rows()); line_name_index > -1)
|
||||||
row_start = line_name_index;
|
row_start = line_name_index;
|
||||||
else
|
else
|
||||||
row_start = 0;
|
row_start = 0;
|
||||||
|
@ -257,7 +257,7 @@ void GridFormattingContext::place_item_with_row_and_column_position(Box const& b
|
||||||
m_occupation_grid.set_occupied(column_start, column_start + column_span, row_start, row_start + row_span);
|
m_occupation_grid.set_occupied(column_start, column_start + column_span, row_start, row_start + row_span);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GridFormattingContext::place_item_with_row_position(Box const& box, Box const& child_box)
|
void GridFormattingContext::place_item_with_row_position(Box const& child_box)
|
||||||
{
|
{
|
||||||
int row_start = child_box.computed_values().grid_row_start().raw_value() - 1;
|
int row_start = child_box.computed_values().grid_row_start().raw_value() - 1;
|
||||||
int row_end = child_box.computed_values().grid_row_end().raw_value() - 1;
|
int row_end = child_box.computed_values().grid_row_end().raw_value() - 1;
|
||||||
|
@ -314,7 +314,7 @@ void GridFormattingContext::place_item_with_row_position(Box const& box, Box con
|
||||||
if (child_box.computed_values().grid_row_end().has_line_name()) {
|
if (child_box.computed_values().grid_row_end().has_line_name()) {
|
||||||
if (auto grid_area_index = find_valid_grid_area(child_box.computed_values().grid_row_end().line_name()); grid_area_index > -1)
|
if (auto grid_area_index = find_valid_grid_area(child_box.computed_values().grid_row_end().line_name()); grid_area_index > -1)
|
||||||
row_end = m_valid_grid_areas[grid_area_index].row_end;
|
row_end = m_valid_grid_areas[grid_area_index].row_end;
|
||||||
else if (auto line_name_index = get_line_index_by_line_name(child_box.computed_values().grid_row_end().line_name(), box.computed_values().grid_template_rows()); line_name_index > -1)
|
else if (auto line_name_index = get_line_index_by_line_name(child_box.computed_values().grid_row_end().line_name(), grid_container().computed_values().grid_template_rows()); line_name_index > -1)
|
||||||
row_end = line_name_index;
|
row_end = line_name_index;
|
||||||
else
|
else
|
||||||
row_end = 1;
|
row_end = 1;
|
||||||
|
@ -323,7 +323,7 @@ void GridFormattingContext::place_item_with_row_position(Box const& box, Box con
|
||||||
if (child_box.computed_values().grid_row_start().has_line_name()) {
|
if (child_box.computed_values().grid_row_start().has_line_name()) {
|
||||||
if (auto grid_area_index = find_valid_grid_area(child_box.computed_values().grid_row_end().line_name()); grid_area_index > -1)
|
if (auto grid_area_index = find_valid_grid_area(child_box.computed_values().grid_row_end().line_name()); grid_area_index > -1)
|
||||||
row_start = m_valid_grid_areas[grid_area_index].row_start;
|
row_start = m_valid_grid_areas[grid_area_index].row_start;
|
||||||
else if (auto line_name_index = get_line_index_by_line_name(child_box.computed_values().grid_row_start().line_name(), box.computed_values().grid_template_rows()); line_name_index > -1)
|
else if (auto line_name_index = get_line_index_by_line_name(child_box.computed_values().grid_row_start().line_name(), grid_container().computed_values().grid_template_rows()); line_name_index > -1)
|
||||||
row_start = line_name_index;
|
row_start = line_name_index;
|
||||||
else
|
else
|
||||||
row_start = 0;
|
row_start = 0;
|
||||||
|
@ -381,7 +381,7 @@ void GridFormattingContext::place_item_with_row_position(Box const& box, Box con
|
||||||
m_grid_items.append(GridItem(child_box, row_start, row_span, column_start, column_span));
|
m_grid_items.append(GridItem(child_box, row_start, row_span, column_start, column_span));
|
||||||
}
|
}
|
||||||
|
|
||||||
void GridFormattingContext::place_item_with_column_position(Box const& box, Box const& child_box, int& auto_placement_cursor_x, int& auto_placement_cursor_y)
|
void GridFormattingContext::place_item_with_column_position(Box const& child_box, int& auto_placement_cursor_x, int& auto_placement_cursor_y)
|
||||||
{
|
{
|
||||||
int column_start = child_box.computed_values().grid_column_start().raw_value() - 1;
|
int column_start = child_box.computed_values().grid_column_start().raw_value() - 1;
|
||||||
int column_end = child_box.computed_values().grid_column_end().raw_value() - 1;
|
int column_end = child_box.computed_values().grid_column_end().raw_value() - 1;
|
||||||
|
@ -442,7 +442,7 @@ void GridFormattingContext::place_item_with_column_position(Box const& box, Box
|
||||||
if (child_box.computed_values().grid_column_end().has_line_name()) {
|
if (child_box.computed_values().grid_column_end().has_line_name()) {
|
||||||
if (auto grid_area_index = find_valid_grid_area(child_box.computed_values().grid_column_end().line_name()); grid_area_index > -1)
|
if (auto grid_area_index = find_valid_grid_area(child_box.computed_values().grid_column_end().line_name()); grid_area_index > -1)
|
||||||
column_end = m_valid_grid_areas[grid_area_index].column_end;
|
column_end = m_valid_grid_areas[grid_area_index].column_end;
|
||||||
else if (auto line_name_index = get_line_index_by_line_name(child_box.computed_values().grid_column_end().line_name(), box.computed_values().grid_template_columns()); line_name_index > -1)
|
else if (auto line_name_index = get_line_index_by_line_name(child_box.computed_values().grid_column_end().line_name(), grid_container().computed_values().grid_template_columns()); line_name_index > -1)
|
||||||
column_end = line_name_index;
|
column_end = line_name_index;
|
||||||
else
|
else
|
||||||
column_end = 1;
|
column_end = 1;
|
||||||
|
@ -451,7 +451,7 @@ void GridFormattingContext::place_item_with_column_position(Box const& box, Box
|
||||||
if (child_box.computed_values().grid_column_start().has_line_name()) {
|
if (child_box.computed_values().grid_column_start().has_line_name()) {
|
||||||
if (auto grid_area_index = find_valid_grid_area(child_box.computed_values().grid_column_end().line_name()); grid_area_index > -1)
|
if (auto grid_area_index = find_valid_grid_area(child_box.computed_values().grid_column_end().line_name()); grid_area_index > -1)
|
||||||
column_start = m_valid_grid_areas[grid_area_index].column_start;
|
column_start = m_valid_grid_areas[grid_area_index].column_start;
|
||||||
else if (auto line_name_index = get_line_index_by_line_name(child_box.computed_values().grid_column_start().line_name(), box.computed_values().grid_template_columns()); line_name_index > -1)
|
else if (auto line_name_index = get_line_index_by_line_name(child_box.computed_values().grid_column_start().line_name(), grid_container().computed_values().grid_template_columns()); line_name_index > -1)
|
||||||
column_start = line_name_index;
|
column_start = line_name_index;
|
||||||
else
|
else
|
||||||
column_start = 0;
|
column_start = 0;
|
||||||
|
@ -563,9 +563,9 @@ finish:
|
||||||
m_grid_items.append(GridItem(child_box, row_start, row_span, column_start, column_span));
|
m_grid_items.append(GridItem(child_box, row_start, row_span, column_start, column_span));
|
||||||
}
|
}
|
||||||
|
|
||||||
void GridFormattingContext::initialize_grid_tracks(Box const& box, AvailableSpace const& available_space, int column_count, int row_count)
|
void GridFormattingContext::initialize_grid_tracks(AvailableSpace const& available_space, int column_count, int row_count)
|
||||||
{
|
{
|
||||||
for (auto const& track_in_list : box.computed_values().grid_template_columns().track_list()) {
|
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;
|
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()) {
|
if (track_in_list.is_repeat()) {
|
||||||
if (track_in_list.repeat().is_auto_fill() || track_in_list.repeat().is_auto_fit())
|
if (track_in_list.repeat().is_auto_fill() || track_in_list.repeat().is_auto_fit())
|
||||||
|
@ -593,7 +593,7 @@ void GridFormattingContext::initialize_grid_tracks(Box const& box, AvailableSpac
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (auto const& track_in_list : box.computed_values().grid_template_rows().track_list()) {
|
for (auto const& track_in_list : grid_container().computed_values().grid_template_rows().track_list()) {
|
||||||
auto repeat_count = (track_in_list.is_repeat() && track_in_list.repeat().is_default()) ? track_in_list.repeat().repeat_count() : 1;
|
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()) {
|
if (track_in_list.is_repeat()) {
|
||||||
if (track_in_list.repeat().is_auto_fill() || track_in_list.repeat().is_auto_fit())
|
if (track_in_list.repeat().is_auto_fill() || track_in_list.repeat().is_auto_fit())
|
||||||
|
@ -632,13 +632,13 @@ void GridFormattingContext::initialize_grid_tracks(Box const& box, AvailableSpac
|
||||||
// For the purpose of track sizing, each gutter is treated as an extra, empty, fixed-size track of
|
// For the purpose of track sizing, each gutter is treated as an extra, empty, fixed-size track of
|
||||||
// the specified size, which is spanned by any grid items that span across its corresponding grid
|
// the specified size, which is spanned by any grid items that span across its corresponding grid
|
||||||
// line.
|
// line.
|
||||||
if (!box.computed_values().column_gap().is_auto()) {
|
if (!grid_container().computed_values().column_gap().is_auto()) {
|
||||||
for (int column_index = 1; column_index < (m_occupation_grid.column_count() * 2) - 1; column_index += 2)
|
for (int column_index = 1; column_index < (m_occupation_grid.column_count() * 2) - 1; column_index += 2)
|
||||||
m_grid_columns.insert(column_index, TemporaryTrack(resolve_size(box.computed_values().column_gap(), available_space.width, box), true));
|
m_grid_columns.insert(column_index, TemporaryTrack(resolve_size(grid_container().computed_values().column_gap(), available_space.width), true));
|
||||||
}
|
}
|
||||||
if (!box.computed_values().row_gap().is_auto()) {
|
if (!grid_container().computed_values().row_gap().is_auto()) {
|
||||||
for (int row_index = 1; row_index < (m_occupation_grid.row_count() * 2) - 1; row_index += 2)
|
for (int row_index = 1; row_index < (m_occupation_grid.row_count() * 2) - 1; row_index += 2)
|
||||||
m_grid_rows.insert(row_index, TemporaryTrack(resolve_size(box.computed_values().row_gap(), available_space.height, box), true));
|
m_grid_rows.insert(row_index, TemporaryTrack(resolve_size(grid_container().computed_values().row_gap(), available_space.height), true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1176,7 +1176,7 @@ void GridFormattingContext::run_track_sizing(GridDimension const dimension, Avai
|
||||||
// spanned by such items; otherwise ignore the effects of track alignment in this estimation.
|
// spanned by such items; otherwise ignore the effects of track alignment in this estimation.
|
||||||
}
|
}
|
||||||
|
|
||||||
void GridFormattingContext::build_valid_grid_areas(Box const& box)
|
void GridFormattingContext::build_valid_grid_areas()
|
||||||
{
|
{
|
||||||
Vector<GridArea> found_grid_areas;
|
Vector<GridArea> found_grid_areas;
|
||||||
|
|
||||||
|
@ -1191,11 +1191,11 @@ void GridFormattingContext::build_valid_grid_areas(Box const& box)
|
||||||
// https://www.w3.org/TR/css-grid-2/#grid-template-areas-property
|
// https://www.w3.org/TR/css-grid-2/#grid-template-areas-property
|
||||||
// If a named grid area spans multiple grid cells, but those cells do not form a single
|
// If a named grid area spans multiple grid cells, but those cells do not form a single
|
||||||
// filled-in rectangle, the declaration is invalid.
|
// filled-in rectangle, the declaration is invalid.
|
||||||
for (int y = 0; y < static_cast<int>(box.computed_values().grid_template_areas().size()); y++) {
|
for (int y = 0; y < static_cast<int>(grid_container().computed_values().grid_template_areas().size()); y++) {
|
||||||
for (int x = 0; x < static_cast<int>(box.computed_values().grid_template_areas()[y].size()); x++) {
|
for (int x = 0; x < static_cast<int>(grid_container().computed_values().grid_template_areas()[y].size()); x++) {
|
||||||
auto grid_area_idx = get_index_of_found_grid_area(box.computed_values().grid_template_areas()[y][x]);
|
auto grid_area_idx = get_index_of_found_grid_area(grid_container().computed_values().grid_template_areas()[y][x]);
|
||||||
if (grid_area_idx == -1) {
|
if (grid_area_idx == -1) {
|
||||||
found_grid_areas.append({ box.computed_values().grid_template_areas()[y][x], y, y + 1, x, x + 1 });
|
found_grid_areas.append({ grid_container().computed_values().grid_template_areas()[y][x], y, y + 1, x, x + 1 });
|
||||||
} else {
|
} else {
|
||||||
auto& grid_area = found_grid_areas[grid_area_idx];
|
auto& grid_area = found_grid_areas[grid_area_idx];
|
||||||
if (grid_area.row_start == y) {
|
if (grid_area.row_start == y) {
|
||||||
|
@ -1250,12 +1250,12 @@ void GridFormattingContext::run(Box const& box, LayoutMode, AvailableSpace const
|
||||||
return IterationDecision::Continue;
|
return IterationDecision::Continue;
|
||||||
});
|
});
|
||||||
|
|
||||||
auto column_count = get_count_of_tracks(grid_template_columns.track_list(), available_space, box);
|
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, box);
|
auto row_count = get_count_of_tracks(grid_template_rows.track_list(), available_space);
|
||||||
|
|
||||||
m_occupation_grid = OccupationGrid(column_count, row_count);
|
m_occupation_grid = OccupationGrid(column_count, row_count);
|
||||||
|
|
||||||
build_valid_grid_areas(box);
|
build_valid_grid_areas();
|
||||||
|
|
||||||
// https://drafts.csswg.org/css-grid/#auto-placement-algo
|
// https://drafts.csswg.org/css-grid/#auto-placement-algo
|
||||||
// 8.5. Grid Item Placement Algorithm
|
// 8.5. Grid Item Placement Algorithm
|
||||||
|
@ -1268,7 +1268,7 @@ void GridFormattingContext::run(Box const& box, LayoutMode, AvailableSpace const
|
||||||
if (is_auto_positioned_row(child_box->computed_values().grid_row_start(), child_box->computed_values().grid_row_end())
|
if (is_auto_positioned_row(child_box->computed_values().grid_row_start(), child_box->computed_values().grid_row_end())
|
||||||
|| is_auto_positioned_column(child_box->computed_values().grid_column_start(), child_box->computed_values().grid_column_end()))
|
|| is_auto_positioned_column(child_box->computed_values().grid_column_start(), child_box->computed_values().grid_column_end()))
|
||||||
continue;
|
continue;
|
||||||
place_item_with_row_and_column_position(box, child_box);
|
place_item_with_row_and_column_position(child_box);
|
||||||
m_boxes_to_place.remove(i);
|
m_boxes_to_place.remove(i);
|
||||||
i--;
|
i--;
|
||||||
}
|
}
|
||||||
|
@ -1279,7 +1279,7 @@ void GridFormattingContext::run(Box const& box, LayoutMode, AvailableSpace const
|
||||||
auto const& child_box = m_boxes_to_place[i];
|
auto const& child_box = m_boxes_to_place[i];
|
||||||
if (is_auto_positioned_row(child_box->computed_values().grid_row_start(), child_box->computed_values().grid_row_end()))
|
if (is_auto_positioned_row(child_box->computed_values().grid_row_start(), child_box->computed_values().grid_row_end()))
|
||||||
continue;
|
continue;
|
||||||
place_item_with_row_position(box, child_box);
|
place_item_with_row_position(child_box);
|
||||||
m_boxes_to_place.remove(i);
|
m_boxes_to_place.remove(i);
|
||||||
i--;
|
i--;
|
||||||
}
|
}
|
||||||
|
@ -1309,7 +1309,7 @@ void GridFormattingContext::run(Box const& box, LayoutMode, AvailableSpace const
|
||||||
|
|
||||||
// 4.1.1. If the item has a definite column position:
|
// 4.1.1. If the item has a definite column position:
|
||||||
if (!is_auto_positioned_column(child_box->computed_values().grid_column_start(), child_box->computed_values().grid_column_end()))
|
if (!is_auto_positioned_column(child_box->computed_values().grid_column_start(), child_box->computed_values().grid_column_end()))
|
||||||
place_item_with_column_position(box, child_box, auto_placement_cursor_x, auto_placement_cursor_y);
|
place_item_with_column_position(child_box, auto_placement_cursor_x, auto_placement_cursor_y);
|
||||||
|
|
||||||
// 4.1.2. If the item has an automatic grid position in both axes:
|
// 4.1.2. If the item has an automatic grid position in both axes:
|
||||||
else
|
else
|
||||||
|
@ -1340,7 +1340,7 @@ void GridFormattingContext::run(Box const& box, LayoutMode, AvailableSpace const
|
||||||
// - A flexible sizing function (<flex>).
|
// - A flexible sizing function (<flex>).
|
||||||
|
|
||||||
// The grid sizing algorithm defines how to resolve these sizing constraints into used track sizes.
|
// The grid sizing algorithm defines how to resolve these sizing constraints into used track sizes.
|
||||||
initialize_grid_tracks(box, available_space, column_count, row_count);
|
initialize_grid_tracks(available_space, column_count, row_count);
|
||||||
|
|
||||||
// https://www.w3.org/TR/css-grid-2/#algo-overview
|
// https://www.w3.org/TR/css-grid-2/#algo-overview
|
||||||
// 12.1. Grid Sizing Algorithm
|
// 12.1. Grid Sizing Algorithm
|
||||||
|
|
|
@ -148,21 +148,21 @@ private:
|
||||||
CSSPixels get_free_space(AvailableSize const& available_size, Vector<TemporaryTrack> const& tracks) const;
|
CSSPixels get_free_space(AvailableSize const& available_size, Vector<TemporaryTrack> const& tracks) const;
|
||||||
|
|
||||||
int get_line_index_by_line_name(String const& line_name, CSS::GridTrackSizeList);
|
int get_line_index_by_line_name(String const& line_name, CSS::GridTrackSizeList);
|
||||||
CSSPixels resolve_definite_track_size(CSS::GridSize const&, AvailableSpace const&, Box const&);
|
CSSPixels resolve_definite_track_size(CSS::GridSize const&, AvailableSpace const&);
|
||||||
size_t count_of_gap_tracks(Vector<TemporaryTrack> const& tracks) const;
|
size_t count_of_gap_tracks(Vector<TemporaryTrack> const& tracks) const;
|
||||||
CSSPixels resolve_size(CSS::Size const&, AvailableSize const&, Box const&);
|
CSSPixels resolve_size(CSS::Size const&, AvailableSize const&);
|
||||||
int count_of_repeated_auto_fill_or_fit_tracks(Vector<CSS::ExplicitGridTrack> const& track_list, AvailableSpace const&, Box const&);
|
int count_of_repeated_auto_fill_or_fit_tracks(Vector<CSS::ExplicitGridTrack> const& track_list, AvailableSpace const&);
|
||||||
int get_count_of_tracks(Vector<CSS::ExplicitGridTrack> const&, AvailableSpace const&, Box const&);
|
int get_count_of_tracks(Vector<CSS::ExplicitGridTrack> const&, AvailableSpace const&);
|
||||||
|
|
||||||
void build_valid_grid_areas(Box const&);
|
void build_valid_grid_areas();
|
||||||
int find_valid_grid_area(String const& needle);
|
int find_valid_grid_area(String const& needle);
|
||||||
|
|
||||||
void place_item_with_row_and_column_position(Box const& box, Box const& child_box);
|
void place_item_with_row_and_column_position(Box const& child_box);
|
||||||
void place_item_with_row_position(Box const& box, Box const& child_box);
|
void place_item_with_row_position(Box const& child_box);
|
||||||
void place_item_with_column_position(Box const& box, Box const& child_box, int& auto_placement_cursor_x, int& auto_placement_cursor_y);
|
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 place_item_with_no_declared_position(Box const& child_box, int& auto_placement_cursor_x, int& auto_placement_cursor_y);
|
||||||
|
|
||||||
void initialize_grid_tracks(Box const&, AvailableSpace const&, int column_count, int row_count);
|
void initialize_grid_tracks(AvailableSpace const&, int column_count, int row_count);
|
||||||
void run_track_sizing(GridDimension const dimension, AvailableSpace const& available_space, Vector<TemporaryTrack>& tracks);
|
void run_track_sizing(GridDimension const dimension, AvailableSpace const& available_space, Vector<TemporaryTrack>& tracks);
|
||||||
|
|
||||||
CSSPixels content_based_minimum_height(GridItem const&);
|
CSSPixels content_based_minimum_height(GridItem const&);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue