1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-25 19:25:07 +00:00

LibWeb: Keep track of CSS property source declarations

This allows us to figure out where a specific CSS property comes from,
which is going to be used in a future commit to uniquely identify
running animations.
This commit is contained in:
Ali Mohammad Pur 2023-05-26 23:25:25 +03:30 committed by Andreas Kling
parent 279924242d
commit b7e3a68bfc
5 changed files with 223 additions and 210 deletions

View file

@ -412,10 +412,10 @@ static Element::RequiredInvalidationAfterStyleChange compute_required_invalidati
auto property_id = static_cast<CSS::PropertyID>(i);
auto const& old_value = old_style.properties()[i];
auto const& new_value = new_style.properties()[i];
if (!old_value && !new_value)
if (!old_value.has_value() && !new_value.has_value())
continue;
bool const property_value_changed = (!old_value || !new_value) || *old_value != *new_value;
bool const property_value_changed = (!old_value.has_value() || !new_value.has_value()) || *old_value->style != *new_value->style;
if (!property_value_changed)
continue;
@ -428,7 +428,7 @@ static Element::RequiredInvalidationAfterStyleChange compute_required_invalidati
// OPTIMIZATION: Special handling for CSS `visibility`:
if (property_id == CSS::PropertyID::Visibility) {
// We don't need to relayout if the visibility changes from visible to hidden or vice versa. Only collapse requires relayout.
if ((old_value && old_value->to_identifier() == CSS::ValueID::Collapse) != (new_value && new_value->to_identifier() == CSS::ValueID::Collapse))
if ((old_value.has_value() && old_value->style->to_identifier() == CSS::ValueID::Collapse) != (new_value.has_value() && new_value->style->to_identifier() == CSS::ValueID::Collapse))
invalidation.relayout = true;
// Of course, we still have to repaint on any visibility change.
invalidation.repaint = true;
@ -481,7 +481,7 @@ NonnullRefPtr<CSS::StyleProperties> Element::resolved_css_values()
auto maybe_value = element_computed_style->property(property_id);
if (!maybe_value.has_value())
continue;
properties->set_property(property_id, maybe_value.release_value().value);
properties->set_property(property_id, maybe_value.release_value().value, nullptr);
}
return properties;