From 754e6e0f6741f6b0c05058340d8a132bcc4d10de Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 29 Sep 2019 11:43:33 +0200 Subject: [PATCH] LibHTML: Add LayoutNode::document() for easy access Every LayoutNode indirectly belongs to some Document. For anonymous LayoutNodes, we simply traverse the parent chain until we find someone with a Node from which we can get a Document&. --- Libraries/LibHTML/Layout/LayoutNode.cpp | 7 +++++++ Libraries/LibHTML/Layout/LayoutNode.h | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Libraries/LibHTML/Layout/LayoutNode.cpp b/Libraries/LibHTML/Layout/LayoutNode.cpp index b2f460a31f..dea0a68cb8 100644 --- a/Libraries/LibHTML/Layout/LayoutNode.cpp +++ b/Libraries/LibHTML/Layout/LayoutNode.cpp @@ -55,3 +55,10 @@ HitTestResult LayoutNode::hit_test(const Point& position) const }); return result; } + +const Document& LayoutNode::document() const +{ + if (is_anonymous()) + return parent()->document(); + return node()->document(); +} diff --git a/Libraries/LibHTML/Layout/LayoutNode.h b/Libraries/LibHTML/Layout/LayoutNode.h index 8663408df8..04e0205be2 100644 --- a/Libraries/LibHTML/Layout/LayoutNode.h +++ b/Libraries/LibHTML/Layout/LayoutNode.h @@ -8,10 +8,11 @@ #include #include -class Node; +class Document; class Element; class LayoutBlock; class LayoutNode; +class Node; struct HitTestResult { RefPtr layout_node; @@ -33,6 +34,8 @@ public: bool is_anonymous() const { return !m_node; } const Node* node() const { return m_node; } + const Document& document() const; + template inline void for_each_child(Callback callback) const {