mirror of
https://github.com/fergalmoran/ladybird.git
synced 2025-12-22 09:19:03 +00:00
LibWeb: Skip abspos boxes layout in intrinsic sizing mode
Absolutely positioned boxes do not affect the size of the formatting context box they belong to, so it's safe to skip their layout entirely when calculating intrinsic size.
This commit is contained in:
committed by
Andreas Kling
parent
90b8bfc04c
commit
4eb16b144e
@@ -108,6 +108,7 @@ void BlockFormattingContext::parent_context_did_dimension_child_root_box()
|
||||
box_state.set_content_x(float_containing_block_width - floating_box->offset_from_edge);
|
||||
}
|
||||
|
||||
if (m_layout_mode == LayoutMode::Normal) {
|
||||
// We can also layout absolutely positioned boxes within this BFC.
|
||||
for (auto& box : m_absolutely_positioned_boxes) {
|
||||
auto& cb_state = m_state.get(*box->containing_block());
|
||||
@@ -115,6 +116,7 @@ void BlockFormattingContext::parent_context_did_dimension_child_root_box()
|
||||
auto available_height = AvailableSize::make_definite(cb_state.content_height() + cb_state.padding_top + cb_state.padding_bottom);
|
||||
layout_absolutely_positioned_element(box, AvailableSpace(available_width, available_height));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool BlockFormattingContext::box_should_avoid_floats_because_it_establishes_fc(Box const& box)
|
||||
|
||||
@@ -181,6 +181,9 @@ void FlexFormattingContext::run(AvailableSpace const& available_space)
|
||||
|
||||
void FlexFormattingContext::parent_context_did_dimension_child_root_box()
|
||||
{
|
||||
if (m_layout_mode != LayoutMode::Normal)
|
||||
return;
|
||||
|
||||
flex_container().for_each_child_of_type<Box>([&](Layout::Box& box) {
|
||||
if (box.is_absolutely_positioned()) {
|
||||
auto& cb_state = m_state.get(*box.containing_block());
|
||||
|
||||
@@ -2005,6 +2005,9 @@ void GridFormattingContext::layout_absolutely_positioned_element(Box const& box,
|
||||
|
||||
void GridFormattingContext::parent_context_did_dimension_child_root_box()
|
||||
{
|
||||
if (m_layout_mode != LayoutMode::Normal)
|
||||
return;
|
||||
|
||||
grid_container().for_each_child_of_type<Box>([&](Layout::Box& box) {
|
||||
if (box.is_absolutely_positioned()) {
|
||||
auto& cb_state = m_state.get(*box.containing_block());
|
||||
|
||||
Reference in New Issue
Block a user