diff options
author | Shawn Rutledge <shawn.rutledge@qt.io> | 2018-06-26 20:23:24 +0200 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@qt.io> | 2018-06-29 14:42:18 +0000 |
commit | 73258eca7ab7e3981d9f4aaa5484020cb67854a0 (patch) | |
tree | 72805a0605bc4c47a27fdf2a9187aca4ed6b593c /src/quick | |
parent | da722fb448f06cf43780e6f857a1ccd9f07176d6 (diff) |
Move QQSinglePointHandler::acceptedButtons to QQPointerDeviceHandler
This property must exist in DragHandler, but we're preparing to have
DragHandler inherit from MultiPointHandler. So it's no longer true
that a MultiPointHandler only handles touch events:
if minimumPointCount is set to 1, it can handle the mouse as well.
Change-Id: If6432e22b4382e79820c4d993645cf3de3b83d0c
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'src/quick')
-rw-r--r-- | src/quick/handlers/qquickpointerdevicehandler.cpp | 45 | ||||
-rw-r--r-- | src/quick/handlers/qquickpointerdevicehandler_p.h | 4 | ||||
-rw-r--r-- | src/quick/handlers/qquickpointerdevicehandler_p_p.h | 1 | ||||
-rw-r--r-- | src/quick/handlers/qquicksinglepointhandler.cpp | 41 | ||||
-rw-r--r-- | src/quick/handlers/qquicksinglepointhandler_p.h | 6 |
5 files changed, 51 insertions, 46 deletions
diff --git a/src/quick/handlers/qquickpointerdevicehandler.cpp b/src/quick/handlers/qquickpointerdevicehandler.cpp index add6513c1a..7b9f6839b1 100644 --- a/src/quick/handlers/qquickpointerdevicehandler.cpp +++ b/src/quick/handlers/qquickpointerdevicehandler.cpp @@ -84,6 +84,51 @@ QQuickPointerDevice::PointerTypes QQuickPointerDeviceHandler::acceptedPointerTyp return d->acceptedPointerTypes; } +/*! + \qmlproperty int QtQuick::PointerDeviceHandler::acceptedButtons + + The mouse buttons which can activate this Pointer Handler. + + By default, this property is set to \l {QtQuick::MouseEvent::button} {Qt.LeftButton}. + It can be set to an OR combination of mouse buttons, and will ignore events + from other buttons. + + For example, a control could be made to respond to left and right clicks + in different ways, with two handlers: + + \qml + Item { + TapHandler { + onTapped: console.log("left clicked") + } + TapHandler { + acceptedButtons: Qt.RightButton + onTapped: console.log("right clicked") + } + } + \endqml + + \note Tapping on a touchscreen or tapping the stylus on a graphics tablet + emulates clicking the left mouse button. This behavior can be altered via + \l {PointerDeviceHandler::acceptedDevices}{acceptedDevices} or + \l {PointerDeviceHandler::acceptedPointerTypes}{acceptedPointerTypes}. +*/ +Qt::MouseButtons QQuickPointerDeviceHandler::acceptedButtons() const +{ + Q_D(const QQuickPointerDeviceHandler); + return d->acceptedButtons; +} + +void QQuickPointerDeviceHandler::setAcceptedButtons(Qt::MouseButtons buttons) +{ + Q_D(QQuickPointerDeviceHandler); + if (d->acceptedButtons == buttons) + return; + + d->acceptedButtons = buttons; + emit acceptedButtonsChanged(); +} + Qt::KeyboardModifiers QQuickPointerDeviceHandler::acceptedModifiers() const { Q_D(const QQuickPointerDeviceHandler); diff --git a/src/quick/handlers/qquickpointerdevicehandler_p.h b/src/quick/handlers/qquickpointerdevicehandler_p.h index cd861b2bf1..4194769fd7 100644 --- a/src/quick/handlers/qquickpointerdevicehandler_p.h +++ b/src/quick/handlers/qquickpointerdevicehandler_p.h @@ -61,6 +61,7 @@ class Q_AUTOTEST_EXPORT QQuickPointerDeviceHandler : public QQuickPointerHandler Q_OBJECT Q_PROPERTY(QQuickPointerDevice::DeviceTypes acceptedDevices READ acceptedDevices WRITE setAcceptedDevices NOTIFY acceptedDevicesChanged) Q_PROPERTY(QQuickPointerDevice::PointerTypes acceptedPointerTypes READ acceptedPointerTypes WRITE setAcceptedPointerTypes NOTIFY acceptedPointerTypesChanged) + Q_PROPERTY(Qt::MouseButtons acceptedButtons READ acceptedButtons WRITE setAcceptedButtons NOTIFY acceptedButtonsChanged) Q_PROPERTY(Qt::KeyboardModifiers acceptedModifiers READ acceptedModifiers WRITE setAcceptedModifiers NOTIFY acceptedModifiersChanged) public: @@ -69,16 +70,19 @@ public: QQuickPointerDevice::DeviceTypes acceptedDevices() const; QQuickPointerDevice::PointerTypes acceptedPointerTypes() const; + Qt::MouseButtons acceptedButtons() const; Qt::KeyboardModifiers acceptedModifiers() const; public Q_SLOTS: void setAcceptedDevices(QQuickPointerDevice::DeviceTypes acceptedDevices); void setAcceptedPointerTypes(QQuickPointerDevice::PointerTypes acceptedPointerTypes); + void setAcceptedButtons(Qt::MouseButtons buttons); void setAcceptedModifiers(Qt::KeyboardModifiers acceptedModifiers); Q_SIGNALS: void acceptedDevicesChanged(); void acceptedPointerTypesChanged(); + void acceptedButtonsChanged(); void acceptedModifiersChanged(); protected: diff --git a/src/quick/handlers/qquickpointerdevicehandler_p_p.h b/src/quick/handlers/qquickpointerdevicehandler_p_p.h index ee6bd060d6..6a950590f3 100644 --- a/src/quick/handlers/qquickpointerdevicehandler_p_p.h +++ b/src/quick/handlers/qquickpointerdevicehandler_p_p.h @@ -66,6 +66,7 @@ public: QQuickPointerDevice::DeviceTypes acceptedDevices = QQuickPointerDevice::AllDevices; QQuickPointerDevice::PointerTypes acceptedPointerTypes = QQuickPointerDevice::AllPointerTypes; + Qt::MouseButtons acceptedButtons = Qt::LeftButton; Qt::KeyboardModifiers acceptedModifiers = Qt::KeyboardModifierMask; }; diff --git a/src/quick/handlers/qquicksinglepointhandler.cpp b/src/quick/handlers/qquicksinglepointhandler.cpp index 84f8349a53..71c05891d4 100644 --- a/src/quick/handlers/qquicksinglepointhandler.cpp +++ b/src/quick/handlers/qquicksinglepointhandler.cpp @@ -61,7 +61,6 @@ Q_DECLARE_LOGGING_CATEGORY(DBG_TOUCH_TARGET) QQuickSinglePointHandler::QQuickSinglePointHandler(QObject *parent) : QQuickPointerDeviceHandler(parent) - , m_acceptedButtons(Qt::LeftButton) , m_ignoreAdditionalPoints(false) { } @@ -71,7 +70,7 @@ bool QQuickSinglePointHandler::wantsPointerEvent(QQuickPointerEvent *event) if (!QQuickPointerDeviceHandler::wantsPointerEvent(event)) return false; if (event->device()->pointerType() != QQuickPointerDevice::Finger && - (event->buttons() & m_acceptedButtons) == 0 && (event->button() & m_acceptedButtons) == 0) + (event->buttons() & acceptedButtons()) == 0 && (event->button() & acceptedButtons()) == 0) return false; if (m_pointInfo.m_id) { @@ -190,44 +189,6 @@ void QQuickSinglePointHandler::setPointId(int id) m_pointInfo.m_id = id; } -/*! - \qmlproperty int QtQuick::SinglePointHandler::acceptedButtons - - The mouse buttons which can activate this Pointer Handler. - - By default, this property is set to \l {QtQuick::MouseEvent::button} {Qt.LeftButton}. - It can be set to an OR combination of mouse buttons, and will ignore events - from other buttons. - - For example, a control could be made to respond to left and right clicks - in different ways, with two handlers: - - \qml - Item { - TapHandler { - onTapped: console.log("left clicked") - } - TapHandler { - acceptedButtons: Qt.RightButton - onTapped: console.log("right clicked") - } - } - \endqml - - \note Tapping on a touchscreen or tapping the stylus on a graphics tablet - emulates clicking the left mouse button. This behavior can be altered via - \l {PointerDeviceHandler::acceptedDevices}{acceptedDevices} or - \l {PointerDeviceHandler::acceptedPointerTypes}{acceptedPointerTypes}. -*/ -void QQuickSinglePointHandler::setAcceptedButtons(Qt::MouseButtons buttons) -{ - if (m_acceptedButtons == buttons) - return; - - m_acceptedButtons = buttons; - emit acceptedButtonsChanged(); -} - void QQuickSinglePointHandler::reset() { setActive(false); diff --git a/src/quick/handlers/qquicksinglepointhandler_p.h b/src/quick/handlers/qquicksinglepointhandler_p.h index 79bf74b222..7c225aab46 100644 --- a/src/quick/handlers/qquicksinglepointhandler_p.h +++ b/src/quick/handlers/qquicksinglepointhandler_p.h @@ -59,21 +59,16 @@ QT_BEGIN_NAMESPACE class Q_QUICK_PRIVATE_EXPORT QQuickSinglePointHandler : public QQuickPointerDeviceHandler { Q_OBJECT - Q_PROPERTY(Qt::MouseButtons acceptedButtons READ acceptedButtons WRITE setAcceptedButtons NOTIFY acceptedButtonsChanged) Q_PROPERTY(QQuickHandlerPoint point READ point NOTIFY pointChanged) public: explicit QQuickSinglePointHandler(QObject *parent = nullptr); virtual ~QQuickSinglePointHandler() { } - Qt::MouseButtons acceptedButtons() const { return m_acceptedButtons; } - void setAcceptedButtons(Qt::MouseButtons buttons); - QQuickHandlerPoint point() const { return m_pointInfo; } Q_SIGNALS: void pointChanged(); void singlePointGrabChanged(); // QQuickPointerHandler::grabChanged signal can't be a property notifier here - void acceptedButtonsChanged(); protected: bool wantsPointerEvent(QQuickPointerEvent *event) override; @@ -94,7 +89,6 @@ private: private: QQuickHandlerPoint m_pointInfo; - Qt::MouseButtons m_acceptedButtons; bool m_ignoreAdditionalPoints : 1; }; |