added support for qwindow

Change-Id: I5611a5d3590be596457dcad5e431ae110c2c8b47
Reviewed-on: http://codereview.qt.nokia.com/4258
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
bb10
Matthew Cattell 2011-09-06 13:38:23 +02:00 committed by Samuel Rødal
parent a446ff945f
commit 079ec157f8
1 changed files with 72 additions and 3 deletions

View 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);
}
}