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);
|
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.
|
// We can also layout absolutely positioned boxes within this BFC.
|
||||||
for (auto& box : m_absolutely_positioned_boxes) {
|
for (auto& box : m_absolutely_positioned_boxes) {
|
||||||
auto& cb_state = m_state.get(*box->containing_block());
|
auto& cb_state = m_state.get(*box->containing_block());
|
||||||
@@ -116,6 +117,7 @@ void BlockFormattingContext::parent_context_did_dimension_child_root_box()
|
|||||||
layout_absolutely_positioned_element(box, AvailableSpace(available_width, available_height));
|
layout_absolutely_positioned_element(box, AvailableSpace(available_width, available_height));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool BlockFormattingContext::box_should_avoid_floats_because_it_establishes_fc(Box const& box)
|
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()
|
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) {
|
flex_container().for_each_child_of_type<Box>([&](Layout::Box& box) {
|
||||||
if (box.is_absolutely_positioned()) {
|
if (box.is_absolutely_positioned()) {
|
||||||
auto& cb_state = m_state.get(*box.containing_block());
|
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()
|
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) {
|
grid_container().for_each_child_of_type<Box>([&](Layout::Box& box) {
|
||||||
if (box.is_absolutely_positioned()) {
|
if (box.is_absolutely_positioned()) {
|
||||||
auto& cb_state = m_state.get(*box.containing_block());
|
auto& cb_state = m_state.get(*box.containing_block());
|
||||||
|
|||||||
Reference in New Issue
Block a user