Document.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include <LibHTML/DOM/Document.h>
  2. #include <LibHTML/DOM/Element.h>
  3. #include <LibHTML/Layout/LayoutDocument.h>
  4. #include <stdio.h>
  5. Document::Document()
  6. : ParentNode(NodeType::DOCUMENT_NODE)
  7. {
  8. }
  9. Document::~Document()
  10. {
  11. }
  12. static void create_layout_tree_for_node(Node& node)
  13. {
  14. if (auto layout_node = node.create_layout_node()) {
  15. node.set_layout_node(*layout_node);
  16. #ifdef DEBUG_LAYOUT_TREE_BUILD
  17. if (node.is_element()) {
  18. printf("created layout node for <%s>, parent is %p, parent ln is %p\n", static_cast<const Element&>(node).tag_name().characters(), node.parent_node(), node.parent_node()->layout_node());
  19. }
  20. #endif
  21. if (node.parent_node() && node.parent_node()->layout_node())
  22. node.parent_node()->layout_node()->append_child(*layout_node);
  23. }
  24. if (node.is_parent_node()) {
  25. static_cast<ParentNode&>(node).for_each_child([&](auto& child) {
  26. create_layout_tree_for_node(child);
  27. });
  28. }
  29. }
  30. void Document::build_layout_tree()
  31. {
  32. create_layout_tree_for_node(*this);
  33. }
  34. RetainPtr<LayoutNode> Document::create_layout_node()
  35. {
  36. return adopt(*new LayoutDocument(*this));
  37. }