diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2019-02-08 09:42:28 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-03-06 10:59:44 +0000 |
commit | a356d132b2a426ecd7edb7858245266433b3e855 (patch) | |
tree | 0edc8d50c2a81671229da7ec26ff75c9f8fb58ba /src/input/frontend | |
parent | 0a8742532fb1697203dd3d7d9c1c28b4cb052e2d (diff) |
Fix MouseEvent/WheelEvent to properly forward all keyboard modifiers
Modifiers was an enum when it should have been a flag.
This patch makes the transition toward having a flag.
The Modifiers enum is renamed Modifier and the flag
is named Modifiers.
This might affect BIC but this change is really
needed to make the modifiers property of Mouse/Wheel
event actually useful.
Change-Id: I67e472c3cc2654f8d3e84c6248b8e689c0306530
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/input/frontend')
-rw-r--r-- | src/input/frontend/qmouseevent.cpp | 58 | ||||
-rw-r--r-- | src/input/frontend/qmouseevent.h | 13 |
2 files changed, 39 insertions, 32 deletions
diff --git a/src/input/frontend/qmouseevent.cpp b/src/input/frontend/qmouseevent.cpp index 62f7a097e..2033eed36 100644 --- a/src/input/frontend/qmouseevent.cpp +++ b/src/input/frontend/qmouseevent.cpp @@ -43,6 +43,34 @@ QT_BEGIN_NAMESPACE namespace Qt3DInput { +namespace { + +template<typename EventClass, typename QtEventClass> +typename EventClass::Modifiers modifiersForEvent(const QtEventClass &event) +{ + const Qt::KeyboardModifiers eventModifiers = event.modifiers(); + typename EventClass::Modifiers modifiers = EventClass::NoModifier; + + if (eventModifiers & Qt::ShiftModifier) + modifiers |= EventClass::ShiftModifier; + + if (eventModifiers & Qt::ControlModifier) + modifiers |= EventClass::ControlModifier; + + if (eventModifiers & Qt::AltModifier) + modifiers |= EventClass::AltModifier; + + if (eventModifiers & Qt::MetaModifier) + modifiers |= EventClass::MetaModifier; + + if (eventModifiers & Qt::KeypadModifier) + modifiers |= EventClass::KeypadModifier; + + return modifiers; +} + +} // anonymous + // Notes: // Maybe we should provide the world pos of the intersection // The distance t along the segment line at which the intersection occurs @@ -270,20 +298,7 @@ int QMouseEvent::buttons() const */ QMouseEvent::Modifiers QMouseEvent::modifiers() const { - switch (m_event.modifiers()) { - case Qt::ShiftModifier: - return QMouseEvent::ShiftModifier; - case Qt::ControlModifier: - return QMouseEvent::ControlModifier; - case Qt::AltModifier: - return QMouseEvent::AltModifier; - case Qt::MetaModifier: - return QMouseEvent::MetaModifier; - case Qt::KeypadModifier: - return QMouseEvent::KeypadModifier; - default: - return QMouseEvent::NoModifier; - } + return modifiersForEvent<QMouseEvent, decltype(m_event)>(m_event); } /*! @@ -483,20 +498,7 @@ int QWheelEvent::buttons() const */ QWheelEvent::Modifiers QWheelEvent::modifiers() const { - switch (m_event.modifiers()) { - case Qt::ShiftModifier: - return QWheelEvent::ShiftModifier; - case Qt::ControlModifier: - return QWheelEvent::ControlModifier; - case Qt::AltModifier: - return QWheelEvent::AltModifier; - case Qt::MetaModifier: - return QWheelEvent::MetaModifier; - case Qt::KeypadModifier: - return QWheelEvent::KeypadModifier; - default: - return QWheelEvent::NoModifier; - } + return modifiersForEvent<QWheelEvent, decltype(m_event)>(m_event); } #endif // QT_CONFIG(wheelevent) diff --git a/src/input/frontend/qmouseevent.h b/src/input/frontend/qmouseevent.h index 63786ac28..9c6386036 100644 --- a/src/input/frontend/qmouseevent.h +++ b/src/input/frontend/qmouseevent.h @@ -70,7 +70,7 @@ public: }; Q_ENUM(Buttons) // LCOV_EXCL_LINE - enum Modifiers { + enum Modifier { NoModifier = Qt::NoModifier, ShiftModifier = Qt::ShiftModifier, ControlModifier = Qt::ControlModifier, @@ -78,7 +78,8 @@ public: MetaModifier = Qt::MetaModifier, KeypadModifier = Qt::KeypadModifier }; - Q_ENUM(Modifiers) // LCOV_EXCL_LINE + Q_DECLARE_FLAGS(Modifiers, Modifier) + Q_FLAG(Modifiers) explicit QMouseEvent(const QT_PREPEND_NAMESPACE(QMouseEvent) &e); ~QMouseEvent(); @@ -127,7 +128,7 @@ public: }; Q_ENUM(Buttons) // LCOV_EXCL_LINE - enum Modifiers { + enum Modifier { NoModifier = Qt::NoModifier, ShiftModifier = Qt::ShiftModifier, ControlModifier = Qt::ControlModifier, @@ -135,7 +136,8 @@ public: MetaModifier = Qt::MetaModifier, KeypadModifier = Qt::KeypadModifier }; - Q_ENUM(Modifiers) // LCOV_EXCL_LINE + Q_DECLARE_FLAGS(Modifiers, Modifier) + Q_FLAG(Modifiers) explicit QWheelEvent(const QT_PREPEND_NAMESPACE(QWheelEvent) &e); ~QWheelEvent(); @@ -159,6 +161,9 @@ typedef QSharedPointer<QWheelEvent> QWheelEventPtr; } // namespace Qt3DInput +Q_DECLARE_OPERATORS_FOR_FLAGS(Qt3DInput::QMouseEvent::Modifiers) +Q_DECLARE_OPERATORS_FOR_FLAGS(Qt3DInput::QWheelEvent::Modifiers) + QT_END_NAMESPACE Q_DECLARE_METATYPE(Qt3DInput::QMouseEvent*) // LCOV_EXCL_LINE |