aboutsummaryrefslogtreecommitdiffstats
path: root/src/quickwidgets/qquickwidget.cpp
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@digia.com>2014-02-19 13:56:41 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-02-21 16:29:11 +0100
commitf04011afa242f3c63b6670143a38093dc8d40a46 (patch)
tree02da83bea9e7a0b3801c89e734380f5beaefb753 /src/quickwidgets/qquickwidget.cpp
parentbbf1ec42e5875a6e8145211348e509690a30d0a5 (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.cpp31
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);
}