diff --git a/LibHTML/Layout/LayoutBlock.cpp b/LibHTML/Layout/LayoutBlock.cpp
index fd47af1ed0..ffcca02f15 100644
--- a/LibHTML/Layout/LayoutBlock.cpp
+++ b/LibHTML/Layout/LayoutBlock.cpp
@@ -12,7 +12,19 @@ LayoutBlock::~LayoutBlock()
void LayoutBlock::layout()
{
+ compute_width();
+
LayoutNode::layout();
+ compute_height();
+}
+
+void LayoutBlock::compute_width()
+{
+
+}
+
+void LayoutBlock::compute_height()
+{
}
diff --git a/LibHTML/Layout/LayoutBlock.h b/LibHTML/Layout/LayoutBlock.h
index cc8a283245..86a117feb2 100644
--- a/LibHTML/Layout/LayoutBlock.h
+++ b/LibHTML/Layout/LayoutBlock.h
@@ -14,4 +14,8 @@ public:
virtual void layout() override;
private:
+ virtual bool is_block() const override { return true; }
+
+ void compute_width();
+ void compute_height();
};
diff --git a/LibHTML/Layout/LayoutDocument.h b/LibHTML/Layout/LayoutDocument.h
index a06e9f470b..11e1e48330 100644
--- a/LibHTML/Layout/LayoutDocument.h
+++ b/LibHTML/Layout/LayoutDocument.h
@@ -1,9 +1,9 @@
#pragma once
-#include
+#include
#include
-class LayoutDocument final : public LayoutNode {
+class LayoutDocument final : public LayoutBlock {
public:
explicit LayoutDocument(const Document&);
virtual ~LayoutDocument() override;
diff --git a/LibHTML/Layout/LayoutNode.cpp b/LibHTML/Layout/LayoutNode.cpp
index 22ba3097aa..ba1f8ae896 100644
--- a/LibHTML/Layout/LayoutNode.cpp
+++ b/LibHTML/Layout/LayoutNode.cpp
@@ -1,3 +1,4 @@
+#include
#include
LayoutNode::LayoutNode(const Node* node)
@@ -15,3 +16,12 @@ void LayoutNode::layout()
child.layout();
});
}
+
+const LayoutBlock* LayoutNode::containing_block() const
+{
+ for (auto* ancestor = parent(); ancestor; ancestor = ancestor->parent()) {
+ if (ancestor->is_block())
+ return static_cast(ancestor);
+ }
+ return nullptr;
+}
diff --git a/LibHTML/Layout/LayoutNode.h b/LibHTML/Layout/LayoutNode.h
index 9c665bf3f7..49a7b84746 100644
--- a/LibHTML/Layout/LayoutNode.h
+++ b/LibHTML/Layout/LayoutNode.h
@@ -7,6 +7,7 @@
#include
class Node;
+class LayoutBlock;
class LayoutNode : public TreeNode {
public:
@@ -38,9 +39,12 @@ public:
virtual const char* class_name() const { return "LayoutNode"; }
virtual bool is_text() const { return false; }
+ virtual bool is_block() const { return false; }
virtual void layout();
+ const LayoutBlock* containing_block() const;
+
protected:
explicit LayoutNode(const Node*);