aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickevents_p_p.h
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@theqtcompany.com>2016-07-15 16:24:34 +0200
committerFrederik Gladhorn <frederik.gladhorn@qt.io>2016-07-21 11:13:12 +0000
commitc856d877e77048701182cc0e5ae275c398e55166 (patch)
treefe6b58b1872bc566982402bedaa8c6af9ad336f3 /src/quick/items/qquickevents_p_p.h
parentf727b9baad6a061fbd3625afe0295077dccff610 (diff)
Hierarchy for touch and mouse pointer events
Change-Id: Ie84e39918d9657b29df697be7b0e5198298c48ba Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'src/quick/items/qquickevents_p_p.h')
-rw-r--r--src/quick/items/qquickevents_p_p.h100
1 files changed, 69 insertions, 31 deletions
diff --git a/src/quick/items/qquickevents_p_p.h b/src/quick/items/qquickevents_p_p.h
index ceebe6207d..123d5e5280 100644
--- a/src/quick/items/qquickevents_p_p.h
+++ b/src/quick/items/qquickevents_p_p.h
@@ -63,6 +63,8 @@ QT_BEGIN_NAMESPACE
class QQuickItem;
class QQuickPointerDevice;
+class QQuickPointerEvent;
+class QQuickPointerTouchEvent;
class QQuickKeyEvent : public QObject
{
@@ -241,8 +243,6 @@ private:
bool _accepted;
};
-class QQuickPointerEvent;
-
class Q_QUICK_PRIVATE_EXPORT QQuickEventPoint : public QObject
{
Q_OBJECT
@@ -298,7 +298,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickEventTouchPoint : public QQuickEventPoint
Q_PROPERTY(QPointerUniqueId uniqueId READ uniqueId)
public:
- QQuickEventTouchPoint(QQuickPointerEvent *parent) : QQuickEventPoint(parent), m_rotation(0), m_pressure(0) { }
+ QQuickEventTouchPoint(QQuickPointerTouchEvent *parent);
void reset(const QTouchEvent::TouchPoint &tp, ulong timestamp)
{
@@ -333,10 +333,10 @@ public:
, m_event(nullptr)
, m_button(Qt::NoButton)
, m_pressedButtons(Qt::NoButton)
- , m_pointCount(0)
- , m_mousePoint(nullptr)
, m_synthMouseEvent(QEvent::MouseMove, QPointF(), Qt::NoButton, Qt::NoButton, Qt::NoModifier) { }
+ virtual ~QQuickPointerEvent();
+
public: // property accessors
const QQuickPointerDevice *device() const { return m_device; }
Qt::KeyboardModifiers modifiers() const { return m_event ? m_event->modifiers() : Qt::NoModifier; }
@@ -344,44 +344,74 @@ public: // property accessors
Qt::MouseButtons buttons() const { return m_pressedButtons; }
public: // helpers for C++ only (during event delivery)
- QQuickPointerEvent *reset(QEvent *ev);
+ virtual QQuickPointerEvent *reset(QEvent *ev) = 0;
QTouchEvent *asTouchEvent() const;
QMouseEvent *asMouseEvent() const;
- bool isMouseEvent() const;
- bool isTouchEvent() const;
- bool isTabletEvent() const;
+ virtual bool isMouseEvent() const { return false; }
+ virtual bool isTouchEvent() const { return false; }
+ virtual bool isTabletEvent() const { return false; }
bool isValid() const { return m_event != nullptr; }
- bool allPointsAccepted() const;
-
- int pointCount() const { return m_pointCount; }
- QQuickEventPoint *point(int i) const;
- QQuickEventPoint *pointById(quint64 pointId) const;
+ virtual bool allPointsAccepted() const = 0;
- const QTouchEvent::TouchPoint *touchPointById(int pointId) const;
+ virtual int pointCount() const = 0;
+ virtual QQuickEventPoint *point(int i) const = 0;
+ virtual QQuickEventPoint *pointById(quint64 pointId) const = 0;
- QTouchEvent *touchEventForItem(const QList<const QQuickEventPoint *> &newPoints, QQuickItem *relativeTo) const;
-
- QMouseEvent *syntheticMouseEvent(int pointID, QQuickItem *relativeTo) const;
-
-private:
- void initFromMouse(QMouseEvent *ev);
- void initFromTouch(QTouchEvent *ev);
+protected:
-private:
const QQuickPointerDevice *m_device;
QInputEvent *m_event; // original event as received by QQuickWindow
Qt::MouseButton m_button;
Qt::MouseButtons m_pressedButtons;
- int m_pointCount;
- QVector<QQuickEventTouchPoint *> m_touchPoints;
- QQuickEventPoint *m_mousePoint;
mutable QMouseEvent m_synthMouseEvent;
Q_DISABLE_COPY(QQuickPointerEvent)
};
+class Q_QUICK_PRIVATE_EXPORT QQuickPointerMouseEvent : public QQuickPointerEvent
+{
+public:
+ QQuickPointerMouseEvent(QObject *parent = nullptr)
+ : QQuickPointerEvent(parent), m_mousePoint(new QQuickEventPoint(this))
+ {
+ }
+
+ QQuickPointerEvent *reset(QEvent *) override;
+ bool isMouseEvent() const override { return true; }
+ int pointCount() const override { return 1; }
+ QQuickEventPoint *point(int i) const override;
+ QQuickEventPoint *pointById(quint64 pointId) const override;
+ bool allPointsAccepted() const override;
+
+private:
+ QQuickEventPoint *m_mousePoint;
+};
+
+class Q_QUICK_PRIVATE_EXPORT QQuickPointerTouchEvent : public QQuickPointerEvent
+{
+public:
+ QQuickPointerTouchEvent(QObject *parent = nullptr)
+ : QQuickPointerEvent(parent)
+ {}
+
+ QQuickPointerEvent *reset(QEvent *) override;
+ bool isTouchEvent() const override { return true; }
+ int pointCount() const override { return m_pointCount; }
+ QQuickEventPoint *point(int i) const override;
+ QQuickEventPoint *pointById(quint64 pointId) const override;
+ const QTouchEvent::TouchPoint *touchPointById(int pointId) const;
+ bool allPointsAccepted() const override;
+
+ QMouseEvent *syntheticMouseEvent(int pointID, QQuickItem *relativeTo) const;
+ QTouchEvent *touchEventForItem(const QList<const QQuickEventPoint *> &newPoints, QQuickItem *relativeTo) const;
+
+private:
+ int m_pointCount;
+ QVector<QQuickEventTouchPoint *> m_touchPoints;
+};
+
// ### Qt 6: move this to qtbase, replace QTouchDevice and the enums in QTabletEvent
class Q_QUICK_PRIVATE_EXPORT QQuickPointerDevice : public QObject
{
@@ -439,10 +469,18 @@ public:
QQuickPointerDevice(DeviceType devType, PointerType pType, Capabilities caps, int maxPoints, int buttonCount, const QString &name, qint64 uniqueId = 0)
: m_deviceType(devType), m_pointerType(pType), m_capabilities(caps)
- , m_maximumTouchPoints(maxPoints), m_buttonCount(buttonCount), m_name(name), m_uniqueId(uniqueId)
- {}
+ , m_maximumTouchPoints(maxPoints), m_buttonCount(buttonCount), m_name(name), m_uniqueId(uniqueId), m_event(nullptr)
+ {
+ if (m_deviceType == Mouse) {
+ m_event = new QQuickPointerMouseEvent;
+ } else if (m_deviceType == TouchScreen || m_deviceType == TouchPad) {
+ m_event = new QQuickPointerTouchEvent;
+ } else {
+ Q_ASSERT(false);
+ }
+ }
- ~QQuickPointerDevice() { }
+ ~QQuickPointerDevice() { delete m_event; }
DeviceType type() const { return m_deviceType; }
PointerType pointerType() const { return m_pointerType; }
Capabilities capabilities() const { return m_capabilities; }
@@ -451,7 +489,7 @@ public:
int buttonCount() const { return m_buttonCount; }
QString name() const { return m_name; }
qint64 uniqueId() const { return m_uniqueId; }
- QQuickPointerEvent *pointerEvent() const { return &m_event; }
+ QQuickPointerEvent *pointerEvent() const { return m_event; }
private:
DeviceType m_deviceType;
@@ -462,7 +500,7 @@ private:
QString m_name;
qint64 m_uniqueId;
// the device-specific event instance which is reused during event delivery
- mutable QQuickPointerEvent m_event;
+ QQuickPointerEvent *m_event;
Q_DISABLE_COPY(QQuickPointerDevice)
};