Bladeren bron

LibWeb: Implement Animation::set_timeline

Matthew Olsson 1 jaar geleden
bovenliggende
commit
4889f53880

+ 21 - 2
Userland/Libraries/LibWeb/Animations/Animation.cpp

@@ -81,8 +81,27 @@ void Animation::set_effect(JS::GCPtr<AnimationEffect> new_effect)
 // https://www.w3.org/TR/web-animations-1/#animation-set-the-timeline-of-an-animation
 void Animation::set_timeline(JS::GCPtr<AnimationTimeline> new_timeline)
 {
-    // FIXME: Implement
-    (void)new_timeline;
+    // Setting this attribute updates the object’s timeline using the procedure to set the timeline of an animation.
+
+    // 1. Let old timeline be the current timeline of animation, if any.
+    auto old_timeline = m_timeline;
+
+    // 2. If new timeline is the same object as old timeline, abort this procedure.
+    if (new_timeline == old_timeline)
+        return;
+
+    // 3. Let the timeline of animation be new timeline.
+    if (m_timeline)
+        m_timeline->disassociate_with_animation(*this);
+    m_timeline = new_timeline;
+    m_timeline->associate_with_animation(*this);
+
+    // 4. If the start time of animation is resolved, make animation’s hold time unresolved.
+    if (m_start_time.has_value())
+        m_hold_time = {};
+
+    // FIXME: 5. Run the procedure to update an animation’s finished state for animation with the did seek flag set to
+    //           false, and the synchronously notify flag set to false.
 }
 
 // https://www.w3.org/TR/web-animations-1/#dom-animation-starttime

+ 3 - 0
Userland/Libraries/LibWeb/Animations/Animation.h

@@ -70,6 +70,9 @@ private:
     // https://www.w3.org/TR/web-animations-1/#animation-start-time
     Optional<double> m_start_time {};
 
+    // https://www.w3.org/TR/web-animations-1/#animation-hold-time
+    Optional<double> m_hold_time {};
+
     // https://www.w3.org/TR/web-animations-1/#playback-rate
     double m_playback_rate { 1.0 };