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.
This commit is contained in:
Sam Atkins 2025-02-10 15:26:04 +00:00
parent 28a1297360
commit 49b505e4ae
Notes: github-actions[bot] 2025-02-12 13:49:54 +00:00

View file

@ -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;