mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
0d80e67ebf
This patch makes Element::GetAnimationPlayers return not only current animations but also animations that have finished but are filling forwards. This brings the implementation into line with recent changes to the Web Animations spec and allows querying all the animations that are currently affecting an element or which are scheduled to do so in the future.
93 lines
2.6 KiB
C++
93 lines
2.6 KiB
C++
/* 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 <algorithm> // 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<double> GetStartTime() const;
|
|
Nullable<double> 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<TimeDuration> GetCurrentTimeDuration() const;
|
|
|
|
// The beginning of the delay period.
|
|
Nullable<TimeDuration> mStartTime;
|
|
Nullable<TimeDuration> mHoldTime;
|
|
uint8_t mPlayState;
|
|
bool mIsRunningOnCompositor;
|
|
|
|
nsRefPtr<AnimationTimeline> mTimeline;
|
|
nsRefPtr<Animation> mSource;
|
|
};
|
|
|
|
} // namespace dom
|
|
} // namespace mozilla
|
|
|
|
#endif // mozilla_dom_AnimationPlayer_h
|