summaryrefslogtreecommitdiffstats
path: root/src/declarative/graphicsitems/qdeclarativeflipable.cpp
diff options
context:
space:
mode:
authorAlan Alpert <alan.alpert@nokia.com>2010-04-21 07:14:07 (GMT)
committerAlan Alpert <alan.alpert@nokia.com>2010-04-21 07:14:07 (GMT)
commitd420eb68b9a306f0fccf3000a8af31aa00cb0cd9 (patch)
tree44c958741cd0189acd5ac875d57d28165f051aae /src/declarative/graphicsitems/qdeclarativeflipable.cpp
parent202af3021362d3c8066bc479a95e7aad889bd928 (diff)
parentb72f9dacb352aa4be888c5f7f1a482dbcba1f456 (diff)
downloadQt-d420eb68b9a306f0fccf3000a8af31aa00cb0cd9.zip
Qt-d420eb68b9a306f0fccf3000a8af31aa00cb0cd9.tar.gz
Qt-d420eb68b9a306f0fccf3000a8af31aa00cb0cd9.tar.bz2
Merge branch '4.7' of git@scm.dev.nokia.troll.no:qt/qt-qml into 4.7
Diffstat (limited to 'src/declarative/graphicsitems/qdeclarativeflipable.cpp')
-rw-r--r--src/declarative/graphicsitems/qdeclarativeflipable.cpp49
1 files changed, 37 insertions, 12 deletions
diff --git a/src/declarative/graphicsitems/qdeclarativeflipable.cpp b/src/declarative/graphicsitems/qdeclarativeflipable.cpp
index 98e34a9..57045f1 100644
--- a/src/declarative/graphicsitems/qdeclarativeflipable.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeflipable.cpp
@@ -57,10 +57,14 @@ public:
QDeclarativeFlipablePrivate() : current(QDeclarativeFlipable::Front), front(0), back(0) {}
void updateSceneTransformFromParent();
+ void setBackTransform();
QDeclarativeFlipable::Side current;
QDeclarativeGuard<QGraphicsObject> front;
QDeclarativeGuard<QGraphicsObject> back;
+
+ bool wantBackXFlipped;
+ bool wantBackYFlipped;
};
/*!
@@ -148,6 +152,17 @@ void QDeclarativeFlipable::setBack(QGraphicsObject *back)
d->back->setParentItem(this);
if (Front == d->current)
d->back->setOpacity(0.);
+ connect(back, SIGNAL(widthChanged()),
+ this, SLOT(retransformBack()));
+ connect(back, SIGNAL(heightChanged()),
+ this, SLOT(retransformBack()));
+}
+
+void QDeclarativeFlipable::retransformBack()
+{
+ Q_D(QDeclarativeFlipable);
+ if (d->current == QDeclarativeFlipable::Back && d->back)
+ d->setBackTransform();
}
/*!
@@ -184,26 +199,20 @@ void QDeclarativeFlipablePrivate::updateSceneTransformFromParent()
qreal cross = (p1.x() - p2.x()) * (p3.y() - p2.y()) -
(p1.y() - p2.y()) * (p3.x() - p2.x());
+ wantBackYFlipped = p1.x() >= p2.x();
+ wantBackXFlipped = p2.y() >= p3.y();
+
QDeclarativeFlipable::Side newSide;
if (cross > 0) {
- newSide = QDeclarativeFlipable::Back;
+ newSide = QDeclarativeFlipable::Back;
} else {
newSide = QDeclarativeFlipable::Front;
}
if (newSide != current) {
current = newSide;
- if (current == QDeclarativeFlipable::Back && back) {
- QTransform mat;
- QGraphicsItemPrivate *dBack = QGraphicsItemPrivate::get(back);
- mat.translate(dBack->width()/2,dBack->height()/2);
- if (dBack->width() && p1.x() >= p2.x())
- mat.rotate(180, Qt::YAxis);
- if (dBack->height() && p2.y() >= p3.y())
- mat.rotate(180, Qt::XAxis);
- mat.translate(-dBack->width()/2,-dBack->height()/2);
- back->setTransform(mat);
- }
+ if (current == QDeclarativeFlipable::Back && back)
+ setBackTransform();
if (front)
front->setOpacity((current==QDeclarativeFlipable::Front)?1.:0.);
if (back)
@@ -212,4 +221,20 @@ void QDeclarativeFlipablePrivate::updateSceneTransformFromParent()
}
}
+/* Depends on the width/height of the back item, and so needs reevaulating
+ if those change.
+*/
+void QDeclarativeFlipablePrivate::setBackTransform()
+{
+ QTransform mat;
+ QGraphicsItemPrivate *dBack = QGraphicsItemPrivate::get(back);
+ mat.translate(dBack->width()/2,dBack->height()/2);
+ if (dBack->width() && wantBackYFlipped)
+ mat.rotate(180, Qt::YAxis);
+ if (dBack->height() && wantBackXFlipped)
+ mat.rotate(180, Qt::XAxis);
+ mat.translate(-dBack->width()/2,-dBack->height()/2);
+ back->setTransform(mat);
+}
+
QT_END_NAMESPACE