mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-12-07 21:59:54 +00:00
LibWeb: Ensure registered transitions are reflective of properties
Previously we would only update these if: a) We had a cascaded value for `transition-property` b) The source of that cascaded value had changed since we last registered transitions This meant that there were a lot of changes we didn't apply: - Changes exclusively to properties other than `transition-property` (e.g. `transition-duration`, `transition-behavior`, etc) - Removing the `transition-property` property - Updating the `transition-property` property in a way that didn't change it's source (e.g. setting it within inline-style) Unfortunately this does mean that we now register transitions for all properties on most elements since "all" is the initial value for "transition-property" which isn't great for performance, but that can be looked at in later commits.
This commit is contained in:
parent
46abc0e8e2
commit
b2b889e1da
Notes:
github-actions[bot]
2025-11-23 08:44:36 +00:00
Author: https://github.com/Calme1709
Commit: b2b889e1da
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/6854
Reviewed-by: https://github.com/gmta ✅
13 changed files with 98 additions and 45 deletions
|
|
@ -22,7 +22,6 @@ namespace Web::Animations {
|
|||
struct Animatable::Transition {
|
||||
HashMap<CSS::PropertyID, size_t> transition_attribute_indices;
|
||||
Vector<TransitionAttributes> transition_attributes;
|
||||
GC::Ptr<CSS::CSSStyleDeclaration const> cached_transition_property_source;
|
||||
HashMap<CSS::PropertyID, GC::Ref<CSS::CSSTransition>> associated_transitions;
|
||||
};
|
||||
|
||||
|
|
@ -255,7 +254,6 @@ void Animatable::visit_edges(JS::Cell::Visitor& visitor)
|
|||
|
||||
for (auto const& transition : impl.transitions) {
|
||||
if (transition) {
|
||||
visitor.visit(transition->cached_transition_property_source);
|
||||
visitor.visit(transition->associated_transitions);
|
||||
}
|
||||
}
|
||||
|
|
@ -291,22 +289,6 @@ HashMap<FlyString, GC::Ref<Animation>>* Animatable::css_defined_animations(Optio
|
|||
return impl.css_defined_animations[index];
|
||||
}
|
||||
|
||||
GC::Ptr<CSS::CSSStyleDeclaration const> Animatable::cached_transition_property_source(Optional<CSS::PseudoElement> pseudo_element) const
|
||||
{
|
||||
auto* maybe_transition = ensure_transition(pseudo_element);
|
||||
if (!maybe_transition)
|
||||
return {};
|
||||
return maybe_transition->cached_transition_property_source;
|
||||
}
|
||||
|
||||
void Animatable::set_cached_transition_property_source(Optional<CSS::PseudoElement> pseudo_element, GC::Ptr<CSS::CSSStyleDeclaration const> value)
|
||||
{
|
||||
auto* maybe_transition = ensure_transition(pseudo_element);
|
||||
if (!maybe_transition)
|
||||
return;
|
||||
maybe_transition->cached_transition_property_source = value;
|
||||
}
|
||||
|
||||
Animatable::Impl& Animatable::ensure_impl() const
|
||||
{
|
||||
if (!m_impl)
|
||||
|
|
|
|||
|
|
@ -58,9 +58,6 @@ public:
|
|||
void add_css_animation(FlyString name, Optional<CSS::PseudoElement>, GC::Ref<Animation>);
|
||||
void remove_css_animation(FlyString name, Optional<CSS::PseudoElement>);
|
||||
|
||||
GC::Ptr<CSS::CSSStyleDeclaration const> cached_transition_property_source(Optional<CSS::PseudoElement>) const;
|
||||
void set_cached_transition_property_source(Optional<CSS::PseudoElement>, GC::Ptr<CSS::CSSStyleDeclaration const> value);
|
||||
|
||||
void add_transitioned_properties(Optional<CSS::PseudoElement>, Vector<Vector<CSS::PropertyID>> properties, CSS::StyleValueVector delays, CSS::StyleValueVector durations, CSS::StyleValueVector timing_functions, CSS::StyleValueVector transition_behaviors);
|
||||
Vector<CSS::PropertyID> property_ids_with_matching_transition_property_entry(Optional<CSS::PseudoElement>) const;
|
||||
Optional<TransitionAttributes const&> property_transition_attributes(Optional<CSS::PseudoElement>, CSS::PropertyID) const;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue