Parcourir la source

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&.
Andreas Kling il y a 5 ans
Parent
commit
754e6e0f67

+ 7 - 0
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();
+}

+ 4 - 1
Libraries/LibHTML/Layout/LayoutNode.h

@@ -8,10 +8,11 @@
 #include <LibHTML/RenderingContext.h>
 #include <LibHTML/TreeNode.h>
 
-class Node;
+class Document;
 class Element;
 class LayoutBlock;
 class LayoutNode;
+class Node;
 
 struct HitTestResult {
     RefPtr<LayoutNode> 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<typename Callback>
     inline void for_each_child(Callback callback) const
     {