From 1af0364cfcd01af3a5bd1d657866e4b274324987 Mon Sep 17 00:00:00 2001 From: Callum Law Date: Wed, 12 Nov 2025 22:59:03 +1300 Subject: [PATCH] LibWeb: Store `last_css_animation_play_state` on anim instead of effect Since it is the animation rather than the effect which has a play state it makes more sense to store it here --- Libraries/LibWeb/Animations/Animation.h | 3 +++ Libraries/LibWeb/Animations/KeyframeEffect.h | 5 ----- Libraries/LibWeb/CSS/StyleComputer.cpp | 4 ++-- Libraries/LibWeb/Forward.h | 1 + 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/Libraries/LibWeb/Animations/Animation.h b/Libraries/LibWeb/Animations/Animation.h index 766398af162..2849c5ce08a 100644 --- a/Libraries/LibWeb/Animations/Animation.h +++ b/Libraries/LibWeb/Animations/Animation.h @@ -115,6 +115,8 @@ public: auto release_saved_cancel_time() { return move(m_saved_cancel_time); } double associated_effect_end() const; + Optional last_css_animation_play_state() const { return m_last_css_animation_play_state; } + void set_last_css_animation_play_state(CSS::AnimationPlayState state) { m_last_css_animation_play_state = state; } protected: Animation(JS::Realm&); @@ -205,6 +207,7 @@ private: Optional m_saved_play_time; Optional m_saved_pause_time; Optional m_saved_cancel_time; + Optional m_last_css_animation_play_state; }; } diff --git a/Libraries/LibWeb/Animations/KeyframeEffect.h b/Libraries/LibWeb/Animations/KeyframeEffect.h index 5d08b6d09da..d100ecaf140 100644 --- a/Libraries/LibWeb/Animations/KeyframeEffect.h +++ b/Libraries/LibWeb/Animations/KeyframeEffect.h @@ -109,9 +109,6 @@ public: virtual void update_computed_properties(AnimationUpdateContext&) override; - Optional last_css_animation_play_state() const { return m_last_css_animation_play_state; } - void set_last_css_animation_play_state(CSS::AnimationPlayState state) { m_last_css_animation_play_state = state; } - private: KeyframeEffect(JS::Realm&); virtual ~KeyframeEffect() override = default; @@ -135,8 +132,6 @@ private: Vector> m_keyframe_objects {}; RefPtr m_key_frame_set {}; - - Optional m_last_css_animation_play_state; }; } diff --git a/Libraries/LibWeb/CSS/StyleComputer.cpp b/Libraries/LibWeb/CSS/StyleComputer.cpp index 69945eeb806..d5e24513040 100644 --- a/Libraries/LibWeb/CSS/StyleComputer.cpp +++ b/Libraries/LibWeb/CSS/StyleComputer.cpp @@ -1136,7 +1136,7 @@ static void apply_animation_properties(DOM::Document const& document, ComputedPr effect.set_playback_direction(Animations::css_animation_direction_to_bindings_playback_direction(animation_properties.direction)); effect.set_composite(Animations::css_animation_composition_to_bindings_composite_operation(animation_properties.composition)); - if (animation_properties.play_state != effect.last_css_animation_play_state()) { + if (animation_properties.play_state != animation.last_css_animation_play_state()) { if (animation_properties.play_state == CSS::AnimationPlayState::Running && animation.play_state() != Bindings::AnimationPlayState::Running) { HTML::TemporaryExecutionContext context(document.realm()); animation.play().release_value_but_fixme_should_propagate_errors(); @@ -1145,7 +1145,7 @@ static void apply_animation_properties(DOM::Document const& document, ComputedPr animation.pause().release_value_but_fixme_should_propagate_errors(); } - effect.set_last_css_animation_play_state(animation_properties.play_state); + animation.set_last_css_animation_play_state(animation_properties.play_state); } } diff --git a/Libraries/LibWeb/Forward.h b/Libraries/LibWeb/Forward.h index 0f0920062eb..f9327899680 100644 --- a/Libraries/LibWeb/Forward.h +++ b/Libraries/LibWeb/Forward.h @@ -401,6 +401,7 @@ enum class PropertyID : u16; enum class PaintOrder : u8; enum class ValueType : u8; enum class AnimatedPropertyResultOfTransition : u8; +enum class AnimationPlayState : u8; struct BackgroundLayerData; struct CalculationContext;