mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-20 19:45:12 +00:00
LibWeb: Use optimized invalidation for :active pseudo class
This commit is contained in:
parent
280e82094c
commit
37e5cada83
2 changed files with 22 additions and 7 deletions
|
@ -2508,16 +2508,32 @@ void Document::set_focused_element(GC::Ptr<Element> element)
|
|||
update_active_element();
|
||||
}
|
||||
|
||||
void Document::set_active_element(Element* element)
|
||||
void Document::set_active_element(GC::Ptr<Element> element)
|
||||
{
|
||||
if (m_active_element.ptr() == element)
|
||||
return;
|
||||
|
||||
GC::Ptr<Node> old_active_element = move(m_active_element);
|
||||
m_active_element = element;
|
||||
auto old_active_element = move(m_active_element);
|
||||
auto* common_ancestor = find_common_ancestor(old_active_element, element);
|
||||
|
||||
if (auto* invalidation_target = find_common_ancestor(old_active_element, m_active_element) ?: this)
|
||||
invalidation_target->invalidate_style(StyleInvalidationReason::TargetElementChange);
|
||||
GC::Ptr<Node> old_active_node_root = nullptr;
|
||||
GC::Ptr<Node> new_active_node_root = nullptr;
|
||||
if (old_active_element)
|
||||
old_active_node_root = old_active_element->root();
|
||||
if (element)
|
||||
new_active_node_root = element->root();
|
||||
if (old_active_node_root != new_active_node_root) {
|
||||
if (old_active_node_root) {
|
||||
invalidate_style_for_elements_affected_by_pseudo_class_change(CSS::PseudoClass::Active, m_active_element, *old_active_node_root, element);
|
||||
}
|
||||
if (new_active_node_root) {
|
||||
invalidate_style_for_elements_affected_by_pseudo_class_change(CSS::PseudoClass::Active, m_active_element, *new_active_node_root, element);
|
||||
}
|
||||
} else {
|
||||
invalidate_style_for_elements_affected_by_pseudo_class_change(CSS::PseudoClass::Active, m_active_element, *common_ancestor, element);
|
||||
}
|
||||
|
||||
m_active_element = element;
|
||||
|
||||
if (paintable())
|
||||
paintable()->set_needs_display();
|
||||
|
|
|
@ -431,8 +431,7 @@ public:
|
|||
void set_focused_element(GC::Ptr<Element>);
|
||||
|
||||
Element const* active_element() const { return m_active_element.ptr(); }
|
||||
|
||||
void set_active_element(Element*);
|
||||
void set_active_element(GC::Ptr<Element>);
|
||||
|
||||
Element const* target_element() const { return m_target_element.ptr(); }
|
||||
void set_target_element(GC::Ptr<Element>);
|
||||
|
|
Loading…
Add table
Reference in a new issue