소스 검색

LibHTML: Have element keep a pointer to their resolved style

This will make it easy to implement a simple element style inspector.
Andreas Kling 5 년 전
부모
커밋
ffcd395afc
2개의 변경된 파일6개의 추가작업 그리고 0개의 파일을 삭제
  1. 2 0
      Libraries/LibHTML/DOM/Element.cpp
  2. 4 0
      Libraries/LibHTML/DOM/Element.h

+ 2 - 0
Libraries/LibHTML/DOM/Element.cpp

@@ -78,6 +78,7 @@ bool Element::has_class(const StringView& class_name) const
 RefPtr<LayoutNode> Element::create_layout_node(const StyleProperties* parent_style) const
 {
     auto style = document().style_resolver().resolve_style(*this, parent_style);
+    const_cast<Element&>(*this).m_resolved_style = style;
     auto display = style->string_or_fallback(CSS::PropertyID::Display, "inline");
 
     if (display == "none")
@@ -139,6 +140,7 @@ void Element::recompute_style()
         return;
     ASSERT(parent_layout_node);
     auto style = document().style_resolver().resolve_style(*this, &parent_layout_node->style());
+    m_resolved_style = style;
     if (!layout_node()) {
         if (style->string_or_fallback(CSS::PropertyID::Display, "inline") == "none")
             return;

+ 4 - 0
Libraries/LibHTML/DOM/Element.h

@@ -56,6 +56,8 @@ public:
 
     String name() const { return attribute("name"); }
 
+    const StyleProperties* resolved_style() const { return m_resolved_style.ptr(); }
+
 private:
     RefPtr<LayoutNode> create_layout_node(const StyleProperties* parent_style) const override;
 
@@ -64,6 +66,8 @@ private:
 
     String m_tag_name;
     Vector<Attribute> m_attributes;
+
+    RefPtr<StyleProperties> m_resolved_style;
 };
 
 template<>