2016-03-22 02:11:05 +03:00
|
|
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
|
|
|
|
#ifndef mozilla_ComputedTiming_h
|
|
|
|
#define mozilla_ComputedTiming_h
|
|
|
|
|
|
|
|
#include "mozilla/dom/Nullable.h"
|
|
|
|
#include "mozilla/StickyTimeDuration.h"
|
2016-04-01 08:00:57 +03:00
|
|
|
#include "mozilla/ComputedTimingFunction.h"
|
2016-03-22 02:11:05 +03:00
|
|
|
|
|
|
|
#include "mozilla/dom/AnimationEffectReadOnlyBinding.h" // FillMode
|
|
|
|
|
|
|
|
namespace mozilla {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Stores the results of calculating the timing properties of an animation
|
|
|
|
* at a given sample time.
|
|
|
|
*/
|
|
|
|
struct ComputedTiming
|
|
|
|
{
|
|
|
|
// The total duration of the animation including all iterations.
|
|
|
|
// Will equal StickyTimeDuration::Forever() if the animation repeats
|
|
|
|
// indefinitely.
|
|
|
|
StickyTimeDuration mActiveDuration;
|
2016-12-20 10:03:29 +03:00
|
|
|
// The time within the active interval.
|
2017-04-27 03:10:44 +03:00
|
|
|
StickyTimeDuration mActiveTime;
|
2016-03-22 02:11:05 +03:00
|
|
|
// The effect end time in local time (i.e. an offset from the effect's
|
|
|
|
// start time). Will equal StickyTimeDuration::Forever() if the animation
|
|
|
|
// plays indefinitely.
|
|
|
|
StickyTimeDuration mEndTime;
|
|
|
|
// Progress towards the end of the current iteration. If the effect is
|
|
|
|
// being sampled backwards, this will go from 1.0 to 0.0.
|
|
|
|
// Will be null if the animation is neither animating nor
|
|
|
|
// filling at the sampled time.
|
2018-04-05 20:42:42 +03:00
|
|
|
dom::Nullable<double> mProgress;
|
2016-03-22 02:11:05 +03:00
|
|
|
// Zero-based iteration index (meaningless if mProgress is null).
|
|
|
|
uint64_t mCurrentIteration = 0;
|
|
|
|
// Unlike TimingParams::mIterations, this value is
|
|
|
|
// guaranteed to be in the range [0, Infinity].
|
|
|
|
double mIterations = 1.0;
|
|
|
|
double mIterationStart = 0.0;
|
|
|
|
StickyTimeDuration mDuration;
|
|
|
|
|
|
|
|
// This is the computed fill mode so it is never auto
|
|
|
|
dom::FillMode mFill = dom::FillMode::None;
|
|
|
|
bool FillsForwards() const {
|
|
|
|
MOZ_ASSERT(mFill != dom::FillMode::Auto,
|
|
|
|
"mFill should not be Auto in ComputedTiming.");
|
|
|
|
return mFill == dom::FillMode::Both ||
|
|
|
|
mFill == dom::FillMode::Forwards;
|
|
|
|
}
|
|
|
|
bool FillsBackwards() const {
|
|
|
|
MOZ_ASSERT(mFill != dom::FillMode::Auto,
|
|
|
|
"mFill should not be Auto in ComputedTiming.");
|
|
|
|
return mFill == dom::FillMode::Both ||
|
|
|
|
mFill == dom::FillMode::Backwards;
|
|
|
|
}
|
|
|
|
|
|
|
|
enum class AnimationPhase {
|
2017-01-25 09:43:57 +03:00
|
|
|
Idle, // Not sampled (null sample time)
|
2016-03-22 02:11:05 +03:00
|
|
|
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
|
|
|
|
};
|
2017-01-25 09:43:57 +03:00
|
|
|
AnimationPhase mPhase = AnimationPhase::Idle;
|
2016-04-01 08:00:57 +03:00
|
|
|
|
|
|
|
ComputedTimingFunction::BeforeFlag mBeforeFlag =
|
|
|
|
ComputedTimingFunction::BeforeFlag::Unset;
|
2016-03-22 02:11:05 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace mozilla
|
|
|
|
|
|
|
|
#endif // mozilla_ComputedTiming_h
|