diff options
author | janekptacijarabaci <janekptacijarabaci@seznam.cz> | 2018-03-14 11:45:38 +0100 |
---|---|---|
committer | janekptacijarabaci <janekptacijarabaci@seznam.cz> | 2018-03-14 11:45:38 +0100 |
commit | aade91b13a50ee4f246016fa8d8d1561f58f80ee (patch) | |
tree | 5deac61e124e06478040bedfbb1784b68fc8cc97 /dom/animation | |
parent | dcc00ffadf64270b0ae82431f5b71c527590e91b (diff) | |
download | uxp-aade91b13a50ee4f246016fa8d8d1561f58f80ee.tar.gz |
moebius#89: DOM - implement animationcancel event
Issue #55
Diffstat (limited to 'dom/animation')
-rw-r--r-- | dom/animation/Animation.cpp | 13 | ||||
-rw-r--r-- | dom/animation/ComputedTiming.h | 4 |
2 files changed, 13 insertions, 4 deletions
diff --git a/dom/animation/Animation.cpp b/dom/animation/Animation.cpp index 242a0c6d66..bd318f79e3 100644 --- a/dom/animation/Animation.cpp +++ b/dom/animation/Animation.cpp @@ -787,12 +787,21 @@ Animation::CancelNoUpdate() mHoldTime.SetNull(); mStartTime.SetNull(); - UpdateTiming(SeekFlag::NoSeek, SyncNotifyFlag::Async); - if (mTimeline) { mTimeline->RemoveAnimation(this); } MaybeQueueCancelEvent(activeTime); + + // When an animation is cancelled it no longer needs further ticks from the + // timeline. However, if we queued a cancel event and this was the last + // animation attached to the timeline, the timeline will stop observing the + // refresh driver and there may be no subsequent refresh driver tick for + // dispatching the queued event. + // + // By calling UpdateTiming *after* removing ourselves from our timeline, we + // ensure the timeline will register with the refresh driver for at least one + // more tick. + UpdateTiming(SeekFlag::NoSeek, SyncNotifyFlag::Async); } void diff --git a/dom/animation/ComputedTiming.h b/dom/animation/ComputedTiming.h index addf158659..525d59d23d 100644 --- a/dom/animation/ComputedTiming.h +++ b/dom/animation/ComputedTiming.h @@ -64,12 +64,12 @@ struct ComputedTiming } enum class AnimationPhase { - Null, // Not sampled (null sample time) + Idle, // Not sampled (null sample time) Before, // Sampled prior to the start of the active interval Active, // Sampled within the active interval After // Sampled after (or at) the end of the active interval }; - AnimationPhase mPhase = AnimationPhase::Null; + AnimationPhase mPhase = AnimationPhase::Idle; ComputedTimingFunction::BeforeFlag mBeforeFlag = ComputedTimingFunction::BeforeFlag::Unset; |