diff options
author | Laszlo Agocs <laszlo.agocs@digia.com> | 2014-02-19 13:56:41 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-02-21 16:29:11 +0100 |
commit | f04011afa242f3c63b6670143a38093dc8d40a46 (patch) | |
tree | 02da83bea9e7a0b3801c89e734380f5beaefb753 /src/quickwidgets/qquickwidget.cpp | |
parent | bbf1ec42e5875a6e8145211348e509690a30d0a5 (diff) |
Add touch and wheel events to QQuickWidget
Change-Id: Idb444cbc62491469230c5a1f624d71cf20bce492
Reviewed-by: Paul Olav Tvete <paul.tvete@digia.com>
Diffstat (limited to 'src/quickwidgets/qquickwidget.cpp')
-rw-r--r-- | src/quickwidgets/qquickwidget.cpp | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/src/quickwidgets/qquickwidget.cpp b/src/quickwidgets/qquickwidget.cpp index 840877d72e..7458d2de01 100644 --- a/src/quickwidgets/qquickwidget.cpp +++ b/src/quickwidgets/qquickwidget.cpp @@ -746,6 +746,10 @@ void QQuickWidget::mouseMoveEvent(QMouseEvent *e) Q_D(QQuickWidget); Q_QUICK_PROFILE(addEvent<QQuickProfiler::Mouse>()); + // Use the constructor taking localPos and screenPos. That puts localPos into the + // event's localPos and windowPos, and screenPos into the event's screenPos. This way + // the windowPos in e is ignored and is replaced by localPos. This is necessary + // because QQuickWindow thinks of itself as a top-level window always. QMouseEvent mappedEvent(e->type(), e->localPos(), e->screenPos(), e->button(), e->buttons(), e->modifiers()); d->offscreenWindow->mouseMoveEvent(&mappedEvent); } @@ -784,18 +788,43 @@ void QQuickWidget::mouseReleaseEvent(QMouseEvent *e) d->offscreenWindow->mouseReleaseEvent(&mappedEvent); } +#ifndef QT_NO_WHEELEVENT +/*! \reimp */ +void QQuickWidget::wheelEvent(QWheelEvent *e) +{ + Q_D(QQuickWidget); + Q_QUICK_PROFILE(addEvent<QQuickProfiler::Mouse>()); + + // Wheel events only have local and global positions, no need to map. + d->offscreenWindow->wheelEvent(e); +} +#endif + /*! \reimp */ bool QQuickWidget::event(QEvent *e) { Q_D(QQuickWidget); - if (e->type() == QEvent::Timer) { + + switch (e->type()) { + case QEvent::Timer: d->eventPending = false; killTimer(d->updateTimer); d->updateTimer = 0; if (d->updatePending) d->renderSceneGraph(); return true; + + case QEvent::TouchBegin: + case QEvent::TouchEnd: + case QEvent::TouchUpdate: + case QEvent::TouchCancel: + // Touch events only have local and global positions, no need to map. + return d->offscreenWindow->event(e); + + default: + break; } + return QWidget::event(e); } |