diff --git a/LibHTML/Frame.cpp b/LibHTML/Frame.cpp
index 0c060574ed..6936d0d2c2 100644
--- a/LibHTML/Frame.cpp
+++ b/LibHTML/Frame.cpp
@@ -61,14 +61,14 @@ void Frame::layout()
auto create_layout_node = [](const StyledNode& styled_node) -> RefPtr {
if (styled_node.node() && styled_node.node()->is_document())
- return adopt(*new LayoutDocument(static_cast(*styled_node.node())));
+ return adopt(*new LayoutDocument(static_cast(*styled_node.node()), styled_node));
switch (styled_node.display()) {
case Display::None:
return nullptr;
case Display::Block:
- return adopt(*new LayoutBlock(*styled_node.node()));
+ return adopt(*new LayoutBlock(*styled_node.node(), styled_node));
case Display::Inline:
- return adopt(*new LayoutInline(*styled_node.node()));
+ return adopt(*new LayoutInline(*styled_node.node(), styled_node));
default:
ASSERT_NOT_REACHED();
}
diff --git a/LibHTML/Layout/LayoutBlock.cpp b/LibHTML/Layout/LayoutBlock.cpp
index 95fc1e5bd7..602f09dfa5 100644
--- a/LibHTML/Layout/LayoutBlock.cpp
+++ b/LibHTML/Layout/LayoutBlock.cpp
@@ -1,8 +1,8 @@
#include
#include
-LayoutBlock::LayoutBlock(const Node& node)
- : LayoutNode(&node)
+LayoutBlock::LayoutBlock(const Node& node, const StyledNode& styled_node)
+ : LayoutNode(&node, styled_node)
{
}
diff --git a/LibHTML/Layout/LayoutBlock.h b/LibHTML/Layout/LayoutBlock.h
index 86a117feb2..007b8c5170 100644
--- a/LibHTML/Layout/LayoutBlock.h
+++ b/LibHTML/Layout/LayoutBlock.h
@@ -6,7 +6,7 @@ class Element;
class LayoutBlock : public LayoutNode {
public:
- explicit LayoutBlock(const Node&);
+ LayoutBlock(const Node&, const StyledNode&);
virtual ~LayoutBlock() override;
virtual const char* class_name() const override { return "LayoutBlock"; }
diff --git a/LibHTML/Layout/LayoutDocument.cpp b/LibHTML/Layout/LayoutDocument.cpp
index 9e0a114cdf..ef57d8e991 100644
--- a/LibHTML/Layout/LayoutDocument.cpp
+++ b/LibHTML/Layout/LayoutDocument.cpp
@@ -1,7 +1,7 @@
#include
-LayoutDocument::LayoutDocument(const Document& document)
- : LayoutBlock(document)
+LayoutDocument::LayoutDocument(const Document& document, const StyledNode& styled_node)
+ : LayoutBlock(document, styled_node)
{
}
diff --git a/LibHTML/Layout/LayoutDocument.h b/LibHTML/Layout/LayoutDocument.h
index 11e1e48330..8b49a1ab8b 100644
--- a/LibHTML/Layout/LayoutDocument.h
+++ b/LibHTML/Layout/LayoutDocument.h
@@ -5,7 +5,7 @@
class LayoutDocument final : public LayoutBlock {
public:
- explicit LayoutDocument(const Document&);
+ LayoutDocument(const Document&, const StyledNode&);
virtual ~LayoutDocument() override;
const Document& node() const { return static_cast(*LayoutNode::node()); }
diff --git a/LibHTML/Layout/LayoutInline.cpp b/LibHTML/Layout/LayoutInline.cpp
index ac68b2818c..833dc0b1d9 100644
--- a/LibHTML/Layout/LayoutInline.cpp
+++ b/LibHTML/Layout/LayoutInline.cpp
@@ -1,8 +1,8 @@
#include
#include
-LayoutInline::LayoutInline(const Node& node)
- : LayoutNode(&node)
+LayoutInline::LayoutInline(const Node& node, const StyledNode& styled_node)
+ : LayoutNode(&node, styled_node)
{
}
diff --git a/LibHTML/Layout/LayoutInline.h b/LibHTML/Layout/LayoutInline.h
index 73def302cb..1032ce8dc6 100644
--- a/LibHTML/Layout/LayoutInline.h
+++ b/LibHTML/Layout/LayoutInline.h
@@ -6,7 +6,7 @@ class Element;
class LayoutInline : public LayoutNode {
public:
- explicit LayoutInline(const Node&);
+ LayoutInline(const Node&, const StyledNode&);
virtual ~LayoutInline() override;
virtual const char* class_name() const override { return "LayoutInline"; }
diff --git a/LibHTML/Layout/LayoutNode.cpp b/LibHTML/Layout/LayoutNode.cpp
index ba1f8ae896..00a2fc44f4 100644
--- a/LibHTML/Layout/LayoutNode.cpp
+++ b/LibHTML/Layout/LayoutNode.cpp
@@ -1,8 +1,10 @@
#include
#include
+#include
-LayoutNode::LayoutNode(const Node* node)
+LayoutNode::LayoutNode(const Node* node, const StyledNode& styled_node)
: m_node(node)
+ , m_styled_node(styled_node)
{
}
diff --git a/LibHTML/Layout/LayoutNode.h b/LibHTML/Layout/LayoutNode.h
index 49a7b84746..d049d37913 100644
--- a/LibHTML/Layout/LayoutNode.h
+++ b/LibHTML/Layout/LayoutNode.h
@@ -8,6 +8,7 @@
class Node;
class LayoutBlock;
+class StyledNode;
class LayoutNode : public TreeNode {
public:
@@ -46,10 +47,11 @@ public:
const LayoutBlock* containing_block() const;
protected:
- explicit LayoutNode(const Node*);
+ explicit LayoutNode(const Node*, const StyledNode&);
private:
const Node* m_node { nullptr };
+ NonnullRefPtr m_styled_node;
LayoutStyle m_style;
Rect m_rect;
diff --git a/LibHTML/Layout/LayoutText.cpp b/LibHTML/Layout/LayoutText.cpp
index bddac63e39..9ddd4879a9 100644
--- a/LibHTML/Layout/LayoutText.cpp
+++ b/LibHTML/Layout/LayoutText.cpp
@@ -1,8 +1,8 @@
#include
#include
-LayoutText::LayoutText(const Text& text)
- : LayoutNode(&text)
+LayoutText::LayoutText(const Text& text, const StyledNode& styled_node)
+ : LayoutNode(&text, styled_node)
{
}
diff --git a/LibHTML/Layout/LayoutText.h b/LibHTML/Layout/LayoutText.h
index 01022d6175..5ad24fa839 100644
--- a/LibHTML/Layout/LayoutText.h
+++ b/LibHTML/Layout/LayoutText.h
@@ -5,7 +5,7 @@
class LayoutText : public LayoutNode {
public:
- explicit LayoutText(const Text&);
+ LayoutText(const Text&, const StyledNode&);
virtual ~LayoutText() override;
const Text& node() const { return static_cast(*LayoutNode::node()); }