14#include <private/qquickanimatorjob_p.h>
16#include "private/qparallelanimationgroupjob_p.h"
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
81 void updateState(QAbstractAnimationJob::State newState, QAbstractAnimationJob::State oldState)
override;
86 Q_DECLARE_PUBLIC(QQuickTransition)
107 static void append_animation(QQmlListProperty<QQuickAbstractAnimation> *list, QQuickAbstractAnimation *a);
109 static QQuickAbstractAnimation*
animation_at(QQmlListProperty<QQuickAbstractAnimation> *list, qsizetype pos);
113 QQmlListProperty<QQuickAbstractAnimation> *list, qsizetype pos,
114 QQuickAbstractAnimation *a);
121 QQuickTransition *q =
static_cast<QQuickTransition *>(list->object);
122 q->d_func()->animations.append(a);
124 a->setDisableUserControl();
129 QQuickTransition *q =
static_cast<QQuickTransition *>(list->object);
130 return q->d_func()->animations.size();
135 QQuickTransition *q =
static_cast<QQuickTransition *>(list->object);
136 return q->d_func()->animations.at(pos);
141 QQuickTransition *q =
static_cast<QQuickTransition *>(list->object);
142 q->d_func()->animations.clear();
147 QQuickTransition *q =
static_cast<QQuickTransition *>(list->object);
148 q->d_func()->animations.removeLast();
152 QQmlListProperty<QQuickAbstractAnimation> *list, qsizetype pos, QQuickAbstractAnimation *a)
154 QQuickTransition *q =
static_cast<QQuickTransition *>(list->object);
156 if (d->animations.length() <= pos)
157 d->animations.resize(pos + 1,
nullptr);
158 d->animations[pos] = a;
160 a->setDisableUserControl();
169 transition->animationStateChanged(newState);
174 Q_Q(QQuickTransition);
176 if (newState == QAbstractAnimationJob::Running) {
177 runningInstanceCount++;
178 if (runningInstanceCount == 1)
179 emit q->runningChanged();
180 }
else if (newState == QAbstractAnimationJob::Stopped) {
181 runningInstanceCount--;
182 if (runningInstanceCount == 0)
183 emit q->runningChanged();
189 QParallelAnimationGroupJob::updateState(newState, oldState);
190 if (newState == Stopped && (duration() == -1
191 || (direction() == QAbstractAnimationJob::Forward && currentLoopTime() == duration())
192 || (direction() == QAbstractAnimationJob::Backward && currentLoopTime() == 0)))
202 anim->addAnimationChangeListener(
this, QAbstractAnimationJob::StateChange);
231 return m_anim && m_anim->state() == QAbstractAnimationJob::Running;
234QQuickTransition::QQuickTransition(QObject *parent)
235 : QObject(*(
new QQuickTransitionPrivate), parent)
239QQuickTransition::~QQuickTransition()
243void QQuickTransition::setReversed(
bool r)
245 Q_D(QQuickTransition);
249QQuickTransitionInstance *QQuickTransition::prepare(QQuickStateOperation::ActionList &actions,
250 QList<QQmlProperty> &after,
251 QQuickTransitionManager *manager,
252 QObject *defaultTarget)
254 Q_D(QQuickTransition);
256 qmlExecuteDeferred(
this);
258 ParallelAnimationWrapper *group =
new ParallelAnimationWrapper();
259 group->manager = manager;
261 QQuickAbstractAnimation::TransitionDirection direction = d->reversed ? QQuickAbstractAnimation::Backward : QQuickAbstractAnimation::Forward;
262 int start = d->reversed ? d->animations.size() - 1 : 0;
263 int end = d->reversed ? -1 : d->animations.size();
265 for (
int i = start; i != end; d->reversed ? --i : ++i) {
266 QQuickAbstractAnimation *anim = d->animations.at(i);
270 QAbstractAnimationJob *job = anim->transition(actions, after, direction, defaultTarget);
274 if (anim->threadingModel() == QQuickAbstractAnimation::RenderThread)
275 job =
new QQuickAnimatorProxyJob(job, anim);
277 d->reversed ? group->prependAnimation(job) : group->appendAnimation(job);
280 group->setDirection(d->reversed ? QAbstractAnimationJob::Backward : QAbstractAnimationJob::Forward);
282 QQuickTransitionInstance *wrapper =
new QQuickTransitionInstance(
this, group);
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312QString QQuickTransition::fromState()
const
314 Q_D(
const QQuickTransition);
318void QQuickTransition::setFromState(
const QString &f)
320 Q_D(QQuickTransition);
321 if (f == d->fromState)
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353bool QQuickTransition::reversible()
const
355 Q_D(
const QQuickTransition);
356 return d->reversible;
359void QQuickTransition::setReversible(
bool r)
361 Q_D(QQuickTransition);
362 if (r == d->reversible)
366 emit reversibleChanged();
369QString QQuickTransition::toState()
const
371 Q_D(
const QQuickTransition);
375void QQuickTransition::setToState(
const QString &t)
377 Q_D(QQuickTransition);
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
416bool QQuickTransition::enabled()
const
418 Q_D(
const QQuickTransition);
422void QQuickTransition::setEnabled(
bool enabled)
424 Q_D(QQuickTransition);
425 if (d->enabled == enabled)
427 d->enabled = enabled;
428 emit enabledChanged();
432
433
434
435
436
437
438
439
440bool QQuickTransition::running()
const
442 Q_D(
const QQuickTransition);
443 return d->runningInstanceCount;
448
449
450
451
452
453
454
455
456
457
458
459
460QQmlListProperty<QQuickAbstractAnimation> QQuickTransition::animations()
462 Q_D(QQuickTransition);
463 return QQmlListProperty<QQuickAbstractAnimation>(
464 this, &d->animations,
465 QQuickTransitionPrivate::append_animation,
466 QQuickTransitionPrivate::animation_count,
467 QQuickTransitionPrivate::animation_at,
468 QQuickTransitionPrivate::clear_animations,
469 QQuickTransitionPrivate::replace_animation,
470 QQuickTransitionPrivate::removeLast_animation);
477#include "moc_qquicktransition_p.cpp"
\qmltype Transition \nativetype QQuickTransition \inqmlmodule QtQuick
void updateState(QAbstractAnimationJob::State newState, QAbstractAnimationJob::State oldState) override
ParallelAnimationWrapper()
QQuickTransitionManager * manager
void removeStateChangeListener()
QQuickTransitionInstance(QQuickTransition *transition, QAbstractAnimationJob *anim)
~QQuickTransitionInstance()
void animationStateChanged(QAbstractAnimationJob *, QAbstractAnimationJob::State, QAbstractAnimationJob::State) override
static void replace_animation(QQmlListProperty< QQuickAbstractAnimation > *list, qsizetype pos, QQuickAbstractAnimation *a)
QAbstractAnimationJob::State state
static qsizetype animation_count(QQmlListProperty< QQuickAbstractAnimation > *list)
QList< QPointer< QQuickAbstractAnimation > > animations
quint32 runningInstanceCount
static void clear_animations(QQmlListProperty< QQuickAbstractAnimation > *list)
static void append_animation(QQmlListProperty< QQuickAbstractAnimation > *list, QQuickAbstractAnimation *a)
static void removeLast_animation(QQmlListProperty< QQuickAbstractAnimation > *list)
static QQuickAbstractAnimation * animation_at(QQmlListProperty< QQuickAbstractAnimation > *list, qsizetype pos)