From d3932b58802efe9e712a1ae2fe9da5b5f330f3cb Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 18 Mar 2022 12:31:26 +0100 Subject: [PATCH] LibWeb: Give FormattingState a reference to its root state FormattingStates can have parents, in case we're performing nested layouts to determine something's intrinsic size. In those cases, it will soon be useful to find the outermost (root) state. --- .../Libraries/LibWeb/Layout/FormattingState.h | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibWeb/Layout/FormattingState.h b/Userland/Libraries/LibWeb/Layout/FormattingState.h index 0598d49e0f..523d69c98d 100644 --- a/Userland/Libraries/LibWeb/Layout/FormattingState.h +++ b/Userland/Libraries/LibWeb/Layout/FormattingState.h @@ -15,12 +15,25 @@ namespace Web::Layout { struct FormattingState { - FormattingState() { } + FormattingState() + : m_root(*this) + { + } + explicit FormattingState(FormattingState const* parent) : m_parent(parent) + , m_root(find_root()) { } + FormattingState const& find_root() const + { + FormattingState const* root = this; + for (auto* state = m_parent; state; state = state->m_parent) + root = state; + return *root; + } + struct NodeState { float content_width { 0 }; float content_height { 0 }; @@ -92,6 +105,7 @@ struct FormattingState { HashMap mutable intrinsic_sizes; FormattingState const* m_parent { nullptr }; + FormattingState const& m_root; }; Gfx::FloatRect absolute_content_rect(Box const&, FormattingState const&);