142void QQuickFlipable::setBack(QQuickItem *back)
146 qmlWarning(
this) << tr(
"back is a write-once property");
152 d->back->setParentItem(
this);
154 d->backTransform =
new QQuickLocalTransform(d->back);
155 d->backTransform->prependToItem(d->back);
157 if (Front == d->current) {
158 d->back->setOpacity(0.);
159 d->back->setEnabled(
false);
162 connect(back, SIGNAL(widthChanged()),
163 this, SLOT(retransformBack()));
164 connect(back, SIGNAL(heightChanged()),
165 this, SLOT(retransformBack()));
231 QMatrix4x4 sceneTransform;
233 const qreal tx = x.value();
234 const qreal ty = y.value();
235 if (!qFuzzyIsNull(tx) || !qFuzzyIsNull(ty))
236 sceneTransform.translate(tx, ty);
238 for (
const auto *transform : std::as_const(transforms)) {
239 if (
const auto *rot = qobject_cast<
const QQuickRotation *>(transform)) {
241 const auto angle = rot->angle();
242 const auto axis = rot->axis();
243 if (!(qFuzzyIsNull(angle) || axis.isNull())) {
244 sceneTransform.translate(rot->origin());
245 sceneTransform.rotate(angle, axis.x(), axis.y(), axis.z());
246 sceneTransform.translate(-rot->origin());
249 transform->applyTo(&sceneTransform);
253 const bool hasRotation = !qFuzzyIsNull(rotation());
254 const bool hasScale = !qFuzzyCompare(scale(), 1);
255 if (hasScale || hasRotation) {
256 QPointF tp = computeTransformOrigin();
257 sceneTransform.translate(tp.x(), tp.y());
259 sceneTransform.scale(scale(), scale());
261 sceneTransform.rotate(rotation(), 0, 0, 1);
262 sceneTransform.translate(-tp.x(), -tp.y());
265 const QVector3D origin(sceneTransform.map(QPointF(0, 0)));
266 const QVector3D right = QVector3D(sceneTransform.map(QPointF(1, 0))) - origin;
267 const QVector3D top = QVector3D(sceneTransform.map(QPointF(0, 1))) - origin;
272 const QQuickFlipable::Side newSide =
273 QVector3D::crossProduct(top, right).z() > 0 ? QQuickFlipable::Back : QQuickFlipable::Front;
275 if (newSide != current) {
277 if (current == QQuickFlipable::Back && back)
280 front->setOpacity((current==QQuickFlipable::Front)?1.:0.);
281 front->setEnabled((current==QQuickFlipable::Front)?
true:
false);
284 back->setOpacity((current==QQuickFlipable::Back)?1.:0.);
285 back->setEnabled((current==QQuickFlipable::Back)?
true:
false);
287 emit q->sideChanged();
297 mat.translate(back->width()/2,back->height()/2);
298 if (back->width() && wantBackYFlipped)
299 mat.rotate(180, Qt::YAxis);
300 if (back->height() && wantBackXFlipped)
301 mat.rotate(180, Qt::XAxis);
302 mat.translate(-back->width()/2,-back->height()/2);
305 backTransform->setTransform(mat);