LibWeb: Make :hover invalidation logic reusable for all pseudo classes

We achieve this by keeping track of all checked pseudo class selectors
in the SelectorEngine code. We also give StyleComputer per-pseudo-class
rule caches.
This commit is contained in:
Andreas Kling 2025-04-17 13:39:30 +02:00 committed by Andreas Kling
commit e1777f6e79
Notes: github-actions[bot] 2025-04-17 17:47:22 +00:00
13 changed files with 134 additions and 59 deletions

View file

@ -60,6 +60,7 @@ enum class PseudoClass {
member_generator.appendln(" @name:titlecase@,");
});
generator.append(R"~~~(
__Count,
};
Optional<PseudoClass> pseudo_class_from_string(StringView);
@ -123,6 +124,8 @@ Optional<PseudoClass> pseudo_class_from_string(StringView string)
StringView pseudo_class_name(PseudoClass pseudo_class)
{
switch (pseudo_class) {
case PseudoClass::__Count:
VERIFY_NOT_REACHED();
)~~~");
pseudo_classes_data.for_each_member([&](auto& name, auto&) {
@ -144,6 +147,8 @@ StringView pseudo_class_name(PseudoClass pseudo_class)
PseudoClassMetadata pseudo_class_metadata(PseudoClass pseudo_class)
{
switch (pseudo_class) {
case PseudoClass::__Count:
VERIFY_NOT_REACHED();
)~~~");
pseudo_classes_data.for_each_member([&](auto& name, JsonValue const& value) {