Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(286)

Unified Diff: Source/core/animation/AnimationEffect.h

Issue 1113173003: Web Animations: Update naming to reflect spec changes (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: No, really. Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/animation/Animation.idl ('k') | Source/core/animation/AnimationEffect.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/animation/AnimationEffect.h
diff --git a/Source/core/animation/AnimationEffect.h b/Source/core/animation/AnimationEffect.h
index ff659913b6b960d45c763fe41fec2a33425c42f7..a7409cf2f924da9e6c61eb10a80cfeba0f734602 100644
--- a/Source/core/animation/AnimationEffect.h
+++ b/Source/core/animation/AnimationEffect.h
@@ -32,34 +32,139 @@
#define AnimationEffect_h
#include "bindings/core/v8/ScriptWrappable.h"
-#include "core/CSSPropertyNames.h"
#include "core/CoreExport.h"
-#include "core/animation/PropertyHandle.h"
+#include "core/animation/Timing.h"
#include "platform/heap/Handle.h"
-#include "wtf/HashMap.h"
+#include "wtf/OwnPtr.h"
#include "wtf/PassOwnPtr.h"
#include "wtf/RefCounted.h"
namespace blink {
-class Interpolation;
+class Animation;
+class AnimationEffect;
+class AnimationEffectTiming;
+class ComputedTimingProperties;
+
+enum TimingUpdateReason {
+ TimingUpdateOnDemand,
+ TimingUpdateForAnimationFrame
+};
+
+static inline bool isNull(double value)
+{
+ return std::isnan(value);
+}
+
+static inline double nullValue()
+{
+ return std::numeric_limits<double>::quiet_NaN();
+}
class CORE_EXPORT AnimationEffect : public RefCountedWillBeGarbageCollectedFinalized<AnimationEffect>, public ScriptWrappable {
DEFINE_WRAPPERTYPEINFO();
+ friend class Animation; // Calls attach/detach, updateInheritedTime.
public:
- enum CompositeOperation {
- CompositeReplace,
- CompositeAdd,
+ // Note that logic in CSSAnimations depends on the order of these values.
+ enum Phase {
+ PhaseBefore,
+ PhaseActive,
+ PhaseAfter,
+ PhaseNone,
+ };
+
+ class EventDelegate : public NoBaseWillBeGarbageCollectedFinalized<EventDelegate> {
+ public:
+ virtual ~EventDelegate() { }
+ virtual bool requiresIterationEvents(const AnimationEffect&) = 0;
+ virtual void onEventCondition(const AnimationEffect&) = 0;
+ DEFINE_INLINE_VIRTUAL_TRACE() { }
};
- AnimationEffect() { }
virtual ~AnimationEffect() { }
- virtual void sample(int iteration, double fraction, double iterationDuration, OwnPtrWillBeRawPtr<WillBeHeapVector<RefPtrWillBeMember<Interpolation>>>&) const = 0;
- virtual bool affects(PropertyHandle) const { return false; };
- virtual bool isKeyframeEffectModel() const { return false; }
+ virtual bool isAnimation() const { return false; }
+
+ Phase phase() const { return ensureCalculated().phase; }
+ bool isCurrent() const { return ensureCalculated().isCurrent; }
+ bool isInEffect() const { return ensureCalculated().isInEffect; }
+ bool isInPlay() const { return ensureCalculated().isInPlay; }
+ double currentIteration() const { return ensureCalculated().currentIteration; }
+ double timeFraction() const { return ensureCalculated().timeFraction; }
+ double timeToForwardsEffectChange() const { return ensureCalculated().timeToForwardsEffectChange; }
+ double timeToReverseEffectChange() const { return ensureCalculated().timeToReverseEffectChange; }
+
+ double iterationDuration() const;
+ double activeDurationInternal() const;
+ double startTimeInternal() const { return m_startTime; }
+ double endTimeInternal() const { return std::max(startTimeInternal(), startTimeInternal() + specifiedTiming().startDelay + activeDurationInternal() + specifiedTiming().endDelay); }
+
+ const Animation* animation() const { return m_animation; }
+ Animation* animation() { return m_animation; }
+ const Timing& specifiedTiming() const { return m_timing; }
+ PassRefPtrWillBeRawPtr<AnimationEffectTiming> timing();
+ void updateSpecifiedTiming(const Timing&);
+
+ void computedTiming(ComputedTimingProperties&);
+ ComputedTimingProperties computedTiming();
+
+ void setName(const String& name) { m_name = name; }
+ const String& name() const { return m_name; }
+
+ DECLARE_VIRTUAL_TRACE();
+
+protected:
+ explicit AnimationEffect(const Timing&, PassOwnPtrWillBeRawPtr<EventDelegate> = nullptr);
+
+ // When AnimationEffect receives a new inherited time via updateInheritedTime
+ // it will (if necessary) recalculate timings and (if necessary) call
+ // updateChildrenAndEffects.
+ void updateInheritedTime(double inheritedTime, TimingUpdateReason) const;
+ void invalidate() const { m_needsUpdate = true; };
+ bool requiresIterationEvents() const { return m_eventDelegate && m_eventDelegate->requiresIterationEvents(*this); }
+ void clearEventDelegate() { m_eventDelegate = nullptr; }
+
+ virtual void attach(Animation* animation)
+ {
+ m_animation = animation;
+ }
+
+ virtual void detach()
+ {
+ ASSERT(m_animation);
+ m_animation = nullptr;
+ }
+
+ double repeatedDuration() const;
+
+ virtual void updateChildrenAndEffects() const = 0;
+ virtual double intrinsicIterationDuration() const { return 0; };
+ virtual double calculateTimeToEffectChange(bool forwards, double localTime, double timeToNextIteration) const = 0;
+ virtual void specifiedTimingChanged() { }
+
+ // FIXME: m_parent and m_startTime are placeholders, they depend on timing groups.
+ RawPtrWillBeMember<AnimationEffect> m_parent;
+ const double m_startTime;
+ RawPtrWillBeMember<Animation> m_animation;
+ Timing m_timing;
+ OwnPtrWillBeMember<EventDelegate> m_eventDelegate;
+
+ mutable struct CalculatedTiming {
+ Phase phase;
+ double currentIteration;
+ double timeFraction;
+ bool isCurrent;
+ bool isInEffect;
+ bool isInPlay;
+ double localTime;
+ double timeToForwardsEffectChange;
+ double timeToReverseEffectChange;
+ } m_calculated;
+ mutable bool m_needsUpdate;
+ mutable double m_lastUpdateTime;
+ String m_name;
- DEFINE_INLINE_VIRTUAL_TRACE() { }
+ const CalculatedTiming& ensureCalculated() const;
};
} // namespace blink
« no previous file with comments | « Source/core/animation/Animation.idl ('k') | Source/core/animation/AnimationEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698