141void QQuickFlipable::setBack(QQuickItem *back)
145 qmlWarning(
this) << tr(
"back is a write-once property");
151 d->back->setParentItem(
this);
153 d->backTransform =
new QQuickLocalTransform(d->back);
154 d->backTransform->prependToItem(d->back);
156 if (Front == d->current) {
157 d->back->setOpacity(0.);
158 d->back->setEnabled(
false);
161 connect(back, SIGNAL(widthChanged()),
162 this, SLOT(retransformBack()));
163 connect(back, SIGNAL(heightChanged()),
164 this, SLOT(retransformBack()));
230 QMatrix4x4 sceneTransform;
232 const qreal tx = x.value();
233 const qreal ty = y.value();
234 if (!qFuzzyIsNull(tx) || !qFuzzyIsNull(ty))
235 sceneTransform.translate(tx, ty);
237 for (
const auto *transform : std::as_const(transforms)) {
238 if (
const auto *rot = qobject_cast<
const QQuickRotation *>(transform)) {
240 const auto angle = rot->angle();
241 const auto axis = rot->axis();
242 if (!(qFuzzyIsNull(angle) || axis.isNull())) {
243 sceneTransform.translate(rot->origin());
244 sceneTransform.rotate(angle, axis.x(), axis.y(), axis.z());
245 sceneTransform.translate(-rot->origin());
248 transform->applyTo(&sceneTransform);
252 const bool hasRotation = !qFuzzyIsNull(rotation());
253 const bool hasScale = !qFuzzyCompare(scale(), 1);
254 if (hasScale || hasRotation) {
255 QPointF tp = computeTransformOrigin();
256 sceneTransform.translate(tp.x(), tp.y());
258 sceneTransform.scale(scale(), scale());
260 sceneTransform.rotate(rotation(), 0, 0, 1);
261 sceneTransform.translate(-tp.x(), -tp.y());
264 const QVector3D origin(sceneTransform.map(QPointF(0, 0)));
265 const QVector3D right = QVector3D(sceneTransform.map(QPointF(1, 0))) - origin;
266 const QVector3D top = QVector3D(sceneTransform.map(QPointF(0, 1))) - origin;
271 const QQuickFlipable::Side newSide =
272 QVector3D::crossProduct(top, right).z() > 0 ? QQuickFlipable::Back : QQuickFlipable::Front;
274 if (newSide != current) {
276 if (current == QQuickFlipable::Back && back)
279 front->setOpacity((current==QQuickFlipable::Front)?1.:0.);
280 front->setEnabled((current==QQuickFlipable::Front)?
true:
false);
283 back->setOpacity((current==QQuickFlipable::Back)?1.:0.);
284 back->setEnabled((current==QQuickFlipable::Back)?
true:
false);
286 emit q->sideChanged();
296 mat.translate(back->width()/2,back->height()/2);
297 if (back->width() && wantBackYFlipped)
298 mat.rotate(180, Qt::YAxis);
299 if (back->height() && wantBackXFlipped)
300 mat.rotate(180, Qt::XAxis);
301 mat.translate(-back->width()/2,-back->height()/2);
304 backTransform->setTransform(mat);