mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-12-08 06:09:58 +00:00
LibWeb: Dont overwrite animated values in recompute_inherited_style
Previously we assumed that if the non-animated value was inherited then the animated value must be also which is not true.
This commit is contained in:
parent
a984ff4f58
commit
9d49fcc87b
Notes:
github-actions[bot]
2025-11-28 16:17:40 +00:00
Author: https://github.com/Calme1709
Commit: 9d49fcc87b
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/6837
Reviewed-by: https://github.com/AtkinsSJ ✅
3 changed files with 53 additions and 9 deletions
|
|
@ -859,6 +859,7 @@ CSS::RequiredInvalidationAfterStyleChange Element::recompute_inherited_style()
|
||||||
if (!computed_properties->is_property_inherited(property_id))
|
if (!computed_properties->is_property_inherited(property_id))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (computed_properties->is_animated_property_inherited(property_id) || !computed_properties->animated_property_values().contains(property_id)) {
|
||||||
RefPtr<CSS::StyleValue const> old_animated_value = computed_properties->animated_property_values().get(property_id).value_or({});
|
RefPtr<CSS::StyleValue const> old_animated_value = computed_properties->animated_property_values().get(property_id).value_or({});
|
||||||
RefPtr<CSS::StyleValue const> new_animated_value = CSS::StyleComputer::get_animated_inherit_value(property_id, { *this })
|
RefPtr<CSS::StyleValue const> new_animated_value = CSS::StyleComputer::get_animated_inherit_value(property_id, { *this })
|
||||||
.map([](auto&& value) { return value.ptr(); })
|
.map([](auto&& value) { return value.ptr(); })
|
||||||
|
|
@ -868,8 +869,9 @@ CSS::RequiredInvalidationAfterStyleChange Element::recompute_inherited_style()
|
||||||
|
|
||||||
if (new_animated_value)
|
if (new_animated_value)
|
||||||
computed_properties->set_animated_property(property_id, new_animated_value.release_nonnull(), CSS::ComputedProperties::Inherited::Yes);
|
computed_properties->set_animated_property(property_id, new_animated_value.release_nonnull(), CSS::ComputedProperties::Inherited::Yes);
|
||||||
else if (old_animated_value && computed_properties->is_animated_property_inherited(property_id))
|
else if (old_animated_value)
|
||||||
computed_properties->remove_animated_property(property_id);
|
computed_properties->remove_animated_property(property_id);
|
||||||
|
}
|
||||||
|
|
||||||
RefPtr new_value = CSS::StyleComputer::get_non_animated_inherit_value(property_id, { *this });
|
RefPtr new_value = CSS::StyleComputer::get_non_animated_inherit_value(property_id, { *this });
|
||||||
computed_properties->set_property(property_id, *new_value, CSS::ComputedProperties::Inherited::Yes);
|
computed_properties->set_property(property_id, *new_value, CSS::ComputedProperties::Inherited::Yes);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
rgb(0, 128, 0)
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<style>
|
||||||
|
@keyframes fooAnim {
|
||||||
|
from,
|
||||||
|
to {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#foo {
|
||||||
|
animation: fooAnim 1s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes barAnim {
|
||||||
|
from,
|
||||||
|
to {
|
||||||
|
color: green;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#bar {
|
||||||
|
animation: barAnim 1s infinite;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div id="foo"><div id="bar"></div></div>
|
||||||
|
<script src="../include.js"></script>
|
||||||
|
<script>
|
||||||
|
asyncTest(done => {
|
||||||
|
requestAnimationFrame(() => {
|
||||||
|
requestAnimationFrame(() => {
|
||||||
|
// Trigger recomputation of inherited style for #bar
|
||||||
|
foo.style.fontSize = "20px";
|
||||||
|
|
||||||
|
println(getComputedStyle(bar).color);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</html>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue