mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 15:28:11 +00:00
LibWeb: Remove borders from TemporaryTrack in GFC
This change makes grid items be responsible for their borders instead of grid tracks which can not have borders itself. There are changes in layout tests but those are improvements :)
This commit is contained in:
parent
083e61c36b
commit
d6d097b671
5 changed files with 58 additions and 59 deletions
|
@ -714,16 +714,10 @@ void GridFormattingContext::resolve_intrinsic_track_sizes(AvailableSpace const&
|
|||
if (dimension == GridDimension::Column) {
|
||||
if (grid_item.gap_adjusted_column(grid_container()) == index && grid_item.raw_column_span() == 1) {
|
||||
grid_items_of_track.append(grid_item);
|
||||
|
||||
track.border_left = max(track.border_left, grid_item.box().computed_values().border_left().width);
|
||||
track.border_right = max(track.border_right, grid_item.box().computed_values().border_right().width);
|
||||
}
|
||||
} else {
|
||||
if (grid_item.gap_adjusted_row(grid_container()) == index && grid_item.raw_row_span() == 1) {
|
||||
grid_items_of_track.append(grid_item);
|
||||
|
||||
track.border_top = max(track.border_top, grid_item.box().computed_values().border_top().width);
|
||||
track.border_bottom = max(track.border_bottom, grid_item.box().computed_values().border_bottom().width);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1362,7 +1356,7 @@ void GridFormattingContext::determine_grid_container_height()
|
|||
{
|
||||
CSSPixels total_y = 0;
|
||||
for (auto& grid_row : m_grid_rows_and_gaps)
|
||||
total_y += grid_row.full_vertical_size();
|
||||
total_y += grid_row.base_size;
|
||||
m_automatic_content_height = total_y;
|
||||
}
|
||||
|
||||
|
@ -1397,33 +1391,35 @@ void GridFormattingContext::run(Box const& box, LayoutMode, AvailableSpace const
|
|||
for (int i = 0; i < column_end; i++)
|
||||
x_end += m_grid_columns_and_gaps[i].base_size;
|
||||
for (int i = 0; i < row_start; i++)
|
||||
y_start += m_grid_rows_and_gaps[i].full_vertical_size();
|
||||
y_start += m_grid_rows_and_gaps[i].base_size;
|
||||
for (int i = 0; i < row_end; i++) {
|
||||
if (i >= row_start)
|
||||
y_end += m_grid_rows_and_gaps[i].base_size;
|
||||
else
|
||||
y_end += m_grid_rows_and_gaps[i].full_vertical_size();
|
||||
y_end += m_grid_rows_and_gaps[i].base_size;
|
||||
}
|
||||
|
||||
// A grid item containing block is created by the grid area to which it belongs.
|
||||
auto containing_block_width = max(CSSPixels(0), x_end - x_start - m_grid_columns_and_gaps[column_start].border_left - m_grid_columns_and_gaps[column_start].border_right);
|
||||
auto containing_block_width = max(CSSPixels(0), x_end - x_start);
|
||||
auto containing_block_height = y_end - y_start;
|
||||
|
||||
auto computed_width = child_box.computed_values().width();
|
||||
auto computed_height = child_box.computed_values().height();
|
||||
|
||||
auto used_width = computed_width.is_auto() ? containing_block_width : computed_width.to_px(grid_container(), containing_block_width);
|
||||
auto used_height = computed_height.is_auto() ? containing_block_height : computed_height.to_px(grid_container(), containing_block_height);
|
||||
auto border_left = child_box.computed_values().border_left().width;
|
||||
auto border_right = child_box.computed_values().border_right().width;
|
||||
auto border_top = child_box.computed_values().border_top().width;
|
||||
auto border_bottom = child_box.computed_values().border_bottom().width;
|
||||
|
||||
child_box_state.border_left = border_left;
|
||||
child_box_state.border_right = border_right;
|
||||
child_box_state.border_top = border_top;
|
||||
child_box_state.border_bottom = border_bottom;
|
||||
|
||||
auto used_width = computed_width.is_auto() ? (containing_block_width - child_box_state.border_left - child_box_state.border_right) : computed_width.to_px(grid_container(), containing_block_width);
|
||||
auto used_height = computed_height.is_auto() ? (containing_block_height - child_box_state.border_top - child_box_state.border_bottom) : computed_height.to_px(grid_container(), containing_block_height);
|
||||
|
||||
child_box_state.set_content_width(used_width);
|
||||
child_box_state.set_content_height(used_height);
|
||||
|
||||
child_box_state.offset = { x_start + m_grid_columns_and_gaps[column_start].border_left, y_start + m_grid_rows_and_gaps[row_start].border_top };
|
||||
|
||||
child_box_state.border_left = child_box.computed_values().border_left().width;
|
||||
child_box_state.border_right = child_box.computed_values().border_right().width;
|
||||
child_box_state.border_top = child_box.computed_values().border_top().width;
|
||||
child_box_state.border_bottom = child_box.computed_values().border_bottom().width;
|
||||
child_box_state.offset = { x_start + border_left, y_start + border_top };
|
||||
|
||||
auto available_space_for_children = AvailableSpace(AvailableSize::make_definite(child_box_state.content_width()), AvailableSize::make_definite(child_box_state.content_height()));
|
||||
if (auto independent_formatting_context = layout_inside(child_box, LayoutMode::Normal, available_space_for_children))
|
||||
|
@ -1461,7 +1457,7 @@ void GridFormattingContext::determine_intrinsic_size_of_grid_container(Available
|
|||
if (available_space.height.is_intrinsic_sizing_constraint()) {
|
||||
CSSPixels grid_container_height = 0;
|
||||
for (auto& track : m_grid_rows) {
|
||||
grid_container_height += track.full_vertical_size();
|
||||
grid_container_height += track.base_size;
|
||||
}
|
||||
m_state.get_mutable(grid_container()).set_content_height(grid_container_height);
|
||||
}
|
||||
|
@ -1469,7 +1465,7 @@ void GridFormattingContext::determine_intrinsic_size_of_grid_container(Available
|
|||
if (available_space.width.is_intrinsic_sizing_constraint()) {
|
||||
CSSPixels grid_container_width = 0;
|
||||
for (auto& track : m_grid_columns) {
|
||||
grid_container_width += track.full_horizontal_size();
|
||||
grid_container_width += track.base_size;
|
||||
}
|
||||
m_state.get_mutable(grid_container()).set_content_width(grid_container_width);
|
||||
}
|
||||
|
@ -1673,12 +1669,12 @@ CSSPixels GridFormattingContext::calculate_min_content_contribution(GridItem con
|
|||
}();
|
||||
|
||||
if (should_treat_preferred_size_as_auto) {
|
||||
return calculate_min_content_size(item, dimension);
|
||||
return item.add_border_box_sizes(calculate_min_content_size(item, dimension), dimension);
|
||||
}
|
||||
|
||||
auto preferred_size = get_item_preferred_size(item, dimension);
|
||||
auto containing_block_size = containing_block_size_for_item(item, dimension);
|
||||
return preferred_size.to_px(grid_container(), containing_block_size);
|
||||
return item.add_border_box_sizes(preferred_size.to_px(grid_container(), containing_block_size), dimension);
|
||||
}
|
||||
|
||||
CSSPixels GridFormattingContext::calculate_max_content_contribution(GridItem const& item, GridDimension const dimension) const
|
||||
|
@ -1692,12 +1688,12 @@ CSSPixels GridFormattingContext::calculate_max_content_contribution(GridItem con
|
|||
}();
|
||||
|
||||
if (should_treat_preferred_size_as_auto) {
|
||||
return calculate_max_content_size(item, dimension);
|
||||
return item.add_border_box_sizes(calculate_max_content_size(item, dimension), dimension);
|
||||
}
|
||||
|
||||
auto preferred_size = get_item_preferred_size(item, dimension);
|
||||
auto containing_block_size = containing_block_size_for_item(item, dimension);
|
||||
return preferred_size.to_px(grid_container(), containing_block_size);
|
||||
return item.add_border_box_sizes(preferred_size.to_px(grid_container(), containing_block_size), dimension);
|
||||
}
|
||||
|
||||
CSSPixels GridFormattingContext::calculate_limited_min_content_contribution(GridItem const& item, GridDimension const dimension) const
|
||||
|
@ -1782,7 +1778,7 @@ CSSPixels GridFormattingContext::automatic_minimum_size(GridItem const& item, Gr
|
|||
// FIXME: Check all tracks spanned by an item
|
||||
auto item_spans_auto_tracks = tracks[item_track_index].min_track_sizing_function.is_auto();
|
||||
if (item_spans_auto_tracks && !item.box().is_scroll_container()) {
|
||||
return content_based_minimum_size(item, dimension);
|
||||
return item.add_border_box_sizes(content_based_minimum_size(item, dimension), dimension);
|
||||
}
|
||||
|
||||
// Otherwise, the automatic minimum size is zero, as usual.
|
||||
|
@ -1810,7 +1806,7 @@ CSSPixels GridFormattingContext::calculate_minimum_contribution(GridItem const&
|
|||
if (minimum_size.is_auto())
|
||||
return automatic_minimum_size(item, dimension);
|
||||
auto containing_block_size = containing_block_size_for_item(item, dimension);
|
||||
return minimum_size.to_px(grid_container(), containing_block_size);
|
||||
return item.add_border_box_sizes(minimum_size.to_px(grid_container(), containing_block_size), dimension);
|
||||
}
|
||||
|
||||
return calculate_min_content_contribution(item, dimension);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue