aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/handlers/qquickpinchhandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quick/handlers/qquickpinchhandler.cpp')
-rw-r--r--src/quick/handlers/qquickpinchhandler.cpp42
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());
}