aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/util/qdeclarativetransitionmanager.cpp
diff options
context:
space:
mode:
authorMichael Brasser <michael.brasser@nokia.com>2012-02-03 12:26:37 +1000
committerQt by Nokia <qt-info@nokia.com>2012-02-07 05:32:47 +0100
commitce3dee765c858a0b573d468ef8fee6b838e576d1 (patch)
treeb7026a061b0b58bac6af30eaab6e610c5ebeb504 /src/quick/util/qdeclarativetransitionmanager.cpp
parent0ca9d3f0f720e1933379ef40bc5c29253e21cba0 (diff)
Add and use new animation backend.
The new backend improves performance, and allows us to create multiple running animation jobs from a single Transition. It is based off of the existing Qt animation framework. Change-Id: Id1d0162f6e5c65bf31267f3f9f2042c354375d57 Reviewed-by: Yunqiao Yin <charles.yin@nokia.com>
Diffstat (limited to 'src/quick/util/qdeclarativetransitionmanager.cpp')
-rw-r--r--src/quick/util/qdeclarativetransitionmanager.cpp31
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];