From 079ec157f82f79814bd70a1f8753daa37b8d5c3f Mon Sep 17 00:00:00 2001 From: Matthew Cattell Date: Tue, 6 Sep 2011 13:38:23 +0200 Subject: [PATCH] added support for qwindow MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Change-Id: I5611a5d3590be596457dcad5e431ae110c2c8b47 Reviewed-on: http://codereview.qt.nokia.com/4258 Reviewed-by: Samuel Rødal --- src/testlib/qtesttouch.h | 75 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 72 insertions(+), 3 deletions(-) diff --git a/src/testlib/qtesttouch.h b/src/testlib/qtesttouch.h index 53a801b..c855677 100644 --- a/src/testlib/qtesttouch.h +++ b/src/testlib/qtesttouch.h @@ -51,7 +51,7 @@ #include #include #include - +#include #include #include #include @@ -84,6 +84,14 @@ namespace QTest p.setState(Qt::TouchPointPressed); return *this; } + QTouchEventSequence& press(int touchId, const QPoint &pt, QWindow *window = 0) + { + QTouchEvent::TouchPoint &p = point(touchId); + p.setScreenPos(mapToScreen(window, pt)); + p.setState(Qt::TouchPointPressed); + return *this; + } + QTouchEventSequence& move(int touchId, const QPoint &pt, QWidget *widget = 0) { QTouchEvent::TouchPoint &p = point(touchId); @@ -91,6 +99,13 @@ namespace QTest p.setState(Qt::TouchPointMoved); return *this; } + QTouchEventSequence& move(int touchId, const QPoint &pt, QWindow *window = 0) + { + QTouchEvent::TouchPoint &p = point(touchId); + p.setScreenPos(mapToScreen(window, pt)); + p.setState(Qt::TouchPointMoved); + return *this; + } QTouchEventSequence& release(int touchId, const QPoint &pt, QWidget *widget = 0) { QTouchEvent::TouchPoint &p = point(touchId); @@ -98,6 +113,13 @@ namespace QTest p.setState(Qt::TouchPointReleased); return *this; } + QTouchEventSequence& release(int touchId, const QPoint &pt, QWindow *window = 0) + { + QTouchEvent::TouchPoint &p = point(touchId); + p.setScreenPos(mapToScreen(window, pt)); + p.setState(Qt::TouchPointReleased); + return *this; + } QTouchEventSequence& stationary(int touchId) { QTouchEvent::TouchPoint &p = point(touchId); @@ -110,6 +132,10 @@ namespace QTest : targetWidget(widget), deviceType(aDeviceType) { } + QTouchEventSequence(QWindow *window, QTouchEvent::DeviceType aDeviceType) + : targetWindow(window), deviceType(aDeviceType) + { + } QTouchEventSequence(const QTouchEventSequence &v); void operator=(const QTouchEventSequence&); @@ -125,16 +151,53 @@ namespace QTest return widget->mapToGlobal(pt); return targetWidget ? targetWidget->mapToGlobal(pt) : pt; } + QPoint mapToScreen(QWindow *window, const QPoint &pt) + { + if(window) + return window->mapToGlobal(pt); + return targetWindow ? targetWindow->mapToGlobal(pt) : pt; + } + QWindowSystemInterface::TouchPoint touchPoint(const QTouchEvent::TouchPoint& point) + { + QWindowSystemInterface::TouchPoint p; + p.id = point.id(); + p.isPrimary = point.isPrimary(); + p.normalPosition = point.screenRect().topLeft(); + p.area = point.screenRect(); + p.pressure = point.pressure(); + p.state = point.state(); + return p; + } + QList touchPointList(const QList& pointList) + { + QList newList; + + foreach(QTouchEvent::TouchPoint p, pointList) + { + newList.append(touchPoint(p)); + } + return newList; + } void commit() { - qt_translateRawTouchEvent(targetWidget, deviceType, points.values()); - targetWidget = 0; + if(targetWindow) + { + QWindowSystemInterface::handleTouchEvent(targetWindow,QEvent::None,deviceType, touchPointList(points.values())); + targetWindow = 0; + } + else if(targetWidget) + { + qt_translateRawTouchEvent(targetWidget, deviceType, points.values()); + targetWidget = 0; + } } QMap points; QWidget *targetWidget; + QWindow *targetWindow; QTouchEvent::DeviceType deviceType; friend QTouchEventSequence touchEvent(QWidget *, QTouchEvent::DeviceType); + friend QTouchEventSequence touchEvent(QWindow *, QTouchEvent::DeviceType); }; inline @@ -143,6 +206,12 @@ namespace QTest { return QTouchEventSequence(widget, deviceType); } + inline + QTouchEventSequence touchEvent(QWindow *window = 0, + QTouchEvent::DeviceType deviceType = QTouchEvent::TouchScreen) + { + return QTouchEventSequence(window, deviceType); + } } -- 2.7.4