added support for qwindow
authorMatthew Cattell <matthew.cattell@nokia.com>
Tue, 6 Sep 2011 11:38:23 +0000 (13:38 +0200)
committerSamuel Rødal <samuel.rodal@nokia.com>
Tue, 6 Sep 2011 11:41:01 +0000 (13:41 +0200)
Change-Id: I5611a5d3590be596457dcad5e431ae110c2c8b47
Reviewed-on: http://codereview.qt.nokia.com/4258
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
src/testlib/qtesttouch.h

index 53a801b..c855677 100644 (file)
@@ -51,7 +51,7 @@
 #include <QtTest/qtestassert.h>
 #include <QtTest/qtestsystem.h>
 #include <QtTest/qtestspontaneevent.h>
-
+#include <QtGui/QWindowSystemInterface>
 #include <QtCore/qmap.h>
 #include <QtGui/qevent.h>
 #include <QtWidgets/qwidget.h>
@@ -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<struct QWindowSystemInterface::TouchPoint> touchPointList(const QList<QTouchEvent::TouchPoint>& pointList)
+        {
+            QList<struct QWindowSystemInterface::TouchPoint> 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<int, QTouchEvent::TouchPoint> 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);
+    }
 
 }