summaryrefslogtreecommitdiffstats
path: root/src/testlib/qtesttouch.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/testlib/qtesttouch.h')
-rw-r--r--src/testlib/qtesttouch.h77
1 files changed, 73 insertions, 4 deletions
diff --git a/src/testlib/qtesttouch.h b/src/testlib/qtesttouch.h
index a1fe2df382..c855677189 100644
--- a/src/testlib/qtesttouch.h
+++ b/src/testlib/qtesttouch.h
@@ -51,10 +51,10 @@
#include <QtTest/qtestassert.h>
#include <QtTest/qtestsystem.h>
#include <QtTest/qtestspontaneevent.h>
-
+#include <QtGui/QWindowSystemInterface>
#include <QtCore/qmap.h>
#include <QtGui/qevent.h>
-#include <QtGui/qwidget.h>
+#include <QtWidgets/qwidget.h>
QT_BEGIN_HEADER
@@ -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);
+ }
}