diff options
Diffstat (limited to 'src/quick/items/qquickevents_p_p.h')
-rw-r--r-- | src/quick/items/qquickevents_p_p.h | 183 |
1 files changed, 113 insertions, 70 deletions
diff --git a/src/quick/items/qquickevents_p_p.h b/src/quick/items/qquickevents_p_p.h index b2642735f2..d1a8bbd901 100644 --- a/src/quick/items/qquickevents_p_p.h +++ b/src/quick/items/qquickevents_p_p.h @@ -69,6 +69,7 @@ class QQuickPointerMouseEvent; #if QT_CONFIG(gestures) class QQuickPointerNativeGestureEvent; #endif +class QQuickPointerScrollEvent; class QQuickPointerTabletEvent; class QQuickPointerTouchEvent; class QQuickPointerHandler; @@ -76,12 +77,12 @@ class QQuickPointerHandler; class QQuickKeyEvent : public QObject { Q_OBJECT - Q_PROPERTY(int key READ key) - Q_PROPERTY(QString text READ text) - Q_PROPERTY(int modifiers READ modifiers) - Q_PROPERTY(bool isAutoRepeat READ isAutoRepeat) - Q_PROPERTY(int count READ count) - Q_PROPERTY(quint32 nativeScanCode READ nativeScanCode) + Q_PROPERTY(int key READ key CONSTANT) + Q_PROPERTY(QString text READ text CONSTANT) + Q_PROPERTY(int modifiers READ modifiers CONSTANT) + Q_PROPERTY(bool isAutoRepeat READ isAutoRepeat CONSTANT) + Q_PROPERTY(int count READ count CONSTANT) + Q_PROPERTY(quint32 nativeScanCode READ nativeScanCode CONSTANT) Q_PROPERTY(bool accepted READ isAccepted WRITE setAccepted) public: @@ -124,16 +125,16 @@ private: class Q_QUICK_PRIVATE_EXPORT QQuickMouseEvent : public QObject { Q_OBJECT - Q_PROPERTY(qreal x READ x) - Q_PROPERTY(qreal y READ y) - Q_PROPERTY(int button READ button) - Q_PROPERTY(int buttons READ buttons) - Q_PROPERTY(int modifiers READ modifiers) - Q_PROPERTY(int source READ source REVISION 7) - Q_PROPERTY(bool wasHeld READ wasHeld) - Q_PROPERTY(bool isClick READ isClick) + Q_PROPERTY(qreal x READ x CONSTANT) + Q_PROPERTY(qreal y READ y CONSTANT) + Q_PROPERTY(int button READ button CONSTANT) + Q_PROPERTY(int buttons READ buttons CONSTANT) + Q_PROPERTY(int modifiers READ modifiers CONSTANT) + Q_PROPERTY(int source READ source CONSTANT REVISION 7) + Q_PROPERTY(bool wasHeld READ wasHeld CONSTANT) + Q_PROPERTY(bool isClick READ isClick CONSTANT) Q_PROPERTY(bool accepted READ isAccepted WRITE setAccepted) - Q_REVISION(11) Q_PROPERTY(int flags READ flags) + Q_PROPERTY(int flags READ flags CONSTANT REVISION 11) public: QQuickMouseEvent() @@ -192,13 +193,13 @@ private: class QQuickWheelEvent : public QObject { Q_OBJECT - Q_PROPERTY(qreal x READ x) - Q_PROPERTY(qreal y READ y) - Q_PROPERTY(QPoint angleDelta READ angleDelta) - Q_PROPERTY(QPoint pixelDelta READ pixelDelta) - Q_PROPERTY(int buttons READ buttons) - Q_PROPERTY(int modifiers READ modifiers) - Q_PROPERTY(bool inverted READ inverted) + Q_PROPERTY(qreal x READ x CONSTANT) + Q_PROPERTY(qreal y READ y CONSTANT) + Q_PROPERTY(QPoint angleDelta READ angleDelta CONSTANT) + Q_PROPERTY(QPoint pixelDelta READ pixelDelta CONSTANT) + Q_PROPERTY(int buttons READ buttons CONSTANT) + Q_PROPERTY(int modifiers READ modifiers CONSTANT) + Q_PROPERTY(bool inverted READ inverted CONSTANT) Q_PROPERTY(bool accepted READ isAccepted WRITE setAccepted) public: @@ -258,15 +259,15 @@ private: class Q_QUICK_PRIVATE_EXPORT QQuickEventPoint : public QObject { Q_OBJECT - Q_PROPERTY(QQuickPointerEvent *event READ pointerEvent) - Q_PROPERTY(QPointF position READ position) - Q_PROPERTY(QPointF scenePosition READ scenePosition) - Q_PROPERTY(QPointF scenePressPosition READ scenePressPosition) - Q_PROPERTY(QPointF sceneGrabPosition READ sceneGrabPosition) - Q_PROPERTY(State state READ state) - Q_PROPERTY(int pointId READ pointId) - Q_PROPERTY(qreal timeHeld READ timeHeld) - Q_PROPERTY(QVector2D velocity READ velocity) + Q_PROPERTY(QQuickPointerEvent *event READ pointerEvent CONSTANT) + Q_PROPERTY(QPointF position READ position CONSTANT) + Q_PROPERTY(QPointF scenePosition READ scenePosition CONSTANT) + Q_PROPERTY(QPointF scenePressPosition READ scenePressPosition CONSTANT) + Q_PROPERTY(QPointF sceneGrabPosition READ sceneGrabPosition CONSTANT) + Q_PROPERTY(State state READ state CONSTANT) + Q_PROPERTY(int pointId READ pointId CONSTANT) + Q_PROPERTY(qreal timeHeld READ timeHeld CONSTANT) + Q_PROPERTY(QVector2D velocity READ velocity CONSTANT) Q_PROPERTY(bool accepted READ isAccepted WRITE setAccepted) Q_PROPERTY(QObject *exclusiveGrabber READ exclusiveGrabber WRITE setExclusiveGrabber) @@ -280,7 +281,7 @@ public: Q_DECLARE_FLAGS(States, State) Q_FLAG(States) - enum GrabState { + enum GrabTransition { GrabPassive = 0x01, UngrabPassive = 0x02, CancelGrabPassive = 0x03, @@ -289,7 +290,7 @@ public: UngrabExclusive = 0x20, CancelGrabExclusive = 0x30, }; - Q_ENUM(GrabState) + Q_ENUM(GrabTransition) QQuickEventPoint(QQuickPointerEvent *parent); @@ -385,10 +386,10 @@ private: class Q_QUICK_PRIVATE_EXPORT QQuickPointerEvent : public QObject { Q_OBJECT - Q_PROPERTY(QQuickPointerDevice *device READ device) - Q_PROPERTY(Qt::KeyboardModifiers modifiers READ modifiers) - Q_PROPERTY(Qt::MouseButtons button READ button) - Q_PROPERTY(Qt::MouseButtons buttons READ buttons) + Q_PROPERTY(QQuickPointerDevice *device READ device CONSTANT) + Q_PROPERTY(Qt::KeyboardModifiers modifiers READ modifiers CONSTANT) + Q_PROPERTY(Qt::MouseButtons button READ button CONSTANT) + Q_PROPERTY(Qt::MouseButtons buttons READ buttons CONSTANT) public: QQuickPointerEvent(QObject *parent = nullptr, QQuickPointerDevice *device = nullptr) @@ -419,16 +420,18 @@ public: // helpers for C++ only (during event delivery) #if QT_CONFIG(gestures) virtual QQuickPointerNativeGestureEvent *asPointerNativeGestureEvent() { return nullptr; } #endif + virtual QQuickPointerScrollEvent *asPointerScrollEvent() { return nullptr; } virtual const QQuickPointerMouseEvent *asPointerMouseEvent() const { return nullptr; } virtual const QQuickPointerTouchEvent *asPointerTouchEvent() const { return nullptr; } virtual const QQuickPointerTabletEvent *asPointerTabletEvent() const { return nullptr; } #if QT_CONFIG(gestures) virtual const QQuickPointerNativeGestureEvent *asPointerNativeGestureEvent() const { return nullptr; } #endif + virtual const QQuickPointerScrollEvent *asPointerScrollEvent() const { return nullptr; } virtual bool allPointsAccepted() const = 0; virtual bool allUpdatedPointsAccepted() const = 0; virtual bool allPointsGrabbed() const = 0; - bool isAccepted() { return m_event->isAccepted(); } + bool isAccepted() { return m_event ? m_event->isAccepted() : false; } void setAccepted(bool accepted) { if (m_event) m_event->setAccepted(accepted); } QVector<QPointF> unacceptedPressedPointScenePositions() const; @@ -439,7 +442,7 @@ public: // helpers for C++ only (during event delivery) virtual void clearGrabbers() const = 0; virtual bool hasExclusiveGrabber(const QQuickPointerHandler *handler) const = 0; - ulong timestamp() const { return m_event->timestamp(); } + ulong timestamp() const { return m_event ? m_event->timestamp() : 0; } protected: QQuickPointerDevice *m_device; @@ -452,21 +455,14 @@ protected: Q_DISABLE_COPY(QQuickPointerEvent) }; -class Q_QUICK_PRIVATE_EXPORT QQuickPointerMouseEvent : public QQuickPointerEvent +class Q_QUICK_PRIVATE_EXPORT QQuickSinglePointEvent : public QQuickPointerEvent { Q_OBJECT public: - QQuickPointerMouseEvent(QObject *parent = nullptr, QQuickPointerDevice *device = nullptr) - : QQuickPointerEvent(parent, device), m_mousePoint(new QQuickEventPoint(this)) { } + QQuickSinglePointEvent(QObject *parent = nullptr, QQuickPointerDevice *device = nullptr) + : QQuickPointerEvent(parent, device), m_point(new QQuickEventPoint(this)) { } - QQuickPointerEvent *reset(QEvent *) override; void localize(QQuickItem *target) override; - bool isPressEvent() const override; - bool isDoubleClickEvent() const override; - bool isUpdateEvent() const override; - bool isReleaseEvent() const override; - QQuickPointerMouseEvent *asPointerMouseEvent() override { return this; } - const QQuickPointerMouseEvent *asPointerMouseEvent() const override { return this; } int pointCount() const override { return 1; } QQuickEventPoint *point(int i) const override; QQuickEventPoint *pointById(int pointId) const override; @@ -477,10 +473,28 @@ public: void clearGrabbers() const override; bool hasExclusiveGrabber(const QQuickPointerHandler *handler) const override; - QMouseEvent *asMouseEvent(const QPointF& localPos) const; +protected: + QQuickEventPoint *m_point; -private: - QQuickEventPoint *m_mousePoint; + Q_DISABLE_COPY(QQuickSinglePointEvent) +}; + +class Q_QUICK_PRIVATE_EXPORT QQuickPointerMouseEvent : public QQuickSinglePointEvent +{ + Q_OBJECT +public: + QQuickPointerMouseEvent(QObject *parent = nullptr, QQuickPointerDevice *device = nullptr) + : QQuickSinglePointEvent(parent, device) { } + + QQuickPointerEvent *reset(QEvent *) override; + bool isPressEvent() const override; + bool isDoubleClickEvent() const override; + bool isUpdateEvent() const override; + bool isReleaseEvent() const override; + QQuickPointerMouseEvent *asPointerMouseEvent() override { return this; } + const QQuickPointerMouseEvent *asPointerMouseEvent() const override { return this; } + + QMouseEvent *asMouseEvent(const QPointF& localPos) const; Q_DISABLE_COPY(QQuickPointerMouseEvent) }; @@ -528,7 +542,7 @@ private: }; #if QT_CONFIG(gestures) -class Q_QUICK_PRIVATE_EXPORT QQuickPointerNativeGestureEvent : public QQuickPointerEvent +class Q_QUICK_PRIVATE_EXPORT QQuickPointerNativeGestureEvent : public QQuickSinglePointEvent { Q_OBJECT Q_PROPERTY(Qt::NativeGestureType type READ type CONSTANT) @@ -536,34 +550,65 @@ class Q_QUICK_PRIVATE_EXPORT QQuickPointerNativeGestureEvent : public QQuickPoin public: QQuickPointerNativeGestureEvent(QObject *parent = nullptr, QQuickPointerDevice *device = nullptr) - : QQuickPointerEvent(parent, device), m_gesturePoint(new QQuickEventPoint(this)) { } + : QQuickSinglePointEvent(parent, device) { } QQuickPointerEvent *reset(QEvent *) override; - void localize(QQuickItem *target) override; bool isPressEvent() const override; bool isUpdateEvent() const override; bool isReleaseEvent() const override; QQuickPointerNativeGestureEvent *asPointerNativeGestureEvent() override { return this; } const QQuickPointerNativeGestureEvent *asPointerNativeGestureEvent() const override { return this; } - int pointCount() const override { return 1; } - QQuickEventPoint *point(int i) const override; - QQuickEventPoint *pointById(int pointId) const override; - bool allPointsAccepted() const override; - bool allUpdatedPointsAccepted() const override; - bool allPointsGrabbed() const override; - QVector<QObject *> exclusiveGrabbers() const override; - void clearGrabbers() const override; - bool hasExclusiveGrabber(const QQuickPointerHandler *handler) const override; Qt::NativeGestureType type() const; qreal value() const; -private: - QQuickEventPoint *m_gesturePoint; - Q_DISABLE_COPY(QQuickPointerNativeGestureEvent) }; #endif // QT_CONFIG(gestures) +class Q_QUICK_PRIVATE_EXPORT QQuickPointerScrollEvent : public QQuickSinglePointEvent +{ + Q_OBJECT + Q_PROPERTY(QVector2D angleDelta READ angleDelta CONSTANT) + Q_PROPERTY(QVector2D pixelDelta READ pixelDelta CONSTANT) + Q_PROPERTY(bool hasAngleDelta READ hasAngleDelta CONSTANT) + Q_PROPERTY(bool hasPixelDelta READ hasPixelDelta CONSTANT) + Q_PROPERTY(bool inverted READ isInverted CONSTANT) + +public: + QQuickPointerScrollEvent(QObject *parent = nullptr, QQuickPointerDevice *device = nullptr) + : QQuickSinglePointEvent(parent, device) { } + + QQuickPointerEvent *reset(QEvent *) override; + void localize(QQuickItem *target) override; + bool isPressEvent() const override; + bool isUpdateEvent() const override; + bool isReleaseEvent() const override; + QQuickPointerScrollEvent *asPointerScrollEvent() override { return this; } + const QQuickPointerScrollEvent *asPointerScrollEvent() const override { return this; } + QVector2D angleDelta() const { return m_angleDelta; } + QVector2D pixelDelta() const { return m_pixelDelta; } + bool hasAngleDelta() const { return !angleDelta().isNull(); } + bool hasPixelDelta() const { return !pixelDelta().isNull(); } + bool isInverted() const { return m_inverted; } + Qt::ScrollPhase phase() const { return m_phase; } + +private: + // TODO add QQuickPointerDevice source() whenever QInputEvent is extended to have a source device + // then maybe Qt::MouseEventSource synthSource() will be obsolete... that's why it's not public now + Qt::MouseEventSource synthSource() const { return m_synthSource; } + +private: + QVector2D m_angleDelta; + QVector2D m_pixelDelta; + Qt::ScrollPhase m_phase = Qt::NoScrollPhase; + Qt::MouseEventSource m_synthSource = Qt::MouseEventNotSynthesized; + bool m_inverted = false; + + friend class QQuickWindowPrivate; + + Q_DISABLE_COPY(QQuickPointerScrollEvent) +}; + // ### Qt 6: move this to qtbase, replace QTouchDevice and the enums in QTabletEvent class Q_QUICK_PRIVATE_EXPORT QQuickPointerDevice : public QObject @@ -589,7 +634,6 @@ public: AllDevices = 0x7FFF }; Q_DECLARE_FLAGS(DeviceTypes, DeviceType) - Q_ENUM(DeviceType) Q_FLAG(DeviceTypes) enum PointerType : qint16 { @@ -601,7 +645,6 @@ public: AllPointerTypes = 0x7FFF }; Q_DECLARE_FLAGS(PointerTypes, PointerType) - Q_ENUM(PointerType) Q_FLAG(PointerTypes) enum CapabilityFlag : qint16 { @@ -618,7 +661,6 @@ public: YTilt = 0x1000 }; Q_DECLARE_FLAGS(Capabilities, CapabilityFlag) - Q_ENUM(CapabilityFlag) Q_FLAG(Capabilities) DeviceType type() const { return m_deviceType; } @@ -629,6 +671,7 @@ public: int buttonCount() const { return m_buttonCount; } QString name() const { return m_name; } QPointingDeviceUniqueId uniqueId() const { return m_uniqueId; } + const QTouchDevice *qTouchDevice() const; static QQuickPointerDevice *touchDevice(const QTouchDevice *d); static QList<QQuickPointerDevice *> touchDevices(); |