Make transform and opacity animators work when layer.enabled: true
authorGunnar Sletta <gunnar.sletta@digia.com>
Thu, 3 Oct 2013 07:00:08 +0000 (09:00 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Thu, 3 Oct 2013 15:48:34 +0000 (17:48 +0200)
Change-Id: I6d9ece93a75782d524c211fc81a43f4311a38571
Reviewed-by: Michael Brasser <michael.brasser@live.com>
src/quick/items/qquickitem_p.h
src/quick/util/qquickanimatorjob.cpp

index b80bb36..b1e63e6 100644 (file)
@@ -209,6 +209,9 @@ Q_SIGNALS:
     void sourceRectChanged(const QRectF &sourceRect);
 
 private:
+    friend class QQuickTransformAnimatorJob;
+    friend class QQuickOpacityAnimatorJob;
+
     void activate();
     void deactivate();
     void activateEffect();
index 5ab54ab..980bbf3 100644 (file)
@@ -314,6 +314,12 @@ void QQuickTransformAnimatorJob::Helper::sync()
             | QQuickItemPrivate::TransformOrigin;
 
     QQuickItemPrivate *d = QQuickItemPrivate::get(item);
+    if (d->extra.isAllocated()
+            && d->extra->layer
+            && d->extra->layer->enabled()) {
+        d = QQuickItemPrivate::get(d->extra->layer->m_effectSource);
+    }
+
     quint32 dirty = mask & d->dirtyAttributes;
 
     if (!wasSynced) {
@@ -404,6 +410,12 @@ void QQuickOpacityAnimatorJob::initialize(QQuickAnimatorController *controller)
 {
     QQuickAnimatorJob::initialize(controller);
     QQuickItemPrivate *d = QQuickItemPrivate::get(m_target);
+    if (d->extra.isAllocated()
+            && d->extra->layer
+            && d->extra->layer->enabled()) {
+        d = QQuickItemPrivate::get(d->extra->layer->m_effectSource);
+    }
+
     m_opacityNode = d->opacityNode();
     if (!m_opacityNode) {
         m_opacityNode = new QSGOpacityNode();