Bug 1436659 - Add Animation::GetCurrentTimeForHoldTime helper; r?hiro
We will use this to calculate the unconstrained current time when we implement
pending playback rate changes.
MozReview-Commit-ID: 7GlmHiGeXF6
--- a/dom/animation/Animation.cpp
+++ b/dom/animation/Animation.cpp
@@ -293,21 +293,22 @@ Animation::SetStartTime(const Nullable<T
if (IsRelevant()) {
nsNodeUtils::AnimationChanged(this);
}
PostUpdate();
}
// https://drafts.csswg.org/web-animations/#current-time
Nullable<TimeDuration>
-Animation::GetCurrentTime() const
+Animation::GetCurrentTimeForHoldTime(
+ const Nullable<TimeDuration>& aHoldTime) const
{
Nullable<TimeDuration> result;
- if (!mHoldTime.IsNull()) {
- result = mHoldTime;
+ if (!aHoldTime.IsNull()) {
+ result = aHoldTime;
return result;
}
if (mTimeline && !mStartTime.IsNull()) {
Nullable<TimeDuration> timelineTime = mTimeline->GetCurrentTime();
if (!timelineTime.IsNull()) {
result = CurrentTimeFromTimelineTime(
timelineTime.Value(), mStartTime.Value(), mPlaybackRate);
--- a/dom/animation/Animation.h
+++ b/dom/animation/Animation.h
@@ -100,17 +100,19 @@ public:
void GetId(nsAString& aResult) const { aResult = mId; }
void SetId(const nsAString& aId);
AnimationEffectReadOnly* GetEffect() const { return mEffect; }
void SetEffect(AnimationEffectReadOnly* aEffect);
AnimationTimeline* GetTimeline() const { return mTimeline; }
void SetTimeline(AnimationTimeline* aTimeline);
Nullable<TimeDuration> GetStartTime() const { return mStartTime; }
void SetStartTime(const Nullable<TimeDuration>& aNewStartTime);
- Nullable<TimeDuration> GetCurrentTime() const;
+ Nullable<TimeDuration> GetCurrentTime() const {
+ return GetCurrentTimeForHoldTime(mHoldTime);
+ }
void SetCurrentTime(const TimeDuration& aNewCurrentTime);
double PlaybackRate() const { return mPlaybackRate; }
void SetPlaybackRate(double aPlaybackRate);
AnimationPlayState PlayState() const;
bool Pending() const { return mPendingState != PendingState::NotPending; }
virtual Promise* GetReady(ErrorResult& aRv);
Promise* GetFinished(ErrorResult& aRv);
void Cancel();
@@ -458,16 +460,19 @@ protected:
*/
bool IsNewlyStarted() const {
return mPendingState == PendingState::PlayPending &&
mPendingReadyTime.IsNull();
}
bool IsPossiblyOrphanedPendingAnimation() const;
StickyTimeDuration EffectEnd() const;
+ Nullable<TimeDuration> GetCurrentTimeForHoldTime(
+ const Nullable<TimeDuration>& aHoldTime) const;
+
nsIDocument* GetRenderedDocument() const;
RefPtr<AnimationTimeline> mTimeline;
RefPtr<AnimationEffectReadOnly> mEffect;
// The beginning of the delay period.
Nullable<TimeDuration> mStartTime; // Timeline timescale
Nullable<TimeDuration> mHoldTime; // Animation timescale
Nullable<TimeDuration> mPendingReadyTime; // Timeline timescale