diff options
Diffstat (limited to 'src/quick/handlers/qquickpinchhandler.cpp')
-rw-r--r-- | src/quick/handlers/qquickpinchhandler.cpp | 42 |
1 files changed, 20 insertions, 22 deletions
diff --git a/src/quick/handlers/qquickpinchhandler.cpp b/src/quick/handlers/qquickpinchhandler.cpp index 95ac0985f0..9ae2116d39 100644 --- a/src/quick/handlers/qquickpinchhandler.cpp +++ b/src/quick/handlers/qquickpinchhandler.cpp @@ -100,7 +100,7 @@ QQuickPinchHandler::QQuickPinchHandler(QQuickItem *parent) */ void QQuickPinchHandler::setMinimumScale(qreal minimumScale) { - if (m_minimumScale == minimumScale) + if (qFuzzyCompare(m_minimumScale, minimumScale)) return; m_minimumScale = minimumScale; @@ -115,7 +115,7 @@ void QQuickPinchHandler::setMinimumScale(qreal minimumScale) */ void QQuickPinchHandler::setMaximumScale(qreal maximumScale) { - if (m_maximumScale == maximumScale) + if (qFuzzyCompare(m_maximumScale, maximumScale)) return; m_maximumScale = maximumScale; @@ -130,7 +130,7 @@ void QQuickPinchHandler::setMaximumScale(qreal maximumScale) */ void QQuickPinchHandler::setMinimumRotation(qreal minimumRotation) { - if (m_minimumRotation == minimumRotation) + if (qFuzzyCompare(m_minimumRotation, minimumRotation)) return; m_minimumRotation = minimumRotation; @@ -145,7 +145,7 @@ void QQuickPinchHandler::setMinimumRotation(qreal minimumRotation) */ void QQuickPinchHandler::setMaximumRotation(qreal maximumRotation) { - if (m_maximumRotation == maximumRotation) + if (qFuzzyCompare(m_maximumRotation, maximumRotation)) return; m_maximumRotation = maximumRotation; @@ -161,7 +161,7 @@ void QQuickPinchHandler::warnAboutMinMaxDeprecated() const void QQuickPinchHandler::setMinimumX(qreal minX) { warnAboutMinMaxDeprecated(); - if (m_minimumX == minX) + if (qFuzzyCompare(m_minimumX, minX)) return; m_minimumX = minX; emit minimumXChanged(); @@ -170,7 +170,7 @@ void QQuickPinchHandler::setMinimumX(qreal minX) void QQuickPinchHandler::setMaximumX(qreal maxX) { warnAboutMinMaxDeprecated(); - if (m_maximumX == maxX) + if (qFuzzyCompare(m_maximumX, maxX)) return; m_maximumX = maxX; emit maximumXChanged(); @@ -179,7 +179,7 @@ void QQuickPinchHandler::setMaximumX(qreal maxX) void QQuickPinchHandler::setMinimumY(qreal minY) { warnAboutMinMaxDeprecated(); - if (m_minimumY == minY) + if (qFuzzyCompare(m_minimumY, minY)) return; m_minimumY = minY; emit minimumYChanged(); @@ -188,7 +188,7 @@ void QQuickPinchHandler::setMinimumY(qreal minY) void QQuickPinchHandler::setMaximumY(qreal maxY) { warnAboutMinMaxDeprecated(); - if (m_maximumY == maxY) + if (qFuzzyCompare(m_maximumY, maxY)) return; m_maximumY = maxY; emit maximumYChanged(); @@ -276,10 +276,10 @@ void QQuickPinchHandler::onActiveChanged() m_startScale = t->scale(); // TODO incompatible with independent x/y scaling m_startRotation = t->rotation(); QVector3D xformOrigin(t->transformOriginPoint()); - m_startMatrix.translate(t->x(), t->y()); + m_startMatrix.translate(float(t->x()), float(t->y())); m_startMatrix.translate(xformOrigin); - m_startMatrix.scale(m_startScale); - m_startMatrix.rotate(m_startRotation, 0, 0, -1); + m_startMatrix.scale(float(m_startScale)); + m_startMatrix.rotate(float(m_startRotation), 0, 0, -1); m_startMatrix.translate(-xformOrigin); } else { m_startScale = m_accumulatedScale; @@ -395,9 +395,9 @@ void QQuickPinchHandler::handlePointerEventImpl(QQuickPointerEvent *event) QVector2D centroidRelativeMovement = currentCentroidRelativePosition - pressCentroidRelativePosition; accumulatedMovementMagnitude += centroidRelativeMovement.length(); - accumulatedCentroidDistance += pressCentroidRelativePosition.length(); + accumulatedCentroidDistance += qreal(pressCentroidRelativePosition.length()); if (event->isPressEvent()) - m_accumulatedStartCentroidDistance += (QVector2D(point->scenePressPosition()) - pressCentroid).length(); + m_accumulatedStartCentroidDistance += qreal((QVector2D(point->scenePressPosition()) - pressCentroid).length()); } else { setPassiveGrab(point); } @@ -418,7 +418,7 @@ void QQuickPinchHandler::handlePointerEventImpl(QQuickPointerEvent *event) if (!yAxis()->enabled()) avgDrag.setY(0); - const qreal centroidMovementDelta = (currentCentroid - pressCentroid).length(); + const qreal centroidMovementDelta = qreal((currentCentroid - pressCentroid).length()); qreal distanceToCentroidDelta = qAbs(accumulatedCentroidDistance - m_accumulatedStartCentroidDistance); // Used to detect scale if (numberOfPointsDraggedOverThreshold >= 1) { @@ -469,17 +469,13 @@ void QQuickPinchHandler::handlePointerEventImpl(QQuickPointerEvent *event) // 3. Drag/translate const QPointF centroidStartParentPos = target()->parentItem()->mapFromScene(m_centroid.sceneGrabPosition()); m_activeTranslation = QVector2D(centroidParentPos - centroidStartParentPos); - if (!xAxis()->enabled()) - m_activeTranslation.setX(0); - if (!yAxis()->enabled()) - m_activeTranslation.setY(0); // apply rotation + scaling around the centroid - then apply translation. QMatrix4x4 mat; const QVector3D centroidParentVector(centroidParentPos); mat.translate(centroidParentVector); - mat.rotate(m_activeRotation, 0, 0, 1); - mat.scale(m_activeScale); + mat.rotate(float(m_activeRotation), 0, 0, 1); + mat.scale(float(m_activeScale)); mat.translate(-centroidParentVector); mat.translate(QVector3D(m_activeTranslation)); @@ -491,14 +487,16 @@ void QQuickPinchHandler::handlePointerEventImpl(QQuickPointerEvent *event) if (xAxis()->enabled()) pos.setX(qBound(xAxis()->minimum(), pos.x(), xAxis()->maximum())); + else + pos.rx() -= qreal(m_activeTranslation.x()); if (yAxis()->enabled()) pos.setY(qBound(yAxis()->minimum(), pos.y(), yAxis()->maximum())); + else + pos.ry() -= qreal(m_activeTranslation.y()); target()->setPosition(pos); target()->setRotation(rotation); target()->setScale(m_accumulatedScale); - - // TODO some translation inadvertently happens; try to hold the chosen pinch origin in place } else { m_activeTranslation = QVector2D(m_centroid.scenePosition() - m_centroid.scenePressPosition()); } |