31 Q_Q(QQuickAnimationController);
32 Q_ASSERT(animationInstance && animationInstance == job);
35 animationInstance->removeAnimationChangeListener(
this, QAbstractAnimationJob::Completion | QAbstractAnimationJob::CurrentTime);
37 if (animationInstance->direction() == QAbstractAnimationJob::Forward && progress != 1) {
39 emit q->progressChanged();
40 }
else if (animationInstance->direction() == QAbstractAnimationJob::Backward && progress != 0) {
42 emit q->progressChanged();
49 Q_Q(QQuickAnimationController);
50 Q_ASSERT(animationInstance && animationInstance == job);
52 const qreal newProgress = currentTime * 1.0 / animationInstance->duration();
53 if (progress != newProgress) {
54 progress = newProgress;
55 emit q->progressChanged();
95void QQuickAnimationController::setProgress(qreal progress)
97 Q_D(QQuickAnimationController);
98 progress = qBound(qreal(0), progress, qreal(1));
100 if (progress != d->progress) {
101 d->progress = progress;
103 emit progressChanged();
123void QQuickAnimationController::setAnimation(QQuickAbstractAnimation *animation)
125 Q_D(QQuickAnimationController);
127 if (animation != d->animation) {
129 if (animation->userControlDisabled()) {
130 qmlWarning(
this) <<
"QQuickAnimationController::setAnimation: the animation is controlled by others, can't be used in AnimationController.";
133 animation->setDisableUserControl();
137 d->animation->setEnableUserControl();
139 d->animation = animation;
141 emit animationChanged();
151void QQuickAnimationController::reload()
153 Q_D(QQuickAnimationController);
158 d->animationInstance =
nullptr;
160 QQuickStateActions actions;
161 QQmlProperties properties;
162 QAbstractAnimationJob *oldInstance = d->animationInstance;
163 d->animationInstance = d->animation->transition(actions, properties, QQuickAbstractAnimation::Forward);
164 if (oldInstance && oldInstance != d->animationInstance)
166 if (d->animationInstance) {
167 d->animationInstance->setLoopCount(1);
168 d->animationInstance->setDisableUserControl();
169 d->animationInstance->start();
170 d->animationInstance->pause();
206void QQuickAnimationController::completeToBeginning()
208 Q_D(QQuickAnimationController);
209 if (!d->animationInstance)
212 if (d->progress == 0)
215 d->animationInstance->addAnimationChangeListener(d, QAbstractAnimationJob::Completion | QAbstractAnimationJob::CurrentTime);
216 d->animationInstance->setDirection(QAbstractAnimationJob::Backward);
219 d->animationInstance->setDisableUserControl();
220 d->animationInstance->setEnableUserControl();
221 d->animationInstance->start();
235void QQuickAnimationController::completeToEnd()
237 Q_D(QQuickAnimationController);
238 if (!d->animationInstance)
241 if (d->progress == 1)
244 d->animationInstance->addAnimationChangeListener(d, QAbstractAnimationJob::Completion | QAbstractAnimationJob::CurrentTime);
245 d->animationInstance->setDirection(QAbstractAnimationJob::Forward);
248 d->animationInstance->setDisableUserControl();
249 d->animationInstance->setEnableUserControl();
250 d->animationInstance->start();