diff options
Diffstat (limited to 'src/quick/util/qdeclarativetransitionmanager.cpp')
-rw-r--r-- | src/quick/util/qdeclarativetransitionmanager.cpp | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/src/quick/util/qdeclarativetransitionmanager.cpp b/src/quick/util/qdeclarativetransitionmanager.cpp index 5542548937..a2de7dbae6 100644 --- a/src/quick/util/qdeclarativetransitionmanager.cpp +++ b/src/quick/util/qdeclarativetransitionmanager.cpp @@ -43,7 +43,6 @@ #include "qdeclarativetransition_p.h" #include "qdeclarativestate_p_p.h" -#include "qdeclarativestate_p.h" #include <private/qdeclarativebinding_p.h> #include <private/qdeclarativeglobal_p.h> @@ -59,12 +58,12 @@ class QDeclarativeTransitionManagerPrivate { public: QDeclarativeTransitionManagerPrivate() - : state(0) {} + : state(0), transitionInstance(0) {} void applyBindings(); typedef QList<QDeclarativeSimpleAction> SimpleActionList; QDeclarativeState *state; - QDeclarativeGuard<QDeclarativeTransition> transition; + QDeclarativeTransitionInstance *transitionInstance; QDeclarativeStateOperation::ActionList bindingsList; SimpleActionList completeList; }; @@ -81,9 +80,15 @@ void QDeclarativeTransitionManager::setState(QDeclarativeState *s) QDeclarativeTransitionManager::~QDeclarativeTransitionManager() { + delete d->transitionInstance; delete d; d = 0; } +bool QDeclarativeTransitionManager::isRunning() const +{ + return d->transitionInstance && d->transitionInstance->isRunning(); +} + void QDeclarativeTransitionManager::complete() { d->applyBindings(); @@ -97,6 +102,8 @@ void QDeclarativeTransitionManager::complete() if (d->state) static_cast<QDeclarativeStatePrivate*>(QObjectPrivate::get(d->state))->complete(); + + finished(); } void QDeclarativeTransitionManagerPrivate::applyBindings() @@ -116,6 +123,10 @@ void QDeclarativeTransitionManagerPrivate::applyBindings() bindingsList.clear(); } +void QDeclarativeTransitionManager::finished() +{ +} + void QDeclarativeTransitionManager::transition(const QList<QDeclarativeAction> &list, QDeclarativeTransition *transition) { @@ -196,8 +207,11 @@ void QDeclarativeTransitionManager::transition(const QList<QDeclarativeAction> & if (transition) { QList<QDeclarativeProperty> touched; - d->transition = transition; - d->transition->prepare(applyList, touched, this); + QDeclarativeTransitionInstance *oldInstance = d->transitionInstance; + d->transitionInstance = transition->prepare(applyList, touched, this); + d->transitionInstance->start(); + if (oldInstance && oldInstance != d->transitionInstance) + delete oldInstance; // Modify the action list to remove actions handled in the transition for (int ii = 0; ii < applyList.count(); ++ii) { @@ -257,11 +271,8 @@ void QDeclarativeTransitionManager::transition(const QList<QDeclarativeAction> & void QDeclarativeTransitionManager::cancel() { - if (d->transition) { - // ### this could potentially trigger a complete in rare circumstances - d->transition->stop(); - d->transition = 0; - } + if (d->transitionInstance && d->transitionInstance->isRunning()) + d->transitionInstance->stop(); for(int i = 0; i < d->bindingsList.count(); ++i) { QDeclarativeAction action = d->bindingsList[i]; |