diff --git a/Userland/Libraries/LibWeb/Animations/Animation.cpp b/Userland/Libraries/LibWeb/Animations/Animation.cpp index fbd423ff7e..bd94554c7c 100644 --- a/Userland/Libraries/LibWeb/Animations/Animation.cpp +++ b/Userland/Libraries/LibWeb/Animations/Animation.cpp @@ -81,8 +81,27 @@ void Animation::set_effect(JS::GCPtr new_effect) // https://www.w3.org/TR/web-animations-1/#animation-set-the-timeline-of-an-animation void Animation::set_timeline(JS::GCPtr 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 diff --git a/Userland/Libraries/LibWeb/Animations/Animation.h b/Userland/Libraries/LibWeb/Animations/Animation.h index 54a803d884..645a575123 100644 --- a/Userland/Libraries/LibWeb/Animations/Animation.h +++ b/Userland/Libraries/LibWeb/Animations/Animation.h @@ -70,6 +70,9 @@ private: // https://www.w3.org/TR/web-animations-1/#animation-start-time Optional m_start_time {}; + // https://www.w3.org/TR/web-animations-1/#animation-hold-time + Optional m_hold_time {}; + // https://www.w3.org/TR/web-animations-1/#playback-rate double m_playback_rate { 1.0 };