mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 12:48:10 +00:00
LibWeb: Hack BFC to always remember to handle position:absolute elements
Normally we don't layout position:absolute elements until after the parent formatting context has assigned dimensions to the current formatting context's root box. However, some of our parent contexts (especially FFC) don't do this reliably, which makes position:absolute children have 0x0 dimensions. Hack this for now by making ~BFC() pretend that the parent assigned dimensions if it hadn't done it already.
This commit is contained in:
parent
c8051f8b5b
commit
a4bc7e2d96
2 changed files with 11 additions and 1 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2020-2021, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2020-2022, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -25,6 +25,12 @@ BlockFormattingContext::BlockFormattingContext(BlockContainer& root, FormattingC
|
|||
|
||||
BlockFormattingContext::~BlockFormattingContext()
|
||||
{
|
||||
if (!m_was_notified_after_parent_dimensioned_my_root_box) {
|
||||
// HACK: The parent formatting context never notified us after assigning dimensions to our root box.
|
||||
// Pretend that it did anyway, to make sure absolutely positioned children get laid out.
|
||||
// FIXME: Get rid of this hack once parent contexts behave properly.
|
||||
parent_context_did_dimension_child_root_box();
|
||||
}
|
||||
}
|
||||
|
||||
bool BlockFormattingContext::is_initial() const
|
||||
|
@ -47,6 +53,8 @@ void BlockFormattingContext::run(Box&, LayoutMode layout_mode)
|
|||
|
||||
void BlockFormattingContext::parent_context_did_dimension_child_root_box()
|
||||
{
|
||||
m_was_notified_after_parent_dimensioned_my_root_box = true;
|
||||
|
||||
for (auto& box : m_absolutely_positioned_boxes)
|
||||
layout_absolutely_positioned_element(box);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue