summaryrefslogtreecommitdiff
path: root/Libraries/LibHTML/Frame.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Libraries/LibHTML/Frame.cpp')
-rw-r--r--Libraries/LibHTML/Frame.cpp44
1 files changed, 1 insertions, 43 deletions
diff --git a/Libraries/LibHTML/Frame.cpp b/Libraries/LibHTML/Frame.cpp
index 78005562b3..7681fa3df1 100644
--- a/Libraries/LibHTML/Frame.cpp
+++ b/Libraries/LibHTML/Frame.cpp
@@ -22,54 +22,12 @@ void Frame::set_document(Document* document)
m_document = document;
}
-RefPtr<LayoutNode> Frame::generate_layout_tree()
-{
- auto resolver = m_document->style_resolver();
- auto create_layout_node = [&](const Node& node) -> RefPtr<LayoutNode> {
- if (node.is_document())
- return adopt(*new LayoutDocument(static_cast<const Document&>(node), {}));
-
- auto style_properties = resolver.resolve_style(static_cast<const Element&>(node));
- auto display_property = style_properties.property("display");
- String display = display_property.has_value() ? display_property.release_value()->to_string() : "inline";
-
- if (display == "none")
- return nullptr;
- if (display == "block")
- return adopt(*new LayoutBlock(&node, move(style_properties)));
- if (display == "inline")
- return adopt(*new LayoutInline(node, move(style_properties)));
-
- ASSERT_NOT_REACHED();
- };
-
- Function<RefPtr<LayoutNode>(const Node&)> build_layout_tree;
- build_layout_tree = [&](const Node& node) -> RefPtr<LayoutNode> {
- auto layout_node = create_layout_node(node);
- if (!layout_node)
- return nullptr;
- if (!node.has_children())
- return layout_node;
- static_cast<const ParentNode&>(node).for_each_child([&](const Node& child) {
- auto layout_child = build_layout_tree(child);
- if (!layout_child)
- return;
- if (layout_child->is_inline())
- layout_node->inline_wrapper().append_child(*layout_child);
- else
- layout_node->append_child(*layout_child);
- });
- return layout_node;
- };
- return build_layout_tree(*m_document);
-}
-
void Frame::layout()
{
if (!m_document)
return;
- auto layout_root = generate_layout_tree();
+ auto layout_root = m_document->create_layout_tree(m_document->style_resolver(), nullptr);
layout_root->style().size().set_width(m_size.width());