Skip to content

Commit

Permalink
LibWeb: Use invalidation sets for link-related pseudo classes
Browse files Browse the repository at this point in the history
- :any-link
- :link
- :local-link
  • Loading branch information
awesomekling authored and kalenikaliaksandr committed Feb 8, 2025
1 parent 719a2e4 commit 39abd75
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 2 deletions.
6 changes: 6 additions & 0 deletions Libraries/LibWeb/CSS/StyleInvalidationData.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@ static void collect_properties_used_in_has(Selector::SimpleSelector const& selec
case PseudoClass::Defined:
case PseudoClass::PlaceholderShown:
case PseudoClass::Checked:
case PseudoClass::Link:
case PseudoClass::AnyLink:
case PseudoClass::LocalLink:
if (in_has)
style_invalidation_data.pseudo_classes_used_in_has_selectors.set(pseudo_class.type);
break;
Expand Down Expand Up @@ -128,6 +131,9 @@ static void build_invalidation_sets_for_simple_selector(Selector::SimpleSelector
case PseudoClass::PlaceholderShown:
case PseudoClass::Checked:
case PseudoClass::Has:
case PseudoClass::Link:
case PseudoClass::AnyLink:
case PseudoClass::LocalLink:
invalidation_set.set_needs_invalidate_pseudo_class(pseudo_class.type);
break;
default:
Expand Down
9 changes: 8 additions & 1 deletion Libraries/LibWeb/HTML/HTMLHyperlinkElementUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,14 @@ void HTMLHyperlinkElementUtils::set_the_url()
{
ScopeGuard invalidate_style_if_needed = [old_url = m_url, this] {
if (m_url != old_url) {
hyperlink_element_utils_element().invalidate_style(DOM::StyleInvalidationReason::HTMLHyperlinkElementHrefChange);
hyperlink_element_utils_element().invalidate_style(
DOM::StyleInvalidationReason::HTMLHyperlinkElementHrefChange,
{
{ .type = CSS::InvalidationSet::Property::Type::PseudoClass, .value = CSS::PseudoClass::AnyLink },
{ .type = CSS::InvalidationSet::Property::Type::PseudoClass, .value = CSS::PseudoClass::Link },
{ .type = CSS::InvalidationSet::Property::Type::PseudoClass, .value = CSS::PseudoClass::LocalLink },
},
{});
}
};

Expand Down
9 changes: 8 additions & 1 deletion Libraries/LibWeb/SVG/SVGAElement.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,14 @@ void SVGAElement::attribute_changed(FlyString const& name, Optional<String> cons
Base::attribute_changed(name, old_value, value, namespace_);

if (name == SVG::AttributeNames::href) {
invalidate_style(DOM::StyleInvalidationReason::HTMLHyperlinkElementHrefChange);
invalidate_style(
DOM::StyleInvalidationReason::HTMLHyperlinkElementHrefChange,
{
{ .type = CSS::InvalidationSet::Property::Type::PseudoClass, .value = CSS::PseudoClass::AnyLink },
{ .type = CSS::InvalidationSet::Property::Type::PseudoClass, .value = CSS::PseudoClass::Link },
{ .type = CSS::InvalidationSet::Property::Type::PseudoClass, .value = CSS::PseudoClass::LocalLink },
},
{});
}
if (name == HTML::AttributeNames::rel) {
if (m_rel_list)
Expand Down

0 comments on commit 39abd75

Please sign in to comment.