aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBea Lam <bea.lam@nokia.com>2012-02-03 13:18:05 +1000
committerQt by Nokia <qt-info@nokia.com>2012-02-08 03:27:31 +0100
commitf5a43c09dbbf0caece4976303250a7582f6037ec (patch)
tree9cd519c671c792c708b186a92d18681deb31405e /src
parent74ff1216a449d6098975b3c9baca7abb1399211b (diff)
Accept default targets for transitions
QDeclarativeAbstractAnimation::transition(), QDeclarativeTransition::prepare() and QDeclarativeTransitionManager now accept a QObject* to specify a default target for a transition. For view transitions, this will allow the view to pass a view item as the default target for a view transition so that the Transition does not have to explicitly set the target for every animation. Change-Id: I2c8d5535283335e139d98ef56f399f338627fb3e Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/quick/items/qquickanimation.cpp28
-rw-r--r--src/quick/items/qquickanimation_p.h9
-rw-r--r--src/quick/util/qdeclarativeanimation.cpp39
-rw-r--r--src/quick/util/qdeclarativeanimation_p.h24
-rw-r--r--src/quick/util/qdeclarativetransition.cpp5
-rw-r--r--src/quick/util/qdeclarativetransition_p.h3
-rw-r--r--src/quick/util/qdeclarativetransitionmanager.cpp5
-rw-r--r--src/quick/util/qdeclarativetransitionmanager_p_p.h2
8 files changed, 76 insertions, 39 deletions
diff --git a/src/quick/items/qquickanimation.cpp b/src/quick/items/qquickanimation.cpp
index baf1c8dc45..4962fc21ce 100644
--- a/src/quick/items/qquickanimation.cpp
+++ b/src/quick/items/qquickanimation.cpp
@@ -206,7 +206,8 @@ QPointF QQuickParentAnimationPrivate::computeTransformOrigin(QQuickItem::Transfo
QAbstractAnimationJob* QQuickParentAnimation::transition(QDeclarativeStateActions &actions,
QDeclarativeProperties &modified,
- TransitionDirection direction)
+ TransitionDirection direction,
+ QObject *defaultTarget)
{
Q_D(QQuickParentAnimation);
@@ -387,7 +388,7 @@ QAbstractAnimationJob* QQuickParentAnimation::transition(QDeclarativeStateAction
for (int ii = 0; ii < d->animations.count(); ++ii) {
if (valid)
d->animations.at(ii)->setDefaultTarget(d->defaultProperty);
- anim = d->animations.at(ii)->transition(actions, modified, direction);
+ anim = d->animations.at(ii)->transition(actions, modified, direction, defaultTarget);
ag->appendAnimation(anim);
}
@@ -521,9 +522,11 @@ void QQuickAnchorAnimation::setEasing(const QEasingCurve &e)
QAbstractAnimationJob* QQuickAnchorAnimation::transition(QDeclarativeStateActions &actions,
QDeclarativeProperties &modified,
- TransitionDirection direction)
+ TransitionDirection direction,
+ QObject *defaultTarget)
{
Q_UNUSED(modified);
+ Q_UNUSED(defaultTarget);
Q_D(QQuickAnchorAnimation);
QDeclarativeAnimationPropertyUpdater *data = new QDeclarativeAnimationPropertyUpdater;
data->interpolatorType = QMetaType::QReal;
@@ -823,15 +826,18 @@ void QQuickPathAnimation::setEndRotation(qreal rotation)
QAbstractAnimationJob* QQuickPathAnimation::transition(QDeclarativeStateActions &actions,
QDeclarativeProperties &modified,
- TransitionDirection direction)
+ TransitionDirection direction,
+ QObject *defaultTarget)
{
Q_D(QQuickPathAnimation);
+ QQuickItem *target = d->target ? d->target : qobject_cast<QQuickItem*>(defaultTarget);
+
QQuickPathAnimationUpdater prevData;
bool havePrevData = false;
- if (d->activeAnimations.contains(d->target)) {
+ if (d->activeAnimations.contains(target)) {
havePrevData = true;
- prevData = *d->activeAnimations[d->target]->pathUpdater();
+ prevData = *d->activeAnimations[target]->pathUpdater();
}
QList<QQuickItem*> keys = d->activeAnimations.keys();
@@ -846,7 +852,7 @@ QAbstractAnimationJob* QQuickPathAnimation::transition(QDeclarativeStateActions
QQuickPathAnimationUpdater *data = new QQuickPathAnimationUpdater();
QQuickPathAnimationAnimator *pa = new QQuickPathAnimationAnimator(d);
- d->activeAnimations[d->target] = pa;
+ d->activeAnimations[target] = pa;
data->orientation = d->orientation;
data->anchorPoint = d->anchorPoint;
@@ -863,21 +869,21 @@ QAbstractAnimationJob* QQuickPathAnimation::transition(QDeclarativeStateActions
QDeclarativeAction &action = actions[i];
if (action.event)
continue;
- if (action.specifiedObject == d->target && action.property.name() == QLatin1String("x")) {
+ if (action.specifiedObject == target && action.property.name() == QLatin1String("x")) {
data->toX = action.toValue.toReal();
modified << action.property;
action.fromValue = action.toValue;
}
- if (action.specifiedObject == d->target && action.property.name() == QLatin1String("y")) {
+ if (action.specifiedObject == target && action.property.name() == QLatin1String("y")) {
data->toY = action.toValue.toReal();
modified << action.property;
action.fromValue = action.toValue;
}
}
- if (d->target && d->path &&
+ if (target && d->path &&
(modified.count() > origModifiedSize || data->toDefined)) {
- data->target = d->target;
+ data->target = target;
data->path = d->path;
data->path->invalidateSequentialHistory();
diff --git a/src/quick/items/qquickanimation_p.h b/src/quick/items/qquickanimation_p.h
index 924fe5d35f..38eba6dc4f 100644
--- a/src/quick/items/qquickanimation_p.h
+++ b/src/quick/items/qquickanimation_p.h
@@ -82,7 +82,8 @@ Q_SIGNALS:
protected:
virtual QAbstractAnimationJob* transition(QDeclarativeStateActions &actions,
QDeclarativeProperties &modified,
- TransitionDirection direction);
+ TransitionDirection direction,
+ QObject *defaultTarget = 0);
};
class QQuickAnchorAnimationPrivate;
@@ -113,7 +114,8 @@ Q_SIGNALS:
protected:
virtual QAbstractAnimationJob* transition(QDeclarativeStateActions &actions,
QDeclarativeProperties &modified,
- TransitionDirection direction);
+ TransitionDirection direction,
+ QObject *defaultTarget = 0);
};
class QQuickItem;
@@ -177,7 +179,8 @@ public:
protected:
virtual QAbstractAnimationJob* transition(QDeclarativeStateActions &actions,
QDeclarativeProperties &modified,
- TransitionDirection direction);
+ TransitionDirection direction,
+ QObject *defaultTarget = 0);
Q_SIGNALS:
void durationChanged(int);
void easingChanged(const QEasingCurve &);
diff --git a/src/quick/util/qdeclarativeanimation.cpp b/src/quick/util/qdeclarativeanimation.cpp
index ad86c56836..e70c3ea8c7 100644
--- a/src/quick/util/qdeclarativeanimation.cpp
+++ b/src/quick/util/qdeclarativeanimation.cpp
@@ -582,11 +582,13 @@ QAbstractAnimationJob* QDeclarativeAbstractAnimation::initInstance(QAbstractAnim
QAbstractAnimationJob* QDeclarativeAbstractAnimation::transition(QDeclarativeStateActions &actions,
QDeclarativeProperties &modified,
- TransitionDirection direction)
+ TransitionDirection direction,
+ QObject *defaultTarget)
{
Q_UNUSED(actions);
Q_UNUSED(modified);
Q_UNUSED(direction);
+ Q_UNUSED(defaultTarget);
return 0;
}
@@ -658,12 +660,14 @@ void QDeclarativePauseAnimation::setDuration(int duration)
QAbstractAnimationJob* QDeclarativePauseAnimation::transition(QDeclarativeStateActions &actions,
QDeclarativeProperties &modified,
- TransitionDirection direction)
+ TransitionDirection direction,
+ QObject *defaultTarget)
{
Q_D(QDeclarativePauseAnimation);
Q_UNUSED(actions);
Q_UNUSED(modified);
Q_UNUSED(direction);
+ Q_UNUSED(defaultTarget);
return initInstance(new QPauseAnimationJob(d->duration));
}
@@ -913,10 +917,12 @@ void QDeclarativeScriptActionPrivate::execute()
QAbstractAnimationJob* QDeclarativeScriptAction::transition(QDeclarativeStateActions &actions,
QDeclarativeProperties &modified,
- TransitionDirection direction)
+ TransitionDirection direction,
+ QObject *defaultTarget)
{
Q_D(QDeclarativeScriptAction);
Q_UNUSED(modified);
+ Q_UNUSED(defaultTarget);
d->hasRunScriptScript = false;
d->reversing = (direction == Backward);
@@ -1087,7 +1093,8 @@ void QDeclarativePropertyAction::setValue(const QVariant &v)
QAbstractAnimationJob* QDeclarativePropertyAction::transition(QDeclarativeStateActions &actions,
QDeclarativeProperties &modified,
- TransitionDirection direction)
+ TransitionDirection direction,
+ QObject *defaultTarget)
{
Q_D(QDeclarativePropertyAction);
Q_UNUSED(direction);
@@ -1121,6 +1128,9 @@ QAbstractAnimationJob* QDeclarativePropertyAction::transition(QDeclarativeStateA
targets << d->defaultProperty.object();
}
+ if (defaultTarget && targets.isEmpty())
+ targets << defaultTarget;
+
QDeclarativeSetPropertyAnimationAction *data = new QDeclarativeSetPropertyAnimationAction;
bool hasExplicit = false;
@@ -1652,7 +1662,8 @@ QDeclarativeSequentialAnimation::~QDeclarativeSequentialAnimation()
QAbstractAnimationJob* QDeclarativeSequentialAnimation::transition(QDeclarativeStateActions &actions,
QDeclarativeProperties &modified,
- TransitionDirection direction)
+ TransitionDirection direction,
+ QObject *defaultTarget)
{
Q_D(QDeclarativeAnimationGroup);
@@ -1670,7 +1681,7 @@ QAbstractAnimationJob* QDeclarativeSequentialAnimation::transition(QDeclarativeS
for (int ii = from; ii < d->animations.count() && ii >= 0; ii += inc) {
if (valid)
d->animations.at(ii)->setDefaultTarget(d->defaultProperty);
- anim = d->animations.at(ii)->transition(actions, modified, direction);
+ anim = d->animations.at(ii)->transition(actions, modified, direction, defaultTarget);
inc == -1 ? ag->prependAnimation(anim) : ag->appendAnimation(anim);
}
@@ -1718,7 +1729,8 @@ QDeclarativeParallelAnimation::~QDeclarativeParallelAnimation()
QAbstractAnimationJob* QDeclarativeParallelAnimation::transition(QDeclarativeStateActions &actions,
QDeclarativeProperties &modified,
- TransitionDirection direction)
+ TransitionDirection direction,
+ QObject *defaultTarget)
{
Q_D(QDeclarativeAnimationGroup);
QParallelAnimationGroupJob *ag = new QParallelAnimationGroupJob;
@@ -1728,7 +1740,7 @@ QAbstractAnimationJob* QDeclarativeParallelAnimation::transition(QDeclarativeSta
for (int ii = 0; ii < d->animations.count(); ++ii) {
if (valid)
d->animations.at(ii)->setDefaultTarget(d->defaultProperty);
- anim = d->animations.at(ii)->transition(actions, modified, direction);
+ anim = d->animations.at(ii)->transition(actions, modified, direction, defaultTarget);
ag->appendAnimation(anim);
}
return initInstance(ag);
@@ -2391,7 +2403,8 @@ void QDeclarativeAnimationPropertyUpdater::setValue(qreal v)
}
QDeclarativeStateActions QDeclarativePropertyAnimation::createTransitionActions(QDeclarativeStateActions &actions,
- QDeclarativeProperties &modified)
+ QDeclarativeProperties &modified,
+ QObject *defaultTarget)
{
Q_D(QDeclarativePropertyAnimation);
QDeclarativeStateActions newActions;
@@ -2414,6 +2427,9 @@ QDeclarativeStateActions QDeclarativePropertyAnimation::createTransitionActions(
targets << d->defaultProperty.object();
}
+ if (defaultTarget && targets.isEmpty())
+ targets << defaultTarget;
+
if (props.isEmpty() && !d->defaultProperties.isEmpty()) {
props << d->defaultProperties.split(QLatin1Char(','));
}
@@ -2484,11 +2500,12 @@ QDeclarativeStateActions QDeclarativePropertyAnimation::createTransitionActions(
QAbstractAnimationJob* QDeclarativePropertyAnimation::transition(QDeclarativeStateActions &actions,
QDeclarativeProperties &modified,
- TransitionDirection direction)
+ TransitionDirection direction,
+ QObject *defaultTarget)
{
Q_D(QDeclarativePropertyAnimation);
- QDeclarativeStateActions dataActions = createTransitionActions(actions, modified);
+ QDeclarativeStateActions dataActions = createTransitionActions(actions, modified, defaultTarget);
QDeclarativeBulkValueAnimator *animator = new QDeclarativeBulkValueAnimator;
animator->setDuration(d->duration);
diff --git a/src/quick/util/qdeclarativeanimation_p.h b/src/quick/util/qdeclarativeanimation_p.h
index 8bd6d4fbf5..ec6a42861d 100644
--- a/src/quick/util/qdeclarativeanimation_p.h
+++ b/src/quick/util/qdeclarativeanimation_p.h
@@ -128,7 +128,8 @@ public:
enum TransitionDirection { Forward, Backward };
virtual QAbstractAnimationJob* transition(QDeclarativeStateActions &actions,
QDeclarativeProperties &modified,
- TransitionDirection direction);
+ TransitionDirection direction,
+ QObject *defaultTarget = 0);
QAbstractAnimationJob* qtAnimation();
private Q_SLOTS:
@@ -161,7 +162,8 @@ Q_SIGNALS:
protected:
QAbstractAnimationJob* transition(QDeclarativeStateActions &actions,
QDeclarativeProperties &modified,
- TransitionDirection direction);
+ TransitionDirection direction,
+ QObject *defaultTarget = 0);
};
class QDeclarativeScriptActionPrivate;
@@ -186,7 +188,8 @@ public:
protected:
virtual QAbstractAnimationJob* transition(QDeclarativeStateActions &actions,
QDeclarativeProperties &modified,
- TransitionDirection direction);
+ TransitionDirection direction,
+ QObject *defaultTarget = 0);
};
class QDeclarativePropertyActionPrivate;
@@ -230,7 +233,8 @@ Q_SIGNALS:
protected:
virtual QAbstractAnimationJob* transition(QDeclarativeStateActions &actions,
QDeclarativeProperties &modified,
- TransitionDirection direction);
+ TransitionDirection direction,
+ QObject *defaultTarget = 0);
};
class QDeclarativePropertyAnimationPrivate;
@@ -279,12 +283,14 @@ public:
protected:
QDeclarativeStateActions createTransitionActions(QDeclarativeStateActions &actions,
- QDeclarativeProperties &modified);
+ QDeclarativeProperties &modified,
+ QObject *defaultTarget = 0);
QDeclarativePropertyAnimation(QDeclarativePropertyAnimationPrivate &dd, QObject *parent);
virtual QAbstractAnimationJob* transition(QDeclarativeStateActions &actions,
QDeclarativeProperties &modified,
- TransitionDirection direction);
+ TransitionDirection direction,
+ QObject *defaultTarget = 0);
Q_SIGNALS:
void durationChanged(int);
void fromChanged(QVariant);
@@ -418,7 +424,8 @@ public:
protected:
virtual QAbstractAnimationJob* transition(QDeclarativeStateActions &actions,
QDeclarativeProperties &modified,
- TransitionDirection direction);
+ TransitionDirection direction,
+ QObject *defaultTarget = 0);
};
class Q_QUICK_PRIVATE_EXPORT QDeclarativeParallelAnimation : public QDeclarativeAnimationGroup
@@ -433,7 +440,8 @@ public:
protected:
virtual QAbstractAnimationJob* transition(QDeclarativeStateActions &actions,
QDeclarativeProperties &modified,
- TransitionDirection direction);
+ TransitionDirection direction,
+ QObject *defaultTarget = 0);
};
diff --git a/src/quick/util/qdeclarativetransition.cpp b/src/quick/util/qdeclarativetransition.cpp
index 2a05dd20d3..c52ce92ec6 100644
--- a/src/quick/util/qdeclarativetransition.cpp
+++ b/src/quick/util/qdeclarativetransition.cpp
@@ -217,7 +217,8 @@ void QDeclarativeTransition::setReversed(bool r)
QDeclarativeTransitionInstance *QDeclarativeTransition::prepare(QDeclarativeStateOperation::ActionList &actions,
QList<QDeclarativeProperty> &after,
- QDeclarativeTransitionManager *manager)
+ QDeclarativeTransitionManager *manager,
+ QObject *defaultTarget)
{
Q_D(QDeclarativeTransition);
@@ -232,7 +233,7 @@ QDeclarativeTransitionInstance *QDeclarativeTransition::prepare(QDeclarativeStat
QAbstractAnimationJob *anim = 0;
for (int i = start; i != end;) {
- anim = d->animations.at(i)->transition(actions, after, direction);
+ anim = d->animations.at(i)->transition(actions, after, direction, defaultTarget);
if (anim)
d->reversed ? group->prependAnimation(anim) : group->appendAnimation(anim);
d->reversed ? --i : ++i;
diff --git a/src/quick/util/qdeclarativetransition_p.h b/src/quick/util/qdeclarativetransition_p.h
index 64fd45b725..839a626014 100644
--- a/src/quick/util/qdeclarativetransition_p.h
+++ b/src/quick/util/qdeclarativetransition_p.h
@@ -106,7 +106,8 @@ public:
QDeclarativeTransitionInstance *prepare(QDeclarativeStateOperation::ActionList &actions,
QList<QDeclarativeProperty> &after,
- QDeclarativeTransitionManager *end);
+ QDeclarativeTransitionManager *end,
+ QObject *defaultTarget);
void setReversed(bool r);
diff --git a/src/quick/util/qdeclarativetransitionmanager.cpp b/src/quick/util/qdeclarativetransitionmanager.cpp
index a2de7dbae6..7b4e8f43b2 100644
--- a/src/quick/util/qdeclarativetransitionmanager.cpp
+++ b/src/quick/util/qdeclarativetransitionmanager.cpp
@@ -128,7 +128,8 @@ void QDeclarativeTransitionManager::finished()
}
void QDeclarativeTransitionManager::transition(const QList<QDeclarativeAction> &list,
- QDeclarativeTransition *transition)
+ QDeclarativeTransition *transition,
+ QObject *defaultTarget)
{
cancel();
@@ -208,7 +209,7 @@ void QDeclarativeTransitionManager::transition(const QList<QDeclarativeAction> &
if (transition) {
QList<QDeclarativeProperty> touched;
QDeclarativeTransitionInstance *oldInstance = d->transitionInstance;
- d->transitionInstance = transition->prepare(applyList, touched, this);
+ d->transitionInstance = transition->prepare(applyList, touched, this, defaultTarget);
d->transitionInstance->start();
if (oldInstance && oldInstance != d->transitionInstance)
delete oldInstance;
diff --git a/src/quick/util/qdeclarativetransitionmanager_p_p.h b/src/quick/util/qdeclarativetransitionmanager_p_p.h
index 4e5d1a9617..d548c05f3a 100644
--- a/src/quick/util/qdeclarativetransitionmanager_p_p.h
+++ b/src/quick/util/qdeclarativetransitionmanager_p_p.h
@@ -68,7 +68,7 @@ public:
bool isRunning() const;
- void transition(const QList<QDeclarativeAction> &, QDeclarativeTransition *transition);
+ void transition(const QList<QDeclarativeAction> &, QDeclarativeTransition *transition, QObject *defaultTarget = 0);
void cancel();