summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/animation/timing.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/core/animation/timing.h')
-rw-r--r--chromium/third_party/blink/renderer/core/animation/timing.h49
1 files changed, 35 insertions, 14 deletions
diff --git a/chromium/third_party/blink/renderer/core/animation/timing.h b/chromium/third_party/blink/renderer/core/animation/timing.h
index e3d386eeb2d..18cfd2127fc 100644
--- a/chromium/third_party/blink/renderer/core/animation/timing.h
+++ b/chromium/third_party/blink/renderer/core/animation/timing.h
@@ -45,18 +45,6 @@ namespace blink {
class EffectTiming;
class ComputedEffectTiming;
-static inline bool IsNull(double value) {
- return std::isnan(value);
-}
-
-static inline double NullValue() {
- return std::numeric_limits<double>::quiet_NaN();
-}
-
-static inline base::Optional<double> ValueOrUnresolved(double a) {
- return IsNull(a) ? base::nullopt : base::Optional<double>(a);
-}
-
struct CORE_EXPORT Timing {
USING_FAST_MALLOC(Timing);
@@ -75,9 +63,27 @@ struct CORE_EXPORT Timing {
kBackwards,
};
+ // Timing properties set via AnimationEffect.updateTiming override their
+ // corresponding CSS properties.
+ enum AnimationTimingOverride {
+ kOverrideNode = 0,
+ kOverrideDirection = 1,
+ kOverrideDuration = 1 << 1,
+ kOverrideEndDelay = 1 << 2,
+ kOverideFillMode = 1 << 3,
+ kOverrideIterationCount = 1 << 4,
+ kOverrideIterationStart = 1 << 5,
+ kOverrideStartDelay = 1 << 6,
+ kOverrideTimingFunction = 1 << 7,
+ kOverrideAll = (1 << 8) - 1
+ };
+
using FillMode = CompositorKeyframeModel::FillMode;
using PlaybackDirection = CompositorKeyframeModel::Direction;
+ static bool IsNull(double value) { return std::isnan(value); }
+ static double NullValue() { return std::numeric_limits<double>::quiet_NaN(); }
+
static String FillModeString(FillMode);
static FillMode StringToFillMode(const String&);
static String PlaybackDirectionString(PlaybackDirection);
@@ -90,7 +96,8 @@ struct CORE_EXPORT Timing {
iteration_count(1),
iteration_duration(base::nullopt),
direction(PlaybackDirection::NORMAL),
- timing_function(LinearTimingFunction::Shared()) {}
+ timing_function(LinearTimingFunction::Shared()),
+ timing_overrides(kOverrideNode) {}
void AssertValid() const {
DCHECK(std::isfinite(start_delay));
@@ -125,6 +132,16 @@ struct CORE_EXPORT Timing {
bool operator!=(const Timing& other) const { return !(*this == other); }
+ // Explicit changes to animation timing through the web animations API,
+ // override timing changes due to CSS style.
+ void SetTimingOverride(AnimationTimingOverride override) {
+ timing_overrides |= override;
+ }
+ bool HasTimingOverride(AnimationTimingOverride override) {
+ return timing_overrides & override;
+ }
+ bool HasTimingOverrides() { return timing_overrides != kOverrideNode; }
+
double start_delay;
double end_delay;
FillMode fill_mode;
@@ -135,6 +152,10 @@ struct CORE_EXPORT Timing {
PlaybackDirection direction;
scoped_refptr<TimingFunction> timing_function;
+ // Mask of timing attributes that are set by calls to
+ // AnimationEffect.updateTiming. Once set, these attributes ignore changes
+ // based on the CSS style.
+ uint16_t timing_overrides;
struct CalculatedTiming {
DISALLOW_NEW();
@@ -149,7 +170,7 @@ struct CORE_EXPORT Timing {
AnimationTimeDelta::Max();
AnimationTimeDelta time_to_reverse_effect_change =
AnimationTimeDelta::Max();
- double time_to_next_iteration = std::numeric_limits<double>::infinity();
+ AnimationTimeDelta time_to_next_iteration = AnimationTimeDelta::Max();
};
CalculatedTiming CalculateTimings(base::Optional<double> local_time,