diff options
Diffstat (limited to 'src/quick/handlers/qquickpointersinglehandler.cpp')
-rw-r--r-- | src/quick/handlers/qquickpointersinglehandler.cpp | 95 |
1 files changed, 48 insertions, 47 deletions
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 |