diff options
-rw-r--r-- | src/quick/handlers/qquickdraghandler.cpp | 2 | ||||
-rw-r--r-- | src/quick/handlers/qquickpointersinglehandler.cpp | 95 | ||||
-rw-r--r-- | src/quick/handlers/qquickpointersinglehandler_p.h | 99 | ||||
-rw-r--r-- | src/quick/handlers/qquicktaphandler.cpp | 4 | ||||
-rw-r--r-- | tests/auto/quick/pointerhandlers/qquicktaphandler/data/Button.qml | 4 | ||||
-rw-r--r-- | tests/manual/pointer/content/FakeFlickable.qml | 2 | ||||
-rw-r--r-- | tests/manual/pointer/content/ScrollBar.qml | 4 | ||||
-rw-r--r-- | tests/manual/pointer/fakeFlickable.qml | 2 | ||||
-rw-r--r-- | tests/manual/pointer/flingAnimation.qml | 2 | ||||
-rw-r--r-- | tests/manual/pointer/photosurface.qml | 2 | ||||
-rw-r--r-- | tests/manual/pointer/pinchDragFlingMPTA.qml | 2 | ||||
-rw-r--r-- | tests/manual/pointer/singlePointHandlerProperties.qml | 37 | ||||
-rw-r--r-- | tests/manual/pointer/tapHandler.qml | 24 |
13 files changed, 150 insertions, 129 deletions
diff --git a/src/quick/handlers/qquickdraghandler.cpp b/src/quick/handlers/qquickdraghandler.cpp index 27edffd65a..b41e1f6c9d 100644 --- a/src/quick/handlers/qquickdraghandler.cpp +++ b/src/quick/handlers/qquickdraghandler.cpp @@ -69,7 +69,7 @@ QQuickDragHandler::~QQuickDragHandler() bool QQuickDragHandler::wantsEventPoint(QQuickEventPoint *point) { // If we've already been interested in a point, stay interested, even if it has strayed outside bounds. - return ((point->state() != QQuickEventPoint::Pressed && pointId() == point->pointId()) + return ((point->state() != QQuickEventPoint::Pressed && this->point().id() == point->pointId()) || QQuickPointerSingleHandler::wantsEventPoint(point)); } diff --git a/src/quick/handlers/qquickpointersinglehandler.cpp b/src/quick/handlers/qquickpointersinglehandler.cpp index 80632303f1..40a99b0e99 100644 --- a/src/quick/handlers/qquickpointersinglehandler.cpp +++ b/src/quick/handlers/qquickpointersinglehandler.cpp @@ -52,9 +52,6 @@ Q_DECLARE_LOGGING_CATEGORY(DBG_TOUCH_TARGET) QQuickPointerSingleHandler::QQuickPointerSingleHandler(QObject *parent) : QQuickPointerDeviceHandler(parent) - , m_pointId(0) - , m_rotation(0) - , m_pressure(0) , m_acceptedButtons(Qt::LeftButton) , m_ignoreAdditionalPoints(false) { @@ -68,7 +65,7 @@ bool QQuickPointerSingleHandler::wantsPointerEvent(QQuickPointerEvent *event) (event->buttons() & m_acceptedButtons) == 0 && (event->button() & m_acceptedButtons) == 0) return false; - if (m_pointId) { + if (m_pointInfo.m_id) { // We already know which one we want, so check whether it's there. // It's expected to be an update or a release. // If we no longer want it, cancel the grab. @@ -79,7 +76,7 @@ bool QQuickPointerSingleHandler::wantsPointerEvent(QQuickPointerEvent *event) QQuickEventPoint *p = event->point(i); if (wantsEventPoint(p)) { ++candidatePointCount; - if (p->pointId() == m_pointId) + if (p->pointId() == m_pointInfo.m_id) point = p; } } @@ -91,7 +88,7 @@ bool QQuickPointerSingleHandler::wantsPointerEvent(QQuickPointerEvent *event) point->cancelAllGrabs(this); } } else { - qCWarning(DBG_TOUCH_TARGET) << this << "pointId" << hex << m_pointId + qCWarning(DBG_TOUCH_TARGET) << this << "pointId" << hex << m_pointInfo.m_id << "is missing from current event, but was neither canceled nor released"; return false; } @@ -109,56 +106,56 @@ bool QQuickPointerSingleHandler::wantsPointerEvent(QQuickPointerEvent *event) } } if (chosen && candidatePointCount == 1) { - m_pointId = chosen->pointId(); + m_pointInfo.m_id = chosen->pointId(); chosen->setAccepted(); } } - return m_pointId; + return m_pointInfo.m_id; } void QQuickPointerSingleHandler::handlePointerEventImpl(QQuickPointerEvent *event) { QQuickPointerDeviceHandler::handlePointerEventImpl(event); - QQuickEventPoint *currentPoint = event->pointById(m_pointId); + QQuickEventPoint *currentPoint = event->pointById(m_pointInfo.m_id); Q_ASSERT(currentPoint); - if (!m_pointId || !currentPoint->isAccepted()) { + if (!m_pointInfo.m_id || !currentPoint->isAccepted()) { reset(); } else { if (event->asPointerTouchEvent()) { QQuickEventTouchPoint *tp = static_cast<QQuickEventTouchPoint *>(currentPoint); - m_uniquePointId = tp->uniqueId(); - m_rotation = tp->rotation(); - m_pressure = tp->pressure(); - m_ellipseDiameters = tp->ellipseDiameters(); + m_pointInfo.m_uniqueId = tp->uniqueId(); + m_pointInfo.m_rotation = tp->rotation(); + m_pointInfo.m_pressure = tp->pressure(); + m_pointInfo.m_ellipseDiameters = tp->ellipseDiameters(); } else if (event->asPointerTabletEvent()) { // TODO } else { - m_uniquePointId = event->device()->uniqueId(); - m_rotation = 0; - m_pressure = event->buttons() ? 1 : 0; - m_ellipseDiameters = QSizeF(); + m_pointInfo.m_uniqueId = event->device()->uniqueId(); + m_pointInfo.m_rotation = 0; + m_pointInfo.m_pressure = event->buttons() ? 1 : 0; + m_pointInfo.m_ellipseDiameters = QSizeF(); } - m_pos = currentPoint->pos(); + m_pointInfo.m_position = currentPoint->pos(); + m_pointInfo.m_scenePosition = currentPoint->scenePos(); if (currentPoint->state() == QQuickEventPoint::Updated) - m_velocity = currentPoint->velocity(); + m_pointInfo.m_velocity = currentPoint->velocity(); handleEventPoint(currentPoint); switch (currentPoint->state()) { case QQuickEventPoint::Pressed: - m_pressPos = currentPoint->pos(); - m_scenePressPos = currentPoint->scenePos(); - setPressedButtons(event->buttons()); - emit pointIdChanged(); + m_pointInfo.m_pressPosition = currentPoint->pos(); + m_pointInfo.m_scenePressPosition = currentPoint->scenePos(); + m_pointInfo.m_pressedButtons = event->buttons(); break; case QQuickEventPoint::Released: setExclusiveGrab(currentPoint, false); reset(); break; default: - setPressedButtons(event->buttons()); + m_pointInfo.m_pressedButtons = event->buttons(); break; } + emit pointChanged(); } - emit eventPointHandled(); } bool QQuickPointerSingleHandler::wantsEventPoint(QQuickEventPoint *point) @@ -172,12 +169,12 @@ void QQuickPointerSingleHandler::onGrabChanged(QQuickPointerHandler *grabber, QQ return; switch (stateChange) { case QQuickEventPoint::GrabExclusive: - m_sceneGrabPos = point->sceneGrabPos(); + m_pointInfo.m_sceneGrabPosition = point->sceneGrabPos(); setActive(true); QQuickPointerHandler::onGrabChanged(grabber, stateChange, point); break; case QQuickEventPoint::GrabPassive: - m_sceneGrabPos = point->sceneGrabPos(); + m_pointInfo.m_sceneGrabPosition = point->sceneGrabPos(); QQuickPointerHandler::onGrabChanged(grabber, stateChange, point); break; case QQuickEventPoint::OverrideGrabPassive: @@ -202,15 +199,8 @@ void QQuickPointerSingleHandler::setIgnoreAdditionalPoints(bool v) void QQuickPointerSingleHandler::moveTarget(QPointF pos, QQuickEventPoint *point) { target()->setPosition(pos); - m_pos = target()->mapFromScene(point->scenePos()); -} - -void QQuickPointerSingleHandler::setPressedButtons(Qt::MouseButtons buttons) -{ - if (buttons != m_pressedButtons) { - m_pressedButtons = buttons; - emit pressedButtonsChanged(); - } + m_pointInfo.m_scenePosition = point->scenePos(); + m_pointInfo.m_position = target()->mapFromScene(m_pointInfo.m_scenePosition); } void QQuickPointerSingleHandler::setAcceptedButtons(Qt::MouseButtons buttons) @@ -225,20 +215,31 @@ void QQuickPointerSingleHandler::setAcceptedButtons(Qt::MouseButtons buttons) void QQuickPointerSingleHandler::reset() { setActive(false); - bool pointIdChange = m_pointId != 0; - m_pointId = 0; - m_uniquePointId = QPointingDeviceUniqueId(); - m_pos = QPointF(); - m_pressPos = QPointF(); - m_scenePressPos = QPointF(); - m_sceneGrabPos = QPointF(); + m_pointInfo.reset(); +} + +QQuickHandlerPoint::QQuickHandlerPoint() + : m_id(0) + , m_rotation(0) + , m_pressure(0) +{} + +void QQuickHandlerPoint::reset() +{ + m_id = 0; + m_uniqueId = QPointingDeviceUniqueId(); + m_position = QPointF(); + m_scenePosition = QPointF(); + m_pressPosition = QPointF(); + m_scenePressPosition = QPointF(); + m_sceneGrabPosition = QPointF(); m_velocity = QVector2D(); m_rotation = 0; m_pressure = 0; m_ellipseDiameters = QSizeF(); - setPressedButtons(Qt::NoButton); - if (pointIdChange) - emit pointIdChanged(); + m_pressedButtons = Qt::NoButton; } +int g_metaTypeId = qRegisterMetaType<QQuickHandlerPoint>(); + QT_END_NAMESPACE diff --git a/src/quick/handlers/qquickpointersinglehandler_p.h b/src/quick/handlers/qquickpointersinglehandler_p.h index 06b8ec45dc..635c9e0a77 100644 --- a/src/quick/handlers/qquickpointersinglehandler_p.h +++ b/src/quick/handlers/qquickpointersinglehandler_p.h @@ -55,47 +55,74 @@ QT_BEGIN_NAMESPACE +class QQuickPointerSingleHandler; + +class Q_QUICK_PRIVATE_EXPORT QQuickHandlerPoint { + Q_PROPERTY(int id READ id) + Q_PROPERTY(QPointingDeviceUniqueId uniqueId READ uniqueId) + Q_PROPERTY(QPointF position READ position) + Q_PROPERTY(QPointF scenePosition READ scenePosition) + Q_PROPERTY(QPointF pressPosition READ pressPosition) + Q_PROPERTY(QPointF scenePressPosition READ scenePressPosition) + Q_PROPERTY(QPointF sceneGrabPosition READ sceneGrabPosition) + Q_PROPERTY(Qt::MouseButtons pressedButtons READ pressedButtons) + Q_PROPERTY(QVector2D velocity READ velocity) + Q_PROPERTY(qreal rotation READ rotation) + Q_PROPERTY(qreal pressure READ pressure) + Q_PROPERTY(QSizeF ellipseDiameters READ ellipseDiameters) + Q_GADGET + +public: + QQuickHandlerPoint(); + + int id() const { return m_id; } + Qt::MouseButtons pressedButtons() const { return m_pressedButtons; } + QPointF pressPosition() const { return m_pressPosition; } + QPointF scenePressPosition() const { return m_scenePressPosition; } + QPointF sceneGrabPosition() const { return m_sceneGrabPosition; } + QPointF position() const { return m_position; } + QPointF scenePosition() const { return m_scenePosition; } + QVector2D velocity() const { return m_velocity; } + qreal rotation() const { return m_rotation; } + qreal pressure() const { return m_pressure; } + QSizeF ellipseDiameters() const { return m_ellipseDiameters; } + QPointingDeviceUniqueId uniqueId() const { return m_uniqueId; } + +private: + void reset(); + int m_id; + QPointingDeviceUniqueId m_uniqueId; + Qt::MouseButtons m_pressedButtons; + QPointF m_position; + QPointF m_scenePosition; + QPointF m_pressPosition; + QPointF m_scenePressPosition; + QPointF m_sceneGrabPosition; + QVector2D m_velocity; + qreal m_rotation; + qreal m_pressure; + QSizeF m_ellipseDiameters; + friend class QQuickPointerSingleHandler; +}; + class Q_QUICK_PRIVATE_EXPORT QQuickPointerSingleHandler : public QQuickPointerDeviceHandler { Q_OBJECT - Q_PROPERTY(int pointId READ pointId NOTIFY pointIdChanged) - Q_PROPERTY(QPointingDeviceUniqueId uniquePointId READ uniquePointId NOTIFY pointIdChanged) - Q_PROPERTY(QPointF pos READ pos NOTIFY eventPointHandled) - Q_PROPERTY(QPointF scenePos READ scenePos NOTIFY eventPointHandled) - Q_PROPERTY(QPointF pressPos READ pressPos NOTIFY pressedButtonsChanged) - Q_PROPERTY(QPointF scenePressPos READ scenePressPos NOTIFY pressedButtonsChanged) - Q_PROPERTY(QPointF sceneGrabPos READ sceneGrabPos NOTIFY singlePointGrabChanged) - Q_PROPERTY(Qt::MouseButtons pressedButtons READ pressedButtons NOTIFY pressedButtonsChanged) - Q_PROPERTY(QVector2D velocity READ velocity NOTIFY eventPointHandled) - Q_PROPERTY(qreal rotation READ rotation NOTIFY eventPointHandled) - Q_PROPERTY(qreal pressure READ pressure NOTIFY eventPointHandled) - Q_PROPERTY(QSizeF ellipseDiameters READ ellipseDiameters NOTIFY eventPointHandled) Q_PROPERTY(Qt::MouseButtons acceptedButtons READ acceptedButtons WRITE setAcceptedButtons NOTIFY acceptedButtonsChanged) + Q_PROPERTY(QQuickHandlerPoint point READ point NOTIFY pointChanged) public: explicit QQuickPointerSingleHandler(QObject *parent = 0); virtual ~QQuickPointerSingleHandler() { } - int pointId() const { return m_pointId; } - Qt::MouseButtons pressedButtons() const { return m_pressedButtons; } Qt::MouseButtons acceptedButtons() const { return m_acceptedButtons; } void setAcceptedButtons(Qt::MouseButtons buttons); - QPointF pressPos() const { return m_pressPos; } - QPointF scenePressPos() const { return m_scenePressPos; } - QPointF sceneGrabPos() const { return m_sceneGrabPos; } - QPointF pos() const { return m_pos; } - QPointF scenePos() const { return parentItem()->mapToScene(m_pos); } - QVector2D velocity() const { return m_velocity; } - qreal rotation() const { return m_rotation; } - qreal pressure() const { return m_pressure; } - QSizeF ellipseDiameters() const { return m_ellipseDiameters; } - QPointingDeviceUniqueId uniquePointId() const { return m_uniquePointId; } + + QQuickHandlerPoint point() const { return m_pointInfo; } Q_SIGNALS: - void pointIdChanged(); - void pressedButtonsChanged(); - void acceptedButtonsChanged(); + void pointChanged(); void singlePointGrabChanged(); // QQuickPointerHandler::grabChanged signal can't be a property notifier here - void eventPointHandled(); + void acceptedButtonsChanged(); protected: bool wantsPointerEvent(QQuickPointerEvent *event) override; @@ -103,7 +130,7 @@ protected: void handlePointerEventImpl(QQuickPointerEvent *event) override; virtual void handleEventPoint(QQuickEventPoint *point) = 0; - QQuickEventPoint *currentPoint(QQuickPointerEvent *ev) { return ev->pointById(m_pointId); } + QQuickEventPoint *currentPoint(QQuickPointerEvent *ev) { return ev->pointById(m_pointInfo.m_id); } void onGrabChanged(QQuickPointerHandler *grabber, QQuickEventPoint::GrabState stateChange, QQuickEventPoint *point) override; void setIgnoreAdditionalPoints(bool v = true); @@ -111,27 +138,17 @@ protected: void moveTarget(QPointF pos, QQuickEventPoint *point); private: - void setPressedButtons(Qt::MouseButtons buttons); void reset(); private: - int m_pointId; - QPointingDeviceUniqueId m_uniquePointId; - Qt::MouseButtons m_pressedButtons; - QPointF m_pos; - QPointF m_pressPos; - QPointF m_scenePressPos; - QPointF m_sceneGrabPos; - QVector2D m_velocity; - qreal m_rotation; - qreal m_pressure; - QSizeF m_ellipseDiameters; + QQuickHandlerPoint m_pointInfo; Qt::MouseButtons m_acceptedButtons; bool m_ignoreAdditionalPoints : 1; }; QT_END_NAMESPACE +QML_DECLARE_TYPE(QQuickHandlerPoint) QML_DECLARE_TYPE(QQuickPointerSingleHandler) #endif // QQUICKPOINTERSINGLEHANDLER_H diff --git a/src/quick/handlers/qquicktaphandler.cpp b/src/quick/handlers/qquicktaphandler.cpp index d73e9fd100..272c6de000 100644 --- a/src/quick/handlers/qquicktaphandler.cpp +++ b/src/quick/handlers/qquicktaphandler.cpp @@ -128,7 +128,7 @@ bool QQuickTapHandler::wantsEventPoint(QQuickEventPoint *point) ret = parentContains(point); break; case ReleaseWithinBounds: - ret = point->pointId() == pointId(); + ret = point->pointId() == this->point().id(); break; } break; @@ -143,7 +143,7 @@ bool QQuickTapHandler::wantsEventPoint(QQuickEventPoint *point) // so onGrabChanged(this, CancelGrabExclusive, point) and setPressed(false) will be called. // But when m_gesturePolicy is DragThreshold, we don't get an exclusive grab, but // we still don't want to be pressed anymore. - if (!ret && point->pointId() == pointId() && point->state() != QQuickEventPoint::Stationary) + if (!ret && point->pointId() == this->point().id() && point->state() != QQuickEventPoint::Stationary) setPressed(false, true, point); return ret; } diff --git a/tests/auto/quick/pointerhandlers/qquicktaphandler/data/Button.qml b/tests/auto/quick/pointerhandlers/qquicktaphandler/data/Button.qml index ead86e142b..6203a6769d 100644 --- a/tests/auto/quick/pointerhandlers/qquicktaphandler/data/Button.qml +++ b/tests/auto/quick/pointerhandlers/qquicktaphandler/data/Button.qml @@ -91,8 +91,8 @@ Rectangle { color: "transparent" width: radius * 2 height: radius * 2 - x: tap.scenePressPos.x - radius - y: tap.scenePressPos.y - radius + x: tap.point.scenePressPosition.x - radius + y: tap.point.scenePressPosition.y - radius opacity: 0.25 Component.onCompleted: parent = root.parent } diff --git a/tests/manual/pointer/content/FakeFlickable.qml b/tests/manual/pointer/content/FakeFlickable.qml index 801b6b9f31..55dafef82e 100644 --- a/tests/manual/pointer/content/FakeFlickable.qml +++ b/tests/manual/pointer/content/FakeFlickable.qml @@ -83,7 +83,7 @@ Item { DragHandler { id: dragHandler - onActiveChanged: if (!active) anim.restart(velocity) + onActiveChanged: if (!active) anim.restart(point.velocity) } MomentumAnimation { id: anim diff --git a/tests/manual/pointer/content/ScrollBar.qml b/tests/manual/pointer/content/ScrollBar.qml index 94d5ae47a7..ef18ceb98f 100644 --- a/tests/manual/pointer/content/ScrollBar.qml +++ b/tests/manual/pointer/content/ScrollBar.qml @@ -71,9 +71,9 @@ Rectangle { id: tap onTapped: { if (knob.state === "horizontal") - knob.x = pos.x - knob.width / 2 + knob.x = position.x - knob.width / 2 else if (knob.state === "vertical") - knob.y = pos.y - knob.height / 2 + knob.y = position.y - knob.height / 2 } } diff --git a/tests/manual/pointer/fakeFlickable.qml b/tests/manual/pointer/fakeFlickable.qml index 22b23a00c8..0c6dbe4558 100644 --- a/tests/manual/pointer/fakeFlickable.qml +++ b/tests/manual/pointer/fakeFlickable.qml @@ -75,7 +75,7 @@ Rectangle { onFlickStarted: console.log("flick started with velocity " + velocity) - onFlickEnded: console.log("flick ended") + onFlickEnded: console.log("flick ended with velocity " + velocity) Component.onCompleted: { var request = new XMLHttpRequest() diff --git a/tests/manual/pointer/flingAnimation.qml b/tests/manual/pointer/flingAnimation.qml index c8722fabb1..d868fcc498 100644 --- a/tests/manual/pointer/flingAnimation.qml +++ b/tests/manual/pointer/flingAnimation.qml @@ -70,7 +70,7 @@ Rectangle { objectName: "dragHandler" + index onActiveChanged: { if (!active) - anim.restart(velocity) + anim.restart(point.velocity) } } Rectangle { diff --git a/tests/manual/pointer/photosurface.qml b/tests/manual/pointer/photosurface.qml index 6601909a37..a2e8b2aede 100644 --- a/tests/manual/pointer/photosurface.qml +++ b/tests/manual/pointer/photosurface.qml @@ -110,7 +110,7 @@ Rectangle { id: dragHandler onActiveChanged: { if (!active) - anim.restart(velocity) + anim.restart(point.velocity) } } diff --git a/tests/manual/pointer/pinchDragFlingMPTA.qml b/tests/manual/pointer/pinchDragFlingMPTA.qml index 25be48bb42..6446a17873 100644 --- a/tests/manual/pointer/pinchDragFlingMPTA.qml +++ b/tests/manual/pointer/pinchDragFlingMPTA.qml @@ -85,7 +85,7 @@ Rectangle { objectName: "DragHandler" target: container acceptedModifiers: Qt.MetaModifier - onActiveChanged: if (!active) fling.restart(velocity) + onActiveChanged: if (!active) fling.restart(point.velocity) } } MomentumAnimation { id: fling; target: container } diff --git a/tests/manual/pointer/singlePointHandlerProperties.qml b/tests/manual/pointer/singlePointHandlerProperties.qml index f5a938e401..f91094ee9e 100644 --- a/tests/manual/pointer/singlePointHandlerProperties.qml +++ b/tests/manual/pointer/singlePointHandlerProperties.qml @@ -49,11 +49,11 @@ Rectangle { Item { id: crosshairs - x: dragHandler.pos.x - width / 2 - y: dragHandler.pos.y - height / 2 + x: dragHandler.point.position.x - width / 2 + y: dragHandler.point.position.y - height / 2 width: parent.width / 2; height: parent.height / 2 visible: dragHandler.active - rotation: dragHandler.rotation + rotation: dragHandler.point.rotation Rectangle { color: "goldenrod" @@ -69,7 +69,7 @@ Rectangle { } Rectangle { color: "goldenrod" - width: Math.max(2, 50 * dragHandler.pressure) + width: Math.max(2, 50 * dragHandler.point.pressure) height: width radius: width / 2 anchors.centerIn: parent @@ -82,8 +82,8 @@ Rectangle { implicitHeight: label.implicitHeight Text { id: label - text: 'id: ' + dragHandler.pointId.toString(16) + " uid: " + dragHandler.uniquePointId.numericId + - '\npos: (' + dragHandler.pos.x.toFixed(2) + ', ' + dragHandler.pos.y.toFixed(2) + ')' + text: 'id: ' + dragHandler.point.id.toString(16) + " uid: " + dragHandler.point.uniqueId.numericId + + '\npos: (' + dragHandler.point.position.x.toFixed(2) + ', ' + dragHandler.point.position.y.toFixed(2) + ')' } } } @@ -91,8 +91,8 @@ Rectangle { color: "transparent" border.color: "white" antialiasing: true - width: dragHandler.ellipseDiameters.width - height: dragHandler.ellipseDiameters.height + width: dragHandler.point.ellipseDiameters.width + height: dragHandler.point.ellipseDiameters.height radius: Math.min(width / 2, height / 2) anchors.centerIn: parent } @@ -100,11 +100,11 @@ Rectangle { Rectangle { id: velocityVector visible: width > 0 - width: dragHandler.velocity.length() * 100 + width: dragHandler.point.velocity.length() * 100 height: 2 - x: dragHandler.pos.x - y: dragHandler.pos.y - rotation: Math.atan2(dragHandler.velocity.y, dragHandler.velocity.x) * 180 / Math.PI + x: dragHandler.point.position.x + y: dragHandler.point.position.y + rotation: Math.atan2(dragHandler.point.velocity.y, dragHandler.point.velocity.x) * 180 / Math.PI transformOrigin: Item.BottomLeft antialiasing: true @@ -150,13 +150,14 @@ Rectangle { DragHandler { id: dragHandler target: null - onGrabChanged: if (active) { - console.log("grabbed " + point.pointId + " @ " + sceneGrabPos) - grabbingLocationIndicator.createObject(root, {"x": sceneGrabPos.x, "y": sceneGrabPos.y - 16}) + onGrabChanged: if (active) { // 'point' is an implicit parameter referencing to a QQuickEventPoint instance + console.log("grabbed " + point.pointId + " @ " + point.sceneGrabPos) + grabbingLocationIndicator.createObject(root, {"x": point.sceneGrabPos.x, "y": point.sceneGrabPos.y - 16}) } - onPressedButtonsChanged: { - if (pressedButtons) - mouseButtonIndicator.createObject(root, {"x": pressPos.x - 44, "y": pressPos.y - 64, "buttons": pressedButtons}) + onPointChanged: { + // Here, 'point' is referring to the property of the DragHandler + if (point.pressedButtons) + mouseButtonIndicator.createObject(root, {"x": point.pressPosition.x - 44, "y": point.pressPosition.y - 64, "buttons": point.pressedButtons}) } } } diff --git a/tests/manual/pointer/tapHandler.qml b/tests/manual/pointer/tapHandler.qml index 06070a02ff..5dac99a899 100644 --- a/tests/manual/pointer/tapHandler.qml +++ b/tests/manual/pointer/tapHandler.qml @@ -60,17 +60,13 @@ Item { gesturePolicy: (policyDragThresholdCB.checked ? TapHandler.DragThreshold : policyWithinBoundsCB.checked ? TapHandler.WithinBounds : TapHandler.ReleaseWithinBounds) - onPressedButtonsChanged: switch (pressedButtons) { - case Qt.MiddleButton: borderBlink.blinkColor = "orange"; break; - case Qt.RightButton: borderBlink.blinkColor = "magenta"; break; - default: borderBlink.blinkColor = "green"; break; - } + onCanceled: { - console.log("canceled @ " + pos) + console.log("canceled @ " + point.position) borderBlink.blinkColor = "red" borderBlink.start() } - onTapped: { + onTapped: { // 'point' is an implicit parameter referencing to a QQuickEventPoint instance console.log("tapped @ " + point.pos + " button(s) " + point.event.button + " tapCount " + tapCount) if (tapCount > 1) { tapCountLabel.text = tapCount @@ -80,7 +76,7 @@ Item { } } onLongPressed: longPressFeedback.createObject(rect, - {"x": pos.x, "y": pos.y, + {"x": point.position.x, "y": point.position.y, "text": Math.round(handler.timeHeld).toFixed(3) + " sec", "color": borderBlink.blinkColor}) } @@ -121,8 +117,8 @@ Item { color: "transparent" width: radius * 2 height: radius * 2 - x: handler.pressPos.x - radius - y: handler.pressPos.y - radius + x: handler.point.pressPosition.x - radius + y: handler.point.pressPosition.y - radius opacity: 0.25 } @@ -133,7 +129,13 @@ Item { SequentialAnimation { id: borderBlink - property color blinkColor: "blue" + property color blinkColor: (function(pbtns) { + switch (pbtns) { + case Qt.MiddleButton: return "orange"; + case Qt.RightButton: return "magenta"; + default: return "green"; + } + })(handler.point.pressedButtons) loops: 3 ScriptAction { script: rect.border.color = borderBlink.blinkColor } PauseAnimation { duration: 100 } |