From 7100a74def3a82bc52c93b800cec973bf312b1b3 Mon Sep 17 00:00:00 2001 From: juhvu Date: Wed, 21 Sep 2011 13:04:11 +1000 Subject: Wheel event support in qmltestlib + few fixes. added unit test and orientaion support for mouseWheel Change-Id: I9c26dc762281bc32965769c151414ac0e177ad0f Reviewed-on: http://codereview.qt-project.org/5272 Reviewed-by: Qt Sanity Bot Reviewed-by: Juha Vuolle Reviewed-by: Charles Yin --- src/qmltest/quicktestevent.cpp | 64 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 58 insertions(+), 6 deletions(-) (limited to 'src/qmltest/quicktestevent.cpp') diff --git a/src/qmltest/quicktestevent.cpp b/src/qmltest/quicktestevent.cpp index 9d1e5d1428..f573899d98 100644 --- a/src/qmltest/quicktestevent.cpp +++ b/src/qmltest/quicktestevent.cpp @@ -133,7 +133,6 @@ namespace QtQuickTest pos = view->mapFromScene(ditem->mapToScene(_pos)); eventWindow = view->viewport()->windowHandle(); } - QTEST_ASSERT(button == Qt::NoButton || button & Qt::MouseButtonMask); QTEST_ASSERT(stateKey == 0 || stateKey & Qt::KeyboardModifierMask); @@ -152,9 +151,9 @@ namespace QtQuickTest me = QMouseEvent(QEvent::MouseButtonDblClick, pos, window->mapToGlobal(pos), button, button, stateKey); break; case MouseMove: - QCursor::setPos(window->mapToGlobal(pos)); - qApp->processEvents(); - return; + // with move event the button is NoButton, but 'buttons' holds the currently pressed buttons + me = QMouseEvent(QEvent::MouseMove, pos, window->mapToGlobal(pos), Qt::NoButton, button, stateKey); + break; default: QTEST_ASSERT(false); } @@ -166,6 +165,46 @@ namespace QtQuickTest QTest::qWarn(warning.arg(QString::fromLatin1(mouseActionNames[static_cast(action)])).toAscii().data()); } } + + static void mouseWheel(QWindow* window, QObject* item, Qt::MouseButtons buttons, + Qt::KeyboardModifiers stateKey, + QPointF _pos, int delta, int delay = -1, Qt::Orientation orientation = Qt::Vertical) + { + QTEST_ASSERT(window); + QTEST_ASSERT(item); + if (delay == -1 || delay < QTest::defaultMouseDelay()) + delay = QTest::defaultMouseDelay(); + if (delay > 0) + QTest::qWait(delay); + + QPoint pos; + QDeclarativeView *view = qobject_cast(window); + QWindow *eventWindow = window; +#ifdef QUICK_TEST_SCENEGRAPH + QSGItem *sgitem = qobject_cast(item); + if (sgitem) { + pos = sgitem->mapToScene(_pos).toPoint(); + } else +#endif + { + QDeclarativeItem *ditem = qobject_cast(item); + if (!ditem) { + qWarning("Mouse event target is not an Item"); + return; + } + pos = view->mapFromScene(ditem->mapToScene(_pos)); + eventWindow = view->viewport()->windowHandle(); + } + QTEST_ASSERT(buttons == Qt::NoButton || buttons & Qt::MouseButtonMask); + QTEST_ASSERT(stateKey == 0 || stateKey & Qt::KeyboardModifierMask); + + stateKey &= static_cast(Qt::KeyboardModifierMask); + QWheelEvent we(pos, window->mapToGlobal(pos), delta, buttons, stateKey, orientation); + + QSpontaneKeyEvent::setSpontaneous(&we); // hmmmm + if (!qApp->notify(eventWindow, &we)) + QTest::qWarn("Wheel event not accepted by receiving window"); + } }; bool QuickTestEvent::mousePress @@ -182,6 +221,19 @@ bool QuickTestEvent::mousePress return true; } +bool QuickTestEvent::mouseWheel( + QObject *item, qreal x, qreal y, int buttons, + int modifiers, int delta, int delay, int orientation) +{ + QWindow *view = eventWindow(); + if (!view) + return false; + QtQuickTest::mouseWheel(view, item, Qt::MouseButtons(buttons), + Qt::KeyboardModifiers(modifiers), + QPointF(x, y), delta, delay, Qt::Orientation(orientation)); + return true; +} + bool QuickTestEvent::mouseRelease (QObject *item, qreal x, qreal y, int button, int modifiers, int delay) @@ -225,13 +277,13 @@ bool QuickTestEvent::mouseDoubleClick } bool QuickTestEvent::mouseMove - (QObject *item, qreal x, qreal y, int delay) + (QObject *item, qreal x, qreal y, int delay, int buttons) { QWindow *view = eventWindow(); if (!view) return false; QtQuickTest::mouseEvent(QtQuickTest::MouseMove, view, item, - Qt::NoButton, Qt::NoModifier, + Qt::MouseButton(buttons), Qt::NoModifier, QPointF(x, y), delay); return true; } -- cgit v1.2.3