summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWeb/DOM
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Libraries/LibWeb/DOM')
-rw-r--r--Userland/Libraries/LibWeb/DOM/Document.cpp23
-rw-r--r--Userland/Libraries/LibWeb/DOM/Document.h5
2 files changed, 21 insertions, 7 deletions
diff --git a/Userland/Libraries/LibWeb/DOM/Document.cpp b/Userland/Libraries/LibWeb/DOM/Document.cpp
index 321525d278..3ed261fd9d 100644
--- a/Userland/Libraries/LibWeb/DOM/Document.cpp
+++ b/Userland/Libraries/LibWeb/DOM/Document.cpp
@@ -985,18 +985,29 @@ Layout::Viewport* Document::layout_node()
return static_cast<Layout::Viewport*>(Node::layout_node());
}
-void Document::set_inspected_node(Node* node)
+void Document::set_inspected_node(Node* node, Optional<CSS::Selector::PseudoElement> pseudo_element)
{
- if (m_inspected_node.ptr() == node)
+ if (m_inspected_node.ptr() == node && m_inspected_pseudo_element == pseudo_element)
return;
- if (m_inspected_node && m_inspected_node->layout_node())
- m_inspected_node->layout_node()->set_needs_display();
+ if (auto layout_node = inspected_layout_node())
+ layout_node->set_needs_display();
m_inspected_node = node;
+ m_inspected_pseudo_element = pseudo_element;
- if (m_inspected_node && m_inspected_node->layout_node())
- m_inspected_node->layout_node()->set_needs_display();
+ if (auto layout_node = inspected_layout_node())
+ layout_node->set_needs_display();
+}
+
+Layout::Node* Document::inspected_layout_node()
+{
+ if (!m_inspected_node)
+ return nullptr;
+ if (!m_inspected_pseudo_element.has_value() || !m_inspected_node->is_element())
+ return m_inspected_node->layout_node();
+ auto& element = static_cast<Element&>(*m_inspected_node);
+ return element.get_pseudo_element_node(m_inspected_pseudo_element.value());
}
static Node* find_common_ancestor(Node* a, Node* b)
diff --git a/Userland/Libraries/LibWeb/DOM/Document.h b/Userland/Libraries/LibWeb/DOM/Document.h
index 86aa2c6ba3..cacf78351a 100644
--- a/Userland/Libraries/LibWeb/DOM/Document.h
+++ b/Userland/Libraries/LibWeb/DOM/Document.h
@@ -136,9 +136,11 @@ public:
Node* hovered_node() { return m_hovered_node.ptr(); }
Node const* hovered_node() const { return m_hovered_node.ptr(); }
- void set_inspected_node(Node*);
+ void set_inspected_node(Node*, Optional<CSS::Selector::PseudoElement>);
Node* inspected_node() { return m_inspected_node.ptr(); }
Node const* inspected_node() const { return m_inspected_node.ptr(); }
+ Layout::Node* inspected_layout_node();
+ Layout::Node const* inspected_layout_node() const { return const_cast<Document*>(this)->inspected_layout_node(); }
Element* document_element();
Element const* document_element() const;
@@ -494,6 +496,7 @@ private:
JS::GCPtr<CSS::StyleSheetList> m_style_sheets;
JS::GCPtr<Node> m_hovered_node;
JS::GCPtr<Node> m_inspected_node;
+ Optional<CSS::Selector::PseudoElement> m_inspected_pseudo_element;
JS::GCPtr<Node> m_active_favicon;
WeakPtr<HTML::BrowsingContext> m_browsing_context;
AK::URL m_url;