30 if (job->isRenderThreadJob()) {
31 static_cast<QQuickAnimatorJob *>(job)->invalidate();
32 }
else if (job->isGroup()) {
33 for (QAbstractAnimationJob *a : *
static_cast<QAnimationGroupJob *>(job)->children())
34 qquickanimator_invalidate_jobs(a);
38void QQuickAnimatorController::windowNodesDestroyed()
40 for (
const QSharedPointer<QAbstractAnimationJob> &toPause : std::as_const(m_rootsPendingPause))
42 m_rootsPendingPause.clear();
43 for (
const QSharedPointer<QAbstractAnimationJob> &toStop : std::as_const(m_rootsPendingStop)) {
44 qquickanimator_invalidate_jobs(toStop.data());
47 m_rootsPendingStop.clear();
51 const auto roots = m_animationRoots;
52 m_animationRoots.clear();
53 for (
const QSharedPointer<QAbstractAnimationJob> &job : roots) {
54 qquickanimator_invalidate_jobs(job.data());
59 m_rootsPendingStart.insert(job);
82 if (job->isRenderThreadJob()) {
83 static_cast<QQuickAnimatorJob *>(job)->preSync();
84 }
else if (job->isGroup()) {
85 for (QAbstractAnimationJob *a : *
static_cast<QAnimationGroupJob *>(job)->children())
86 qquickanimator_sync_before_start(a);
90void QQuickAnimatorController::beforeNodeSync()
92 for (
const QSharedPointer<QAbstractAnimationJob> &toPause : std::as_const(m_rootsPendingPause)) {
94 m_animationRoots.remove(toPause.data());
96 m_rootsPendingPause.clear();
97 for (
const QSharedPointer<QAbstractAnimationJob> &toStop : std::as_const(m_rootsPendingStop)) {
99 m_animationRoots.remove(toStop.data());
101 m_rootsPendingStop.clear();
104 for (QQuickAnimatorJob *job : std::as_const(m_runningAnimators))
108 for (
const QSharedPointer<QAbstractAnimationJob> &job : std::as_const(m_rootsPendingStart)) {
109 Q_ASSERT(!job->isRunning());
115 qquickanimator_sync_before_start(job.data());
119 m_animationRoots.insert(job.data(), job);
121 m_rootsPendingStart.clear();
124 if (m_animationRoots.size())
139void QQuickAnimatorController::animationStateChanged(QAbstractAnimationJob *job,
140 QAbstractAnimationJob::State newState,
141 QAbstractAnimationJob::State oldState)
143 Q_ASSERT(job->isRenderThreadJob());
144 QQuickAnimatorJob *animator =
static_cast<QQuickAnimatorJob *>(job);
145 if (newState == QAbstractAnimationJob::Running) {
146 m_runningAnimators.insert(animator);
147 }
else if (oldState == QAbstractAnimationJob::Running) {
149 m_runningAnimators.remove(animator);
166 j->addAnimationChangeListener(
this, QAbstractAnimationJob::StateChange);
175void QQuickAnimatorController::start(
const QSharedPointer<QAbstractAnimationJob> &job)
177 m_rootsPendingStart.insert(job);
178 m_rootsPendingPause.remove(job);
179 m_rootsPendingStop.remove(job);
180 job->addAnimationChangeListener(
this, QAbstractAnimationJob::Completion);
181 start_helper(job.data());
186void QQuickAnimatorController::cancel(
const QSharedPointer<QAbstractAnimationJob> &job)
188 m_rootsPendingStart.remove(job);
189 m_rootsPendingPause.remove(job);
190 m_rootsPendingStop.insert(job);
194void QQuickAnimatorController::pause(
const QSharedPointer<QAbstractAnimationJob> &job)
196 m_rootsPendingStart.remove(job);
197 m_rootsPendingStop.remove(job);
198 m_rootsPendingPause.insert(job);