Ver código fonte

LibHTML: Give LayoutNodes a rect.

Also improve the layout tree dump format somewhat.
Andreas Kling 6 anos atrás
pai
commit
fec098b5cd
2 arquivos alterados com 32 adições e 8 exclusões
  1. 26 7
      LibHTML/Dump.cpp
  2. 6 1
      LibHTML/Layout/LayoutNode.h

+ 26 - 7
LibHTML/Dump.cpp

@@ -10,7 +10,7 @@ void dump_tree(const Node& node)
 {
     static int indent = 0;
     for (int i = 0; i < indent; ++i)
-        printf("   ");
+        printf("  ");
     if (node.is_document()) {
         printf("*Document*\n");
     } else if (node.is_element()) {
@@ -31,17 +31,36 @@ void dump_tree(const Node& node)
     --indent;
 }
 
-void dump_tree(const LayoutNode& node)
+void dump_tree(const LayoutNode& layout_node)
 {
     static int indent = 0;
     for (int i = 0; i < indent; ++i)
-        printf("   ");
-    printf("%s{%p}", node.class_name(), &node);
-    if (node.is_text())
-        printf(" \"%s\"", static_cast<const LayoutText&>(node).text().characters());
+        printf("  ");
+
+    String tag_name;
+    if (layout_node.is_anonymous())
+        tag_name = "(anonymous)";
+    else if (layout_node.node()->is_text())
+        tag_name = "#text";
+    else if (layout_node.node()->is_document())
+        tag_name = "#document";
+    else if (layout_node.node()->is_element())
+        tag_name = static_cast<const Element&>(*layout_node.node()).tag_name();
+    else
+        tag_name = "???";
+
+    printf("%s {%s} at (%d,%d) size %dx%d",
+        layout_node.class_name(),
+        tag_name.characters(),
+        layout_node.rect().x(),
+        layout_node.rect().y(),
+        layout_node.rect().width(),
+        layout_node.rect().height());
+    if (layout_node.is_text())
+        printf(" \"%s\"", static_cast<const LayoutText&>(layout_node).text().characters());
     printf("\n");
     ++indent;
-    node.for_each_child([](auto& child) {
+    layout_node.for_each_child([](auto& child) {
         dump_tree(child);
     });
     --indent;

+ 6 - 1
LibHTML/Layout/LayoutNode.h

@@ -2,6 +2,7 @@
 
 #include <AK/Retained.h>
 #include <AK/Vector.h>
+#include <SharedGraphics/Rect.h>
 
 class Node;
 
@@ -13,6 +14,10 @@ public:
     void release();
     int retain_count() const { return m_retain_count; }
 
+    const Rect& rect() const { return m_rect; }
+    void set_rect(const Rect& rect) { m_rect = rect; }
+
+    bool is_anonymous() const { return !m_node; }
     const Node* node() const { return m_node; }
 
     LayoutNode* next_sibling() { return m_next_sibling; }
@@ -50,5 +55,5 @@ private:
     LayoutNode* m_last_child { nullptr };
     LayoutNode* m_next_sibling { nullptr };
     LayoutNode* m_previous_sibling { nullptr };
+    Rect m_rect;
 };
-