diff options
author | Andreas Kling <awesomekling@gmail.com> | 2019-06-20 23:00:26 +0200 |
---|---|---|
committer | Andreas Kling <awesomekling@gmail.com> | 2019-06-20 23:00:26 +0200 |
commit | 2e2b97dc8a753ef6f962052cb68b14d585dadc62 (patch) | |
tree | f921b4596701c85101e107261de6889e52e8f763 | |
parent | 8cb0c765ca03742792143d0ffb45d6eaf192d8d1 (diff) | |
download | serenity-2e2b97dc8a753ef6f962052cb68b14d585dadc62.zip |
LibHTML: Add layout() overrides for LayoutText and LayoutBlock.
-rw-r--r-- | LibHTML/Layout/LayoutBlock.cpp | 7 | ||||
-rw-r--r-- | LibHTML/Layout/LayoutBlock.h | 2 | ||||
-rw-r--r-- | LibHTML/Layout/LayoutNode.h | 4 | ||||
-rw-r--r-- | LibHTML/Layout/LayoutText.cpp | 11 | ||||
-rw-r--r-- | LibHTML/Layout/LayoutText.h | 11 | ||||
-rw-r--r-- | LibHTML/test.cpp | 3 |
6 files changed, 38 insertions, 0 deletions
diff --git a/LibHTML/Layout/LayoutBlock.cpp b/LibHTML/Layout/LayoutBlock.cpp index 45191bcbe4..9495ffd280 100644 --- a/LibHTML/Layout/LayoutBlock.cpp +++ b/LibHTML/Layout/LayoutBlock.cpp @@ -9,3 +9,10 @@ LayoutBlock::LayoutBlock(Element& element) LayoutBlock::~LayoutBlock() { } + +void LayoutBlock::layout() +{ + LayoutNode::layout(); + + +} diff --git a/LibHTML/Layout/LayoutBlock.h b/LibHTML/Layout/LayoutBlock.h index 3b039c537e..47981eead3 100644 --- a/LibHTML/Layout/LayoutBlock.h +++ b/LibHTML/Layout/LayoutBlock.h @@ -11,5 +11,7 @@ public: virtual const char* class_name() const override { return "LayoutBlock"; } + virtual void layout() override; + private: }; diff --git a/LibHTML/Layout/LayoutNode.h b/LibHTML/Layout/LayoutNode.h index ce1e040a8b..64341d86c5 100644 --- a/LibHTML/Layout/LayoutNode.h +++ b/LibHTML/Layout/LayoutNode.h @@ -25,6 +25,8 @@ public: bool is_anonymous() const { return !m_node; } const Node* node() const { return m_node; } + const LayoutNode* parent_layout_node() const { return m_parent_node; } + LayoutNode* next_sibling() { return m_next_sibling; } LayoutNode* previous_sibling() { return m_previous_sibling; } LayoutNode* first_child() { return m_first_child; } @@ -34,6 +36,8 @@ public: const LayoutNode* first_child() const { return m_first_child; } const LayoutNode* last_child() const { return m_last_child; } + bool has_children() const { return m_first_child; } + void append_child(Retained<LayoutNode>); void set_next_sibling(LayoutNode* node) { m_next_sibling = node; } diff --git a/LibHTML/Layout/LayoutText.cpp b/LibHTML/Layout/LayoutText.cpp index 4682220ba2..bddac63e39 100644 --- a/LibHTML/Layout/LayoutText.cpp +++ b/LibHTML/Layout/LayoutText.cpp @@ -26,3 +26,14 @@ const String& LayoutText::text() const return one_space; return node().data(); } + +void LayoutText::compute_runs() +{ + +} + +void LayoutText::layout() +{ + ASSERT(!has_children()); + compute_runs(); +} diff --git a/LibHTML/Layout/LayoutText.h b/LibHTML/Layout/LayoutText.h index 8169dd17c3..01022d6175 100644 --- a/LibHTML/Layout/LayoutText.h +++ b/LibHTML/Layout/LayoutText.h @@ -14,6 +14,17 @@ public: virtual const char* class_name() const override { return "LayoutText"; } virtual bool is_text() const final { return true; } + virtual void layout() override; + + struct Run { + Point pos; + String text; + }; + + const Vector<Run>& runs() const { return m_runs; } private: + void compute_runs(); + + Vector<Run> m_runs; }; diff --git a/LibHTML/test.cpp b/LibHTML/test.cpp index 51a86bdd26..db55d2f196 100644 --- a/LibHTML/test.cpp +++ b/LibHTML/test.cpp @@ -17,12 +17,15 @@ int main(int argc, char** argv) doc->build_layout_tree(); ASSERT(doc->layout_node()); + + printf("\033[33;1mLayout tree before layout:\033[0m\n"); dump_tree(*doc->layout_node()); auto frame = make<Frame>(); frame->set_document(doc); frame->layout(); + printf("\033[33;1mLayout tree after layout:\033[0m\n"); dump_tree(*doc->layout_node()); return 0; } |