diff options
Diffstat (limited to 'tests/manual/quick/touchbrowser/touchmockingapplication.cpp')
-rw-r--r-- | tests/manual/quick/touchbrowser/touchmockingapplication.cpp | 91 |
1 files changed, 45 insertions, 46 deletions
diff --git a/tests/manual/quick/touchbrowser/touchmockingapplication.cpp b/tests/manual/quick/touchbrowser/touchmockingapplication.cpp index 41b731a6a..b856365bf 100644 --- a/tests/manual/quick/touchbrowser/touchmockingapplication.cpp +++ b/tests/manual/quick/touchbrowser/touchmockingapplication.cpp @@ -29,12 +29,9 @@ #include "touchmockingapplication.h" #include <qpa/qwindowsysteminterface.h> -#include <QtCore/QEvent> -#include <QtGui/QMouseEvent> -#include <QtGui/QTouchDevice> -#include <QtGui/QTouchEvent> #include <QtQuick/QQuickItem> #include <QtQuick/QQuickView> +#include <QInputDevice> static inline bool isTouchEvent(const QEvent* event) { @@ -94,10 +91,10 @@ bool TouchMockingApplication::notify(QObject* target, QEvent* event) if (event->type() == QEvent::KeyRelease && static_cast<QKeyEvent*>(event)->key() == Qt::Key_Control) { foreach (int id, m_heldTouchPoints) if (m_touchPoints.contains(id) && !QGuiApplication::mouseButtons().testFlag(Qt::MouseButton(id))) { - m_touchPoints[id].setState(Qt::TouchPointReleased); + QMutableEventPoint::from(m_touchPoints[id]).setState(QEventPoint::Released); m_heldTouchPoints.remove(id); } else - m_touchPoints[id].setState(Qt::TouchPointStationary); + QMutableEventPoint::from(m_touchPoints[id]).setState(QEventPoint::Stationary); sendTouchEvent(window, m_heldTouchPoints.isEmpty() ? QEvent::TouchEnd : QEvent::TouchUpdate, static_cast<QKeyEvent*>(event)->timestamp()); } @@ -105,19 +102,19 @@ bool TouchMockingApplication::notify(QObject* target, QEvent* event) if (isMouseEvent(event)) { const QMouseEvent* const mouseEvent = static_cast<QMouseEvent*>(event); - QTouchEvent::TouchPoint touchPoint; - touchPoint.setPressure(1); + QEventPoint touchPoint; + QMutableEventPoint::from(touchPoint).setPressure(1); QEvent::Type touchType = QEvent::None; switch (mouseEvent->type()) { case QEvent::MouseButtonPress: - touchPoint.setId(mouseEvent->button()); + QMutableEventPoint::from(touchPoint).setId(mouseEvent->button()); if (m_touchPoints.contains(touchPoint.id())) { - touchPoint.setState(Qt::TouchPointMoved); + QMutableEventPoint::from(touchPoint).setState(QEventPoint::Updated); touchType = QEvent::TouchUpdate; } else { - touchPoint.setState(Qt::TouchPointPressed); + QMutableEventPoint::from(touchPoint).setState(QEventPoint::Pressed); // Check if more buttons are held down than just the event triggering one. if (mouseEvent->buttons() > mouseEvent->button()) touchType = QEvent::TouchUpdate; @@ -135,8 +132,8 @@ bool TouchMockingApplication::notify(QObject* target, QEvent* event) return true; } touchType = QEvent::TouchUpdate; - touchPoint.setId(mouseEvent->buttons()); - touchPoint.setState(Qt::TouchPointMoved); + QMutableEventPoint::from(touchPoint).setId(mouseEvent->buttons()); + QMutableEventPoint::from(touchPoint).setState(QEventPoint::Updated); break; case QEvent::MouseButtonRelease: // Check if any buttons are still held down after this event. @@ -144,8 +141,8 @@ bool TouchMockingApplication::notify(QObject* target, QEvent* event) touchType = QEvent::TouchUpdate; else touchType = QEvent::TouchEnd; - touchPoint.setId(mouseEvent->button()); - touchPoint.setState(Qt::TouchPointReleased); + QMutableEventPoint::from(touchPoint).setId(mouseEvent->button()); + QMutableEventPoint::from(touchPoint).setState(QEventPoint::Released); break; case QEvent::MouseButtonDblClick: // Eat double-clicks, their accompanying press event is all we need. @@ -163,7 +160,7 @@ bool TouchMockingApplication::notify(QObject* target, QEvent* event) if (touchPoint.id() & Qt::RightButton) updateTouchPoint(mouseEvent, touchPoint, Qt::RightButton); - if (m_holdingControl && touchPoint.state() == Qt::TouchPointReleased) { + if (m_holdingControl && touchPoint.state() == QEventPoint::Released) { // We avoid sending the release event because the Flickable is // listening to mouse events and would start a bounce-back // animation if it received a mouse release. @@ -172,9 +169,9 @@ bool TouchMockingApplication::notify(QObject* target, QEvent* event) } // Update states for all other touch-points - for (QHash<int, QTouchEvent::TouchPoint>::iterator it = m_touchPoints.begin(), end = m_touchPoints.end(); it != end; ++it) { + for (QHash<int, QEventPoint>::iterator it = m_touchPoints.begin(), end = m_touchPoints.end(); it != end; ++it) { if (!(it.value().id() & touchPoint.id())) - it.value().setState(Qt::TouchPointStationary); + QMutableEventPoint::from(it.value()).setState(QEventPoint::Stationary); } Q_ASSERT(touchType != QEvent::None); @@ -189,14 +186,14 @@ bool TouchMockingApplication::notify(QObject* target, QEvent* event) return QGuiApplication::notify(target, event); } -void TouchMockingApplication::updateTouchPoint(const QMouseEvent* mouseEvent, QTouchEvent::TouchPoint touchPoint, Qt::MouseButton mouseButton) +void TouchMockingApplication::updateTouchPoint(const QMouseEvent* mouseEvent, QEventPoint touchPoint, Qt::MouseButton mouseButton) { // Ignore inserting additional touch points if Ctrl isn't held because it produces // inconsistent touch events and results in assers in the gesture recognizers. if (!m_holdingControl && m_touchPoints.size() && !m_touchPoints.contains(mouseButton)) return; - if (m_holdingControl && touchPoint.state() == Qt::TouchPointReleased) { + if (m_holdingControl && touchPoint.state() == QEventPoint::Released) { m_heldTouchPoints.insert(mouseButton); return; } @@ -205,57 +202,59 @@ void TouchMockingApplication::updateTouchPoint(const QMouseEvent* mouseEvent, QT // but since the canvas translates touch events we actually need to pass // the screen position as the scene position to deliver the appropriate // coordinates to the target. - touchPoint.setPos(mouseEvent->localPos()); - touchPoint.setScenePos(mouseEvent->screenPos()); + QMutableEventPoint::from(touchPoint).setPosition(mouseEvent->position()); + QMutableEventPoint::from(touchPoint).setScenePosition(mouseEvent->globalPosition()); - if (touchPoint.state() == Qt::TouchPointPressed) - touchPoint.setStartScenePos(mouseEvent->screenPos()); + if (touchPoint.state() == QEventPoint::Pressed) + QMutableEventPoint::from(touchPoint).setScenePosition(mouseEvent->scenePosition()); else { - const QTouchEvent::TouchPoint& oldTouchPoint = m_touchPoints[mouseButton]; - touchPoint.setStartScenePos(oldTouchPoint.startScenePos()); - touchPoint.setLastPos(oldTouchPoint.pos()); - touchPoint.setLastScenePos(oldTouchPoint.scenePos()); + const QEventPoint& oldTouchPoint = m_touchPoints[mouseButton]; + QMutableEventPoint::from(touchPoint).setGlobalLastPosition(oldTouchPoint.globalPosition()); } // Update current touch-point. - touchPoint.setId(mouseButton); + QMutableEventPoint::from(touchPoint).setId(mouseButton); m_touchPoints.insert(mouseButton, touchPoint); } bool TouchMockingApplication::sendTouchEvent(QQuickView* window, QEvent::Type type, ulong timestamp) { - static QTouchDevice* device = 0; + static QPointingDevice* device = 0; if (!device) { - device = new QTouchDevice; - device->setType(QTouchDevice::TouchScreen); - QWindowSystemInterface::registerTouchDevice(device); + device = new QPointingDevice(QStringLiteral("MockTouchDevice"), 1, + QPointingDevice::DeviceType::TouchScreen, + QPointingDevice::PointerType::AllPointerTypes, + QInputDevice::Capability::All, 3, 3, + QString(), QPointingDeviceUniqueId(), window->rootObject()); + + QWindowSystemInterface::registerInputDevice(device); } m_pendingFakeTouchEventCount++; - const QList<QTouchEvent::TouchPoint>& currentTouchPoints = m_touchPoints.values(); - Qt::TouchPointStates touchPointStates = Qt::TouchPointState(); - foreach (const QTouchEvent::TouchPoint& touchPoint, currentTouchPoints) + const QList<QEventPoint>& currentTouchPoints = m_touchPoints.values(); + QEventPoint::States touchPointStates = QEventPoint::States(); + foreach (const QEventPoint& touchPoint, currentTouchPoints) touchPointStates |= touchPoint.state(); - QTouchEvent event(type, device, Qt::NoModifier, touchPointStates, currentTouchPoints); + QTouchEvent event(type, device, Qt::NoModifier, currentTouchPoints); event.setTimestamp(timestamp); event.setAccepted(false); QGuiApplication::notify(window, &event); - updateVisualMockTouchPoints(window,m_holdingControl ? currentTouchPoints : QList<QTouchEvent::TouchPoint>()); + updateVisualMockTouchPoints(window, m_holdingControl ? currentTouchPoints : QList<QEventPoint>()); // Get rid of touch-points that are no longer valid - foreach (const QTouchEvent::TouchPoint& touchPoint, currentTouchPoints) { - if (touchPoint.state() == Qt::TouchPointReleased) + foreach (const QEventPoint& touchPoint, currentTouchPoints) { + if (touchPoint.state() == QEventPoint::Released) m_touchPoints.remove(touchPoint.id()); } return event.isAccepted(); } -void TouchMockingApplication::updateVisualMockTouchPoints(QQuickView* window,const QList<QTouchEvent::TouchPoint>& touchPoints) +void TouchMockingApplication::updateVisualMockTouchPoints(QQuickView* window,const QList<QEventPoint>& touchPoints) { if (touchPoints.isEmpty()) { // Hide all touch indicator items. @@ -265,11 +264,11 @@ void TouchMockingApplication::updateVisualMockTouchPoints(QQuickView* window,con return; } - foreach (const QTouchEvent::TouchPoint& touchPoint, touchPoints) { + foreach (const QEventPoint& touchPoint, touchPoints) { QQuickItem* mockTouchPointItem = m_activeMockComponents.value(touchPoint.id()); if (!mockTouchPointItem) { - QQmlComponent touchMockPointComponent(window->engine(), QUrl("qrc:///qml/MockTouchPoint.qml")); + QQmlComponent touchMockPointComponent(window->engine(), QUrl("qrc:///MockTouchPoint.qml")); mockTouchPointItem = qobject_cast<QQuickItem*>(touchMockPointComponent.create()); Q_ASSERT(mockTouchPointItem); m_activeMockComponents.insert(touchPoint.id(), mockTouchPointItem); @@ -278,10 +277,10 @@ void TouchMockingApplication::updateVisualMockTouchPoints(QQuickView* window,con mockTouchPointItem->setParentItem(window->rootObject()); } - mockTouchPointItem->setX(touchPoint.pos().x()); - mockTouchPointItem->setY(touchPoint.pos().y()); + mockTouchPointItem->setX(touchPoint.position().x()); + mockTouchPointItem->setY(touchPoint.position().y()); mockTouchPointItem->setWidth(touchPoint.ellipseDiameters().width()); mockTouchPointItem->setHeight(touchPoint.ellipseDiameters().height()); - mockTouchPointItem->setProperty("pressed", QVariant(touchPoint.state() != Qt::TouchPointReleased)); + mockTouchPointItem->setProperty("pressed", QVariant(touchPoint.state() != QEventPoint::Released)); } } |