aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/handlers
diff options
context:
space:
mode:
authorJan Arve Saether <jan-arve.saether@qt.io>2017-02-24 16:42:47 +0100
committerShawn Rutledge <shawn.rutledge@qt.io>2017-05-23 05:52:18 +0000
commit5d4f488bf30f5650051d6cc226a75dbd17cd9a70 (patch)
tree827f71d5ad7eee909faa60133d0d521aa0b56958 /src/quick/handlers
parent057fc4b5b037284ffe299a28725fcf59c7ac066f (diff)
Move properties into grouped "point" property
Change-Id: I80000110a2e0ca69210322a0fcc587d86158358e Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'src/quick/handlers')
-rw-r--r--src/quick/handlers/qquickdraghandler.cpp2
-rw-r--r--src/quick/handlers/qquickpointersinglehandler.cpp95
-rw-r--r--src/quick/handlers/qquickpointersinglehandler_p.h99
-rw-r--r--src/quick/handlers/qquicktaphandler.cpp4
4 files changed, 109 insertions, 91 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;
}