From 49b505e4aed3c0f42233c54d80cb294d0c08124c Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Mon, 10 Feb 2025 15:26:04 +0000 Subject: [PATCH] LibWeb/DOM: Cache computed style for ::marker This allows us to inspect its properties. To avoid wasted work, we only compute and cache the properties if the originating element was, or is, displaying as a list item. --- Libraries/LibWeb/DOM/Element.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Libraries/LibWeb/DOM/Element.cpp b/Libraries/LibWeb/DOM/Element.cpp index da14daa7cd..975ccbbef5 100644 --- a/Libraries/LibWeb/DOM/Element.cpp +++ b/Libraries/LibWeb/DOM/Element.cpp @@ -513,11 +513,15 @@ CSS::RequiredInvalidationAfterStyleChange Element::recompute_style() new_computed_properties->set_property(CSS::PropertyID::TextAlign, CSS::CSSKeywordValue::create(CSS::Keyword::Start)); } + bool had_list_marker = false; + CSS::RequiredInvalidationAfterStyleChange invalidation; - if (m_computed_properties) + if (m_computed_properties) { invalidation = compute_required_invalidation(*m_computed_properties, new_computed_properties); - else + had_list_marker = m_computed_properties->display().is_list_item(); + } else { invalidation = CSS::RequiredInvalidationAfterStyleChange::full(); + } if (!invalidation.is_none()) set_computed_properties(move(new_computed_properties)); @@ -542,6 +546,8 @@ CSS::RequiredInvalidationAfterStyleChange Element::recompute_style() recompute_pseudo_element_style(CSS::Selector::PseudoElement::Type::Before); recompute_pseudo_element_style(CSS::Selector::PseudoElement::Type::After); + if (had_list_marker || m_computed_properties->display().is_list_item()) + recompute_pseudo_element_style(CSS::Selector::PseudoElement::Type::Marker); if (invalidation.is_none()) return invalidation;