mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-21 20:15:17 +00:00
LibWeb: Skip flex/grid layout when doing intrinsic sizing for ancestor
We don't need to perform inside layout of flex and grid formatting contexts when one of their ancestors is undergoing intrinsic size measurement. This is because the parent formatting context will have already sized the flex/grid container, and thus inside layout is completely redundant work.
This commit is contained in:
parent
6444fdf5ae
commit
267b84ebb6
Notes:
github-actions[bot]
2025-03-08 02:38:45 +00:00
Author: https://github.com/awesomekling Commit: https://github.com/LadybirdBrowser/ladybird/commit/267b84ebb65 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/3852
2 changed files with 18 additions and 0 deletions
|
@ -51,6 +51,15 @@ void FlexFormattingContext::run(AvailableSpace const& available_space)
|
|||
{
|
||||
// This implements https://www.w3.org/TR/css-flexbox-1/#layout-algorithm
|
||||
|
||||
// OPTIMIZATION: If we're in intrinsic sizing layout, but the flex container is not the
|
||||
// box being measured, we can skip everything here.
|
||||
// The parent formatting context has already figured out our size anyway.
|
||||
if (m_layout_mode == LayoutMode::IntrinsicSizing
|
||||
&& !available_space.width.is_intrinsic_sizing_constraint()
|
||||
&& !available_space.height.is_intrinsic_sizing_constraint()) {
|
||||
return;
|
||||
}
|
||||
|
||||
m_available_space = available_space;
|
||||
|
||||
// 1. Generate anonymous flex items
|
||||
|
|
|
@ -1956,6 +1956,15 @@ CSSPixelRect GridFormattingContext::get_grid_area_rect(GridItem const& grid_item
|
|||
|
||||
void GridFormattingContext::run(AvailableSpace const& available_space)
|
||||
{
|
||||
// OPTIMIZATION: If we're in intrinsic sizing layout, but the grid container is not the
|
||||
// box being measured, we can skip everything here.
|
||||
// The parent formatting context has already figured out our size anyway.
|
||||
if (m_layout_mode == LayoutMode::IntrinsicSizing
|
||||
&& !available_space.width.is_intrinsic_sizing_constraint()
|
||||
&& !available_space.height.is_intrinsic_sizing_constraint()) {
|
||||
return;
|
||||
}
|
||||
|
||||
m_available_space = available_space;
|
||||
|
||||
init_grid_lines(GridDimension::Column);
|
||||
|
|
Loading…
Add table
Reference in a new issue