| /**************************************************************************** |
| ** |
| ** Copyright (C) 2016 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the test suite module of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see https://www.qt.io/terms-conditions. For further |
| ** information use the contact form at https://www.qt.io/contact-us. |
| ** |
| ** GNU General Public License Usage |
| ** Alternatively, this file may be used under the terms of the GNU |
| ** General Public License version 3 as published by the Free Software |
| ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT |
| ** included in the packaging of this file. Please review the following |
| ** information to ensure the GNU General Public License requirements will |
| ** be met: https://www.gnu.org/licenses/gpl-3.0.html. |
| ** |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| #include <QApplication> |
| #include <QtTest> |
| |
| #include "ui_form.h" |
| #include "touchwidget.h" |
| |
| class MultitouchTestWidget : public QWidget, public Ui::Form |
| { |
| Q_OBJECT |
| |
| public: |
| MultitouchTestWidget(QWidget *parent = 0) |
| : QWidget(parent) |
| { |
| setAttribute(Qt::WA_QuitOnClose, false); |
| setupUi(this); |
| setWindowTitle(QT_VERSION_STR); |
| } |
| |
| void closeEvent(QCloseEvent *event) |
| { |
| event->accept(); |
| QTimer::singleShot(1000, qApp, SLOT(quit())); |
| } |
| }; |
| |
| class tst_ManualMultitouch : public QObject |
| { |
| Q_OBJECT |
| |
| public: |
| tst_ManualMultitouch(); |
| ~tst_ManualMultitouch(); |
| |
| private slots: |
| void ignoringTouchEventsEmulatesMouseEvents(); |
| void basicSingleTouchEventHandling(); |
| void basicMultiTouchEventHandling(); |
| void acceptingTouchBeginStopsPropagation(); |
| void ignoringTouchBeginPropagatesToParent(); |
| void secondTouchPointOnParentGoesToChild(); |
| void secondTouchPointOnChildGoesToParent(); |
| void secondTouchPointOnSiblingGoesToSibling(); |
| void secondTouchPointOnCousinGoesToCousin(); |
| }; |
| |
| tst_ManualMultitouch::tst_ManualMultitouch() |
| { } |
| |
| tst_ManualMultitouch::~tst_ManualMultitouch() |
| { } |
| |
| void tst_ManualMultitouch::ignoringTouchEventsEmulatesMouseEvents() |
| { |
| // first, make sure that we get mouse events when not enabling touch events |
| MultitouchTestWidget testWidget; |
| testWidget.testNameLabel->setText("Mouse Event Emulation Test"); |
| testWidget.testDescriptionLabel->setText("Touch, hold, and release your finger on the green widget."); |
| testWidget.redWidget->hide(); |
| testWidget.blueWidget->hide(); |
| testWidget.greenWidget->closeWindowOnMouseRelease = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(!testWidget.greenWidget->seenTouchBegin); |
| // QVERIFY(!testWidget.greenWidget->seenTouchUpdate); |
| QVERIFY(!testWidget.greenWidget->seenTouchEnd); |
| QVERIFY(testWidget.greenWidget->seenMousePress); |
| // QVERIFY(testWidget.greenWidget->seenMouseMove); |
| QVERIFY(testWidget.greenWidget->seenMouseRelease); |
| |
| // enable touch, but don't accept the events |
| testWidget.greenWidget->reset(); |
| testWidget.greenWidget->setAttribute(Qt::WA_AcceptTouchEvents); |
| testWidget.greenWidget->closeWindowOnMouseRelease = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(testWidget.greenWidget->seenTouchBegin); |
| // QVERIFY(!testWidget.greenWidget->seenTouchUpdate); |
| QVERIFY(!testWidget.greenWidget->seenTouchEnd); |
| QVERIFY(testWidget.greenWidget->seenMousePress); |
| // QVERIFY(testWidget.greenWidget->seenMouseMove); |
| QVERIFY(testWidget.greenWidget->seenMouseRelease); |
| } |
| |
| void tst_ManualMultitouch::basicSingleTouchEventHandling() |
| { |
| // now enable touch and make sure we get the touch events |
| MultitouchTestWidget testWidget; |
| testWidget.testNameLabel->setText("Basic Single-Touch Event Handling Test"); |
| testWidget.testDescriptionLabel->setText("Touch, hold, and release your finger on the green widget."); |
| testWidget.redWidget->hide(); |
| testWidget.blueWidget->hide(); |
| testWidget.greenWidget->setAttribute(Qt::WA_AcceptTouchEvents); |
| testWidget.greenWidget->acceptTouchBegin = true; |
| testWidget.greenWidget->acceptTouchUpdate = true; |
| testWidget.greenWidget->acceptTouchEnd = true; |
| testWidget.greenWidget->closeWindowOnTouchEnd = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(testWidget.greenWidget->seenTouchBegin); |
| // QVERIFY(testWidget.greenWidget->seenTouchUpdate); |
| QVERIFY(testWidget.greenWidget->seenTouchEnd); |
| QVERIFY(!testWidget.greenWidget->seenMousePress); |
| QVERIFY(!testWidget.greenWidget->seenMouseMove); |
| QVERIFY(!testWidget.greenWidget->seenMouseRelease); |
| |
| // again, ignoring the TouchEnd |
| testWidget.greenWidget->reset(); |
| testWidget.greenWidget->acceptTouchBegin = true; |
| testWidget.greenWidget->acceptTouchUpdate = true; |
| // testWidget.greenWidget->acceptTouchEnd = true; |
| testWidget.greenWidget->closeWindowOnTouchEnd = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(testWidget.greenWidget->seenTouchBegin); |
| // QVERIFY(testWidget.greenWidget->seenTouchUpdate); |
| QVERIFY(testWidget.greenWidget->seenTouchEnd); |
| QVERIFY(!testWidget.greenWidget->seenMousePress); |
| QVERIFY(!testWidget.greenWidget->seenMouseMove); |
| QVERIFY(!testWidget.greenWidget->seenMouseRelease); |
| |
| // again, ignoring TouchUpdates |
| testWidget.greenWidget->reset(); |
| testWidget.greenWidget->acceptTouchBegin = true; |
| // testWidget.greenWidget->acceptTouchUpdate = true; |
| testWidget.greenWidget->acceptTouchEnd = true; |
| testWidget.greenWidget->closeWindowOnTouchEnd = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(testWidget.greenWidget->seenTouchBegin); |
| // QVERIFY(testWidget.greenWidget->seenTouchUpdate); |
| QVERIFY(testWidget.greenWidget->seenTouchEnd); |
| QVERIFY(!testWidget.greenWidget->seenMousePress); |
| QVERIFY(!testWidget.greenWidget->seenMouseMove); |
| QVERIFY(!testWidget.greenWidget->seenMouseRelease); |
| |
| // last time, ignoring TouchUpdates and TouchEnd |
| testWidget.greenWidget->reset(); |
| testWidget.greenWidget->acceptTouchBegin = true; |
| // testWidget.greenWidget->acceptTouchUpdate = true; |
| // testWidget.greenWidget->acceptTouchEnd = true; |
| testWidget.greenWidget->closeWindowOnTouchEnd = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(testWidget.greenWidget->seenTouchBegin); |
| // QVERIFY(testWidget.greenWidget->seenTouchUpdate); |
| QVERIFY(testWidget.greenWidget->seenTouchEnd); |
| QVERIFY(!testWidget.greenWidget->seenMousePress); |
| QVERIFY(!testWidget.greenWidget->seenMouseMove); |
| QVERIFY(!testWidget.greenWidget->seenMouseRelease); |
| } |
| |
| void tst_ManualMultitouch::basicMultiTouchEventHandling() |
| { |
| // repeat, this time looking for multiple fingers |
| MultitouchTestWidget testWidget; |
| testWidget.testNameLabel->setText("Basic Multi-Touch Event Handling Test"); |
| testWidget.testDescriptionLabel->setText("Touch, hold, and release several fingers on the red widget."); |
| testWidget.greenWidget->hide(); |
| testWidget.greyWidget->hide(); |
| testWidget.redWidget->setAttribute(Qt::WA_AcceptTouchEvents); |
| testWidget.redWidget->acceptTouchBegin = true; |
| testWidget.redWidget->acceptTouchUpdate = true; |
| testWidget.redWidget->acceptTouchEnd = true; |
| testWidget.redWidget->closeWindowOnTouchEnd = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(testWidget.redWidget->seenTouchBegin); |
| QVERIFY(testWidget.redWidget->seenTouchUpdate); |
| QVERIFY(testWidget.redWidget->seenTouchEnd); |
| QVERIFY(testWidget.redWidget->touchPointCount > 1); |
| QVERIFY(!testWidget.greenWidget->seenMousePress); |
| QVERIFY(!testWidget.greenWidget->seenMouseMove); |
| QVERIFY(!testWidget.greenWidget->seenMouseRelease); |
| |
| testWidget.redWidget->reset(); |
| testWidget.redWidget->acceptTouchBegin = true; |
| // testWidget.redWidget->acceptTouchUpdate = true; |
| testWidget.redWidget->acceptTouchEnd = true; |
| testWidget.redWidget->closeWindowOnTouchEnd = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(testWidget.redWidget->seenTouchBegin); |
| QVERIFY(testWidget.redWidget->seenTouchUpdate); |
| QVERIFY(testWidget.redWidget->seenTouchEnd); |
| QVERIFY(testWidget.redWidget->touchPointCount > 1); |
| QVERIFY(!testWidget.greenWidget->seenMousePress); |
| QVERIFY(!testWidget.greenWidget->seenMouseMove); |
| QVERIFY(!testWidget.greenWidget->seenMouseRelease); |
| |
| testWidget.redWidget->reset(); |
| testWidget.redWidget->acceptTouchBegin = true; |
| testWidget.redWidget->acceptTouchUpdate = true; |
| // testWidget.redWidget->acceptTouchEnd = true; |
| testWidget.redWidget->closeWindowOnTouchEnd = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(testWidget.redWidget->seenTouchBegin); |
| QVERIFY(testWidget.redWidget->seenTouchUpdate); |
| QVERIFY(testWidget.redWidget->seenTouchEnd); |
| QVERIFY(testWidget.redWidget->touchPointCount > 1); |
| QVERIFY(!testWidget.greenWidget->seenMousePress); |
| QVERIFY(!testWidget.greenWidget->seenMouseMove); |
| QVERIFY(!testWidget.greenWidget->seenMouseRelease); |
| |
| testWidget.redWidget->reset(); |
| testWidget.redWidget->acceptTouchBegin = true; |
| // testWidget.redWidget->acceptTouchUpdate = true; |
| // testWidget.redWidget->acceptTouchEnd = true; |
| testWidget.redWidget->closeWindowOnTouchEnd = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(testWidget.redWidget->seenTouchBegin); |
| QVERIFY(testWidget.redWidget->seenTouchUpdate); |
| QVERIFY(testWidget.redWidget->seenTouchEnd); |
| QVERIFY(testWidget.redWidget->touchPointCount > 1); |
| QVERIFY(!testWidget.greenWidget->seenMousePress); |
| QVERIFY(!testWidget.greenWidget->seenMouseMove); |
| QVERIFY(!testWidget.greenWidget->seenMouseRelease); |
| } |
| |
| void tst_ManualMultitouch::acceptingTouchBeginStopsPropagation() |
| { |
| // test that accepting the TouchBegin event on the |
| // blueWidget stops propagation to the greenWidget |
| MultitouchTestWidget testWidget; |
| testWidget.testNameLabel->setText("Touch Event Propagation Test: Accepting in Blue Blocks Green"); |
| testWidget.testDescriptionLabel->setText("Touch, hold, and release your finger on the blue widget."); |
| testWidget.redWidget->hide(); |
| testWidget.blueWidget->setAttribute(Qt::WA_AcceptTouchEvents); |
| testWidget.greenWidget->setAttribute(Qt::WA_AcceptTouchEvents); |
| testWidget.blueWidget->acceptTouchBegin = true; |
| testWidget.blueWidget->acceptTouchUpdate = true; |
| testWidget.blueWidget->acceptTouchEnd = true; |
| testWidget.blueWidget->closeWindowOnTouchEnd = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(testWidget.blueWidget->seenTouchBegin); |
| // QVERIFY(testWidget.blueWidget->seenTouchUpdate); |
| QVERIFY(testWidget.blueWidget->seenTouchEnd); |
| QVERIFY(!testWidget.blueWidget->seenMousePress); |
| QVERIFY(!testWidget.blueWidget->seenMouseMove); |
| QVERIFY(!testWidget.blueWidget->seenMouseRelease); |
| QVERIFY(!testWidget.greenWidget->seenTouchBegin); |
| QVERIFY(!testWidget.greenWidget->seenTouchUpdate); |
| QVERIFY(!testWidget.greenWidget->seenTouchEnd); |
| QVERIFY(!testWidget.greenWidget->seenMousePress); |
| QVERIFY(!testWidget.greenWidget->seenMouseMove); |
| QVERIFY(!testWidget.greenWidget->seenMouseRelease); |
| |
| // ignoring TouchEnd |
| testWidget.blueWidget->reset(); |
| testWidget.greenWidget->reset(); |
| testWidget.blueWidget->acceptTouchBegin = true; |
| testWidget.blueWidget->acceptTouchUpdate = true; |
| // testWidget.blueWidget->acceptTouchEnd = true; |
| testWidget.blueWidget->closeWindowOnTouchEnd = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(testWidget.blueWidget->seenTouchBegin); |
| // QVERIFY(testWidget.blueWidget->seenTouchUpdate); |
| QVERIFY(testWidget.blueWidget->seenTouchEnd); |
| QVERIFY(!testWidget.blueWidget->seenMousePress); |
| QVERIFY(!testWidget.blueWidget->seenMouseMove); |
| QVERIFY(!testWidget.blueWidget->seenMouseRelease); |
| QVERIFY(!testWidget.greenWidget->seenTouchBegin); |
| QVERIFY(!testWidget.greenWidget->seenTouchUpdate); |
| QVERIFY(!testWidget.greenWidget->seenTouchEnd); |
| QVERIFY(!testWidget.greenWidget->seenMousePress); |
| QVERIFY(!testWidget.greenWidget->seenMouseMove); |
| QVERIFY(!testWidget.greenWidget->seenMouseRelease); |
| |
| // ignoring TouchUpdate |
| testWidget.blueWidget->reset(); |
| testWidget.greenWidget->reset(); |
| testWidget.blueWidget->acceptTouchBegin = true; |
| // testWidget.blueWidget->acceptTouchUpdate = true; |
| testWidget.blueWidget->acceptTouchEnd = true; |
| testWidget.blueWidget->closeWindowOnTouchEnd = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(testWidget.blueWidget->seenTouchBegin); |
| // QVERIFY(testWidget.blueWidget->seenTouchUpdate); |
| QVERIFY(testWidget.blueWidget->seenTouchEnd); |
| QVERIFY(!testWidget.blueWidget->seenMousePress); |
| QVERIFY(!testWidget.blueWidget->seenMouseMove); |
| QVERIFY(!testWidget.blueWidget->seenMouseRelease); |
| QVERIFY(!testWidget.greenWidget->seenTouchBegin); |
| QVERIFY(!testWidget.greenWidget->seenTouchUpdate); |
| QVERIFY(!testWidget.greenWidget->seenTouchEnd); |
| QVERIFY(!testWidget.greenWidget->seenMousePress); |
| QVERIFY(!testWidget.greenWidget->seenMouseMove); |
| QVERIFY(!testWidget.greenWidget->seenMouseRelease); |
| |
| // ignoring TouchUpdate and TouchEnd |
| testWidget.blueWidget->reset(); |
| testWidget.greenWidget->reset(); |
| testWidget.blueWidget->acceptTouchBegin = true; |
| // testWidget.blueWidget->acceptTouchUpdate = true; |
| // testWidget.blueWidget->acceptTouchEnd = true; |
| testWidget.blueWidget->closeWindowOnTouchEnd = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(testWidget.blueWidget->seenTouchBegin); |
| // QVERIFY(testWidget.blueWidget->seenTouchUpdate); |
| QVERIFY(testWidget.blueWidget->seenTouchEnd); |
| QVERIFY(!testWidget.blueWidget->seenMousePress); |
| QVERIFY(!testWidget.blueWidget->seenMouseMove); |
| QVERIFY(!testWidget.blueWidget->seenMouseRelease); |
| QVERIFY(!testWidget.greenWidget->seenTouchBegin); |
| QVERIFY(!testWidget.greenWidget->seenTouchUpdate); |
| QVERIFY(!testWidget.greenWidget->seenTouchEnd); |
| QVERIFY(!testWidget.greenWidget->seenMousePress); |
| QVERIFY(!testWidget.greenWidget->seenMouseMove); |
| QVERIFY(!testWidget.greenWidget->seenMouseRelease); |
| } |
| |
| void tst_ManualMultitouch::ignoringTouchBeginPropagatesToParent() |
| { |
| // repeat the test above, now ignoring touch events in the |
| // greyWidget, they should be propagated to the redWidget |
| MultitouchTestWidget testWidget; |
| testWidget.testNameLabel->setText("Touch Event Propagation Test: Ignoring in Grey Propagates to Red"); |
| testWidget.testDescriptionLabel->setText("Touch, hold, and release your finger on the grey widget."); |
| testWidget.greenWidget->hide(); |
| testWidget.greyWidget->setAttribute(Qt::WA_AcceptTouchEvents, false); |
| testWidget.redWidget->setAttribute(Qt::WA_AcceptTouchEvents); |
| testWidget.greyWidget->reset(); |
| testWidget.redWidget->reset(); |
| testWidget.redWidget->acceptTouchBegin = true; |
| testWidget.redWidget->acceptTouchUpdate = true; |
| testWidget.redWidget->acceptTouchEnd = true; |
| testWidget.redWidget->closeWindowOnTouchEnd = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(!testWidget.greyWidget->seenTouchBegin); |
| QVERIFY(!testWidget.greyWidget->seenTouchUpdate); |
| QVERIFY(!testWidget.greyWidget->seenTouchEnd); |
| QVERIFY(!testWidget.greyWidget->seenMousePress); |
| QVERIFY(!testWidget.greyWidget->seenMouseMove); |
| QVERIFY(!testWidget.greyWidget->seenMouseRelease); |
| QVERIFY(testWidget.redWidget->seenTouchBegin); |
| // QVERIFY(testWidget.redWidget->seenTouchUpdate); |
| QVERIFY(testWidget.redWidget->seenTouchEnd); |
| QVERIFY(!testWidget.redWidget->seenMousePress); |
| QVERIFY(!testWidget.redWidget->seenMouseMove); |
| QVERIFY(!testWidget.redWidget->seenMouseRelease); |
| |
| // again, but this time greyWidget should see the TouchBegin |
| testWidget.greyWidget->reset(); |
| testWidget.redWidget->reset(); |
| testWidget.greyWidget->setAttribute(Qt::WA_AcceptTouchEvents); |
| testWidget.redWidget->acceptTouchBegin = true; |
| testWidget.redWidget->acceptTouchUpdate = true; |
| testWidget.redWidget->acceptTouchEnd = true; |
| testWidget.redWidget->closeWindowOnTouchEnd = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(testWidget.greyWidget->seenTouchBegin); |
| QVERIFY(!testWidget.greyWidget->seenTouchUpdate); |
| QVERIFY(!testWidget.greyWidget->seenTouchEnd); |
| QVERIFY(!testWidget.greyWidget->seenMousePress); |
| QVERIFY(!testWidget.greyWidget->seenMouseMove); |
| QVERIFY(!testWidget.greyWidget->seenMouseRelease); |
| QVERIFY(testWidget.redWidget->seenTouchBegin); |
| // QVERIFY(testWidget.redWidget->seenTouchUpdate); |
| QVERIFY(testWidget.redWidget->seenTouchEnd); |
| QVERIFY(!testWidget.redWidget->seenMousePress); |
| QVERIFY(!testWidget.redWidget->seenMouseMove); |
| QVERIFY(!testWidget.redWidget->seenMouseRelease); |
| |
| // again, ignoring the TouchEnd |
| testWidget.greyWidget->reset(); |
| testWidget.redWidget->reset(); |
| testWidget.redWidget->acceptTouchBegin = true; |
| testWidget.redWidget->acceptTouchUpdate = true; |
| // testWidget.redWidget->acceptTouchEnd = true; |
| testWidget.redWidget->closeWindowOnTouchEnd = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(testWidget.greyWidget->seenTouchBegin); |
| QVERIFY(!testWidget.greyWidget->seenTouchUpdate); |
| QVERIFY(!testWidget.greyWidget->seenTouchEnd); |
| QVERIFY(!testWidget.greyWidget->seenMousePress); |
| QVERIFY(!testWidget.greyWidget->seenMouseMove); |
| QVERIFY(!testWidget.greyWidget->seenMouseRelease); |
| QVERIFY(testWidget.redWidget->seenTouchBegin); |
| // QVERIFY(testWidget.redWidget->seenTouchUpdate); |
| QVERIFY(testWidget.redWidget->seenTouchEnd); |
| QVERIFY(!testWidget.redWidget->seenMousePress); |
| QVERIFY(!testWidget.redWidget->seenMouseMove); |
| QVERIFY(!testWidget.redWidget->seenMouseRelease); |
| |
| // again, ignoring TouchUpdates |
| testWidget.greyWidget->reset(); |
| testWidget.redWidget->reset(); |
| testWidget.redWidget->acceptTouchBegin = true; |
| // testWidget.redWidget->acceptTouchUpdate = true; |
| testWidget.redWidget->acceptTouchEnd = true; |
| testWidget.redWidget->closeWindowOnTouchEnd = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(testWidget.greyWidget->seenTouchBegin); |
| QVERIFY(!testWidget.greyWidget->seenTouchUpdate); |
| QVERIFY(!testWidget.greyWidget->seenTouchEnd); |
| QVERIFY(!testWidget.greyWidget->seenMousePress); |
| QVERIFY(!testWidget.greyWidget->seenMouseMove); |
| QVERIFY(!testWidget.greyWidget->seenMouseRelease); |
| QVERIFY(testWidget.redWidget->seenTouchBegin); |
| // QVERIFY(testWidget.redWidget->seenTouchUpdate); |
| QVERIFY(testWidget.redWidget->seenTouchEnd); |
| QVERIFY(!testWidget.redWidget->seenMousePress); |
| QVERIFY(!testWidget.redWidget->seenMouseMove); |
| QVERIFY(!testWidget.redWidget->seenMouseRelease); |
| |
| // last time, ignoring TouchUpdates and TouchEnd |
| testWidget.greyWidget->reset(); |
| testWidget.redWidget->reset(); |
| testWidget.redWidget->acceptTouchBegin = true; |
| // testWidget.redWidget->acceptTouchUpdate = true; |
| // testWidget.redWidget->acceptTouchEnd = true; |
| testWidget.redWidget->closeWindowOnTouchEnd = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(testWidget.greyWidget->seenTouchBegin); |
| QVERIFY(!testWidget.greyWidget->seenTouchUpdate); |
| QVERIFY(!testWidget.greyWidget->seenTouchEnd); |
| QVERIFY(!testWidget.greyWidget->seenMousePress); |
| QVERIFY(!testWidget.greyWidget->seenMouseMove); |
| QVERIFY(!testWidget.blueWidget->seenMouseRelease); |
| QVERIFY(testWidget.redWidget->seenTouchBegin); |
| // QVERIFY(testWidget.redWidget->seenTouchUpdate); |
| QVERIFY(testWidget.redWidget->seenTouchEnd); |
| QVERIFY(!testWidget.redWidget->seenMousePress); |
| QVERIFY(!testWidget.redWidget->seenMouseMove); |
| QVERIFY(!testWidget.redWidget->seenMouseRelease); |
| } |
| |
| void tst_ManualMultitouch::secondTouchPointOnParentGoesToChild() |
| { |
| MultitouchTestWidget testWidget; |
| testWidget.testNameLabel->setText("Additional Touch-Points Outside Child's Rect Go to Child"); |
| testWidget.testDescriptionLabel->setText("Press and hold a finger on the blue widget, then on the green one, and release."); |
| testWidget.redWidget->hide(); |
| testWidget.greenWidget->setAttribute(Qt::WA_AcceptTouchEvents); |
| testWidget.blueWidget->setAttribute(Qt::WA_AcceptTouchEvents); |
| testWidget.blueWidget->acceptTouchBegin = true; |
| testWidget.greenWidget->acceptTouchBegin = true; |
| testWidget.blueWidget->closeWindowOnTouchEnd = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(testWidget.blueWidget->seenTouchBegin); |
| // QVERIFY(testWidget.blueWidget->seenTouchUpdate); |
| QVERIFY(testWidget.blueWidget->seenTouchEnd); |
| QVERIFY(!testWidget.blueWidget->seenMousePress); |
| QVERIFY(!testWidget.blueWidget->seenMouseMove); |
| QVERIFY(!testWidget.blueWidget->seenMouseRelease); |
| QVERIFY(testWidget.blueWidget->touchPointCount > 1); |
| QVERIFY(!testWidget.greenWidget->seenTouchBegin); |
| QVERIFY(!testWidget.greenWidget->seenTouchUpdate); |
| QVERIFY(!testWidget.greenWidget->seenTouchEnd); |
| QVERIFY(!testWidget.greenWidget->seenMousePress); |
| QVERIFY(!testWidget.greenWidget->seenMouseMove); |
| QVERIFY(!testWidget.greenWidget->seenMouseRelease); |
| } |
| |
| void tst_ManualMultitouch::secondTouchPointOnChildGoesToParent() |
| { |
| MultitouchTestWidget testWidget; |
| testWidget.testNameLabel->setText("Additional Touch-Points Over Child's Rect Go to Parent"); |
| testWidget.testDescriptionLabel->setText("Press and hold a finger on the red widget, then on the grey one, and release."); |
| testWidget.greenWidget->hide(); |
| testWidget.redWidget->setAttribute(Qt::WA_AcceptTouchEvents); |
| testWidget.greyWidget->setAttribute(Qt::WA_AcceptTouchEvents); |
| testWidget.greyWidget->acceptTouchBegin = true; |
| testWidget.redWidget->acceptTouchBegin = true; |
| testWidget.redWidget->closeWindowOnTouchEnd = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(testWidget.redWidget->seenTouchBegin); |
| // QVERIFY(testWidget.redWidget->seenTouchUpdate); |
| QVERIFY(testWidget.redWidget->seenTouchEnd); |
| QVERIFY(!testWidget.redWidget->seenMousePress); |
| QVERIFY(!testWidget.redWidget->seenMouseMove); |
| QVERIFY(!testWidget.redWidget->seenMouseRelease); |
| QVERIFY(testWidget.redWidget->touchPointCount > 1); |
| QVERIFY(!testWidget.greyWidget->seenTouchBegin); |
| QVERIFY(!testWidget.greyWidget->seenTouchUpdate); |
| QVERIFY(!testWidget.greyWidget->seenTouchEnd); |
| QVERIFY(!testWidget.greyWidget->seenMousePress); |
| QVERIFY(!testWidget.greyWidget->seenMouseMove); |
| QVERIFY(!testWidget.greyWidget->seenMouseRelease); |
| } |
| |
| void tst_ManualMultitouch::secondTouchPointOnSiblingGoesToSibling() |
| { |
| MultitouchTestWidget testWidget; |
| testWidget.testNameLabel->setText("Multi-Touch Interaction Test, Unrelated Widgets Get Separate Events"); |
| testWidget.testDescriptionLabel->setText("Press and hold a finger on the green widget, then the red one, and release."); |
| testWidget.blueWidget->hide(); |
| testWidget.greenWidget->setAttribute(Qt::WA_AcceptTouchEvents); |
| testWidget.greenWidget->acceptTouchBegin = true; |
| testWidget.greenWidget->closeWindowOnTouchEnd = true; |
| testWidget.greyWidget->hide(); |
| testWidget.redWidget->setAttribute(Qt::WA_AcceptTouchEvents); |
| testWidget.redWidget->acceptTouchBegin = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(testWidget.greenWidget->seenTouchBegin); |
| // QVERIFY(testWidget.greenWidget->seenTouchUpdate); |
| QVERIFY(testWidget.greenWidget->seenTouchEnd); |
| QVERIFY(!testWidget.greenWidget->seenMousePress); |
| QVERIFY(!testWidget.greenWidget->seenMouseMove); |
| QVERIFY(!testWidget.greenWidget->seenMouseRelease); |
| QVERIFY(testWidget.redWidget->seenTouchBegin); |
| // QVERIFY(testWidget.redWidget->seenTouchUpdate); |
| QVERIFY(testWidget.redWidget->seenTouchEnd); |
| QVERIFY(!testWidget.redWidget->seenMousePress); |
| QVERIFY(!testWidget.redWidget->seenMouseMove); |
| QVERIFY(!testWidget.redWidget->seenMouseRelease); |
| QVERIFY(testWidget.greenWidget->touchPointCount == 1); |
| QVERIFY(testWidget.redWidget->touchPointCount == 1); |
| } |
| |
| void tst_ManualMultitouch::secondTouchPointOnCousinGoesToCousin() |
| { |
| MultitouchTestWidget testWidget; |
| testWidget.testNameLabel->setText("Multi-Touch Interaction Test, Unrelated Widgets Get Separate Events"); |
| testWidget.testDescriptionLabel->setText("Press and hold a finger on the blue widget, then the grey one, and release."); |
| testWidget.blueWidget->setAttribute(Qt::WA_AcceptTouchEvents); |
| testWidget.blueWidget->acceptTouchBegin = true; |
| testWidget.blueWidget->closeWindowOnTouchEnd = true; |
| testWidget.greyWidget->setAttribute(Qt::WA_AcceptTouchEvents); |
| testWidget.greyWidget->acceptTouchBegin = true; |
| testWidget.showMaximized(); |
| (void) qApp->exec(); |
| QVERIFY(testWidget.blueWidget->seenTouchBegin); |
| // QVERIFY(testWidget.blueWidget->seenTouchUpdate); |
| QVERIFY(testWidget.blueWidget->seenTouchEnd); |
| QVERIFY(!testWidget.blueWidget->seenMousePress); |
| QVERIFY(!testWidget.blueWidget->seenMouseMove); |
| QVERIFY(!testWidget.blueWidget->seenMouseRelease); |
| QVERIFY(testWidget.greyWidget->seenTouchBegin); |
| // QVERIFY(testWidget.greyWidget->seenTouchUpdate); |
| QVERIFY(testWidget.greyWidget->seenTouchEnd); |
| QVERIFY(!testWidget.greyWidget->seenMousePress); |
| QVERIFY(!testWidget.greyWidget->seenMouseMove); |
| QVERIFY(!testWidget.greyWidget->seenMouseRelease); |
| QVERIFY(testWidget.blueWidget->touchPointCount == 1); |
| QVERIFY(testWidget.greyWidget->touchPointCount == 1); |
| } |
| |
| QTEST_MAIN(tst_ManualMultitouch) |
| |
| #include "main.moc" |