35 Q_DISABLE_COPY(QAbstractAnimationJob)
48 QAbstractAnimationJob();
49 virtual ~QAbstractAnimationJob();
52 inline QAnimationGroupJob *group()
const {
return m_group;}
54 inline int loopCount()
const {
return m_loopCount;}
55 void setLoopCount(
int loopCount);
57 int totalDuration()
const;
58 virtual int duration()
const {
return 0;}
60 inline QAbstractAnimationJob::Direction direction()
const {
return m_direction;}
61 void setDirection(QAbstractAnimationJob::Direction direction);
64 inline int currentTime()
const {
return m_totalCurrentTime;}
65 inline int currentLoopTime()
const {
return m_currentTime;}
66 inline int currentLoop()
const {
return m_currentLoop;}
67 inline QAbstractAnimationJob::State state()
const {
return m_state;}
68 inline bool isRunning() {
return m_state == Running; }
69 inline bool isStopped() {
return m_state == Stopped; }
70 inline bool isPaused() {
return m_state == Paused; }
71 void setDisableUserControl();
72 void setEnableUserControl();
73 bool userControlDisabled()
const;
75 void setCurrentTime(
int msecs);
89 Q_DECLARE_FLAGS(ChangeTypes, ChangeType)
91 void addAnimationChangeListener(QAnimationJobChangeListener *listener, QAbstractAnimationJob::ChangeTypes);
92 void removeAnimationChangeListener(QAnimationJobChangeListener *listener, QAbstractAnimationJob::ChangeTypes);
94 bool isGroup()
const {
return m_isGroup; }
95 bool isRenderThreadJob()
const {
return m_isRenderThreadJob; }
96 bool isRenderThreadProxy()
const {
return m_isRenderThreadProxy; }
98 SelfDeletable m_selfDeletable;
100 virtual void updateCurrentTime(
int) {}
101 virtual void updateLoopCount(
int) {}
102 virtual void updateState(QAbstractAnimationJob::State newState, QAbstractAnimationJob::State oldState);
103 virtual void updateDirection(QAbstractAnimationJob::Direction direction);
104 virtual void topLevelAnimationLoopChanged() {}
106 virtual void debugAnimation(QDebug d)
const;
108 void fireTopLevelAnimationLoopChanged();
110 void setState(QAbstractAnimationJob::State state);
113 void stateChanged(QAbstractAnimationJob::State newState, QAbstractAnimationJob::State oldState);
114 void currentLoopChanged();
115 void directionChanged(QAbstractAnimationJob::Direction);
116 void currentTimeChanged(
int currentTime);
120 QAnimationGroupJob *m_group;
121 QAbstractAnimationJob::Direction m_direction;
124 QAbstractAnimationJob::State m_state;
125 int m_totalCurrentTime;
129 int m_uncontrolledFinishTime;
130 int m_currentLoopStartTime;
132 struct ChangeListener {
133 ChangeListener(QAnimationJobChangeListener *l, QAbstractAnimationJob::ChangeTypes t) : listener(l), types(t) {}
134 QAnimationJobChangeListener *listener;
135 QAbstractAnimationJob::ChangeTypes types;
136 bool operator==(
const ChangeListener &other)
const {
return listener == other.listener && types == other.types; }
138 std::vector<ChangeListener> changeListeners;
140 QQmlAnimationTimer *m_timer =
nullptr;
142 bool m_hasRegisteredTimer:1;
145 bool m_disableUserControl:1;
146 bool m_hasCurrentTimeChangeListeners:1;
147 bool m_isRenderThreadJob:1;
148 bool m_isRenderThreadProxy:1;
150 friend class QQmlAnimationTimer;
151 friend class QAnimationGroupJob;
152 friend Q_QML_EXPORT QDebug operator<<(QDebug,
const QAbstractAnimationJob *job);
158 virtual ~QAnimationJobChangeListener();
159 virtual void animationFinished(QAbstractAnimationJob *) {}
160 virtual void animationStateChanged(QAbstractAnimationJob *, QAbstractAnimationJob::State, QAbstractAnimationJob::State) {}
161 virtual void animationCurrentLoopChanged(QAbstractAnimationJob *) {}
162 virtual void animationCurrentTimeChanged(QAbstractAnimationJob *,
int) {}
169 QQmlAnimationTimer();
172 ~QQmlAnimationTimer();
174 static QQmlAnimationTimer *instance();
175 static QQmlAnimationTimer *instance(
bool create);
177 void registerAnimation(QAbstractAnimationJob *animation,
bool isTopLevel);
178 void unregisterAnimation(QAbstractAnimationJob *animation);
181
182
183
184 void ensureTimerUpdate();
187
188
189
190 void updateAnimationTimer();
192 void restartAnimationTimer() override;
193 void updateAnimationsTime(qint64 timeStep) override;
196#ifdef QT_QAbstractAnimationTimer_runningAnimationCount_IS_CONST
197 qsizetype runningAnimationCount()
const override {
return animations.size(); }
199 int runningAnimationCount() override {
return animations.size(); }
202 bool hasStartAnimationPending()
const {
return startAnimationPending; }
205 void startAnimations();
210 int currentAnimationIdx;
212 bool startAnimationPending;
213 bool stopTimerPending;
215 QList<QAbstractAnimationJob*> animations, animationsToStart;
218 int runningLeafAnimations;
219 QList<QAbstractAnimationJob*> runningPauseAnimations;
221 void registerRunningAnimation(QAbstractAnimationJob *animation);
222 void unregisterRunningAnimation(QAbstractAnimationJob *animation);
223 void unsetJobTimer(QAbstractAnimationJob *animation);
225 int closestPauseAnimationTimeToFinish();
230Q_QML_EXPORT QDebug operator<<(QDebug,
const QAbstractAnimationJob *job);