diff options
-rw-r--r-- | src/imports/qtquick2/plugins.qmltypes | 1 | ||||
-rw-r--r-- | src/quick/items/qquickevents.cpp | 22 | ||||
-rw-r--r-- | src/quick/items/qquickevents_p_p.h | 8 | ||||
-rw-r--r-- | src/quick/items/qquickmousearea.cpp | 2 |
4 files changed, 29 insertions, 4 deletions
diff --git a/src/imports/qtquick2/plugins.qmltypes b/src/imports/qtquick2/plugins.qmltypes index a1a3723600..c3a14254f3 100644 --- a/src/imports/qtquick2/plugins.qmltypes +++ b/src/imports/qtquick2/plugins.qmltypes @@ -4628,6 +4628,7 @@ Module { Property { name: "pixelDelta"; type: "QPoint"; isReadonly: true } Property { name: "buttons"; type: "int"; isReadonly: true } Property { name: "modifiers"; type: "int"; isReadonly: true } + Property { name: "inverted"; type: "bool" } Property { name: "accepted"; type: "bool" } } Component { diff --git a/src/quick/items/qquickevents.cpp b/src/quick/items/qquickevents.cpp index 5061c19f1e..14c0adf393 100644 --- a/src/quick/items/qquickevents.cpp +++ b/src/quick/items/qquickevents.cpp @@ -415,4 +415,26 @@ Item { \endqml */ +/*! + \qmlproperty int QtQuick::WheelEvent::inverted + + Returns whether the delta values delivered with the event are inverted. + + Normally, a vertical wheel will produce a WheelEvent with positive delta + values if the top of the wheel is rotating away from the hand operating it. + Similarly, a horizontal wheel movement will produce a QWheelEvent with + positive delta values if the top of the wheel is moved to the left. + + However, on some platforms this is configurable, so that the same + operations described above will produce negative delta values (but with the + same magnitude). For instance, in a QML component (such as a tumbler or a + slider) where it is appropriate to synchronize the movement or rotation of + an item with the direction of the wheel, regardless of the system settings, + the wheel event handler can use the inverted property to decide whether to + negate the angleDelta or pixelDelta values. + + \note Many platforms provide no such information. On such platforms + \l inverted always returns false. +*/ + QT_END_NAMESPACE diff --git a/src/quick/items/qquickevents_p_p.h b/src/quick/items/qquickevents_p_p.h index b28ab555b0..3eafce4d7e 100644 --- a/src/quick/items/qquickevents_p_p.h +++ b/src/quick/items/qquickevents_p_p.h @@ -153,13 +153,14 @@ class QQuickWheelEvent : public QObject 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(bool accepted READ isAccepted WRITE setAccepted) public: QQuickWheelEvent(qreal x, qreal y, const QPoint& angleDelta, const QPoint& pixelDelta, - Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers) + Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, bool inverted) : _x(x), _y(y), _angleDelta(angleDelta), _pixelDelta(pixelDelta), _buttons(buttons), - _modifiers(modifiers), _accepted(true) {} + _modifiers(modifiers), _inverted(inverted), _accepted(true) {} qreal x() const { return _x; } qreal y() const { return _y; } @@ -167,7 +168,7 @@ public: QPoint pixelDelta() const { return _pixelDelta; } int buttons() const { return _buttons; } int modifiers() const { return _modifiers; } - + bool inverted() const { return _inverted; } bool isAccepted() { return _accepted; } void setAccepted(bool accepted) { _accepted = accepted; } @@ -178,6 +179,7 @@ private: QPoint _pixelDelta; Qt::MouseButtons _buttons; Qt::KeyboardModifiers _modifiers; + bool _inverted; bool _accepted; }; diff --git a/src/quick/items/qquickmousearea.cpp b/src/quick/items/qquickmousearea.cpp index 920a86881b..f940df59ed 100644 --- a/src/quick/items/qquickmousearea.cpp +++ b/src/quick/items/qquickmousearea.cpp @@ -866,7 +866,7 @@ void QQuickMouseArea::wheelEvent(QWheelEvent *event) } QQuickWheelEvent we(event->posF().x(), event->posF().y(), event->angleDelta(), - event->pixelDelta(), event->buttons(), event->modifiers()); + event->pixelDelta(), event->buttons(), event->modifiers(), event->inverted()); we.setAccepted(d->isWheelConnected()); emit wheel(&we); if (!we.isAccepted()) |