/* vim: set shiftwidth=2 tabstop=8 autoindent cindent expandtab: */ /* 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_dom_AnimationPlayer_h #define mozilla_dom_AnimationPlayer_h #include // for std::max #include "nsWrapperCache.h" #include "nsCycleCollectionParticipant.h" #include "mozilla/Attributes.h" #include "mozilla/TimeStamp.h" // for TimeStamp, TimeDuration #include "mozilla/dom/Animation.h" // for Animation #include "mozilla/dom/AnimationTimeline.h" // for AnimationTimeline #include "nsCSSProperty.h" // for nsCSSProperty // X11 has a #define for CurrentTime. #ifdef CurrentTime #undef CurrentTime #endif struct JSContext; namespace mozilla { namespace dom { class AnimationPlayer MOZ_FINAL : public nsWrapperCache { protected: virtual ~AnimationPlayer() { } public: explicit AnimationPlayer(AnimationTimeline* aTimeline) : mPlayState(NS_STYLE_ANIMATION_PLAY_STATE_RUNNING) , mIsRunningOnCompositor(false) , mTimeline(aTimeline) { SetIsDOMBinding(); } NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(AnimationPlayer) NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(AnimationPlayer) AnimationTimeline* GetParentObject() const { return mTimeline; } virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE; // AnimationPlayer methods Animation* GetSource() const { return mSource; } AnimationTimeline* Timeline() const { return mTimeline; } Nullable GetStartTime() const; Nullable GetCurrentTime() const; bool IsRunningOnCompositor() const { return mIsRunningOnCompositor; } void SetSource(Animation* aSource); void Tick(); const nsString& Name() const { return mSource ? mSource->Name() : EmptyString(); } bool IsPaused() const { return mPlayState == NS_STYLE_ANIMATION_PLAY_STATE_PAUSED; } bool IsRunning() const; bool HasCurrentSource() const { return GetSource() && GetSource()->IsCurrent(); } bool HasInEffectSource() const { return GetSource() && GetSource()->IsInEffect(); } // Return the duration since the start time of the player, taking into // account the pause state. May be negative or null. Nullable GetCurrentTimeDuration() const; // The beginning of the delay period. Nullable mStartTime; Nullable mHoldTime; uint8_t mPlayState; bool mIsRunningOnCompositor; nsRefPtr mTimeline; nsRefPtr mSource; }; } // namespace dom } // namespace mozilla #endif // mozilla_dom_AnimationPlayer_h