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