Sfoglia il codice sorgente

LibWeb: Implement AnimationEffect::animation_direction()

Matthew Olsson 1 anno fa
parent
commit
d6fb1c24f6

+ 11 - 0
Userland/Libraries/LibWeb/Animations/AnimationEffect.cpp

@@ -5,6 +5,7 @@
  */
 
 #include <LibJS/Runtime/VM.h>
+#include <LibWeb/Animations/Animation.h>
 #include <LibWeb/Animations/AnimationEffect.h>
 #include <LibWeb/Bindings/Intrinsics.h>
 #include <LibWeb/WebIDL/ExceptionOr.h>
@@ -151,6 +152,16 @@ WebIDL::ExceptionOr<void> AnimationEffect::update_timing(OptionalEffectTiming ti
     return {};
 }
 
+// https://www.w3.org/TR/web-animations-1/#animation-direction
+AnimationDirection AnimationEffect::animation_direction() const
+{
+    // "backwards" if the effect is associated with an animation and the associated animation’s playback rate is less
+    // than zero; in all other cases, the animation direction is "forwards".
+    if (m_associated_animation && m_associated_animation->playback_rate() < 0.0)
+        return AnimationDirection::Backwards;
+    return AnimationDirection::Forwards;
+}
+
 AnimationEffect::AnimationEffect(JS::Realm& realm)
     : Bindings::PlatformObject(realm)
 {

+ 7 - 0
Userland/Libraries/LibWeb/Animations/AnimationEffect.h

@@ -49,6 +49,11 @@ struct ComputedEffectTiming : public EffectTiming {
     Optional<double> current_iteration;
 };
 
+enum class AnimationDirection {
+    Forwards,
+    Backwards,
+};
+
 // https://www.w3.org/TR/web-animations-1/#the-animationeffect-interface
 class AnimationEffect : public Bindings::PlatformObject {
     WEB_PLATFORM_OBJECT(AnimationEffect, Bindings::PlatformObject);
@@ -87,6 +92,8 @@ public:
     JS::GCPtr<Animation> associated_animation() const { return m_associated_animation; }
     void set_associated_animation(JS::GCPtr<Animation> value) { m_associated_animation = value; }
 
+    AnimationDirection animation_direction() const;
+
 protected:
     AnimationEffect(JS::Realm&);