src/quick/items/qquickpincharea.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/quick/items/qquickpincharea.cpp b/src/quick/items/qquickpincharea.cpp index fd8971c..228b547 100644 --- a/src/quick/items/qquickpincharea.cpp +++ b/src/quick/items/qquickpincharea.cpp @@ -563,7 +563,9 @@ void QQuickPinchArea::updatePinch() d->inPinch = true; d->stealMouse = true; if (d->pinch && d->pinch->target()) { - d->pinchStartPos = pinch()->target()->position(); + d->pinchStartPos = pinch()->target()->parentItem() + ? pinch()->target()->parentItem()->mapToScene(pinch()->target()->position()) + : pinch()->target()->position(); d->pinchStartScale = d->pinch->target()->scale(); d->pinchStartRotation = d->pinch->target()->rotation(); d->pinch->setActive(true); @@ -611,8 +613,14 @@ void QQuickPinchArea::updatePinchTarget() s = qMin(qMax(pinch()->minimumScale(),s), pinch()->maximumScale()); pinch()->target()->setScale(s); QPointF pos = d->sceneLastCenter - d->sceneStartCenter + d->pinchStartPos; + QPointF localPos; + if(pinch()->target()->parentItem()) + localPos = pinch()->target()->parentItem()->mapFromScene(pos); + else + localPos = pos; + if (pinch()->axis() & QQuickPinch::XAxis) { - qreal x = pos.x(); + qreal x = localPos.x(); if (x < pinch()->xmin()) x = pinch()->xmin(); else if (x > pinch()->xmax()) @@ -620,7 +628,7 @@ void QQuickPinchArea::updatePinchTarget() pinch()->target()->setX(x); } if (pinch()->axis() & QQuickPinch::YAxis) { - qreal y = pos.y(); + qreal y = localPos.y(); if (y < pinch()->ymin()) y = pinch()->ymin(); else if (y > pinch()->ymax())