mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 18:18:12 +00:00
LibWeb: Avoid inside layout of flex items during intrinsic sizing
When we're calculating the intrinsic size of a flex container, we don't *need* to layout the inside of each flex item. That's only necessary if the flex items will be seen (as is the case for "normal" layout). This avoids a whole bunch of unnecessary layout work on pages that use flexbox layout. :^)
This commit is contained in:
parent
1a958633fa
commit
d1065afdd3
1 changed files with 9 additions and 12 deletions
|
@ -210,21 +210,18 @@ void FlexFormattingContext::run(Box const& run_box, LayoutMode, AvailableSpace c
|
|||
// 16. Align all flex lines (per align-content)
|
||||
align_all_flex_lines();
|
||||
|
||||
// AD-HOC: Layout the inside of all flex items.
|
||||
copy_dimensions_from_flex_items_to_boxes();
|
||||
for (auto& item : m_flex_items) {
|
||||
auto& box_state = m_state.get(item.box);
|
||||
if (auto independent_formatting_context = layout_inside(item.box, LayoutMode::Normal, box_state.available_inner_space_or_constraints_from(m_available_space_for_flex_container->space)))
|
||||
independent_formatting_context->parent_context_did_dimension_child_root_box();
|
||||
}
|
||||
|
||||
if (available_width.is_intrinsic_sizing_constraint() || available_height.is_intrinsic_sizing_constraint()) {
|
||||
// We're computing intrinsic size for the flex container.
|
||||
determine_intrinsic_size_of_flex_container();
|
||||
|
||||
// Our caller is only interested in the content-width and content-height results,
|
||||
// which have now been set on m_flex_container_state, so there's no need to continue
|
||||
// the main layout algorithm after this point.
|
||||
} else {
|
||||
// This is a normal layout (not intrinsic sizing).
|
||||
// AD-HOC: Finally, layout the inside of all flex items.
|
||||
copy_dimensions_from_flex_items_to_boxes();
|
||||
for (auto& item : m_flex_items) {
|
||||
auto& box_state = m_state.get(item.box);
|
||||
if (auto independent_formatting_context = layout_inside(item.box, LayoutMode::Normal, box_state.available_inner_space_or_constraints_from(m_available_space_for_flex_container->space)))
|
||||
independent_formatting_context->parent_context_did_dimension_child_root_box();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue