summaryrefslogtreecommitdiffstats
path: root/examples/sql
ModeNameSize
-rw-r--r--README1316logstatsplain
d---------cachedtable163logstatsplain
-rw-r--r--connection.h5891logstatsplain
d---------drilldown433logstatsplain
d---------masterdetail395logstatsplain
d---------querymodel262logstatsplain
d---------relationaltablemodel104logstatsplain
-rw-r--r--sql.pro510logstatsplain
d---------sqlwidgetmapper157logstatsplain
d---------tablemodel84logstatsplain
ng("All Files! (*);;Text Files (*.txt)")); @@ -1056,7 +1056,7 @@ void tst_QFiledialog::task259105_filtersCornerCases() QCOMPARE(filters->currentText(), QLatin1String("Text Files")); } -void tst_QFiledialog::QTBUG4419_lineEditSelectAll() +void tst_QFileDialog2::QTBUG4419_lineEditSelectAll() { QString tempPath = QDir::tempPath(); QTemporaryFile *t; @@ -1082,7 +1082,7 @@ void tst_QFiledialog::QTBUG4419_lineEditSelectAll() QCOMPARE(tempPath + QChar('/') + lineEdit->selectedText(), t->fileName()); } -void tst_QFiledialog::QTBUG6558_showDirsOnly() +void tst_QFileDialog2::QTBUG6558_showDirsOnly() { const QString tempPath = QDir::tempPath(); QDir dirTemp(tempPath); @@ -1148,7 +1148,7 @@ void tst_QFiledialog::QTBUG6558_showDirsOnly() dirTemp.rmdir(tempName); } -void tst_QFiledialog::QTBUG4842_selectFilterWithHideNameFilterDetails() +void tst_QFileDialog2::QTBUG4842_selectFilterWithHideNameFilterDetails() { QStringList filtersStr; filtersStr << "Images (*.png *.xpm *.jpg)" << "Text files (*.txt)" << "XML files (*.xml)"; @@ -1188,5 +1188,5 @@ void tst_QFiledialog::QTBUG4842_selectFilterWithHideNameFilterDetails() } -QTEST_MAIN(tst_QFiledialog) +QTEST_MAIN(tst_QFileDialog2) #include "tst_qfiledialog2.moc" diff --git a/tests/auto/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp b/tests/auto/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp index 29cb341..4f7822d 100644 --- a/tests/auto/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp +++ b/tests/auto/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp @@ -90,7 +90,7 @@ int distance(TestIterator &a, TestIterator &b) using namespace QtConcurrent; -class tst_iteratekernel: public QObject +class tst_QtConcurrentIterateKernel: public QObject { Q_OBJECT private slots: @@ -149,13 +149,13 @@ public: }; -void tst_iteratekernel::instantiate() +void tst_QtConcurrentIterateKernel::instantiate() { startThreadEngine(new PrintFor(0, 40)).startBlocking(); QCOMPARE((int)iterations, 40); } -void tst_iteratekernel::cancel() +void tst_QtConcurrentIterateKernel::cancel() { { QFuture f = startThreadEngine(new SleepPrintFor(0, 40)).startAsynchronously(); @@ -182,7 +182,7 @@ public: } }; -void tst_iteratekernel::stresstest() +void tst_QtConcurrentIterateKernel::stresstest() { const int iterations = 1000; const int times = 50; @@ -194,7 +194,7 @@ void tst_iteratekernel::stresstest() } } -void tst_iteratekernel::noIterations() +void tst_QtConcurrentIterateKernel::noIterations() { const int times = 20000; for (int i = 0; i < times; ++i) @@ -242,7 +242,7 @@ public: bool throttling; }; -void tst_iteratekernel::throttling() +void tst_QtConcurrentIterateKernel::throttling() { const int totalIterations = 400; iterations = 0; @@ -271,7 +271,7 @@ public: } }; -void tst_iteratekernel::blockSize() +void tst_QtConcurrentIterateKernel::blockSize() { #ifdef QT_NO_STL QSKIP("Missing stl iterators prevent correct block size calculation", SkipAll); @@ -296,7 +296,7 @@ public: }; -void tst_iteratekernel::multipleResults() +void tst_QtConcurrentIterateKernel::multipleResults() { #ifdef QT_NO_STL QSKIP("Missing stl iterators prevent correct summation", SkipAll); @@ -320,7 +320,7 @@ public: } }; -void tst_iteratekernel::instantiateWhile() +void tst_QtConcurrentIterateKernel::instantiateWhile() { PrintWhile w; w.startBlocking(); @@ -339,7 +339,7 @@ public: } }; -void tst_iteratekernel::stresstestWhile() +void tst_QtConcurrentIterateKernel::stresstestWhile() { int iterations = 100000; StressWhile w(iterations); @@ -348,7 +348,7 @@ void tst_iteratekernel::stresstestWhile() } #endif -QTEST_MAIN(tst_iteratekernel) +QTEST_MAIN(tst_QtConcurrentIterateKernel) #include "tst_qtconcurrentiteratekernel.moc" diff --git a/tests/auto/qtconcurrentmap/tst_qtconcurrentmap.cpp b/tests/auto/qtconcurrentmap/tst_qtconcurrentmap.cpp index d3417b1..894bac4 100644 --- a/tests/auto/qtconcurrentmap/tst_qtconcurrentmap.cpp +++ b/tests/auto/qtconcurrentmap/tst_qtconcurrentmap.cpp @@ -56,7 +56,7 @@ Q_DECLARE_METATYPE(QList); Q_DECLARE_METATYPE(QList); Q_DECLARE_METATYPE(QList); -class tst_map: public QObject +class tst_QtConcurrentMap: public QObject { Q_OBJECT private slots: @@ -114,7 +114,7 @@ public: Q_DECLARE_METATYPE(QList); -void tst_map::map() +void tst_QtConcurrentMap::map() { // functors take arguments by reference, modifying the sequence in place { @@ -246,7 +246,7 @@ void tst_map::map() #endif } -void tst_map::blocking_map() +void tst_QtConcurrentMap::blocking_map() { // functors take arguments by reference, modifying the sequence in place { @@ -428,7 +428,7 @@ public: } }; -void tst_map::mapped() +void tst_QtConcurrentMap::mapped() { QList list; list << 1 << 2 << 3; @@ -790,7 +790,7 @@ void tst_map::mapped() } } -void tst_map::blocking_mapped() +void tst_QtConcurrentMap::blocking_mapped() { QList list; list << 1 << 2 << 3; @@ -1244,7 +1244,7 @@ public: } }; -void tst_map::mappedReduced() +void tst_QtConcurrentMap::mappedReduced() { QList list; list << 1 << 2 << 3; @@ -1625,7 +1625,7 @@ void tst_map::mappedReduced() // ### the same as above, with an initial result value } -void tst_map::blocking_mappedReduced() +void tst_QtConcurrentMap::blocking_mappedReduced() { QList list; list << 1 << 2 << 3; @@ -2010,7 +2010,7 @@ int sleeper(int val) return val; } -void tst_map::assignResult() +void tst_QtConcurrentMap::assignResult() { const QList startList = QList() << 0 << 1 << 2; QList list = QtConcurrent::blockingMapped(startList, sleeper); @@ -2077,7 +2077,7 @@ public: Q_DECLARE_METATYPE(QVector); Q_DECLARE_METATYPE(QList); -void tst_map::functionOverloads() +void tst_QtConcurrentMap::functionOverloads() { QList intList; const QList constIntList; @@ -2159,7 +2159,7 @@ void fastReduce(int &result, const InstanceCounter&) ++result; } -void tst_map::throttling() +void tst_QtConcurrentMap::throttling() { const int itemcount = 100; const int allowedTemporaries = QThread::idealThreadCount() * 40; @@ -2208,7 +2208,7 @@ void throwMapper(int &e) throw QtConcurrent::Exception(); } -void tst_map::exceptions() +void tst_QtConcurrentMap::exceptions() { bool caught = false; try { @@ -2228,7 +2228,7 @@ int mapper(const int &i) return i; } -void tst_map::incrementalResults() +void tst_QtConcurrentMap::incrementalResults() { const int count = 200; QList ints; @@ -2256,7 +2256,7 @@ void tst_map::incrementalResults() Test that mapped does not cause deep copies when holding references to Qt containers. */ -void tst_map::noDetatch() +void tst_QtConcurrentMap::noDetatch() { { QList l = QList() << 1; @@ -2299,7 +2299,7 @@ void tst_map::noDetatch() } -void tst_map::stlContainers() +void tst_QtConcurrentMap::stlContainers() { #ifdef QT_NO_STL QSKIP("Qt compiled without STL support", SkipAll); @@ -2331,7 +2331,7 @@ InstanceCounter ic_fn(const InstanceCounter & ic) // Verify that held results are deleted when a future is // assigned over with operator == -void tst_map::qFutureAssignmentLeak() +void tst_QtConcurrentMap::qFutureAssignmentLeak() { currentInstanceCount = 0; peakInstanceCount = 0; @@ -2370,7 +2370,7 @@ void add(int &result, const int &sum) result += sum; } -void tst_map::stressTest() +void tst_QtConcurrentMap::stressTest() { const int listSize = 1000; const int sum = (listSize - 1) * (listSize / 2); @@ -2399,26 +2399,26 @@ void tst_map::stressTest() } } -QTEST_MAIN(tst_map) +QTEST_MAIN(tst_QtConcurrentMap) #else -void tst_map::map() {} -void tst_map::blocking_map() {} -void tst_map::mapped() {} -void tst_map::blocking_mapped() {} -void tst_map::mappedReduced() {} -void tst_map::blocking_mappedReduced() {} -void tst_map::assignResult() {} -void tst_map::functionOverloads() {} +void tst_QtConcurrentMap::map() {} +void tst_QtConcurrentMap::blocking_map() {} +void tst_QtConcurrentMap::mapped() {} +void tst_QtConcurrentMap::blocking_mapped() {} +void tst_QtConcurrentMap::mappedReduced() {} +void tst_QtConcurrentMap::blocking_mappedReduced() {} +void tst_QtConcurrentMap::assignResult() {} +void tst_QtConcurrentMap::functionOverloads() {} #ifndef QT_NO_EXCEPTIONS -void tst_map::exceptions() {} +void tst_QtConcurrentMap::exceptions() {} #endif -void tst_map::incrementalResults() {} -void tst_map::stressTest() {} -void tst_map::throttling() {} -void tst_map::stlContainers() {} -void tst_map::noDetatch() {} +void tst_QtConcurrentMap::incrementalResults() {} +void tst_QtConcurrentMap::stressTest() {} +void tst_QtConcurrentMap::throttling() {} +void tst_QtConcurrentMap::stlContainers() {} +void tst_QtConcurrentMap::noDetatch() {} QTEST_NOOP_MAIN diff --git a/tests/auto/qtconcurrentrun/tst_qtconcurrentrun.cpp b/tests/auto/qtconcurrentrun/tst_qtconcurrentrun.cpp index b9ab6d3..8fdc50c 100644 --- a/tests/auto/qtconcurrentrun/tst_qtconcurrentrun.cpp +++ b/tests/auto/qtconcurrentrun/tst_qtconcurrentrun.cpp @@ -49,7 +49,7 @@ using namespace QtConcurrent; -class TestRunFunction: public QObject +class tst_QtConcurrentRun: public QObject { Q_OBJECT private slots: @@ -73,7 +73,7 @@ private slots: #endif -QTEST_MAIN(TestRunFunction) +QTEST_MAIN(tst_QtConcurrentRun) void light() { @@ -91,7 +91,7 @@ void heavy() } -void TestRunFunction::runLightFunction() +void tst_QtConcurrentRun::runLightFunction() { qDebug("starting function"); QFuture future = run(F(light)); @@ -100,7 +100,7 @@ void TestRunFunction::runLightFunction() qDebug("done"); } -void TestRunFunction::runHeavyFunction() +void tst_QtConcurrentRun::runHeavyFunction() { qDebug("starting function"); QFuture future = run(F(heavy)); @@ -141,7 +141,7 @@ public: int operator()(int in) const { return in; } }; -void TestRunFunction::returnValue() +void tst_QtConcurrentRun::returnValue() { QFuture f; @@ -217,7 +217,7 @@ struct TestConstClass void fooInt(int) const { }; }; -void TestRunFunction::functionObject() +void tst_QtConcurrentRun::functionObject() { QFuture f; TestClass c; @@ -235,7 +235,7 @@ void TestRunFunction::functionObject() } -void TestRunFunction::memberFunctions() +void tst_QtConcurrentRun::memberFunctions() { TestClass c; @@ -278,7 +278,7 @@ void stringIntFunction(QString) } -void TestRunFunction::implicitConvertibleTypes() +void tst_QtConcurrentRun::implicitConvertibleTypes() { double d; run(F(doubleFunction), d).waitForFinished(); @@ -294,7 +294,7 @@ void TestRunFunction::implicitConvertibleTypes() void fn() { } -void TestRunFunction::runWaitLoop() +void tst_QtConcurrentRun::runWaitLoop() { for (int i = 0; i < 1000; ++i) run(fn).waitForFinished(); @@ -324,7 +324,7 @@ int recursiveResult(int level) return 1; } -void TestRunFunction::recursive() +void tst_QtConcurrentRun::recursive() { int levels = 15; @@ -375,7 +375,7 @@ int fn2(double, int *) } #if 0 -void TestRunFunction::createFunctor() +void tst_QtConcurrentRun::createFunctor() { e = 0; ::QtConcurrent::createFunctor(vfn0)(); diff --git a/tests/auto/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp b/tests/auto/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp index 6f586d7..23fd19b 100644 --- a/tests/auto/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp +++ b/tests/auto/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp @@ -48,7 +48,7 @@ using namespace QtConcurrent; -class tst_threadengine: public QObject +class tst_QtConcurrentThreadEngine: public QObject { Q_OBJECT public: @@ -79,7 +79,7 @@ public: } }; -void tst_threadengine::runDirectly() +void tst_QtConcurrentThreadEngine::runDirectly() { { PrintUser engine; @@ -120,7 +120,7 @@ public: bool done; }; -void tst_threadengine::result() +void tst_QtConcurrentThreadEngine::result() { StringResultUser engine; QCOMPARE(*engine.startBlocking(), QString("Foo")); @@ -147,7 +147,7 @@ public: bool done; }; -void tst_threadengine::runThroughStarter() +void tst_QtConcurrentThreadEngine::runThroughStarter() { { ThreadEngineStarter starter = startThreadEngine(new StringResultUser()); @@ -180,7 +180,7 @@ public: } }; -void tst_threadengine::cancel() +void tst_QtConcurrentThreadEngine::cancel() { { CancelUser *engine = new CancelUser(); @@ -234,7 +234,7 @@ public: // Test that a user task with a thread function that always // want to be throttled still completes. The thread engine // should make keep one thread running at all times. -void tst_threadengine::throttle() +void tst_QtConcurrentThreadEngine::throttle() { const int repeats = 10; for (int i = 0; i < repeats; ++i) { @@ -280,7 +280,7 @@ public: bool finishing; }; -void tst_threadengine::threadCount() +void tst_QtConcurrentThreadEngine::threadCount() { const int repeats = 10; for (int i = 0; i < repeats; ++i) { @@ -320,7 +320,7 @@ public: }; -void tst_threadengine::multipleResults() +void tst_QtConcurrentThreadEngine::multipleResults() { MultipleResultsUser *engine = new MultipleResultsUser(); QFuture f = engine->startAsynchronously(); @@ -351,7 +351,7 @@ public: } }; -void tst_threadengine::stresstest() +void tst_QtConcurrentThreadEngine::stresstest() { const int times = 20000; @@ -379,7 +379,7 @@ public: ThreadFunctionResult threadFunction() { QTest::qSleep(sleepTime); return ThreadFinished; } }; -void tst_threadengine::cancelQueuedSlowUser() +void tst_QtConcurrentThreadEngine::cancelQueuedSlowUser() { const int times = 100; @@ -436,7 +436,7 @@ public: QThread *blockThread; }; -void tst_threadengine::exceptions() +void tst_QtConcurrentThreadEngine::exceptions() { // Asynchronous mode: { @@ -527,7 +527,7 @@ void tst_threadengine::exceptions() #endif -QTEST_MAIN(tst_threadengine) +QTEST_MAIN(tst_QtConcurrentThreadEngine) #include "tst_qtconcurrentthreadengine.moc" diff --git a/tests/auto/qvectornd/tst_qvectornd.cpp b/tests/auto/qvectornd/tst_qvectornd.cpp index 2be7264..2850f32 100644 --- a/tests/auto/qvectornd/tst_qvectornd.cpp +++ b/tests/auto/qvectornd/tst_qvectornd.cpp @@ -45,12 +45,12 @@ #include #include -class tst_QVector : public QObject +class tst_QVectorND : public QObject { Q_OBJECT public: - tst_QVector() {} - ~tst_QVector() {} + tst_QVectorND() {} + ~tst_QVectorND() {} private slots: void create2(); @@ -155,7 +155,7 @@ static bool fuzzyCompare(qreal x, qreal y) // Test the creation of QVector2D objects in various ways: // construct, copy, and modify. -void tst_QVector::create2() +void tst_QVectorND::create2() { QVector2D null; QCOMPARE(null.x(), (qreal)0.0f); @@ -244,7 +244,7 @@ void tst_QVector::create2() // Test the creation of QVector3D objects in various ways: // construct, copy, and modify. -void tst_QVector::create3() +void tst_QVectorND::create3() { QVector3D null; QCOMPARE(null.x(), (qreal)0.0f); @@ -370,7 +370,7 @@ void tst_QVector::create3() // Test the creation of QVector4D objects in various ways: // construct, copy, and modify. -void tst_QVector::create4() +void tst_QVectorND::create4() { QVector4D null; QCOMPARE(null.x(), (qreal)0.0f); @@ -556,7 +556,7 @@ void tst_QVector::create4() } // Test vector length computation for 2D vectors. -void tst_QVector::length2_data() +void tst_QVectorND::length2_data() { QTest::addColumn("x"); QTest::addColumn("y"); @@ -569,7 +569,7 @@ void tst_QVector::length2_data() QTest::newRow("-1y") << (qreal)0.0f << (qreal)-1.0f << (qreal)1.0f; QTest::newRow("two") << (qreal)2.0f << (qreal)-2.0f << (qreal)qSqrt(8.0f); } -void tst_QVector::length2() +void tst_QVectorND::length2() { QFETCH(qreal, x); QFETCH(qreal, y); @@ -581,7 +581,7 @@ void tst_QVector::length2() } // Test vector length computation for 3D vectors. -void tst_QVector::length3_data() +void tst_QVectorND::length3_data() { QTest::addColumn("x"); QTest::addColumn("y"); @@ -597,7 +597,7 @@ void tst_QVector::length3_data() QTest::newRow("-1z") << (qreal)0.0f << (qreal)0.0f << (qreal)-1.0f << (qreal)1.0f; QTest::newRow("two") << (qreal)2.0f << (qreal)-2.0f << (qreal)2.0f << (qreal)qSqrt(12.0f); } -void tst_QVector::length3() +void tst_QVectorND::length3() { QFETCH(qreal, x); QFETCH(qreal, y); @@ -610,7 +610,7 @@ void tst_QVector::length3() } // Test vector length computation for 4D vectors. -void tst_QVector::length4_data() +void tst_QVectorND::length4_data() { QTest::addColumn("x"); QTest::addColumn("y"); @@ -629,7 +629,7 @@ void tst_QVector::length4_data() QTest::newRow("-1w") << (qreal)0.0f << (qreal)0.0f << (qreal)0.0f << (qreal)-1.0f << (qreal)1.0f; QTest::newRow("two") << (qreal)2.0f << (qreal)-2.0f << (qreal)2.0f << (qreal)2.0f << (qreal)qSqrt(16.0f); } -void tst_QVector::length4() +void tst_QVectorND::length4() { QFETCH(qreal, x); QFETCH(qreal, y); @@ -643,12 +643,12 @@ void tst_QVector::length4() } // Test the unit vector conversion for 2D vectors. -void tst_QVector::normalized2_data() +void tst_QVectorND::normalized2_data() { // Use the same test data as the length test. length2_data(); } -void tst_QVector::normalized2() +void tst_QVectorND::normalized2() { QFETCH(qreal, x); QFETCH(qreal, y); @@ -665,12 +665,12 @@ void tst_QVector::normalized2() } // Test the unit vector conversion for 3D vectors. -void tst_QVector::normalized3_data() +void tst_QVectorND::normalized3_data() { // Use the same test data as the length test. length3_data(); } -void tst_QVector::normalized3() +void tst_QVectorND::normalized3() { QFETCH(qreal, x); QFETCH(qreal, y); @@ -689,12 +689,12 @@ void tst_QVector::normalized3() } // Test the unit vector conversion for 4D vectors. -void tst_QVector::normalized4_data() +void tst_QVectorND::normalized4_data() { // Use the same test data as the length test. length4_data(); } -void tst_QVector::normalized4() +void tst_QVectorND::normalized4() { QFETCH(qreal, x); QFETCH(qreal, y); @@ -715,12 +715,12 @@ void tst_QVector::normalized4() } // Test the unit vector conversion for 2D vectors. -void tst_QVector::normalize2_data() +void tst_QVectorND::normalize2_data() { // Use the same test data as the length test. length2_data(); } -void tst_QVector::normalize2() +void tst_QVectorND::normalize2() { QFETCH(qreal, x); QFETCH(qreal, y); @@ -735,12 +735,12 @@ void tst_QVector::normalize2() } // Test the unit vector conversion for 3D vectors. -void tst_QVector::normalize3_data() +void tst_QVectorND::normalize3_data() { // Use the same test data as the length test. length3_data(); } -void tst_QVector::normalize3() +void tst_QVectorND::normalize3() { QFETCH(qreal, x); QFETCH(qreal, y); @@ -756,12 +756,12 @@ void tst_QVector::normalize3() } // Test the unit vector conversion for 4D vectors. -void tst_QVector::normalize4_data() +void tst_QVectorND::normalize4_data() { // Use the same test data as the length test. length4_data(); } -void tst_QVector::normalize4() +void tst_QVectorND::normalize4() { QFETCH(qreal, x); QFETCH(qreal, y); @@ -778,7 +778,7 @@ void tst_QVector::normalize4() } // Test the comparison operators for 2D vectors. -void tst_QVector::compare2() +void tst_QVectorND::compare2() { QVector2D v1(1, 2); QVector2D v2(1, 2); @@ -791,7 +791,7 @@ void tst_QVector::compare2() } // Test the comparison operators for 3D vectors. -void tst_QVector::compare3() +void tst_QVectorND::compare3() { QVector3D v1(1, 2, 4); QVector3D v2(1, 2, 4); @@ -806,7 +806,7 @@ void tst_QVector::compare3() } // Test the comparison operators for 4D vectors. -void tst_QVector::compare4() +void tst_QVectorND::compare4() { QVector4D v1(1, 2, 4, 8); QVector4D v2(1, 2, 4, 8); @@ -823,7 +823,7 @@ void tst_QVector::compare4() } // Test vector addition for 2D vectors. -void tst_QVector::add2_data() +void tst_QVectorND::add2_data() { QTest::addColumn("x1"); QTest::addColumn("y1"); @@ -852,7 +852,7 @@ void tst_QVector::add2_data() << (qreal)4.0f << (qreal)5.0f << (qreal)5.0f << (qreal)7.0f; } -void tst_QVector::add2() +void tst_QVectorND::add2() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -876,7 +876,7 @@ void tst_QVector::add2() } // Test vector addition for 3D vectors. -void tst_QVector::add3_data() +void tst_QVectorND::add3_data() { QTest::addColumn("x1"); QTest::addColumn("y1"); @@ -913,7 +913,7 @@ void tst_QVector::add3_data() << (qreal)4.0f << (qreal)5.0f << (qreal)-6.0f << (qreal)5.0f << (qreal)7.0f << (qreal)-3.0f; } -void tst_QVector::add3() +void tst_QVectorND::add3() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -941,7 +941,7 @@ void tst_QVector::add3() } // Test vector addition for 4D vectors. -void tst_QVector::add4_data() +void tst_QVectorND::add4_data() { QTest::addColumn("x1"); QTest::addColumn("y1"); @@ -986,7 +986,7 @@ void tst_QVector::add4_data() << (qreal)4.0f << (qreal)5.0f << (qreal)-6.0f << (qreal)9.0f << (qreal)5.0f << (qreal)7.0f << (qreal)-3.0f << (qreal)17.0f; } -void tst_QVector::add4() +void tst_QVectorND::add4() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -1018,12 +1018,12 @@ void tst_QVector::add4() } // Test vector subtraction for 2D vectors. -void tst_QVector::subtract2_data() +void tst_QVectorND::subtract2_data() { // Use the same test data as the add test. add2_data(); } -void tst_QVector::subtract2() +void tst_QVectorND::subtract2() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -1055,12 +1055,12 @@ void tst_QVector::subtract2() } // Test vector subtraction for 3D vectors. -void tst_QVector::subtract3_data() +void tst_QVectorND::subtract3_data() { // Use the same test data as the add test. add3_data(); } -void tst_QVector::subtract3() +void tst_QVectorND::subtract3() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -1097,12 +1097,12 @@ void tst_QVector::subtract3() } // Test vector subtraction for 4D vectors. -void tst_QVector::subtract4_data() +void tst_QVectorND::subtract4_data() { // Use the same test data as the add test. add4_data(); } -void tst_QVector::subtract4() +void tst_QVectorND::subtract4() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -1144,7 +1144,7 @@ void tst_QVector::subtract4() } // Test component-wise vector multiplication for 2D vectors. -void tst_QVector::multiply2_data() +void tst_QVectorND::multiply2_data() { QTest::addColumn("x1"); QTest::addColumn("y1"); @@ -1173,7 +1173,7 @@ void tst_QVector::multiply2_data() << (qreal)4.0f << (qreal)5.0f << (qreal)4.0f << (qreal)10.0f; } -void tst_QVector::multiply2() +void tst_QVectorND::multiply2() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -1197,7 +1197,7 @@ void tst_QVector::multiply2() } // Test component-wise vector multiplication for 3D vectors. -void tst_QVector::multiply3_data() +void tst_QVectorND::multiply3_data() { QTest::addColumn("x1"); QTest::addColumn("y1"); @@ -1234,7 +1234,7 @@ void tst_QVector::multiply3_data() << (qreal)4.0f << (qreal)5.0f << (qreal)-6.0f << (qreal)4.0f << (qreal)10.0f << (qreal)-18.0f; } -void tst_QVector::multiply3() +void tst_QVectorND::multiply3() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -1262,7 +1262,7 @@ void tst_QVector::multiply3() } // Test component-wise vector multiplication for 4D vectors. -void tst_QVector::multiply4_data() +void tst_QVectorND::multiply4_data() { QTest::addColumn("x1"); QTest::addColumn("y1"); @@ -1307,7 +1307,7 @@ void tst_QVector::multiply4_data() << (qreal)4.0f << (qreal)5.0f << (qreal)-6.0f << (qreal)9.0f << (qreal)4.0f << (qreal)10.0f << (qreal)-18.0f << (qreal)72.0f; } -void tst_QVector::multiply4() +void tst_QVectorND::multiply4() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -1339,7 +1339,7 @@ void tst_QVector::multiply4() } // Test vector multiplication by a factor for 2D vectors. -void tst_QVector::multiplyFactor2_data() +void tst_QVectorND::multiplyFactor2_data() { QTest::addColumn("x1"); QTest::addColumn("y1"); @@ -1372,7 +1372,7 @@ void tst_QVector::multiplyFactor2_data() << (qreal)0.0f << (qreal)0.0f << (qreal)0.0f; } -void tst_QVector::multiplyFactor2() +void tst_QVectorND::multiplyFactor2() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -1395,7 +1395,7 @@ void tst_QVector::multiplyFactor2() } // Test vector multiplication by a factor for 3D vectors. -void tst_QVector::multiplyFactor3_data() +void tst_QVectorND::multiplyFactor3_data() { QTest::addColumn("x1"); QTest::addColumn("y1"); @@ -1435,7 +1435,7 @@ void tst_QVector::multiplyFactor3_data() << (qreal)0.0f << (qreal)0.0f << (qreal)0.0f << (qreal)0.0f; } -void tst_QVector::multiplyFactor3() +void tst_QVectorND::multiplyFactor3() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -1461,7 +1461,7 @@ void tst_QVector::multiplyFactor3() } // Test vector multiplication by a factor for 4D vectors. -void tst_QVector::multiplyFactor4_data() +void tst_QVectorND::multiplyFactor4_data() { QTest::addColumn("x1"); QTest::addColumn("y1"); @@ -1508,7 +1508,7 @@ void tst_QVector::multiplyFactor4_data() << (qreal)0.0f << (qreal)0.0f << (qreal)0.0f << (qreal)0.0f << (qreal)0.0f; } -void tst_QVector::multiplyFactor4() +void tst_QVectorND::multiplyFactor4() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -1537,12 +1537,12 @@ void tst_QVector::multiplyFactor4() } // Test vector division by a factor for 2D vectors. -void tst_QVector::divide2_data() +void tst_QVectorND::divide2_data() { // Use the same test data as the multiply test. multiplyFactor2_data(); } -void tst_QVector::divide2() +void tst_QVectorND::divide2() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -1567,12 +1567,12 @@ void tst_QVector::divide2() } // Test vector division by a factor for 3D vectors. -void tst_QVector::divide3_data() +void tst_QVectorND::divide3_data() { // Use the same test data as the multiply test. multiplyFactor3_data(); } -void tst_QVector::divide3() +void tst_QVectorND::divide3() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -1600,12 +1600,12 @@ void tst_QVector::divide3() } // Test vector division by a factor for 4D vectors. -void tst_QVector::divide4_data() +void tst_QVectorND::divide4_data() { // Use the same test data as the multiply test. multiplyFactor4_data(); } -void tst_QVector::divide4() +void tst_QVectorND::divide4() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -1636,12 +1636,12 @@ void tst_QVector::divide4() } // Test vector negation for 2D vectors. -void tst_QVector::negate2_data() +void tst_QVectorND::negate2_data() { // Use the same test data as the add test. add2_data(); } -void tst_QVector::negate2() +void tst_QVectorND::negate2() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -1653,12 +1653,12 @@ void tst_QVector::negate2() } // Test vector negation for 3D vectors. -void tst_QVector::negate3_data() +void tst_QVectorND::negate3_data() { // Use the same test data as the add test. add3_data(); } -void tst_QVector::negate3() +void tst_QVectorND::negate3() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -1671,12 +1671,12 @@ void tst_QVector::negate3() } // Test vector negation for 4D vectors. -void tst_QVector::negate4_data() +void tst_QVectorND::negate4_data() { // Use the same test data as the add test. add4_data(); } -void tst_QVector::negate4() +void tst_QVectorND::negate4() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -1690,7 +1690,7 @@ void tst_QVector::negate4() } // Test the computation of vector cross-products. -void tst_QVector::crossProduct_data() +void tst_QVectorND::crossProduct_data() { QTest::addColumn("x1"); QTest::addColumn("y1"); @@ -1721,7 +1721,7 @@ void tst_QVector::crossProduct_data() << (qreal)-3.0f << (qreal)6.0f << (qreal)-3.0f << (qreal)32.0f; } -void tst_QVector::crossProduct() +void tst_QVectorND::crossProduct() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -1751,12 +1751,12 @@ void tst_QVector::crossProduct() } // Test the computation of normals. -void tst_QVector::normal_data() +void tst_QVectorND::normal_data() { // Use the same test data as the crossProduct test. crossProduct_data(); } -void tst_QVector::normal() +void tst_QVectorND::normal() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -1780,7 +1780,7 @@ void tst_QVector::normal() } // Test distance to plane calculations. -void tst_QVector::distanceToPlane_data() +void tst_QVectorND::distanceToPlane_data() { QTest::addColumn("x1"); // Point on plane QTest::addColumn("y1"); @@ -1823,7 +1823,7 @@ void tst_QVector::distanceToPlane_data() << (qreal)0.0f << (qreal)2.0f << (qreal)0.0f << (qreal)-2.0f; } -void tst_QVector::distanceToPlane() +void tst_QVectorND::distanceToPlane() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -1853,7 +1853,7 @@ void tst_QVector::distanceToPlane() } // Test distance to line calculations. -void tst_QVector::distanceToLine_data() +void tst_QVectorND::distanceToLine_data() { QTest::addColumn("x1"); // Point on line QTest::addColumn("y1"); @@ -1896,7 +1896,7 @@ void tst_QVector::distanceToLine_data() << (qreal)0.0f << (qreal)5.0f << (qreal)0.0f << (qreal)5.0f; } -void tst_QVector::distanceToLine() +void tst_QVectorND::distanceToLine() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -1917,7 +1917,7 @@ void tst_QVector::distanceToLine() } // Test the computation of dot products for 2D vectors. -void tst_QVector::dotProduct2_data() +void tst_QVectorND::dotProduct2_data() { QTest::addColumn("x1"); QTest::addColumn("y1"); @@ -1940,7 +1940,7 @@ void tst_QVector::dotProduct2_data() << (qreal)4.0f << (qreal)5.0f << (qreal)14.0f; } -void tst_QVector::dotProduct2() +void tst_QVectorND::dotProduct2() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -1960,12 +1960,12 @@ void tst_QVector::dotProduct2() } // Test the computation of dot products for 3D vectors. -void tst_QVector::dotProduct3_data() +void tst_QVectorND::dotProduct3_data() { // Use the same test data as the crossProduct test. crossProduct_data(); } -void tst_QVector::dotProduct3() +void tst_QVectorND::dotProduct3() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -1994,7 +1994,7 @@ void tst_QVector::dotProduct3() } // Test the computation of dot products for 4D vectors. -void tst_QVector::dotProduct4_data() +void tst_QVectorND::dotProduct4_data() { QTest::addColumn("x1"); QTest::addColumn("y1"); @@ -2021,7 +2021,7 @@ void tst_QVector::dotProduct4_data() << (qreal)4.0f << (qreal)5.0f << (qreal)6.0f << (qreal)7.0f << (qreal)60.0f; } -void tst_QVector::dotProduct4() +void tst_QVectorND::dotProduct4() { QFETCH(qreal, x1); QFETCH(qreal, y1); @@ -2044,14 +2044,14 @@ void tst_QVector::dotProduct4() QCOMPARE(QVector4D::dotProduct(v1, v2), d); } -class tst_QVectorProperties : public QObject +class tst_QVectorNDProperties : public QObject { Q_OBJECT Q_PROPERTY(QVector2D vector2D READ vector2D WRITE setVector2D) Q_PROPERTY(QVector3D vector3D READ vector3D WRITE setVector3D) Q_PROPERTY(QVector4D vector4D READ vector4D WRITE setVector4D) public: - tst_QVectorProperties(QObject *parent = 0) : QObject(parent) {} + tst_QVectorNDProperties(QObject *parent = 0) : QObject(parent) {} QVector2D vector2D() const { return v2; } void setVector2D(const QVector2D& value) { v2 = value; } @@ -2069,9 +2069,9 @@ private: }; // Test getting and setting vector properties via the metaobject system. -void tst_QVector::properties() +void tst_QVectorND::properties() { - tst_QVectorProperties obj; + tst_QVectorNDProperties obj; obj.setVector2D(QVector2D(1.0f, 2.0f)); obj.setVector3D(QVector3D(3.0f, 4.0f, 5.0f)); @@ -2115,7 +2115,7 @@ void tst_QVector::properties() QCOMPARE(v4.w(), (qreal)-9.0f); } -void tst_QVector::metaTypes() +void tst_QVectorND::metaTypes() { QVERIFY(QMetaType::type("QVector2D") == QMetaType::QVector2D); QVERIFY(QMetaType::type("QVector3D") == QMetaType::QVector3D); @@ -2137,6 +2137,6 @@ void tst_QVector::metaTypes() QVERIFY(qMetaTypeId() == QMetaType::QVector4D); } -QTEST_APPLESS_MAIN(tst_QVector) +QTEST_APPLESS_MAIN(tst_QVectorND) #include "tst_qvectornd.moc" diff --git a/tests/auto/xmlpatternsdiagnosticsts/tst_xmlpatternsdiagnosticsts.cpp b/tests/auto/xmlpatternsdiagnosticsts/tst_xmlpatternsdiagnosticsts.cpp index 4a11404..f4f6181 100644 --- a/tests/auto/xmlpatternsdiagnosticsts/tst_xmlpatternsdiagnosticsts.cpp +++ b/tests/auto/xmlpatternsdiagnosticsts/tst_xmlpatternsdiagnosticsts.cpp @@ -52,25 +52,25 @@ \since 4.5 \brief Test QtXmlPatterns test suite driver in tests/auto/xmlpatternsxqts/lib/. */ -class tst_XmlPatternsXSLTS : public tst_SuiteTest +class tst_XmlPatternsDiagnosticsTS : public tst_SuiteTest { Q_OBJECT public: - tst_XmlPatternsXSLTS(); + tst_XmlPatternsDiagnosticsTS(); protected: virtual void catalogPath(QString &write) const; }; -tst_XmlPatternsXSLTS::tst_XmlPatternsXSLTS() : tst_SuiteTest(tst_SuiteTest::XQuerySuite, true) +tst_XmlPatternsDiagnosticsTS::tst_XmlPatternsDiagnosticsTS() : tst_SuiteTest(tst_SuiteTest::XQuerySuite, true) { } -void tst_XmlPatternsXSLTS::catalogPath(QString &write) const +void tst_XmlPatternsDiagnosticsTS::catalogPath(QString &write) const { write = QLatin1String("TestSuite/DiagnosticsCatalog.xml"); } -QTEST_MAIN(tst_XmlPatternsXSLTS) +QTEST_MAIN(tst_XmlPatternsDiagnosticsTS) #include "tst_xmlpatternsdiagnosticsts.moc" #else -- cgit v0.12 From 00d25e88ba57241d840ec4d81d75a3853520ba37 Mon Sep 17 00:00:00 2001 From: Gareth Stockwell Date: Mon, 22 Mar 2010 09:42:40 +0000 Subject: Updated dist/changes-4.6.3 --- dist/changes-4.6.3 | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dist/changes-4.6.3 b/dist/changes-4.6.3 index 57cc453..d8e9fb4 100644 --- a/dist/changes-4.6.3 +++ b/dist/changes-4.6.3 @@ -138,6 +138,14 @@ Qt for Windows CE - +Qt for Symbian +-------------- + + - [QT-567] Implementation of QtMultimedia QAudio* APIs + - [QTBUG-8919] Modified Phonon MMF backend to support video playback on + platforms which use graphics surfaces (i.e. platforms using the + New Graphics Architecture a.k.a. ScreenPlay) + **************************************************************************** * Tools * **************************************************************************** -- cgit v0.12 From 28d469475ccb708ab3f141d9e3c48a24dff4b5e1 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Mon, 22 Mar 2010 12:43:51 +0100 Subject: Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit/qtwebkit-4.6 ( d95c54951e7af2aa7def4346a142b2162bd89bbd ) Changes in WebKit/qt since the last update: https://bugs.webkit.org/show_bug.cgi?id=33408 -- Add flag IGNORE_FIXED_BACKGROUNDS (disabled by default) to ignore fixed background images and accelerate web page scrolling on low-powered/mobile devices https://bugs.webkit.org/show_bug.cgi?id=34168 -- [Qt] Enable FAST_MOBILE_SCROLLING on Qt embedded platforms https://bugs.webkit.org/show_bug.cgi?id=33150 -- Do not render the full frame when there is some elements with fixed positioning --- src/3rdparty/webkit/VERSION | 2 +- src/3rdparty/webkit/WebCore/ChangeLog | 46 +++++++++++++ src/3rdparty/webkit/WebCore/WebCore.pro | 4 ++ src/3rdparty/webkit/WebCore/page/FrameView.cpp | 75 +++++++++++++++++++++- src/3rdparty/webkit/WebCore/page/FrameView.h | 7 ++ .../webkit/WebCore/platform/ScrollView.cpp | 7 +- src/3rdparty/webkit/WebCore/platform/ScrollView.h | 3 + .../webkit/WebCore/rendering/RenderBlock.h | 1 + .../webkit/WebCore/rendering/RenderBox.cpp | 10 +++ .../WebCore/rendering/RenderBoxModelObject.cpp | 11 ++++ .../webkit/WebCore/rendering/RenderObject.cpp | 15 +++-- 11 files changed, 174 insertions(+), 7 deletions(-) diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index a2d5f37..def66ef 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -8,4 +8,4 @@ The commit imported was from the and has the sha1 checksum - 266a6c4f1938dd9edf4a8125faf91c62495e3ce2 + d95c54951e7af2aa7def4346a142b2162bd89bbd diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog index a3f70d3..869e225 100644 --- a/src/3rdparty/webkit/WebCore/ChangeLog +++ b/src/3rdparty/webkit/WebCore/ChangeLog @@ -1,3 +1,49 @@ +2010-01-31 Benjamin Poulain + + Reviewed by Eric Seidel. + + [Qt] Enable FAST_MOBILE_SCROLLING on Qt embedded platforms + https://bugs.webkit.org/show_bug.cgi?id=34168 + + Enable FAST_MOBILE_SCROLLING for Qt on Maemo 5, Linux embedded + and Symbian + + * WebCore.pro: + +2010-01-19 Daniel Bates + + Reviewed by Adam Treat. + + https://bugs.webkit.org/show_bug.cgi?id=33408 + + Implements an optimization to ignore fixed background images + (i.e. background-attachment: fixed) when a page does not contain + any fixed position elements so as to allow fast repaints (via bit + blit) when scrolling a page. + + Currently, if a page has elements that specify either a fixed + background or a fixed position then we perform a slow repaint + (i.e disable blitting) so as to avoid rendering artifacts. + However, on low-powered/mobile devices slow repaints can cause + noticeable delays when scrolling a page with a fixed background + image. By sacrificing support for fixed background images when + there are no fixed elements on the page and with come care, we + don't need to force slow repaints and can avoid rendering artifacts. + Hence, on such devices we can improve the responsiveness of + scrolling a page with a fixed background image. + + Note, this optimization is only enabled if the WebKit is built + with FAST_MOBILE_SCROLLING enabled. + + Tests: fast/fast-mobile-scrolling/fixed-position-element.html + fast/fast-mobile-scrolling/no-fixed-position-elements.html + + * rendering/RenderBoxModelObject.cpp: + (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry): + Disable fixed background attachment if we can blit on scroll. + * rendering/RenderObject.cpp: + (WebCore::RenderObject::styleWillChange): + 2010-03-11 Simon Hausmann Reviewed by Tor Arne Vestbø. diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro index 5654a18..735c8ef 100644 --- a/src/3rdparty/webkit/WebCore/WebCore.pro +++ b/src/3rdparty/webkit/WebCore/WebCore.pro @@ -162,6 +162,10 @@ contains(DEFINES, ENABLE_SINGLE_THREADED=1) { DEFINES += ENABLE_SVG_FONTS=0 ENABLE_SVG_FOREIGN_OBJECT=0 ENABLE_SVG_ANIMATION=0 ENABLE_SVG_AS_IMAGE=0 ENABLE_SVG_USE=0 } +mameo5|symbian|embedded { + DEFINES += ENABLE_FAST_MOBILE_SCROLLING=1 +} + # HTML5 ruby support !contains(DEFINES, ENABLE_RUBY=.): DEFINES += ENABLE_RUBY=1 diff --git a/src/3rdparty/webkit/WebCore/page/FrameView.cpp b/src/3rdparty/webkit/WebCore/page/FrameView.cpp index bc4e4f2..4c3a0ab 100644 --- a/src/3rdparty/webkit/WebCore/page/FrameView.cpp +++ b/src/3rdparty/webkit/WebCore/page/FrameView.cpp @@ -106,6 +106,7 @@ struct ScheduledEvent { FrameView::FrameView(Frame* frame) : m_frame(frame) , m_slowRepaintObjectCount(0) + , m_fixedObjectCount(0) , m_layoutTimer(this, &FrameView::layoutTimerFired) , m_layoutRoot(0) , m_postLayoutTasksTimer(this, &FrameView::postLayoutTimerFired) @@ -735,7 +736,7 @@ String FrameView::mediaType() const bool FrameView::useSlowRepaints() const { - return m_useSlowRepaints || m_slowRepaintObjectCount > 0 || m_isOverlapped || !m_contentIsOpaque; + return m_useSlowRepaints || m_slowRepaintObjectCount > 0 || (platformWidget() && m_fixedObjectCount > 0) || m_isOverlapped || !m_contentIsOpaque; } void FrameView::setUseSlowRepaints() @@ -759,6 +760,78 @@ void FrameView::removeSlowRepaintObject() setCanBlitOnScroll(!useSlowRepaints()); } +void FrameView::addFixedObject() +{ + if (!m_fixedObjectCount && platformWidget()) + setCanBlitOnScroll(false); + ++m_fixedObjectCount; +} + +void FrameView::removeFixedObject() +{ + ASSERT(m_fixedObjectCount > 0); + m_fixedObjectCount--; + if (!m_fixedObjectCount) + setCanBlitOnScroll(!useSlowRepaints()); +} + +void FrameView::scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect) +{ + const size_t fixedObjectThreshold = 5; + + ListHashSet* positionedObjects = 0; + if (RenderView* root = m_frame->contentRenderer()) + positionedObjects = root->positionedObjects(); + + if (!positionedObjects || positionedObjects->isEmpty()) { + hostWindow()->scroll(scrollDelta, rectToScroll, clipRect); + return; + } + + // Get the rects of the fixed objects visible in the rectToScroll + Vector subRectToUpdate; + bool updateInvalidatedSubRect = true; + ListHashSet::const_iterator end = positionedObjects->end(); + for (ListHashSet::const_iterator it = positionedObjects->begin(); it != end; ++it) { + RenderBox* renderBox = *it; + if (renderBox->style()->position() != FixedPosition) + continue; + IntRect topLevelRect; + IntRect updateRect = renderBox->paintingRootRect(topLevelRect); + updateRect.move(-scrollX(), -scrollY()); + updateRect.intersect(rectToScroll); + if (!updateRect.isEmpty()) { + if (subRectToUpdate.size() >= fixedObjectThreshold) { + updateInvalidatedSubRect = false; + break; + } + subRectToUpdate.append(updateRect); + } + } + + // Scroll the view + if (updateInvalidatedSubRect) { + // 1) scroll + hostWindow()->scroll(scrollDelta, rectToScroll, clipRect); + + // 2) update the area of fixed objets that has been invalidated + size_t fixObjectsCount = subRectToUpdate.size(); + for (size_t i = 0; i < fixObjectsCount; ++i) { + IntRect updateRect = subRectToUpdate[i]; + IntRect scrolledRect = updateRect; + scrolledRect.move(scrollDelta); + updateRect.unite(scrolledRect); + updateRect.intersect(rectToScroll); + hostWindow()->repaint(updateRect, true, false, true); + } + } else { + // the number of fixed objects exceed the threshold, so we repaint everything. + IntRect updateRect = clipRect; + updateRect.intersect(rectToScroll); + hostWindow()->repaint(updateRect, true, false, true); + } +} + void FrameView::setIsOverlapped(bool isOverlapped) { if (isOverlapped == m_isOverlapped) diff --git a/src/3rdparty/webkit/WebCore/page/FrameView.h b/src/3rdparty/webkit/WebCore/page/FrameView.h index 3d17d2c..5243c02 100644 --- a/src/3rdparty/webkit/WebCore/page/FrameView.h +++ b/src/3rdparty/webkit/WebCore/page/FrameView.h @@ -143,6 +143,9 @@ public: void addSlowRepaintObject(); void removeSlowRepaintObject(); + void addFixedObject(); + void removeFixedObject(); + void beginDeferredRepaints(); void endDeferredRepaints(); void checkStopDelayingDeferredRepaints(); @@ -196,6 +199,9 @@ public: bool isFrameViewScrollCorner(RenderScrollbarPart* scrollCorner) const { return m_scrollCorner == scrollCorner; } void invalidateScrollCorner(); +protected: + virtual void scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect); + private: FrameView(Frame*); @@ -261,6 +267,7 @@ private: bool m_isOverlapped; bool m_contentIsOpaque; unsigned m_slowRepaintObjectCount; + unsigned m_fixedObjectCount; int m_borderX, m_borderY; diff --git a/src/3rdparty/webkit/WebCore/platform/ScrollView.cpp b/src/3rdparty/webkit/WebCore/platform/ScrollView.cpp index e67daf9..9e15c43 100644 --- a/src/3rdparty/webkit/WebCore/platform/ScrollView.cpp +++ b/src/3rdparty/webkit/WebCore/platform/ScrollView.cpp @@ -509,7 +509,7 @@ void ScrollView::scrollContents(const IntSize& scrollDelta) if (canBlitOnScroll()) { // The main frame can just blit the WebView window // FIXME: Find a way to blit subframes without blitting overlapping content - hostWindow()->scroll(-scrollDelta, scrollViewRect, clipRect); + scrollContentsFastPath(-scrollDelta, scrollViewRect, clipRect); } else { // We need to go ahead and repaint the entire backing store. Do it now before moving the // windowed plugins. @@ -524,6 +524,11 @@ void ScrollView::scrollContents(const IntSize& scrollDelta) hostWindow()->paint(); } +void ScrollView::scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect) +{ + hostWindow()->scroll(scrollDelta, rectToScroll, clipRect); +} + IntPoint ScrollView::windowToContents(const IntPoint& windowPoint) const { IntPoint viewPoint = convertFromContainingWindow(windowPoint); diff --git a/src/3rdparty/webkit/WebCore/platform/ScrollView.h b/src/3rdparty/webkit/WebCore/platform/ScrollView.h index 5dacff5..7060d07 100644 --- a/src/3rdparty/webkit/WebCore/platform/ScrollView.h +++ b/src/3rdparty/webkit/WebCore/platform/ScrollView.h @@ -244,6 +244,9 @@ protected: IntRect scrollCornerRect() const; virtual void updateScrollCorner(); virtual void paintScrollCorner(GraphicsContext*, const IntRect& cornerRect); + + // Scroll the content by blitting the pixels + virtual void scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect); private: RefPtr m_horizontalScrollbar; diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderBlock.h b/src/3rdparty/webkit/WebCore/rendering/RenderBlock.h index 7ba5fce..3300d01 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderBlock.h +++ b/src/3rdparty/webkit/WebCore/rendering/RenderBlock.h @@ -75,6 +75,7 @@ public: void insertPositionedObject(RenderBox*); void removePositionedObject(RenderBox*); void removePositionedObjects(RenderBlock*); + ListHashSet* positionedObjects() const { return m_positionedObjects; } void addPercentHeightDescendant(RenderBox*); static void removePercentHeightDescendant(RenderBox*); diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp index 1df82a4..7ca2ff8 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp +++ b/src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp @@ -145,6 +145,16 @@ void RenderBox::styleWillChange(StyleDifference diff, const RenderStyle* newStyl removeFloatingOrPositionedChildFromBlockLists(); } } + if (FrameView *frameView = view()->frameView()) { + bool newStyleIsFixed = newStyle && newStyle->position() == FixedPosition; + bool oldStyleIsFixed = style() && style()->position() == FixedPosition; + if (newStyleIsFixed != oldStyleIsFixed) { + if (newStyleIsFixed) + frameView->addFixedObject(); + else + frameView->removeFixedObject(); + } + } RenderBoxModelObject::styleWillChange(diff, newStyle); } diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderBoxModelObject.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderBoxModelObject.cpp index 23dad2d..9d0f1ed 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderBoxModelObject.cpp +++ b/src/3rdparty/webkit/WebCore/rendering/RenderBoxModelObject.cpp @@ -557,6 +557,17 @@ void RenderBoxModelObject::calculateBackgroundImageGeometry(const FillLayer* fil // Determine the background positioning area and set destRect to the background painting area. // destRect will be adjusted later if the background is non-repeating. bool fixedAttachment = fillLayer->attachment() == FixedBackgroundAttachment; + +#if ENABLE(FAST_MOBILE_SCROLLING) + if (view()->frameView() && view()->frameView()->canBlitOnScroll()) { + // As a side effect of an optimization to blit on scroll, we do not honor the CSS + // property "background-attachment: fixed" because it may result in rendering + // artifacts. Note, these artifacts only appear if we are blitting on scroll of + // a page that has fixed background images. + fixedAttachment = false; + } +#endif + if (!fixedAttachment) { destRect = IntRect(tx, ty, w, h); diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderObject.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderObject.cpp index a10ffd9..199de4a 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderObject.cpp +++ b/src/3rdparty/webkit/WebCore/rendering/RenderObject.cpp @@ -1591,10 +1591,17 @@ void RenderObject::styleWillChange(StyleDifference diff, const RenderStyle* newS s_affectsParentBlock = false; if (view()->frameView()) { - // FIXME: A better solution would be to only invalidate the fixed regions when scrolling. It's overkill to - // prevent the entire view from blitting on a scroll. - bool newStyleSlowScroll = newStyle && (newStyle->position() == FixedPosition || newStyle->hasFixedBackgroundImage()); - bool oldStyleSlowScroll = m_style && (m_style->position() == FixedPosition || m_style->hasFixedBackgroundImage()); + bool shouldBlitOnFixedBackgroundImage = false; +#if ENABLE(FAST_MOBILE_SCROLLING) + // On low-powered/mobile devices, preventing blitting on a scroll can cause noticeable delays + // when scrolling a page with a fixed background image. As an optimization, assuming there are + // no fixed positoned elements on the page, we can acclerate scrolling (via blitting) if we + // ignore the CSS property "background-attachment: fixed". + shouldBlitOnFixedBackgroundImage = true; +#endif + + bool newStyleSlowScroll = newStyle && !shouldBlitOnFixedBackgroundImage && newStyle->hasFixedBackgroundImage(); + bool oldStyleSlowScroll = m_style && !shouldBlitOnFixedBackgroundImage && m_style->hasFixedBackgroundImage(); if (oldStyleSlowScroll != newStyleSlowScroll) { if (oldStyleSlowScroll) view()->frameView()->removeSlowRepaintObject(); -- cgit v0.12 From 22993cbada46fb9e170d4ac7a08413c968fce2a2 Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Mon, 22 Mar 2010 13:06:29 +0100 Subject: Stop QHostInfo thread pool when application is about to exit Ensure that the threadpool QHostInfo uses internally has cleanup its threads when the application exits. This avoids the warning from QWaitCondition on Windows (which happens due to thread termination at application exit). Task-number: QTBUG-7691 Reviewed-by: mgoetz --- src/network/kernel/qhostinfo.cpp | 1 + src/network/kernel/qhostinfo_p.h | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/network/kernel/qhostinfo.cpp b/src/network/kernel/qhostinfo.cpp index 7150fb7..6894978 100644 --- a/src/network/kernel/qhostinfo.cpp +++ b/src/network/kernel/qhostinfo.cpp @@ -479,6 +479,7 @@ void QHostInfoRunnable::run() QHostInfoLookupManager::QHostInfoLookupManager() : mutex(QMutex::Recursive), wasDeleted(false) { moveToThread(QCoreApplicationPrivate::mainThread()); + connect(QCoreApplication::instance(), SIGNAL(destroyed()), SLOT(waitForThreadPoolDone()), Qt::DirectConnection); threadPool.setMaxThreadCount(5); // do 5 DNS lookups in parallel } diff --git a/src/network/kernel/qhostinfo_p.h b/src/network/kernel/qhostinfo_p.h index 2b26b07..4fc74e9 100644 --- a/src/network/kernel/qhostinfo_p.h +++ b/src/network/kernel/qhostinfo_p.h @@ -184,6 +184,9 @@ protected: QMutex mutex; bool wasDeleted; + +private slots: + void waitForThreadPoolDone() { threadPool.waitForDone(); } }; #endif -- cgit v0.12 From 6da8cec6042823da5622d048bb66ca7c40aed9b3 Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Mon, 22 Mar 2010 14:55:40 +0200 Subject: Adding custom pixel metrics requires cleaning and rebuilding of QtGui This is due that the size of the pixel metrics table is stored in some object file and the file is not updated, even if we increase the table size integer. Removing direct calls from internal methods to member variable data[] removes the need to do whole rebuild when adding values. Relates to task #9247. Task-number: QTBUG-9247 Reviewed-by: Alessandro Portale --- src/gui/styles/qs60style_s60.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index 14782d8..bb862a3 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -1096,7 +1096,7 @@ void QS60StylePrivate::setActiveLayout() activeLayoutIndex += (!landscape) ? 1 : 0; } - m_pmPointer = data[activeLayoutIndex]; + setCurrentLayout(activeLayoutIndex); } Q_GLOBAL_STATIC(QList, m_animations) -- cgit v0.12 From c3dd4b356e277c8ec2a2634dbae04cdc7e798ca9 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Mon, 22 Mar 2010 13:40:54 +0100 Subject: Recommit 1ebeb971d3382aec0fff927 This reverts commit 725c2c29c192349016b1332824a7716bbb992f31 which reverted the original commit because of a test failure on qws. This recommit adds a test for whether the metrics from QFontEngine::boundingBox() are valid, which is required for the bearings to be calculated. This test was also in the original logic. --- src/gui/text/qfontengine.cpp | 15 +++++++++++++++ src/gui/text/qfontengine_p.h | 3 +++ src/gui/text/qfontengine_win.cpp | 24 ++++++++++++++++++++++++ src/gui/text/qfontengine_win_p.h | 2 ++ src/gui/text/qfontmetrics.cpp | 21 +++++++++++++-------- src/gui/text/qtextlayout.cpp | 6 +++--- 6 files changed, 60 insertions(+), 11 deletions(-) diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp index c000457..629db66 100644 --- a/src/gui/text/qfontengine.cpp +++ b/src/gui/text/qfontengine.cpp @@ -379,6 +379,15 @@ void QFontEngine::getGlyphPositions(const QGlyphLayout &glyphs, const QTransform Q_ASSERT(positions.size() == glyphs_out.size()); } +void QFontEngine::getGlyphBearings(glyph_t glyph, qreal *leftBearing, qreal *rightBearing) +{ + glyph_metrics_t gi = boundingBox(glyph); + bool isValid = gi.isValid(); + if (leftBearing != 0) + *leftBearing = isValid ? gi.x.toReal() : 0.0; + if (rightBearing != 0) + *rightBearing = isValid ? (gi.xoff - gi.x - gi.width).toReal() : 0.0; +} glyph_metrics_t QFontEngine::tightBoundingBox(const QGlyphLayout &glyphs) { @@ -1385,6 +1394,12 @@ glyph_metrics_t QFontEngineMulti::boundingBox(const QGlyphLayout &glyphs) return overall; } +void QFontEngineMulti::getGlyphBearings(glyph_t glyph, qreal *leftBearing, qreal *rightBearing) +{ + int which = highByte(glyph); + engine(which)->getGlyphBearings(stripped(glyph), leftBearing, rightBearing); +} + void QFontEngineMulti::addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs, QPainterPath *path, QTextItem::RenderFlags flags) { diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h index 71ab5a5..e645caf 100644 --- a/src/gui/text/qfontengine_p.h +++ b/src/gui/text/qfontengine_p.h @@ -206,6 +206,8 @@ public: virtual qreal minLeftBearing() const { return qreal(); } virtual qreal minRightBearing() const { return qreal(); } + virtual void getGlyphBearings(glyph_t glyph, qreal *leftBearing = 0, qreal *rightBearing = 0); + virtual const char *name() const = 0; virtual bool canRender(const QChar *string, int len) = 0; @@ -374,6 +376,7 @@ public: virtual void recalcAdvances(QGlyphLayout *, QTextEngine::ShaperFlags) const; virtual void doKerning(QGlyphLayout *, QTextEngine::ShaperFlags) const; virtual void addOutlineToPath(qreal, qreal, const QGlyphLayout &, QPainterPath *, QTextItem::RenderFlags flags); + virtual void getGlyphBearings(glyph_t glyph, qreal *leftBearing = 0, qreal *rightBearing = 0); virtual QFixed ascent() const; virtual QFixed descent() const; diff --git a/src/gui/text/qfontengine_win.cpp b/src/gui/text/qfontengine_win.cpp index 1a815d3..a133b48 100644 --- a/src/gui/text/qfontengine_win.cpp +++ b/src/gui/text/qfontengine_win.cpp @@ -649,6 +649,30 @@ static const ushort char_table[] = { static const int char_table_entries = sizeof(char_table)/sizeof(ushort); +void QFontEngineWin::getGlyphBearings(glyph_t glyph, qreal *leftBearing, qreal *rightBearing) +{ + HDC hdc = shared_dc(); + SelectObject(hdc, hfont); + +#ifndef Q_WS_WINCE + if (ttf) +#endif + + { + ABC abcWidths; + GetCharABCWidthsI(hdc, glyph, 1, 0, &abcWidths); + if (leftBearing) + *leftBearing = abcWidths.abcA; + if (rightBearing) + *rightBearing = abcWidths.abcC; + } + +#ifndef Q_WS_WINCE + else { + QFontEngine::getGlyphBearings(glyph, leftBearing, rightBearing); + } +#endif +} qreal QFontEngineWin::minLeftBearing() const { diff --git a/src/gui/text/qfontengine_win_p.h b/src/gui/text/qfontengine_win_p.h index f9d8f8b..f19e48e 100644 --- a/src/gui/text/qfontengine_win_p.h +++ b/src/gui/text/qfontengine_win_p.h @@ -106,6 +106,8 @@ public: virtual QImage alphaMapForGlyph(glyph_t, const QTransform &xform); virtual QImage alphaRGBMapForGlyph(glyph_t t, int margin, const QTransform &xform); + virtual void getGlyphBearings(glyph_t glyph, qreal *leftBearing = 0, qreal *rightBearing = 0); + int getGlyphIndexes(const QChar *ch, int numChars, QGlyphLayout *glyphs, bool mirrored) const; void getCMap(); diff --git a/src/gui/text/qfontmetrics.cpp b/src/gui/text/qfontmetrics.cpp index 41d0af1..44a18de 100644 --- a/src/gui/text/qfontmetrics.cpp +++ b/src/gui/text/qfontmetrics.cpp @@ -472,8 +472,9 @@ int QFontMetrics::leftBearing(QChar ch) const int nglyphs = 9; engine->stringToCMap(&ch, 1, &glyphs, &nglyphs, 0); // ### can nglyphs != 1 happen at all? Not currently I think - glyph_metrics_t gi = engine->boundingBox(glyphs.glyphs[0]); - return qRound(gi.x); + qreal lb; + engine->getGlyphBearings(glyphs.glyphs[0], &lb); + return qRound(lb); } /*! @@ -506,8 +507,9 @@ int QFontMetrics::rightBearing(QChar ch) const int nglyphs = 9; engine->stringToCMap(&ch, 1, &glyphs, &nglyphs, 0); // ### can nglyphs != 1 happen at all? Not currently I think - glyph_metrics_t gi = engine->boundingBox(glyphs.glyphs[0]); - return qRound(gi.xoff - gi.x - gi.width); + qreal rb; + engine->getGlyphBearings(glyphs.glyphs[0], 0, &rb); + return qRound(rb); } /*! @@ -1317,8 +1319,9 @@ qreal QFontMetricsF::leftBearing(QChar ch) const int nglyphs = 9; engine->stringToCMap(&ch, 1, &glyphs, &nglyphs, 0); // ### can nglyphs != 1 happen at all? Not currently I think - glyph_metrics_t gi = engine->boundingBox(glyphs.glyphs[0]); - return gi.x.toReal(); + qreal lb; + engine->getGlyphBearings(glyphs.glyphs[0], &lb); + return lb; } /*! @@ -1351,8 +1354,10 @@ qreal QFontMetricsF::rightBearing(QChar ch) const int nglyphs = 9; engine->stringToCMap(&ch, 1, &glyphs, &nglyphs, 0); // ### can nglyphs != 1 happen at all? Not currently I think - glyph_metrics_t gi = engine->boundingBox(glyphs.glyphs[0]); - return (gi.xoff - gi.x - gi.width).toReal(); + qreal rb; + engine->getGlyphBearings(glyphs.glyphs[0], 0, &rb); + return rb; + } /*! diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index 204effa..3c0e85e 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -1688,9 +1688,9 @@ namespace { if (currentPosition <= 0) return; - glyph_metrics_t gi = fontEngine->boundingBox(currentGlyph()); - if (gi.isValid()) - rightBearing = qMin(QFixed(), gi.xoff - gi.x - gi.width); + qreal rb; + fontEngine->getGlyphBearings(currentGlyph(), 0, &rb); + rightBearing = qMin(QFixed(), QFixed::fromReal(rb)); } inline void resetRightBearing() -- cgit v0.12 From 669c8042fa78c539cdefec87c85bce91e561871d Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Mon, 22 Mar 2010 14:59:25 +0200 Subject: Custom pixel metric values cannot be inquired from outside the class This is due that a) custom values are internal and not exposed b) values use different format - they are indexes for internal data[] table and not according to QStyle documentation for pixel metrics. Task-number: QTBUG-9247 Reviewed-by: Alessandro Portale --- src/gui/styles/qs60style.cpp | 7 +++++++ src/gui/styles/qs60style.h | 9 +++++++++ src/gui/styles/qs60style_p.h | 3 +++ 3 files changed, 19 insertions(+) diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index 750e19f..ed2074a 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -307,6 +307,13 @@ void QS60StylePrivate::drawSkinPart(QS60StyleEnums::SkinParts part, short QS60StylePrivate::pixelMetric(int metric) { + //If it is a custom value, need to strip away the base to map to internal + //pixel metric value table + if (metric & QStyle::PM_CustomBase) { + metric -= QStyle::PM_CustomBase; + metric += MAX_NON_CUSTOM_PIXELMETRICS - 1; + } + Q_ASSERT(metric < MAX_PIXELMETRICS); const short returnValue = m_pmPointer[metric]; return returnValue; diff --git a/src/gui/styles/qs60style.h b/src/gui/styles/qs60style.h index 82cc21c..af17843 100644 --- a/src/gui/styles/qs60style.h +++ b/src/gui/styles/qs60style.h @@ -52,6 +52,15 @@ QT_MODULE(Gui) #if !defined(QT_NO_STYLE_S60) +//Public custom pixel metrics values. +//These can be used to fetch custom pixel metric value from outside QS60Style. +enum { + PM_FrameCornerWidth = QStyle::PM_CustomBase + 1, + PM_FrameCornerHeight, + PM_BoldLineWidth, + PM_ThinLineWidth + }; + class QS60StylePrivate; class Q_GUI_EXPORT QS60Style : public QCommonStyle diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h index 16d82e7..84f50ea 100644 --- a/src/gui/styles/qs60style_p.h +++ b/src/gui/styles/qs60style_p.h @@ -61,12 +61,15 @@ QT_BEGIN_NAMESPACE const int MAX_NON_CUSTOM_PIXELMETRICS = 92; const int CUSTOMVALUESCOUNT = 4; + +//internal custom pixel metrics values, these map to entry in data[] table enum { PM_Custom_FrameCornerWidth = MAX_NON_CUSTOM_PIXELMETRICS, PM_Custom_FrameCornerHeight, PM_Custom_BoldLineWidth, PM_Custom_ThinLineWidth }; + const int MAX_PIXELMETRICS = MAX_NON_CUSTOM_PIXELMETRICS + CUSTOMVALUESCOUNT; typedef struct { -- cgit v0.12 From c1e23f855826942d7d3821a944c35272d9ecffb4 Mon Sep 17 00:00:00 2001 From: Kent Hansen Date: Mon, 22 Mar 2010 14:00:02 +0100 Subject: Reset history states when (re)starting state machine State saved in QHistoryState should not be persistent between state machine starts/stops. Task-number: QTBUG-8842 Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/corelib/statemachine/qstatemachine.cpp | 11 +++++ src/corelib/statemachine/qstatemachine_p.h | 2 + tests/auto/qstatemachine/tst_qstatemachine.cpp | 59 ++++++++++++++++++++++++++ 3 files changed, 72 insertions(+) diff --git a/src/corelib/statemachine/qstatemachine.cpp b/src/corelib/statemachine/qstatemachine.cpp index bd7e626..9d5c49f 100644 --- a/src/corelib/statemachine/qstatemachine.cpp +++ b/src/corelib/statemachine/qstatemachine.cpp @@ -1175,6 +1175,16 @@ void QStateMachinePrivate::removeStartState() _startState = 0; } +void QStateMachinePrivate::clearHistory() +{ + Q_Q(QStateMachine); + QList historyStates = qFindChildren(q); + for (int i = 0; i < historyStates.size(); ++i) { + QHistoryState *h = historyStates.at(i); + QHistoryStatePrivate::get(h)->configuration.clear(); + } +} + void QStateMachinePrivate::_q_start() { Q_Q(QStateMachine); @@ -1186,6 +1196,7 @@ void QStateMachinePrivate::_q_start() internalEventQueue.clear(); qDeleteAll(externalEventQueue); externalEventQueue.clear(); + clearHistory(); #ifdef QSTATEMACHINE_DEBUG qDebug() << q << ": starting"; diff --git a/src/corelib/statemachine/qstatemachine_p.h b/src/corelib/statemachine/qstatemachine_p.h index 0fead5d..5e1015f 100644 --- a/src/corelib/statemachine/qstatemachine_p.h +++ b/src/corelib/statemachine/qstatemachine_p.h @@ -126,6 +126,8 @@ public: QState *startState(); void removeStartState(); + void clearHistory(); + void microstep(QEvent *event, const QList &transitionList); bool isPreempted(const QAbstractState *s, const QSet &transitions) const; QSet selectTransitions(QEvent *event) const; diff --git a/tests/auto/qstatemachine/tst_qstatemachine.cpp b/tests/auto/qstatemachine/tst_qstatemachine.cpp index 90b5a22..2bf76e7 100644 --- a/tests/auto/qstatemachine/tst_qstatemachine.cpp +++ b/tests/auto/qstatemachine/tst_qstatemachine.cpp @@ -155,6 +155,7 @@ private slots: void clearError(); void historyStateHasNowhereToGo(); void historyStateAsInitialState(); + void historyStateAfterRestart(); void brokenStateIsNeverEntered(); void customErrorStateNotInGraph(); void transitionToStateNotInGraph(); @@ -906,6 +907,64 @@ void tst_QStateMachine::historyStateHasNowhereToGo() QCOMPARE(machine.errorString(), QString::fromLatin1("Missing default state in history state 'historyState'")); } +void tst_QStateMachine::historyStateAfterRestart() +{ + // QTBUG-8842 + QStateMachine machine; + + QState *s1 = new QState(&machine); + machine.setInitialState(s1); + QState *s2 = new QState(&machine); + QState *s21 = new QState(s2); + QState *s22 = new QState(s2); + QHistoryState *s2h = new QHistoryState(s2); + s2h->setDefaultState(s21); + s1->addTransition(new EventTransition(QEvent::User, s2h)); + s21->addTransition(new EventTransition(QEvent::User, s22)); + s2->addTransition(new EventTransition(QEvent::User, s1)); + + for (int x = 0; x < 2; ++x) { + QSignalSpy startedSpy(&machine, SIGNAL(started())); + machine.start(); + QTRY_COMPARE(startedSpy.count(), 1); + QCOMPARE(machine.configuration().count(), 1); + QVERIFY(machine.configuration().contains(s1)); + + // s1 -> s2h -> s21 (default state) + machine.postEvent(new QEvent(QEvent::User)); + QCoreApplication::processEvents(); + QCOMPARE(machine.configuration().count(), 2); + QVERIFY(machine.configuration().contains(s2)); + // This used to fail on the 2nd run because the + // history had not been cleared. + QVERIFY(machine.configuration().contains(s21)); + + // s21 -> s22 + machine.postEvent(new QEvent(QEvent::User)); + QCoreApplication::processEvents(); + QCOMPARE(machine.configuration().count(), 2); + QVERIFY(machine.configuration().contains(s2)); + QVERIFY(machine.configuration().contains(s22)); + + // s2 -> s1 (s22 saved in s2h) + machine.postEvent(new QEvent(QEvent::User)); + QCoreApplication::processEvents(); + QCOMPARE(machine.configuration().count(), 1); + QVERIFY(machine.configuration().contains(s1)); + + // s1 -> s2h -> s22 (saved state) + machine.postEvent(new QEvent(QEvent::User)); + QCoreApplication::processEvents(); + QCOMPARE(machine.configuration().count(), 2); + QVERIFY(machine.configuration().contains(s2)); + QVERIFY(machine.configuration().contains(s22)); + + QSignalSpy stoppedSpy(&machine, SIGNAL(stopped())); + machine.stop(); + QTRY_COMPARE(stoppedSpy.count(), 1); + } +} + void tst_QStateMachine::brokenStateIsNeverEntered() { QStateMachine machine; -- cgit v0.12 From 781e4d6190362818482864947a90d230fd700b06 Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Mon, 22 Mar 2010 15:07:51 +0200 Subject: QS60Style: Housekeeping Remove unnecessary #include, remove unnecessary integer, correct spelling issues in comments and replace tabs with spaces. Reviewed-by: Alessandro Portale --- src/gui/styles/qs60style.cpp | 12 +++++------- src/gui/styles/qs60style_p.h | 2 +- src/gui/styles/qs60style_s60.cpp | 4 ++-- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index ed2074a..ec8b468 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -61,7 +61,6 @@ #include "qscrollarea.h" #include "qscrollbar.h" #include "qtabbar.h" -#include "qtablewidget.h" #include "qtableview.h" #include "qtextedit.h" #include "qtoolbar.h" @@ -1009,7 +1008,6 @@ void QS60Style::drawComplexControl(ComplexControl control, const QStyleOptionCom QS60StylePrivate::SE_SliderGrooveVertical; QS60StylePrivate::drawSkinElement(grooveElement, painter, sliderGroove, flags); } else { - const QRect sliderGroove = subControlRect(control, optionSlider, SC_SliderGroove, widget); const QPoint sliderGrooveCenter = sliderGroove.center(); const bool horizontal = optionSlider->orientation == Qt::Horizontal; painter->save(); @@ -1136,7 +1134,7 @@ void QS60Style::drawComplexControl(ComplexControl control, const QStyleOptionCom drawPrimitive(pe, &toolButton, painter, widget); } - if (toolBtn->text.length()>0 || + if (toolBtn->text.length() > 0 || !toolBtn->icon.isNull()) { const int frameWidth = pixelMetric(PM_DefaultFrameWidth, option, widget); toolButton.rect = button.adjusted(frameWidth, frameWidth, -frameWidth, -frameWidth); @@ -2316,7 +2314,7 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti (option->state & State_Open) ? QS60StyleEnums::SP_QgnIndiHlColSuper : QS60StyleEnums::SP_QgnIndiHlExpSuper; int minDimension = qMin(option->rect.width(), option->rect.height()); QRect iconRect(option->rect.topLeft(), QSize(minDimension, minDimension)); - const int magicTweak = 3; + const int magicTweak = 3; int resizeValue = minDimension >> 1; if (!QS60StylePrivate::isTouchSupported()) { minDimension += resizeValue; // Adjust the icon bigger because of empty space in svg icon. @@ -2461,9 +2459,9 @@ QSize QS60Style::sizeFromContents(ContentsType ct, const QStyleOption *opt, #ifndef QT_NO_COMBOBOX case CT_ComboBox: { // Fixing Ui design issues with too wide QComboBoxes and greedy SizeHints - // Make sure, that the combobox says within the screen. + // Make sure, that the combobox stays within the screen. const QSize desktopContentSize = QApplication::desktop()->availableGeometry().size() - -QSize(pixelMetric(PM_LayoutLeftMargin) + pixelMetric(PM_LayoutRightMargin), 0); + - QSize(pixelMetric(PM_LayoutLeftMargin) + pixelMetric(PM_LayoutRightMargin), 0); sz = QCommonStyle::sizeFromContents(ct, opt, csz, widget). boundedTo(desktopContentSize); } @@ -3249,7 +3247,7 @@ bool QS60Style::eventFilter(QObject *object, QEvent *event) /*! \internal - Handle the timer \a event. + Handle the timer \a event. */ void QS60Style::timerEvent(QTimerEvent *event) { diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h index 84f50ea..df6f582 100644 --- a/src/gui/styles/qs60style_p.h +++ b/src/gui/styles/qs60style_p.h @@ -428,7 +428,7 @@ public: SE_ToolBarButton, SE_ToolBarButtonPressed, SE_PanelBackground, - SE_ScrollBarHandlePressedHorizontal, //only for 5.0+ + SE_ScrollBarHandlePressedHorizontal, SE_ScrollBarHandlePressedVertical, SE_ButtonInactive, SE_Editor, diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index bb862a3..0f014c1 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -755,7 +755,7 @@ QPixmap QS60StyleModeSpecifics::createSkinnedGraphicsLX( if (drawn) result = fromFbsBitmap(background, NULL, flags, targetSize); - // if drawing fails in skin server, just ignore the background (probably OOM occured) + // if drawing fails in skin server, just ignore the background (probably OOM case) CleanupStack::PopAndDestroy(4, background); //background, dev, gc, bgContext // QS60WindowSurface::lockBitmapHeap(); @@ -787,7 +787,7 @@ QPixmap QS60StyleModeSpecifics::createSkinnedGraphicsLX( const int currentFrame = QS60StylePrivate::currentAnimationFrame(part); if (constructedFromTheme && aknAnimation && aknAnimation->BitmapAnimData()->FrameArray().Count() > 0) { - //Animation was created succesfully and contains frames, just fetch current frame + //Animation was created successfully and contains frames, just fetch current frame if(currentFrame >= aknAnimation->BitmapAnimData()->FrameArray().Count()) User::Leave(KErrOverflow); const CBitmapFrameData* frameData = aknAnimation->BitmapAnimData()->FrameArray().At(currentFrame); -- cgit v0.12 From 97701a9e002593b0cc17afc6ce32925464f8b2fc Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 22 Mar 2010 16:17:18 +0200 Subject: Fixed table formatting in QSound documentation Added the missing \row tag Reviewed-by: TrustMe --- src/gui/kernel/qsound.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/kernel/qsound.cpp b/src/gui/kernel/qsound.cpp index 165e6ce..9d8ffa5 100644 --- a/src/gui/kernel/qsound.cpp +++ b/src/gui/kernel/qsound.cpp @@ -147,12 +147,13 @@ public: supports WAVE and AU files. \row \o Mac OS X - \o NSSound is used. All formats that NSSound supports, including QuickTime formats, + \o NSSound is used. All formats that NSSound supports, including QuickTime formats, are supported by Qt for Mac OS X. \row \o Qt for Embedded Linux \o A built-in mixing sound server is used, accessing \c /dev/dsp directly. Only the WAVE format is supported. + \row \o Symbian \o CMdaAudioPlayerUtility is used. All formats that Symbian OS or devices support are supported also by Qt. -- cgit v0.12 From fec5410f350e4d67b7991f15da94775f97bce0bb Mon Sep 17 00:00:00 2001 From: Jason Barron Date: Mon, 22 Mar 2010 16:41:42 +0100 Subject: Fix #ifdef logic for Symbian conversion functions in QVGPixmapData. The previous #ifdef logic had the entire body of fromNativeType() and toNativeType() #ifdef'ed out meaning that the OpenVG graphics system could not convert CFbsBitmap instances to VGImage instances. This was obviously incorrect because this code has no dependancy on RSgImage (or EGL) and should therefore be outside of the #ifdef. Reviewed-by: TrustMe --- src/openvg/qpixmapdata_vg.cpp | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/openvg/qpixmapdata_vg.cpp b/src/openvg/qpixmapdata_vg.cpp index cb5255d..d602790 100644 --- a/src/openvg/qpixmapdata_vg.cpp +++ b/src/openvg/qpixmapdata_vg.cpp @@ -464,8 +464,8 @@ void QVGPixmapData::cleanup() void QVGPixmapData::fromNativeType(void* pixmap, NativeType type) { -#if defined(QT_SYMBIAN_SUPPORTS_SGIMAGE) && !defined(QT_NO_EGL) if (type == QPixmapData::SgImage && pixmap) { +#if defined(QT_SYMBIAN_SUPPORTS_SGIMAGE) && !defined(QT_NO_EGL) RSgImage *sgImage = reinterpret_cast(pixmap); destroyImages(); @@ -536,6 +536,7 @@ void QVGPixmapData::fromNativeType(void* pixmap, NativeType type) // release stuff eglDestroyImageKHR(QEglContext::display(), eglImage); driver.Close(); +#endif } else if (type == QPixmapData::FbsBitmap) { CFbsBitmap *bitmap = reinterpret_cast(pixmap); @@ -581,16 +582,12 @@ void QVGPixmapData::fromNativeType(void* pixmap, NativeType type) if(deleteSourceBitmap) delete bitmap; } -#else - Q_UNUSED(pixmap); - Q_UNUSED(type); -#endif } void* QVGPixmapData::toNativeType(NativeType type) { -#if defined(QT_SYMBIAN_SUPPORTS_SGIMAGE) && !defined(QT_NO_EGL) if (type == QPixmapData::SgImage) { +#if defined(QT_SYMBIAN_SUPPORTS_SGIMAGE) && !defined(QT_NO_EGL) toVGImage(); if (!isValid() || vgImage == VG_INVALID_HANDLE) @@ -657,6 +654,7 @@ void* QVGPixmapData::toNativeType(NativeType type) eglDestroyImageKHR(QEglContext::display(), eglImage); driver.Close(); return reinterpret_cast(sgImage); +#endif } else if (type == QPixmapData::FbsBitmap) { CFbsBitmap *bitmap = q_check_ptr(new CFbsBitmap); @@ -678,10 +676,7 @@ void* QVGPixmapData::toNativeType(NativeType type) return reinterpret_cast(bitmap); } -#else - Q_UNUSED(type); return 0; -#endif } #endif //Q_OS_SYMBIAN -- cgit v0.12 From a260a77d9d6b7856278e2ee9b42623c469479d4e Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Mon, 22 Mar 2010 21:14:39 +0100 Subject: Fixing keypad navigation focus frame The QFocusFrame drawing code in QS60Style incorrectly assumed that PM_LayoutSpacing is always equal to PM_FocusFrameMargin. When these values diverged, the focus frame broke as described in task QTBUG-8036. The fix makes the drawing more robust. The focus frame width is never thicker than PM_LayoutSpacing and PM_FocusFrameMargin. And instead of drawing a roundRect with calculated pen width, we are now filling a roundRect. That makes the focusFrame more apparent. Task-number: QTBUG-8036 Reviewed-by: Sami Merila --- src/gui/styles/qs60style.cpp | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index 750e19f..86812a6 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -1964,11 +1964,6 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, case CE_MenuScroller: break; case CE_FocusFrame: { - // The pen width should nearly fill the layoutspacings around the widget - const int penWidth = - qMin(pixelMetric(QS60Style::PM_LayoutVerticalSpacing), pixelMetric(QS60Style::PM_LayoutHorizontalSpacing)) - - 2; // But keep 1 pixel distance to the focus widget and 1 pixel to the adjacent widgets - #ifdef QT_KEYPAD_NAVIGATION bool editFocus = false; if (const QFocusFrame *focusFrame = qobject_cast(widget)) { @@ -1979,25 +1974,27 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, #else const qreal opacity = 0.5; #endif - // Because of Qts coordinate system, we need to tweak the rect by .5 pixels, otherwise it gets blurred. - const qreal rectAdjustment = (penWidth % 2) ? -.5 : 0; - - // Make sure that the pen stroke is inside the rect - const QRectF adjustedRect = - QRectF(option->rect).adjusted( - rectAdjustment + penWidth, - rectAdjustment + penWidth, - -rectAdjustment - penWidth, - -rectAdjustment - penWidth - ); - - const qreal roundRectRadius = penWidth * goldenRatio; + // We need to reduce the focus frame size if LayoutSpacing is smaller than FocusFrameMargin + // Otherwise, we would overlay adjacent widgets. + const int frameHeightReduction = + qMin(0, pixelMetric(QStyle::PM_LayoutVerticalSpacing) + - pixelMetric(QStyle::PM_FocusFrameVMargin)); + const int frameWidthReduction = + qMin(0, pixelMetric(QStyle::PM_LayoutHorizontalSpacing) + - pixelMetric(QStyle::PM_FocusFrameHMargin)); + const int rounding = + qMin(pixelMetric(QStyle::PM_FocusFrameVMargin), + pixelMetric(QStyle::PM_LayoutVerticalSpacing)); + const QRect frameRect = + option->rect.adjusted(-frameWidthReduction, -frameHeightReduction, + frameWidthReduction, frameHeightReduction); + QPainterPath framePath; + framePath.addRoundedRect(frameRect, rounding, rounding); painter->save(); painter->setRenderHint(QPainter::Antialiasing); painter->setOpacity(opacity); - painter->setPen(QPen(option->palette.color(QPalette::Text), penWidth)); - painter->drawRoundedRect(adjustedRect, roundRectRadius, roundRectRadius); + painter->fillPath(framePath, option->palette.color(QPalette::Text)); painter->restore(); } break; -- cgit v0.12 From 9b363e44f372fee183290e010ceecf9e75282ce2 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Mon, 22 Mar 2010 21:36:54 +0100 Subject: Increase KeypadNavigation focus visibility The focus frame was drawn with a low opacity. That was intended meant to increase aesthetics but in reality decreased usability. Now, the opacity is higher. But still with a difference between navigation mode and edit mode. Task-number: QT-826 Reviewed-by: Sami Merila --- src/gui/styles/qs60style.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index 86812a6..6448417 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -1970,9 +1970,9 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, if (focusFrame->widget() && focusFrame->widget()->hasEditFocus()) editFocus = true; } - const qreal opacity = editFocus ? 0.65 : 0.45; // Trial and error factors. Feel free to improve. + const qreal opacity = editFocus ? 1 : 0.75; // Trial and error factors. Feel free to improve. #else - const qreal opacity = 0.5; + const qreal opacity = 0.85; #endif // We need to reduce the focus frame size if LayoutSpacing is smaller than FocusFrameMargin // Otherwise, we would overlay adjacent widgets. -- cgit v0.12 From 253d075996818ba6d42e0caf9e03271e386621d0 Mon Sep 17 00:00:00 2001 From: Janne Anttila Date: Mon, 22 Mar 2010 09:48:37 +0200 Subject: Fixed left softkey regression caused by 7829fe15 in Symbian. Dialogs are always responsible for setting all of their softkeys by themselves, that's why this qmenubar hack can be removed. When "Options" menu support was moved from QMainWindow to QMenuBar, it appeared that some dialogs did had "Options" in LSK even it should have had dialog specific softkey. This commit removes the year old hack made to qdialogs softkey implementation. Reviewed-By: Sami Merila --- src/gui/dialogs/qdialog.cpp | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/gui/dialogs/qdialog.cpp b/src/gui/dialogs/qdialog.cpp index d8ac9a8..25ba016 100644 --- a/src/gui/dialogs/qdialog.cpp +++ b/src/gui/dialogs/qdialog.cpp @@ -69,7 +69,6 @@ extern bool qt_wince_is_smartphone(); //is defined in qguifunctions_wce.cpp # include "qfontdialog.h" # include "qcolordialog.h" # include "qwizard.h" -# include "qmenubar.h" #endif #if defined(Q_WS_S60) @@ -529,12 +528,6 @@ int QDialog::exec() #endif //Q_WS_WINCE_WM #ifdef Q_OS_SYMBIAN -#ifndef QT_NO_MENUBAR - QMenuBar *menuBar = 0; - if (!findChild()) - menuBar = new QMenuBar(this); -#endif - if (qobject_cast(this) || qobject_cast(this) || qobject_cast(this) || qobject_cast(this)) showMaximized(); @@ -566,13 +559,6 @@ int QDialog::exec() delete menuBar; #endif //QT_NO_MENUBAR #endif //Q_WS_WINCE_WM -#ifdef Q_OS_SYMBIAN -#ifndef QT_NO_MENUBAR - else if (menuBar) - delete menuBar; -#endif //QT_NO_MENUBAR -#endif //Q_OS_SYMBIAN - return res; } -- cgit v0.12 From ae3d95f872c8bd2e192c58d7c7c830a3d2e4bc43 Mon Sep 17 00:00:00 2001 From: Janne Anttila Date: Mon, 22 Mar 2010 10:17:17 +0200 Subject: Fixed 'fullsreen with softkeys' mode not to expand under softkey area. availableGeometry returns incorrect area after cba is made invisible, it seems that this happens because CAknToolbar is not made invisible. Fixed the problem by reverting back to SetExtentToWholeScreen usage when the widget is really fullscreen, i.e. Qt::WindowSoftkeysVisibleHint is not set. Task-number: QTBUG-9038 Reviewed-by: Miikka Heikkinen --- src/gui/kernel/qapplication_s60.cpp | 45 +++++++++++++++++++------------------ src/gui/kernel/qt_s60_p.h | 1 + src/gui/kernel/qwidget_s60.cpp | 8 ++++--- 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index e7a7093..37d1b62 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -1004,16 +1004,32 @@ void QSymbianControl::FocusChanged(TDrawNow /* aDrawNow */) // else { We don't touch the active window unless we were explicitly activated or deactivated } } +void QSymbianControl::handleClientAreaChange() +{ + const bool cbaVisibilityHint = qwidget->windowFlags() & Qt::WindowSoftkeysVisibleHint; + if (qwidget->isFullScreen() && !cbaVisibilityHint) { + SetExtentToWholeScreen(); + } else if (qwidget->isMaximized() || (qwidget->isFullScreen() && cbaVisibilityHint)) { + TRect r = static_cast(S60->appUi())->ClientRect(); + SetExtent(r.iTl, r.Size()); + } else if (!qwidget->isMinimized()) { // Normal geometry + if (!qwidget->testAttribute(Qt::WA_Resized)) { + qwidget->adjustSize(); + qwidget->setAttribute(Qt::WA_Resized, false); //not a user resize + } + if (!qwidget->testAttribute(Qt::WA_Moved) && qwidget->windowType() != Qt::Dialog) { + TRect r = static_cast(S60->appUi())->ClientRect(); + SetPosition(r.iTl); + qwidget->setAttribute(Qt::WA_Moved, false); // not really an explicit position + } + } +} + void QSymbianControl::HandleResourceChange(int resourceType) { switch (resourceType) { case KInternalStatusPaneChange: - if (qwidget->isFullScreen()) { - SetExtentToWholeScreen(); - } else if (qwidget->isMaximized()) { - TRect r = static_cast(S60->appUi())->ClientRect(); - SetExtent(r.iTl, r.Size()); - } + handleClientAreaChange(); if (IsFocused() && IsVisible()) { qwidget->d_func()->setWindowIcon_sys(true); qwidget->d_func()->setWindowTitle_sys(qwidget->windowTitle()); @@ -1025,22 +1041,7 @@ void QSymbianControl::HandleResourceChange(int resourceType) #ifdef Q_WS_S60 case KEikDynamicLayoutVariantSwitch: { - if (qwidget->isFullScreen()) { - SetExtentToWholeScreen(); - } else if (qwidget->isMaximized()) { - TRect r = static_cast(S60->appUi())->ClientRect(); - SetExtent(r.iTl, r.Size()); - } else if (!qwidget->isMinimized()){ // Normal geometry - if (!qwidget->testAttribute(Qt::WA_Resized)) { - qwidget->adjustSize(); - qwidget->setAttribute(Qt::WA_Resized, false); //not a user resize - } - if (!qwidget->testAttribute(Qt::WA_Moved) && qwidget->windowType() != Qt::Dialog) { - TRect r = static_cast(S60->appUi())->ClientRect(); - SetPosition(r.iTl); - qwidget->setAttribute(Qt::WA_Moved, false); // not really an explicit position - } - } + handleClientAreaChange(); break; } #endif diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h index cedede1..7c6b754 100644 --- a/src/gui/kernel/qt_s60_p.h +++ b/src/gui/kernel/qt_s60_p.h @@ -212,6 +212,7 @@ private: #ifdef QT_SYMBIAN_SUPPORTS_ADVANCED_POINTER void translateAdvancedPointerEvent(const TAdvancedPointerEvent *event); #endif + void handleClientAreaChange(); private: static QSymbianControl *lastFocusedControl; diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp index 79702af..bfa7050 100644 --- a/src/gui/kernel/qwidget_s60.cpp +++ b/src/gui/kernel/qwidget_s60.cpp @@ -1109,9 +1109,11 @@ void QWidget::setWindowState(Qt::WindowStates newstate) QTLWExtra *top = d->topData(); const QRect normalGeometry = (top->normalGeometry.width() < 0) ? geometry() : top->normalGeometry; - if (newstate & Qt::WindowFullScreen) - setGeometry(qApp->desktop()->availableGeometry(this)); - else if (newstate & Qt::WindowMaximized) + + const bool cbaVisibilityHint = windowFlags() & Qt::WindowSoftkeysVisibleHint; + if (newstate & Qt::WindowFullScreen && !cbaVisibilityHint) + setGeometry(qApp->desktop()->screenGeometry(this)); + else if (newstate & Qt::WindowMaximized || ((newstate & Qt::WindowFullScreen) && cbaVisibilityHint)) setGeometry(qApp->desktop()->availableGeometry(this)); else setGeometry(normalGeometry); -- cgit v0.12 From 262e98f9a29385f99cd6f768632264e0b621dc01 Mon Sep 17 00:00:00 2001 From: Janne Anttila Date: Tue, 23 Mar 2010 10:36:22 +0200 Subject: Fixed S60 softkey implementation to use popup/modal dialog softkeys. Previously softkey implementation assumed that source for softkey actions is focused widget or activewindow if there is no focused widget. Since for example pop-up menu does not take focus immediately in touch enabled devices, the underlying widget softkeys were visible and usable when menu was open. This lead to problem that underlying widget could be interacted via softkeys when popup menu was open. For example as reported in QTBUG-8688, it was possible to close the underlying filedialog from which the currently active context menu was launched. It was also possible to open "Options" menu of underlying widget when context menu was open, leading to situation where several context menus could be launched via "Actions" item of "Options" menu. This was reported as an issue: QTBUG-6167 In addition when user started navigating in context menu via keypad, the menu got focus and softkeys changed to partially correct. Only partially correct, since context menu "Select" action and "Options" action had same priority and both associated to LSK. In addition the context menu action "Cancel" associated to RSK was set to invisible, meaning that it was also disabled and appeared in sofkeys as dimmed. All of these issues were fixed by making making the popup and modal dialogs highest priority softkey source. In case the focused widget is inside popup or modal dialog it is being used as an initial softkey source. In addition the softkeys created with QSoftKeyManager::createAction or QSoftKeyManager::createKeyedAction are now by default invisible i.e. not visible in context menu and have special property set to make them still normally enabled in softkeys. Task-number: QTBUG-6167 Task-number: QTBUG-8688 Task-number: QTBUG-9144 Reviewed-by: Sami Merila --- src/gui/kernel/qsoftkeymanager.cpp | 60 ++++++++++++++++++++++++++++++---- src/gui/kernel/qsoftkeymanager_p.h | 5 ++- src/gui/kernel/qsoftkeymanager_s60.cpp | 7 ++-- src/gui/widgets/qmenu.cpp | 4 +-- src/gui/widgets/qmenubar.cpp | 1 - 5 files changed, 61 insertions(+), 16 deletions(-) diff --git a/src/gui/kernel/qsoftkeymanager.cpp b/src/gui/kernel/qsoftkeymanager.cpp index c9a94ee..d324c76 100644 --- a/src/gui/kernel/qsoftkeymanager.cpp +++ b/src/gui/kernel/qsoftkeymanager.cpp @@ -115,6 +115,8 @@ QAction *QSoftKeyManager::createAction(StandardSoftKey standardKey, QWidget *act break; } action->setSoftKeyRole(softKeyRole); + action->setVisible(false); + setForceEnabledInSoftkeys(action); return action; } @@ -168,25 +170,55 @@ bool QSoftKeyManager::appendSoftkeys(const QWidget &source, int level) { Q_D(QSoftKeyManager); bool ret = false; - QList actions = source.actions(); - for (int i = 0; i < actions.count(); ++i) { - if (actions.at(i)->softKeyRole() != QAction::NoSoftKey) { - d->requestedSoftKeyActions.insert(level, actions.at(i)); + foreach(QAction *action, source.actions()) { + if (action->softKeyRole() != QAction::NoSoftKey + && (action->isVisible() || isForceEnabledInSofkeys(action))) { + d->requestedSoftKeyActions.insert(level, action); ret = true; } } return ret; } + +static bool isChildOf(const QWidget *c, const QWidget *p) +{ + while (c) { + if (c == p) + return true; + c = c->parentWidget(); + } + return false; +} + QWidget *QSoftKeyManager::softkeySource(QWidget *previousSource, bool& recursiveMerging) { Q_D(QSoftKeyManager); QWidget *source = NULL; if (!previousSource) { // Initial source is primarily focuswidget and secondarily activeWindow - source = QApplication::focusWidget(); - if (!source) - source = QApplication::activeWindow(); + const QWidget *focus = QApplication::focusWidget(); + const QWidget *popup = QApplication::activePopupWidget(); + if (popup) { + if (isChildOf(focus, popup)) + source = focus; + else + source = popup; + } + if (!source) { + const QWidget *modal = QApplication::activeModalWidget(); + if (modal) { + if (isChildOf(focus, modal)) + source = focus; + else + source = modal; + } + } + if (!source) { + source = focus; + if (!source) + source = QApplication::activeWindow(); + } } else { // Softkey merging is based on four criterias // 1. Implicit merging is used whenever focus widget does not specify any softkeys @@ -220,6 +252,20 @@ bool QSoftKeyManager::handleUpdateSoftKeys() return true; } +void QSoftKeyManager::setForceEnabledInSoftkeys(QAction *action) +{ + action->setProperty(FORCE_ENABLED_PROPERTY, QVariant(true)); +} + +bool QSoftKeyManager::isForceEnabledInSofkeys(QAction *action) +{ + bool ret = false; + QVariant property = action->property(FORCE_ENABLED_PROPERTY); + if (property.isValid() && property.toBool()) + ret = true; + return ret; +} + bool QSoftKeyManager::event(QEvent *e) { #ifndef QT_NO_ACTION diff --git a/src/gui/kernel/qsoftkeymanager_p.h b/src/gui/kernel/qsoftkeymanager_p.h index a6fe17e..a5b258b 100644 --- a/src/gui/kernel/qsoftkeymanager_p.h +++ b/src/gui/kernel/qsoftkeymanager_p.h @@ -63,7 +63,8 @@ QT_BEGIN_NAMESPACE class QSoftKeyManagerPrivate; -const char MENU_ACTION_PROPERTY[] = "_q_menuaction"; +const char MENU_ACTION_PROPERTY[] = "_q_menuAction"; +const char FORCE_ENABLED_PROPERTY[] = "_q_forceEnabledInSoftkeys"; class Q_AUTOTEST_EXPORT QSoftKeyManager : public QObject { @@ -88,6 +89,8 @@ public: static QAction *createAction(StandardSoftKey standardKey, QWidget *actionWidget); static QAction *createKeyedAction(StandardSoftKey standardKey, Qt::Key key, QWidget *actionWidget); static QString standardSoftKeyText(StandardSoftKey standardKey); + static void setForceEnabledInSoftkeys(QAction *action); + static bool isForceEnabledInSofkeys(QAction *action); protected: bool event(QEvent *e); diff --git a/src/gui/kernel/qsoftkeymanager_s60.cpp b/src/gui/kernel/qsoftkeymanager_s60.cpp index 3a0304c..9812d72 100644 --- a/src/gui/kernel/qsoftkeymanager_s60.cpp +++ b/src/gui/kernel/qsoftkeymanager_s60.cpp @@ -288,11 +288,7 @@ bool QSoftKeyManagerPrivateS60::setSoftkey(CEikButtonGroupContainer &cba, TPtrC nativeText = qt_QString2TPtrC(text); int command = S60_COMMAND_START + position; setNativeSoftkey(cba, position, command, nativeText); - // QMainWindow "Options" action is set to invisible in order it does not appear in context menu - // and all invisible actions are by default disabled. - // However we never want to dim options softkey, even it is set to invisible - QVariant property = action->property(MENU_ACTION_PROPERTY); - const bool dimmed = (property.isValid() && property.toBool()) ? false : !action->isEnabled(); + const bool dimmed = !action->isEnabled() && !QSoftKeyManager::isForceEnabledInSofkeys(action); cba.DimCommand(command, dimmed); realSoftKeyActions.insert(command, action); return true; @@ -335,6 +331,7 @@ bool QSoftKeyManagerPrivateS60::setRightSoftkey(CEikButtonGroupContainer &cba) cbaHasImage[RSK_POSITION] = false; } setNativeSoftkey(cba, RSK_POSITION, EAknSoftkeyExit, nativeText); + cba.DimCommand(EAknSoftkeyExit, false); return true; } } diff --git a/src/gui/widgets/qmenu.cpp b/src/gui/widgets/qmenu.cpp index 42b7406..a9978f9 100644 --- a/src/gui/widgets/qmenu.cpp +++ b/src/gui/widgets/qmenu.cpp @@ -168,8 +168,8 @@ void QMenuPrivate::init() #ifdef QT_SOFTKEYS_ENABLED selectAction = QSoftKeyManager::createKeyedAction(QSoftKeyManager::SelectSoftKey, Qt::Key_Select, q); cancelAction = QSoftKeyManager::createKeyedAction(QSoftKeyManager::CancelSoftKey, Qt::Key_Back, q); - selectAction->setVisible(false); // Don't show these in the menu - cancelAction->setVisible(false); + selectAction->setPriority(QAction::HighPriority); + cancelAction->setPriority(QAction::HighPriority); q->addAction(selectAction); q->addAction(cancelAction); #endif diff --git a/src/gui/widgets/qmenubar.cpp b/src/gui/widgets/qmenubar.cpp index 13aa02b..e368d3d 100644 --- a/src/gui/widgets/qmenubar.cpp +++ b/src/gui/widgets/qmenubar.cpp @@ -1404,7 +1404,6 @@ void QMenuBarPrivate::handleReparent() if (!menuBarAction) { if (newParent) { menuBarAction = QSoftKeyManager::createAction(QSoftKeyManager::MenuSoftKey, newParent); - menuBarAction->setVisible(false); newParent->addAction(menuBarAction); } } else { -- cgit v0.12 From 0409cdb406021d8609eb2a88a896f9fbc085805f Mon Sep 17 00:00:00 2001 From: Janne Anttila Date: Tue, 23 Mar 2010 11:21:38 +0200 Subject: Hotfix to const usage in 262e98f9a29385f99cd6f768632264e0b621dc01 Reviewed-By: TrustMe --- src/gui/kernel/qsoftkeymanager.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/kernel/qsoftkeymanager.cpp b/src/gui/kernel/qsoftkeymanager.cpp index d324c76..923144a 100644 --- a/src/gui/kernel/qsoftkeymanager.cpp +++ b/src/gui/kernel/qsoftkeymanager.cpp @@ -197,8 +197,8 @@ QWidget *QSoftKeyManager::softkeySource(QWidget *previousSource, bool& recursive QWidget *source = NULL; if (!previousSource) { // Initial source is primarily focuswidget and secondarily activeWindow - const QWidget *focus = QApplication::focusWidget(); - const QWidget *popup = QApplication::activePopupWidget(); + QWidget *focus = QApplication::focusWidget(); + QWidget *popup = QApplication::activePopupWidget(); if (popup) { if (isChildOf(focus, popup)) source = focus; @@ -206,7 +206,7 @@ QWidget *QSoftKeyManager::softkeySource(QWidget *previousSource, bool& recursive source = popup; } if (!source) { - const QWidget *modal = QApplication::activeModalWidget(); + QWidget *modal = QApplication::activeModalWidget(); if (modal) { if (isChildOf(focus, modal)) source = focus; -- cgit v0.12 From dd9c26cba63c54358f3309143b76ae0416f89c78 Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Tue, 23 Mar 2010 11:39:56 +0200 Subject: Remove internal custom pixel metric enums Use only public custom pixel metrics. Remove the internal enum and switch usage of those to public enum values. Task-number: QTBUG-9247 Reviewed-by: Alessandro Portale --- src/gui/styles/qs60style.cpp | 30 +++++++++++++++--------------- src/gui/styles/qs60style_p.h | 8 -------- 2 files changed, 15 insertions(+), 23 deletions(-) diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index ec8b468..c77d828 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -413,8 +413,8 @@ QColor QS60StylePrivate::colorFromFrameGraphics(SkinFrameElements frame) const { const bool cachedColorExists = m_colorCache.contains(frame); if (!cachedColorExists) { - const int frameCornerWidth = pixelMetric(PM_Custom_FrameCornerWidth); - const int frameCornerHeight = pixelMetric(PM_Custom_FrameCornerHeight); + const int frameCornerWidth = pixelMetric(PM_FrameCornerWidth); + const int frameCornerHeight = pixelMetric(PM_FrameCornerHeight); Q_ASSERT(2 * frameCornerWidth < 32); Q_ASSERT(2 * frameCornerHeight < 32); @@ -874,7 +874,7 @@ QSize QS60StylePrivate::partSize(QS60StyleEnums::SkinParts part, SkinElementFlag case QS60StyleEnums::SP_QgnGrafBarFrameSideL: case QS60StyleEnums::SP_QgnGrafBarFrameSideR: - result.setWidth(pixelMetric(PM_Custom_FrameCornerWidth)); + result.setWidth(pixelMetric(PM_FrameCornerWidth)); break; case QS60StyleEnums::SP_QsnCpScrollHandleTopPressed: @@ -901,15 +901,15 @@ QSize QS60StylePrivate::partSize(QS60StyleEnums::SkinParts part, SkinElementFlag case 7: /* CornerTr */ case 6: /* CornerBl */ case 5: /* CornerBr */ - result.setWidth(pixelMetric(PM_Custom_FrameCornerWidth)); + result.setWidth(pixelMetric(PM_FrameCornerWidth)); // Falltrough intended... case 4: /* SideT */ case 3: /* SideB */ - result.setHeight(pixelMetric(PM_Custom_FrameCornerHeight)); + result.setHeight(pixelMetric(PM_FrameCornerHeight)); break; case 2: /* SideL */ case 1: /* SideR */ - result.setWidth(pixelMetric(PM_Custom_FrameCornerWidth)); + result.setWidth(pixelMetric(PM_FrameCornerWidth)); break; case 0: /* center */ default: @@ -1376,7 +1376,7 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, } if (!comboBox->currentText.isEmpty() && !comboBox->editable) { QCommonStyle::drawItemText(painter, - editRect.adjusted(QS60StylePrivate::pixelMetric(PM_Custom_FrameCornerWidth), 0, -1, 0), + editRect.adjusted(QS60StylePrivate::pixelMetric(PM_FrameCornerWidth), 0, -1, 0), visualAlignment(comboBox->direction, Qt::AlignLeft | Qt::AlignVCenter), comboBox->palette, comboBox->state & State_Enabled, comboBox->currentText); } @@ -1841,8 +1841,8 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, painter->save(); QPen linePen = QPen(QS60StylePrivate::s60Color(QS60StyleEnums::CL_QsnLineColors, 1, header)); const int penWidth = (header->orientation == Qt::Horizontal) ? - linePen.width() + QS60StylePrivate::pixelMetric(PM_Custom_BoldLineWidth) - : linePen.width() + QS60StylePrivate::pixelMetric(PM_Custom_ThinLineWidth); + linePen.width() + QS60StylePrivate::pixelMetric(PM_BoldLineWidth) + : linePen.width() + QS60StylePrivate::pixelMetric(PM_ThinLineWidth); linePen.setWidth(penWidth); painter->setPen(linePen); if (header->orientation == Qt::Horizontal){ @@ -1861,7 +1861,7 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, //Make cornerButton slightly smaller so that it is not on top of table border graphic. QStyleOptionHeader subopt = *header; const int borderTweak = - QS60StylePrivate::pixelMetric(PM_Custom_FrameCornerWidth) >> 1; + QS60StylePrivate::pixelMetric(PM_FrameCornerWidth) >> 1; if (subopt.direction == Qt::LeftToRight) subopt.rect.adjust(borderTweak, borderTweak, 0, -borderTweak); else @@ -2085,7 +2085,7 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti // ... or normal "tick" selection at the end. } else if (option->state & State_Selected) { QRect tickRect = option->rect; - const int frameBorderWidth = QS60StylePrivate::pixelMetric(PM_Custom_FrameCornerWidth); + const int frameBorderWidth = QS60StylePrivate::pixelMetric(PM_FrameCornerWidth); // adjust tickmark rect to exclude frame border tickRect.adjust(0, -frameBorderWidth, 0, -frameBorderWidth); QS60StyleEnums::SkinParts skinPart = QS60StyleEnums::SP_QgnIndiMarkedAdd; @@ -2166,7 +2166,7 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti const QS60StyleEnums::SkinParts part = (element == PE_IndicatorSpinUp) ? QS60StyleEnums::SP_QgnGrafScrollArrowUp : QS60StyleEnums::SP_QgnGrafScrollArrowDown; - const int iconMargin = QS60StylePrivate::pixelMetric(PM_Custom_FrameCornerWidth) >> 1; + const int iconMargin = QS60StylePrivate::pixelMetric(PM_FrameCornerWidth) >> 1; optionSpinBox.rect.translate(0, (element == PE_IndicatorSpinDown) ? iconMargin : -iconMargin ); QS60StylePrivate::drawSkinPart(part, painter, optionSpinBox.rect, flags); } else { @@ -2180,7 +2180,7 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti // We want to draw down arrow here for comboboxes as well. QStyleOptionFrame optionsComboBox = *cmb; const QS60StyleEnums::SkinParts part = QS60StyleEnums::SP_QgnGrafScrollArrowDown; - const int iconMargin = QS60StylePrivate::pixelMetric(PM_Custom_FrameCornerWidth) >> 1; + const int iconMargin = QS60StylePrivate::pixelMetric(PM_FrameCornerWidth) >> 1; optionsComboBox.rect.translate(0, (element == PE_IndicatorSpinDown) ? iconMargin : -iconMargin ); QS60StylePrivate::drawSkinPart(part, painter, optionsComboBox.rect, flags); } else { @@ -2934,9 +2934,9 @@ QRect QS60Style::subElementRect(SubElement element, const QStyleOption *opt, con if (qstyleoption_cast(opt)) { // Subtract area needed for line if (opt->state & State_Horizontal) - ret.setHeight(ret.height() - QS60StylePrivate::pixelMetric(PM_Custom_BoldLineWidth)); + ret.setHeight(ret.height() - QS60StylePrivate::pixelMetric(PM_BoldLineWidth)); else - ret.setWidth(ret.width() - QS60StylePrivate::pixelMetric(PM_Custom_ThinLineWidth)); + ret.setWidth(ret.width() - QS60StylePrivate::pixelMetric(PM_ThinLineWidth)); } ret = visualRect(opt->direction, opt->rect, ret); break; diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h index df6f582..8bb2f7b 100644 --- a/src/gui/styles/qs60style_p.h +++ b/src/gui/styles/qs60style_p.h @@ -62,14 +62,6 @@ QT_BEGIN_NAMESPACE const int MAX_NON_CUSTOM_PIXELMETRICS = 92; const int CUSTOMVALUESCOUNT = 4; -//internal custom pixel metrics values, these map to entry in data[] table -enum { - PM_Custom_FrameCornerWidth = MAX_NON_CUSTOM_PIXELMETRICS, - PM_Custom_FrameCornerHeight, - PM_Custom_BoldLineWidth, - PM_Custom_ThinLineWidth - }; - const int MAX_PIXELMETRICS = MAX_NON_CUSTOM_PIXELMETRICS + CUSTOMVALUESCOUNT; typedef struct { -- cgit v0.12 From cd226eeb278108a5c1168b7cc01cadded6045f05 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 23 Mar 2010 12:27:08 +0200 Subject: Changed Symbian pkg files to deploy from under epoc32 Since the build process copies everything that is deployed using DEPLOYMENT variable under epoc32 somewhere, pkg files might as well look for the files from there. This can be useful for binary releases if the release needs to be repackaged. Task-number: QT-3147 Reviewed-by: Janne Anttila --- qmake/generators/symbian/symmake.cpp | 21 ++++++++++++++++++--- src/s60installs/s60installs.pro | 5 ++++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/qmake/generators/symbian/symmake.cpp b/qmake/generators/symbian/symmake.cpp index 9aa122a..c6023b5 100644 --- a/qmake/generators/symbian/symmake.cpp +++ b/qmake/generators/symbian/symmake.cpp @@ -456,14 +456,29 @@ void SymbianMakefileGenerator::generatePkgFile(const QString &iconFile, Deployme // deploy any additional DEPLOYMENT files QString remoteTestPath; remoteTestPath = QString("!:\\private\\%1").arg(privateDirUid); + QString zDir = epocRoot() + QLatin1String("epoc32/data/z"); initProjectDeploySymbian(project, depList, remoteTestPath, true, "$(PLATFORM)", "$(TARGET)", generatedDirs, generatedFiles); if (depList.size()) t << "; DEPLOYMENT" << endl; for (int i = 0; i < depList.size(); ++i) { - t << QString("\"%1\" - \"%2\"") - .arg(QString(depList.at(i).from).replace('\\','/')) - .arg(depList.at(i).to) << endl; + QString from = depList.at(i).from; + QString to = depList.at(i).to; + + // Deploy anything not already deployed from under epoc32 instead from under + // \epoc32\data\z\ to enable using pkg file without rebuilding + // the project, which can be useful for some binary only distributions. + if (!from.contains(QLatin1String("epoc32"), Qt::CaseInsensitive)) { + from = to; + if (from.size() > 1 && from.at(1) == QLatin1Char(':')) + from = from.mid(2); + from.prepend(zDir); + } else { + if (from.size() > 1 && from.at(1) == QLatin1Char(':')) + from = from.mid(2); + } + + t << QString("\"%1\" - \"%2\"").arg(from.replace('\\','/')).arg(to) << endl; } t << endl; diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro index 1f6e72b..f37cd58 100644 --- a/src/s60installs/s60installs.pro +++ b/src/s60installs/s60installs.pro @@ -13,9 +13,12 @@ symbian: { TARGET.UID3 = 0x2001E61C # sqlite3 is expected to be already found on phone if infixed configuration is built. + BLD_INF_RULES.prj_exports += \ + "sqlite3.sis $${EPOCROOT}epoc32/data/qt/sis/sqlite3.sis" \ + "sqlite3_selfsigned.sis $${EPOCROOT}epoc32/data/qt/sis/sqlite3_selfsigned.sis" sqlitedeployment = \ "; Deploy sqlite onto phone that does not have it already" \ - "@\"$$PWD/sqlite3.sis\", (0x2002af5f)" + "@\"$${EPOCROOT}epoc32/data/qt/sis/sqlite3.sis\", (0x2002af5f)" qtlibraries.pkg_postrules += sqlitedeployment } else { # Always use experimental UID for infixed configuration to avoid UID clash -- cgit v0.12 From c1b524dd8b7a7207d10c33b454519d717349ac6c Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Tue, 23 Mar 2010 09:37:27 +0100 Subject: QNAM HTTP: Do not use TCP_NODELAY Reviewed-by: thiago --- src/network/access/qhttpnetworkconnectionchannel.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index 1d8224c..82bc14f 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -865,7 +865,14 @@ void QHttpNetworkConnectionChannel::_q_disconnected() void QHttpNetworkConnectionChannel::_q_connected() { // improve performance since we get the request sent by the kernel ASAP - socket->setSocketOption(QAbstractSocket::LowDelayOption, 1); + //socket->setSocketOption(QAbstractSocket::LowDelayOption, 1); + // We have this commented out now. It did not have the effect we wanted. If we want to + // do this properly, Qt has to combine multiple HTTP requests into one buffer + // and send this to the kernel in one syscall and then the kernel immediately sends + // it as one TCP packet because of TCP_NODELAY. + // However, this code is currently not in Qt, so we rely on the kernel combining + // the requests into one TCP packet. + // not sure yet if it helps, but it makes sense socket->setSocketOption(QAbstractSocket::KeepAliveOption, 1); -- cgit v0.12 From a50519ba225459a9d21209fe50a3a8fbd8081a19 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Tue, 23 Mar 2010 14:17:29 +0100 Subject: Compile fix Commit 47902b7587d66c0941bacf08b31b8caae264f09a was missing one enum rename in qs60style_s60.cpp Reviewed-by: TrustMe --- src/gui/styles/qs60style_s60.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index 0f014c1..75ed0c7 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -978,8 +978,8 @@ void QS60StyleModeSpecifics::frameIdAndCenterId(QS60StylePrivate::SkinFrameEleme TRect QS60StyleModeSpecifics::innerRectFromElement(QS60StylePrivate::SkinFrameElements frameElement, const TRect &outerRect) { - TInt widthShrink = QS60StylePrivate::pixelMetric(PM_Custom_FrameCornerWidth); - TInt heightShrink = QS60StylePrivate::pixelMetric(PM_Custom_FrameCornerHeight); + TInt widthShrink = QS60StylePrivate::pixelMetric(PM_FrameCornerWidth); + TInt heightShrink = QS60StylePrivate::pixelMetric(PM_FrameCornerHeight); switch(frameElement) { case QS60StylePrivate::SF_PanelBackground: // panel should have slightly slimmer border to enable thin line of background graphics between closest component -- cgit v0.12 From 66813ad3dd429c4a8d58a2b4f8b79d14b8af4356 Mon Sep 17 00:00:00 2001 From: Gareth Stockwell Date: Tue, 23 Mar 2010 13:37:23 +0000 Subject: Added Symbian UserEnvironment capability to audioinput example Symbian applications which use QAudioInput must have this Platform Security capability. Without it, the Symbian audio subsystem will not allow the application to record audio. Reviewed-by: trustme --- examples/multimedia/audioinput/audioinput.pro | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/multimedia/audioinput/audioinput.pro b/examples/multimedia/audioinput/audioinput.pro index a54d452..6a1c79d 100644 --- a/examples/multimedia/audioinput/audioinput.pro +++ b/examples/multimedia/audioinput/audioinput.pro @@ -12,5 +12,6 @@ INSTALLS += target sources symbian { TARGET.UID3 = 0xA000D7BF + TARGET.CAPABILITY += UserEnvironment include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) } -- cgit v0.12 From 8f01952fcc062ad042601d75a994b43ee289ac0f Mon Sep 17 00:00:00 2001 From: Anders Bakken Date: Tue, 23 Mar 2010 17:56:47 -0700 Subject: Doc update for QSpinBox::textFromValue We remove the group separator so the docs should reflect this. Reviewed-by: Donald Carr --- src/gui/widgets/qspinbox.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/gui/widgets/qspinbox.cpp b/src/gui/widgets/qspinbox.cpp index 726426d..2d871d0 100644 --- a/src/gui/widgets/qspinbox.cpp +++ b/src/gui/widgets/qspinbox.cpp @@ -448,11 +448,12 @@ void QSpinBox::setRange(int minimum, int maximum) } /*! - This virtual function is used by the spin box whenever it needs - to display the given \a value. The default implementation returns - a string containing \a value printed in the standard way using - QWidget::locale().toString(). Reimplementations may return anything. (See - the example in the detailed description.) + This virtual function is used by the spin box whenever it needs to + display the given \a value. The default implementation returns a + string containing \a value printed in the standard way using + QWidget::locale().toString(), but with the thousand separator + removed. Reimplementations may return anything. (See the example + in the detailed description.) Note: QSpinBox does not call this function for specialValueText() and that neither prefix() nor suffix() should be included in the @@ -461,7 +462,7 @@ void QSpinBox::setRange(int minimum, int maximum) If you reimplement this, you may also need to reimplement valueFromText() and validate() - \sa valueFromText(), validate() + \sa valueFromText(), validate(), QLocale::groupSeparator() */ QString QSpinBox::textFromValue(int value) const @@ -869,7 +870,7 @@ void QDoubleSpinBox::setDecimals(int decimals) If you reimplement this, you may also need to reimplement valueFromText(). - \sa valueFromText() + \sa valueFromText(), QLocale::groupSeparator() */ -- cgit v0.12 From e887e0c38b5497757dfc69190c5a86cdc8104097 Mon Sep 17 00:00:00 2001 From: Justin McPherson Date: Wed, 24 Mar 2010 12:51:58 +1000 Subject: Calculate period size correctly. Reviewed-by:Dmytro Poplavskiy --- src/multimedia/audio/qaudioinput_mac_p.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/multimedia/audio/qaudioinput_mac_p.cpp b/src/multimedia/audio/qaudioinput_mac_p.cpp index 4b37b18..cb65f6e 100644 --- a/src/multimedia/audio/qaudioinput_mac_p.cpp +++ b/src/multimedia/audio/qaudioinput_mac_p.cpp @@ -670,8 +670,8 @@ bool QAudioInputPrivate::open() } // Allocate buffer - periodSizeBytes = (numberOfFrames * streamFormat.mSampleRate / deviceFormat.mSampleRate) * - streamFormat.mBytesPerFrame; + periodSizeBytes = numberOfFrames * streamFormat.mBytesPerFrame; + if (internalBufferSize < periodSizeBytes * 2) internalBufferSize = periodSizeBytes * 2; else -- cgit v0.12 From b6b1dee9460d6fdde0b8ad005301c0a315ad30bf Mon Sep 17 00:00:00 2001 From: Alexis Menard Date: Mon, 22 Mar 2010 08:04:46 +0100 Subject: Fix a crash when reparenting an item in QGraphicsView. Before calling addItem we need to invalidate the depth otherwise if someone call anything relating to sorting when itemChange is called (because of the scene change for instance) then qt_closestItemFirst for example can crash because of an invalid state. Task-number:QTBUG-6932 Reviewed-by:janarve --- src/gui/graphicsview/qgraphicsitem.cpp | 5 ++-- tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp | 34 ++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index f3c90ca..9852323 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -1130,6 +1130,9 @@ void QGraphicsItemPrivate::setParentItemHelper(QGraphicsItem *newParent, const Q } } + // Resolve depth. + invalidateDepthRecursively(); + if ((parent = newParent)) { if (parent->d_func()->scene && parent->d_func()->scene != scene) { // Move this item to its new parent's scene @@ -1180,8 +1183,6 @@ void QGraphicsItemPrivate::setParentItemHelper(QGraphicsItem *newParent, const Q } } - // Resolve depth. - invalidateDepthRecursively(); dirtySceneTransform = 1; // Restore the sub focus chain. diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp index 4d9f23f..75fb337 100644 --- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp @@ -439,6 +439,7 @@ private slots: void QTBUG_7714_fullUpdateDiscardingOpacityUpdate2(); void QT_2653_fullUpdateDiscardingOpacityUpdate(); void QT_2649_focusScope(); + void sortItemsWhileAdding(); private: QList paintedItems; @@ -10070,5 +10071,38 @@ void tst_QGraphicsItem::QT_2649_focusScope() delete scene; } +class MyGraphicsItemWithItemChange : public QGraphicsWidget +{ +public: + MyGraphicsItemWithItemChange(QGraphicsItem *parent = 0) : QGraphicsWidget(parent) + {} + + QVariant itemChange(GraphicsItemChange change, const QVariant &value) + { + if (change == QGraphicsItem::ItemSceneHasChanged) { + foreach (QGraphicsView *view, scene()->views()) { + //We trigger a sort of unindexed items in the BSP + view->sceneRect(); + } + } + return QGraphicsWidget::itemChange(change, value); + } +}; + +void tst_QGraphicsItem::sortItemsWhileAdding() +{ + QGraphicsScene scene; + QGraphicsView view(&scene); + QGraphicsWidget grandGrandParent; + grandGrandParent.resize(200, 200); + scene.addItem(&grandGrandParent); + QGraphicsWidget grandParent; + grandParent.resize(200, 200); + QGraphicsWidget parent(&grandParent); + parent.resize(200, 200); + MyGraphicsItemWithItemChange item(&parent); + grandParent.setParentItem(&grandGrandParent); +} + QTEST_MAIN(tst_QGraphicsItem) #include "tst_qgraphicsitem.moc" -- cgit v0.12 From c8fa23a5edd790d9eed0620068a29e03e4202cac Mon Sep 17 00:00:00 2001 From: Alexis Menard Date: Wed, 24 Mar 2010 02:12:47 +0100 Subject: Invalidate the cache of QGraphicsEffect if a child becomes visible. The effect might rely on a child to draw itself. So we need to redraw if a child become visible or invisible. Task-number:QTBUG-7843 Reviewed-by:janarve --- src/gui/graphicsview/qgraphicsitem.cpp | 6 ++- tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp | 43 ++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index 9852323..e10c03a 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -2177,8 +2177,12 @@ void QGraphicsItemPrivate::setVisibleHelper(bool newVisible, bool explicitly, bo QGraphicsItemCache *c = (QGraphicsItemCache *)qVariantValue(extra(ExtraCacheData)); if (c) c->purge(); - if (scene) + if (scene) { +#ifndef QT_NO_GRAPHICSEFFECT + invalidateParentGraphicsEffectsRecursively(); +#endif //QT_NO_GRAPHICSEFFECT scene->d_func()->markDirty(q_ptr, QRectF(), /*invalidateChildren=*/false, /*force=*/true); + } } // Certain properties are dropped as an item becomes invisible. diff --git a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp index 1007d61..02899ae 100644 --- a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp +++ b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp @@ -46,6 +46,7 @@ #include #include #include +#include #include #include "../../shared/util.h" @@ -73,6 +74,7 @@ private slots: void deviceCoordinateTranslateCaching(); void inheritOpacity(); void dropShadowClipping(); + void childrenVisibilityShouldInvalidateCache(); }; void tst_QGraphicsEffect::initTestCase() @@ -613,6 +615,47 @@ void tst_QGraphicsEffect::dropShadowClipping() QCOMPARE(img.pixel(x, y), img.pixel(x, y-1)); } +class MyGraphicsItem : public QGraphicsWidget +{ +public: + MyGraphicsItem(QGraphicsItem *parent = 0) : + QGraphicsWidget(parent), nbPaint(0) + {} + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) + { + nbPaint++; + QGraphicsWidget::paint(painter, option, widget); + } + int nbPaint; +}; + +void tst_QGraphicsEffect::childrenVisibilityShouldInvalidateCache() +{ + QGraphicsScene scene; + MyGraphicsItem parent; + parent.resize(200, 200); + QGraphicsWidget child(&parent); + child.resize(200, 200); + child.setVisible(false); + scene.addItem(&parent); + QGraphicsView view(&scene); + view.show(); + QApplication::setActiveWindow(&view); + QTest::qWaitForWindowShown(&view); + QCOMPARE(parent.nbPaint, 1); + //we set an effect on the parent + parent.setGraphicsEffect(new QGraphicsDropShadowEffect(&parent)); + //flush the events + QApplication::processEvents(); + //new effect applied->repaint + QCOMPARE(parent.nbPaint, 2); + child.setVisible(true); + //flush the events + QApplication::processEvents(); + //a new child appears we need to redraw the effect. + QCOMPARE(parent.nbPaint, 3); +} + QTEST_MAIN(tst_QGraphicsEffect) #include "tst_qgraphicseffect.moc" -- cgit v0.12 From 4be83fa7337c5a4eb7b0ce085aa5854af5d33252 Mon Sep 17 00:00:00 2001 From: Alexis Menard Date: Wed, 24 Mar 2010 05:33:21 +0100 Subject: Add a children private property needed for QML to support QGraphicsObject Commit adds a private property that QML can use to add children for a given item. This is a custom list that calls a callback which actually reparent the item instead of just appending in the list (otherwise it will mess up the state of QGraphicsView). This is needed because childItems() is pretty useless you get a list but if you append something on it then it adds that into a copy. Also the children property is the default property a concept used by QML. Width and Height private properties has been added in order to support better the integration with QGraphicsWidget in QML. The actual implementation is in the private class of QGI and QGraphicsWidget reimplements it to return the geometry. (In 4.7 QDeclarativeItem reimplements it too). This change should be harmless everything is private. Task-number:QT-2757 Reviewed-by:andreas --- src/gui/graphicsview/qgraphicsitem.cpp | 103 +++++++++++++++++++++ src/gui/graphicsview/qgraphicsitem.h | 7 ++ src/gui/graphicsview/qgraphicsitem_p.h | 67 ++++++++++++++ src/gui/graphicsview/qgraphicswidget.cpp | 14 +++ src/gui/graphicsview/qgraphicswidget_p.cpp | 51 ++++++++++ src/gui/graphicsview/qgraphicswidget_p.h | 9 ++ tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp | 28 ++++++ 7 files changed, 279 insertions(+) diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index e10c03a..f110a5c 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -5224,6 +5224,8 @@ void QGraphicsItemPrivate::addChild(QGraphicsItem *child) needSortChildren = 1; // ### maybe 0 child->d_ptr->siblingIndex = children.size(); children.append(child); + if (isObject) + emit static_cast(q_ptr)->childrenChanged(); } /*! @@ -5246,6 +5248,8 @@ void QGraphicsItemPrivate::removeChild(QGraphicsItem *child) // the child is not guaranteed to be at the index after the list is sorted. // (see ensureSortedChildren()). child->d_ptr->siblingIndex = -1; + if (isObject) + emit static_cast(q_ptr)->childrenChanged(); } /*! @@ -7453,6 +7457,88 @@ void QGraphicsObject::ungrabGesture(Qt::GestureType gesture) } } +void QGraphicsItemPrivate::append(QDeclarativeListProperty *list, QGraphicsObject *item) +{ + QGraphicsItemPrivate::get(item)->setParentItemHelper(static_cast(list->object), /*newParentVariant=*/0, /*thisPointerVariant=*/0); +} + +/*! + Returns a list of this item's children. + + The items are sorted by stacking order. This takes into account both the + items' insertion order and their Z-values. + +*/ +QDeclarativeListProperty QGraphicsItemPrivate::childrenList() +{ + Q_Q(QGraphicsItem); + if (isObject) { + QGraphicsObject *that = static_cast(q); + return QDeclarativeListProperty(that, &children, QGraphicsItemPrivate::append); + } else { + //QGraphicsItem is not supported for this property + return QDeclarativeListProperty(); + } +} + +/*! + \internal + Returns the width of the item + Reimplemented by QGraphicsWidget +*/ +qreal QGraphicsItemPrivate::width() const +{ + return 0; +} + +/*! + \internal + Set the width of the item + Reimplemented by QGraphicsWidget +*/ +void QGraphicsItemPrivate::setWidth(qreal w) +{ + Q_UNUSED(w); +} + +/*! + \internal + Reset the width of the item + Reimplemented by QGraphicsWidget +*/ +void QGraphicsItemPrivate::resetWidth() +{ +} + +/*! + \internal + Returns the height of the item + Reimplemented by QGraphicsWidget +*/ +qreal QGraphicsItemPrivate::height() const +{ + return 0; +} + +/*! + \internal + Set the height of the item + Reimplemented by QGraphicsWidget +*/ +void QGraphicsItemPrivate::setHeight(qreal h) +{ + Q_UNUSED(h); +} + +/*! + \internal + Reset the height of the item + Reimplemented by QGraphicsWidget +*/ +void QGraphicsItemPrivate::resetHeight() +{ +} + /*! \property QGraphicsObject::parent \brief the parent of the item @@ -7639,6 +7725,23 @@ void QGraphicsObject::ungrabGesture(Qt::GestureType gesture) \sa scale, rotation, QGraphicsItem::transformOriginPoint() */ +/*! + \fn void QGraphicsObject::widthChanged() + \internal +*/ + +/*! + \fn void QGraphicsObject::heightChanged() + \internal +*/ + +/*! + + \fn QGraphicsObject::childrenChanged() + + This signal gets emitted whenever the children list changes + \internal +*/ /*! \class QAbstractGraphicsShapeItem diff --git a/src/gui/graphicsview/qgraphicsitem.h b/src/gui/graphicsview/qgraphicsitem.h index d72833b..5023f60 100644 --- a/src/gui/graphicsview/qgraphicsitem.h +++ b/src/gui/graphicsview/qgraphicsitem.h @@ -547,6 +547,10 @@ class Q_GUI_EXPORT QGraphicsObject : public QObject, public QGraphicsItem Q_PROPERTY(qreal rotation READ rotation WRITE setRotation NOTIFY rotationChanged) Q_PROPERTY(qreal scale READ scale WRITE setScale NOTIFY scaleChanged) Q_PROPERTY(QPointF transformOriginPoint READ transformOriginPoint WRITE setTransformOriginPoint) + Q_PRIVATE_PROPERTY(QGraphicsItem::d_func(), QDeclarativeListProperty children READ childrenList DESIGNABLE false NOTIFY childrenChanged) + Q_PRIVATE_PROPERTY(QGraphicsItem::d_func(), qreal width READ width WRITE setWidth NOTIFY widthChanged RESET resetWidth FINAL) + Q_PRIVATE_PROPERTY(QGraphicsItem::d_func(), qreal height READ height WRITE setHeight NOTIFY heightChanged RESET resetHeight FINAL) + Q_CLASSINFO("DefaultProperty", "children") Q_INTERFACES(QGraphicsItem) public: QGraphicsObject(QGraphicsItem *parent = 0); @@ -571,6 +575,9 @@ Q_SIGNALS: void zChanged(); void rotationChanged(); void scaleChanged(); + void childrenChanged(); + void widthChanged(); + void heightChanged(); protected: QGraphicsObject(QGraphicsItemPrivate &dd, QGraphicsItem *parent, QGraphicsScene *scene); diff --git a/src/gui/graphicsview/qgraphicsitem_p.h b/src/gui/graphicsview/qgraphicsitem_p.h index ea04e0b..669ae1b 100644 --- a/src/gui/graphicsview/qgraphicsitem_p.h +++ b/src/gui/graphicsview/qgraphicsitem_p.h @@ -71,6 +71,62 @@ QT_BEGIN_NAMESPACE class QGraphicsItemPrivate; +#ifndef QDECLARATIVELISTPROPERTY +#define QDECLARATIVELISTPROPERTY +template +struct QDeclarativeListProperty { + typedef void (*AppendFunction)(QDeclarativeListProperty *, T*); + typedef int (*CountFunction)(QDeclarativeListProperty *); + typedef T *(*AtFunction)(QDeclarativeListProperty *, int); + typedef void (*ClearFunction)(QDeclarativeListProperty *); + + QDeclarativeListProperty() + : object(0), data(0), append(0), count(0), at(0), clear(0), dummy1(0), dummy2(0) {} + QDeclarativeListProperty(QObject *o, QList &list) + : object(o), data(&list), append(qlist_append), count(qlist_count), at(qlist_at), + clear(qlist_clear), dummy1(0), dummy2(0) {} + QDeclarativeListProperty(QObject *o, void *d, AppendFunction a, CountFunction c = 0, AtFunction t = 0, + ClearFunction r = 0) + : object(o), data(d), append(a), count(c), at(t), clear(r), dummy1(0), dummy2(0) {} + + bool operator==(const QDeclarativeListProperty &o) const { + return object == o.object && + data == o.data && + append == o.append && + count == o.count && + at == o.at && + clear == o.clear; + } + + QObject *object; + void *data; + + AppendFunction append; + + CountFunction count; + AtFunction at; + + ClearFunction clear; + + void *dummy1; + void *dummy2; + +private: + static void qlist_append(QDeclarativeListProperty *p, T *v) { + ((QList *)p->data)->append(v); + } + static int qlist_count(QDeclarativeListProperty *p) { + return ((QList *)p->data)->count(); + } + static T *qlist_at(QDeclarativeListProperty *p, int idx) { + return ((QList *)p->data)->at(idx); + } + static void qlist_clear(QDeclarativeListProperty *p) { + return ((QList *)p->data)->clear(); + } +}; +#endif + class QGraphicsItemCache { public: @@ -237,6 +293,7 @@ public: void resolveDepth(); void addChild(QGraphicsItem *child); void removeChild(QGraphicsItem *child); + QDeclarativeListProperty childrenList(); void setParentItemHelper(QGraphicsItem *parent, const QVariant *newParentVariant, const QVariant *thisPointerVariant); void childrenBoundingRectHelper(QTransform *x, QRectF *rect); @@ -423,11 +480,21 @@ public: inline QTransform transformToParent() const; inline void ensureSortedChildren(); + static void append(QDeclarativeListProperty *list, QGraphicsObject *item); static inline bool insertionOrder(QGraphicsItem *a, QGraphicsItem *b); void ensureSequentialSiblingIndex(); inline void sendScenePosChange(); virtual void siblingOrderChange(); + // Private Properties + virtual qreal width() const; + virtual void setWidth(qreal); + virtual void resetWidth(); + + virtual qreal height() const; + virtual void setHeight(qreal); + virtual void resetHeight(); + QRectF childrenBoundingRect; QRectF needsRepaint; QMap paintedViewBoundingRects; diff --git a/src/gui/graphicsview/qgraphicswidget.cpp b/src/gui/graphicsview/qgraphicswidget.cpp index f42fe4f..a091347 100644 --- a/src/gui/graphicsview/qgraphicswidget.cpp +++ b/src/gui/graphicsview/qgraphicswidget.cpp @@ -324,6 +324,14 @@ void QGraphicsWidget::resize(const QSizeF &size) */ /*! + + \fn QGraphicsWidget::geometryChanged() + + This signal gets emitted whenever the geometry of the item changes + \internal +*/ + +/*! \property QGraphicsWidget::geometry \brief the geometry of the widget @@ -391,6 +399,10 @@ void QGraphicsWidget::setGeometry(const QRectF &rect) QGraphicsSceneResizeEvent re; re.setOldSize(oldSize); re.setNewSize(newGeom.size()); + if (oldSize.width() != newGeom.size().width()) + emit widthChanged(); + if (oldSize.height() != newGeom.size().height()) + emit heightChanged(); QApplication::sendEvent(this, &re); } } @@ -2322,5 +2334,7 @@ void QGraphicsWidget::dumpFocusChain() #endif QT_END_NAMESPACE + +#include "moc_qgraphicswidget.cpp" #endif //QT_NO_GRAPHICSVIEW diff --git a/src/gui/graphicsview/qgraphicswidget_p.cpp b/src/gui/graphicsview/qgraphicswidget_p.cpp index 1835c74..6e397b6 100644 --- a/src/gui/graphicsview/qgraphicswidget_p.cpp +++ b/src/gui/graphicsview/qgraphicswidget_p.cpp @@ -44,6 +44,7 @@ #ifndef QT_NO_GRAPHICSVIEW #include +#include #include "qgraphicswidget_p.h" #include "qgraphicslayout.h" #include "qgraphicsscene_p.h" @@ -825,6 +826,56 @@ void QGraphicsWidgetPrivate::setLayout_helper(QGraphicsLayout *l) } } +qreal QGraphicsWidgetPrivate::width() const +{ + Q_Q(const QGraphicsWidget); + return q->geometry().width(); +} + +void QGraphicsWidgetPrivate::setWidth(qreal w) +{ + if (qIsNaN(w)) + return; + Q_Q(QGraphicsWidget); + if (q->geometry().width() == w) + return; + + QRectF oldGeom = q->geometry(); + + q->setGeometry(QRectF(q->x(), q->y(), w, height())); +} + +void QGraphicsWidgetPrivate::resetWidth() +{ + Q_Q(QGraphicsWidget); + q->setGeometry(QRectF(q->x(), q->y(), 0, height())); +} + +qreal QGraphicsWidgetPrivate::height() const +{ + Q_Q(const QGraphicsWidget); + return q->geometry().height(); +} + +void QGraphicsWidgetPrivate::setHeight(qreal h) +{ + if (qIsNaN(h)) + return; + Q_Q(QGraphicsWidget); + if (q->geometry().height() == h) + return; + + QRectF oldGeom = q->geometry(); + + q->setGeometry(QRectF(q->x(), q->y(), width(), h)); +} + +void QGraphicsWidgetPrivate::resetHeight() +{ + Q_Q(QGraphicsWidget); + q->setGeometry(QRectF(q->x(), q->y(), width(), 0)); +} + QT_END_NAMESPACE #endif //QT_NO_GRAPHICSVIEW diff --git a/src/gui/graphicsview/qgraphicswidget_p.h b/src/gui/graphicsview/qgraphicswidget_p.h index 2c5b3bf..f34a755 100644 --- a/src/gui/graphicsview/qgraphicswidget_p.h +++ b/src/gui/graphicsview/qgraphicswidget_p.h @@ -130,6 +130,15 @@ public: void windowFrameHoverLeaveEvent(QGraphicsSceneHoverEvent *event); bool hasDecoration() const; + // Private Properties + qreal width() const; + void setWidth(qreal); + void resetWidth(); + + qreal height() const; + void setHeight(qreal); + void resetHeight(); + // State inline int attributeToBitIndex(Qt::WidgetAttribute att) const { diff --git a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp index 0d1ad9e..5a3a54c 100644 --- a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp +++ b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp @@ -111,6 +111,8 @@ private slots: void fontPropagationSceneChange(); void geometry_data(); void geometry(); + void width(); + void height(); void getContentsMargins_data(); void getContentsMargins(); void initStyleOption_data(); @@ -775,6 +777,32 @@ void tst_QGraphicsWidget::geometry() QCOMPARE(widget.geometry(), QRectF(pos, size)); } +void tst_QGraphicsWidget::width() +{ + QGraphicsWidget w; + QCOMPARE(w.property("width").toReal(), qreal(0)); + QSignalSpy spy(&w, SIGNAL(widthChanged())); + w.setProperty("width", qreal(50)); + QCOMPARE(w.property("width").toReal(), qreal(50)); + QCOMPARE(spy.count(), 1); + //calling old school setGeometry should work too + w.setGeometry(0, 0, 200, 200); + QCOMPARE(spy.count(), 2); +} + +void tst_QGraphicsWidget::height() +{ + QGraphicsWidget w; + QCOMPARE(w.property("height").toReal(), qreal(0)); + QSignalSpy spy(&w, SIGNAL(heightChanged())); + w.setProperty("height", qreal(50)); + QCOMPARE(w.property("height").toReal(), qreal(50)); + QCOMPARE(spy.count(), 1); + //calling old school setGeometry should work too + w.setGeometry(0, 0, 200, 200); + QCOMPARE(spy.count(), 2); +} + void tst_QGraphicsWidget::getContentsMargins_data() { QTest::addColumn("left"); -- cgit v0.12 From 6fc92ea90a078938ced596059981a120dc9ff57d Mon Sep 17 00:00:00 2001 From: Gareth Stockwell Date: Wed, 24 Mar 2010 09:11:30 +0000 Subject: Symbian QAudioOutput::suspend() was resetting processedUSecs() to zero Because of the logic in the Symbian implementations of suspend() and processedUSecs(), the behaviour prior to this patch was as follows: - after calling suspend(), processedUSecs() reported zero - when resume() is called, the amount of silent padding data inserted into the output stream is equal to the amount of data played prior to suspend() The patch corrects the above defect, but introduces a new one, which is described in QTBUG-9322 Reviewed-by: trustme --- src/multimedia/audio/qaudiooutput_symbian_p.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/multimedia/audio/qaudiooutput_symbian_p.cpp b/src/multimedia/audio/qaudiooutput_symbian_p.cpp index 945a08d..3f8e933 100644 --- a/src/multimedia/audio/qaudiooutput_symbian_p.cpp +++ b/src/multimedia/audio/qaudiooutput_symbian_p.cpp @@ -185,10 +185,11 @@ void QAudioOutputPrivate::suspend() const qint64 samplesWritten = SymbianAudio::Utils::bytesToSamples( m_format, m_bytesWritten); - m_bytesWritten = 0; const qint64 samplesPlayed = getSamplesPlayed(); + m_bytesWritten = 0; + // CMMFDevSound::Pause() is not guaranteed to work correctly in all // implementations, for play-mode DevSound sessions. We therefore // have to implement suspend() by calling CMMFDevSound::Stop(). -- cgit v0.12 From a2f2c87f320873d1968d931ad69a0f640c5545b1 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Wed, 24 Mar 2010 12:15:34 +0200 Subject: Made it possible to define more than one language using pkg_prerules The pkg statements were generated in invalid order if user used pkg_prerules to redefine languages supported by the pkg file. Also made it possible to override dependency statements autogenerated for Qt and QtWebkit, as these statements need to be user defined in case of multiple languages. Defining the following in .pro removes all dependencies from pkg rules: default_deployment.pkg_prerules -= \ pkg_depends_webkit \ pkg_depends_qt \ pkg_platform_dependencies Task-number: QTBUG-9279 Reviewed-by: Janne Anttila --- mkspecs/common/symbian/symbian.conf | 8 ++++++- mkspecs/features/symbian/qt.prf | 10 +++++--- qmake/generators/symbian/symmake.cpp | 44 ++++++++++++++++++++++++++---------- src/corelib/corelib.pro | 1 - src/gui/gui.pro | 1 - 5 files changed, 46 insertions(+), 18 deletions(-) diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf index 1d00b03..c39b39d 100644 --- a/mkspecs/common/symbian/symbian.conf +++ b/mkspecs/common/symbian/symbian.conf @@ -135,8 +135,14 @@ INCLUDEPATH = \ # RVCT seems to do this automatically, but WINSCW compiler does not, so add it here. MMP_RULES += "USERINCLUDE ." +# pkg_depends_webkit, pkg_depends_core, and pkg_platform_dependencies can be removed by developer +# if multiple languages need to be supported by pkg file. In that case the developer should declare +# multiple language compatible dependency statements him/herself. + +default_deployment.pkg_prerules += pkg_depends_webkit pkg_depends_qt pkg_platform_dependencies + # Supports S60 3.0, 3.1, 3.2 and 5.0 by default -default_deployment.pkg_prerules = \ +pkg_platform_dependencies = \ "; Default HW/platform dependencies" \ "[0x101F7961],0,0,0,{\"S60ProductID\"}" \ "[0x102032BE],0,0,0,{\"S60ProductID\"}" \ diff --git a/mkspecs/features/symbian/qt.prf b/mkspecs/features/symbian/qt.prf index 275b86a..b2156a9 100644 --- a/mkspecs/features/symbian/qt.prf +++ b/mkspecs/features/symbian/qt.prf @@ -22,19 +22,23 @@ load(qt) INCLUDEPATH = $$PREPEND_INCLUDEPATH $$INCLUDEPATH # Add dependency to Qt package to all other projects besides Qt libs. -# Note: Qt libs with full capabilities has UID3 of 0x2001E61C, +# Note: Qt libs package with full capabilities has UID3 of 0x2001E61C, # while self-signed version typically has temporary UID3 of 0xE001E61C. contains(CONFIG, qt):!contains(TARGET.UID3, 0x2001E61C):!contains(TARGET.UID3, 0xE001E61C):isEmpty(QT_LIBINFIX) { - default_deployment.pkg_prerules += \ + pkg_depends_qt += \ "; Default dependency to Qt libraries" \ "(0x2001E61C), $${QT_MAJOR_VERSION}, $${QT_MINOR_VERSION}, $${QT_PATCH_VERSION}, {\"Qt\"}" # Projects linking to webkit need dependency to webkit contains(QT, webkit): { - default_deployment.pkg_prerules += \ + pkg_depends_webkit += \ "; Dependency to Qt Webkit" \ "(0x200267C2), $${QT_MAJOR_VERSION}, $${QT_MINOR_VERSION}, $${QT_PATCH_VERSION}, {\"QtWebKit\"}" + } else { + default_deployment.pkg_prerules -= pkg_depends_webkit } +} else { + default_deployment.pkg_prerules -= pkg_depends_webkit pkg_depends_qt } isEmpty(TARGET.EPOCSTACKSIZE):TARGET.EPOCSTACKSIZE = 0x14000 diff --git a/qmake/generators/symbian/symmake.cpp b/qmake/generators/symbian/symmake.cpp index c6023b5..1470a12 100644 --- a/qmake/generators/symbian/symmake.cpp +++ b/qmake/generators/symbian/symmake.cpp @@ -322,17 +322,36 @@ void SymbianMakefileGenerator::generatePkgFile(const QString &iconFile, Deployme tw << headerComment.arg(wrapperPkgFilename).arg(dateStr); // Construct QStringList from pkg_prerules since we need search it before printed to file + // Note: Though there can't be more than one language or header line, use stringlists + // in case user wants comments to go with the rules. QStringList rawPkgPreRules; + QStringList languageRules; + QStringList headerRules; foreach(QString deploymentItem, project->values("DEPLOYMENT")) { foreach(QString pkgrulesItem, project->values(deploymentItem + ".pkg_prerules")) { QStringList pkgrulesValue = project->values(pkgrulesItem); // If there is no stringlist defined for a rule, use rule name directly // This is convenience for defining single line mmp statements if (pkgrulesValue.isEmpty()) { - rawPkgPreRules << pkgrulesItem; + if (pkgrulesItem.startsWith("&")) + languageRules << pkgrulesItem; + else if (pkgrulesItem.startsWith("#")) + headerRules << pkgrulesItem; + else + rawPkgPreRules << pkgrulesItem; } else { - foreach(QString pkgrule, pkgrulesValue) { - rawPkgPreRules << pkgrule; + if (containsStartWithItem('&', pkgrulesValue)) { + foreach(QString pkgrule, pkgrulesValue) { + languageRules << pkgrule; + } + } else if (containsStartWithItem('#', pkgrulesValue)) { + foreach(QString pkgrule, pkgrulesValue) { + headerRules << pkgrule; + } + } else { + foreach(QString pkgrule, pkgrulesValue) { + rawPkgPreRules << pkgrule; + } } } } @@ -340,17 +359,17 @@ void SymbianMakefileGenerator::generatePkgFile(const QString &iconFile, Deployme // Apply some defaults if specific data does not exist in PKG pre-rules - if (!containsStartWithItem('&', rawPkgPreRules)) { + if (languageRules.isEmpty()) { // language, (*** hardcoded to english atm, should be parsed from TRANSLATIONS) - QString languageCode = "; Language\n&EN\n\n"; - t << languageCode; - tw << languageCode; - } else { + languageRules << "; Language\n&EN\n\n"; + } else if (headerRules.isEmpty()) { // In case user defines langs, he must take care also about SIS header - if (!containsStartWithItem('#', rawPkgPreRules)) - fprintf(stderr, "Warning: If language is defined with DEPLOYMENT pkg_prerules, also the SIS header must be defined\n"); + fprintf(stderr, "Warning: If language is defined with DEPLOYMENT pkg_prerules, also the SIS header must be defined\n"); } + t << languageRules.join("\n") << endl; + tw << languageRules.join("\n") << endl; + // name of application, UID and version QString applicationVersion = project->first("VERSION").isEmpty() ? "1,0,0" : project->first("VERSION").replace('.', ','); QString sisHeader = "; SIS header: name, uid, version\n#{\"%1\"},(%2),%3\n\n"; @@ -364,9 +383,10 @@ void SymbianMakefileGenerator::generatePkgFile(const QString &iconFile, Deployme tw << installerSisHeader << endl; } - if (!containsStartWithItem('#', rawPkgPreRules)) { + if (headerRules.isEmpty()) t << sisHeader.arg(visualTarget).arg(uid3).arg(applicationVersion); - } + else + t << headerRules.join("\n") << endl; // Localized vendor name QString vendorName; diff --git a/src/corelib/corelib.pro b/src/corelib/corelib.pro index efee610..717b95e 100644 --- a/src/corelib/corelib.pro +++ b/src/corelib/corelib.pro @@ -38,7 +38,6 @@ symbian: { # Partial upgrade SIS file vendorinfo = \ - "&EN" \ "; Localised Vendor name" \ "%{\"Nokia, Qt\"}" \ " " \ diff --git a/src/gui/gui.pro b/src/gui/gui.pro index d46f3b4..d2401f4 100644 --- a/src/gui/gui.pro +++ b/src/gui/gui.pro @@ -60,7 +60,6 @@ symbian: { # Partial upgrade SIS file vendorinfo = \ - "&EN" \ "; Localised Vendor name" \ "%{\"Nokia, Qt\"}" \ " " \ -- cgit v0.12 From 903d7a43a5d936bb1e853e5add7c4c3c5503737e Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Wed, 24 Mar 2010 12:17:14 +0100 Subject: Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit/qtwebkit-4.6 ( aa40cdb9595eb15a68e7be03322f973aa613a8f9 ) Changes in WebKit/qt since the last update: ++ b/WebKit/qt/ChangeLog 2010-03-21 axis Reviewed by Simon Hausmann. Fixed updating the VKB display when inputting into QGraphicsWebView. https://bugs.webkit.org/show_bug.cgi?id=36292 * Api/qgraphicswebview.cpp: (QGraphicsWebViewPrivate::_q_updateMicroFocus): (QGraphicsWebView::setPage): * Api/qgraphicswebview.h: WebCore: [Qt] Support for QT_LIBINFIX in Symbian builds Patch by Miikka Heikkinen on 2010-03-19 Reviewed by Simon Hausmann. Configuring Qt with -qtlibinfix parameter will enable installing an alternate version of Qt on devices that already have it on ROM. This patch provides support for infixed builds of Webkit. --- src/3rdparty/webkit/.gitattributes | 4 ++++ src/3rdparty/webkit/ChangeLog | 8 ++++++++ src/3rdparty/webkit/VERSION | 2 +- src/3rdparty/webkit/WebCore/ChangeLog | 12 ++++++++++++ src/3rdparty/webkit/WebCore/WebCore.pro | 9 ++++++--- src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.h | 2 +- 6 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 src/3rdparty/webkit/.gitattributes diff --git a/src/3rdparty/webkit/.gitattributes b/src/3rdparty/webkit/.gitattributes new file mode 100644 index 0000000..5b43bd0 --- /dev/null +++ b/src/3rdparty/webkit/.gitattributes @@ -0,0 +1,4 @@ +# To enable automatic merging of ChangeLog files, use the following command: +# git config merge.changelog.driver "resolve-ChangeLogs --merge-driver %O %A %B" +ChangeLog* merge=changelog + diff --git a/src/3rdparty/webkit/ChangeLog b/src/3rdparty/webkit/ChangeLog index 1e89d1e..57cb0de 100644 --- a/src/3rdparty/webkit/ChangeLog +++ b/src/3rdparty/webkit/ChangeLog @@ -1,3 +1,11 @@ +2010-02-18 Tor Arne Vestbø + + Reviewed by Eric Seidel. + + Add .gitattributes file for custom ChangeLog merge-driver + + * .gitattributes: Added. + 2009-11-30 Jan-Arve Sæther Reviewed by Simon Hausmann. diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index def66ef..9dac2f8 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -8,4 +8,4 @@ The commit imported was from the and has the sha1 checksum - d95c54951e7af2aa7def4346a142b2162bd89bbd + aa40cdb9595eb15a68e7be03322f973aa613a8f9 diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog index 869e225..0a444bc 100644 --- a/src/3rdparty/webkit/WebCore/ChangeLog +++ b/src/3rdparty/webkit/WebCore/ChangeLog @@ -1,3 +1,15 @@ +2010-03-19 Miikka Heikkinen + + Reviewed by Simon Hausmann. + + [Qt] Support for QT_LIBINFIX in Symbian builds + + Configuring Qt with -qtlibinfix parameter will enable installing + an alternate version of Qt on devices that already have it on ROM. + This patch provides support for infixed builds of Webkit. + + * WebCore.pro: + 2010-01-31 Benjamin Poulain Reviewed by Eric Seidel. diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro index 735c8ef..7e57394 100644 --- a/src/3rdparty/webkit/WebCore/WebCore.pro +++ b/src/3rdparty/webkit/WebCore/WebCore.pro @@ -6,9 +6,12 @@ symbian: { TARGET.EPOCALLOWDLLDATA=1 TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 // Min 128kB, Max 32MB TARGET.CAPABILITY = All -Tcb - TARGET.UID3 = 0x200267C2 - - webkitlibs.sources = QtWebKit.dll + isEmpty(QT_LIBINFIX) { + TARGET.UID3 = 0x200267C2 + } else { + TARGET.UID3 = 0xE00267C2 + } + webkitlibs.sources = QtWebKit$${QT_LIBINFIX}.dll webkitlibs.path = /sys/bin vendorinfo = \ "; Localised Vendor name" \ diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.h b/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.h index 68379a2..f983ae4 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.h +++ b/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.h @@ -134,10 +134,10 @@ protected: private: Q_PRIVATE_SLOT(d, void _q_doLoadFinished(bool success)) + Q_PRIVATE_SLOT(d, void _q_updateMicroFocus()) QGraphicsWebViewPrivate* const d; friend class QGraphicsWebViewPrivate; }; #endif // QGraphicsWebView_h - Q_PRIVATE_SLOT(d, void _q_updateMicroFocus()) -- cgit v0.12 From b87edcb5fe59b590e20367b167e50abbb23484f4 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Wed, 24 Mar 2010 13:42:38 +0200 Subject: Clarified pkg_prerules usage documentation. The default_deployment item shouldn't be used to add own rules. Task-number: QTBUG-9277 Reviewed-by: Janne Anttila --- doc/src/development/qmake-manual.qdoc | 18 +++++++++++++----- doc/src/snippets/code/doc_src_deployment.qdoc | 7 +++++-- doc/src/snippets/code/doc_src_qmake-manual.qdoc | 4 +++- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/doc/src/development/qmake-manual.qdoc b/doc/src/development/qmake-manual.qdoc index 7ab3cd2..eaf6cd0 100644 --- a/doc/src/development/qmake-manual.qdoc +++ b/doc/src/development/qmake-manual.qdoc @@ -1421,12 +1421,20 @@ is the application private directory on the drive it is installed to. attention that also other statements stay valid. For example if you override languages statement, you must override also package-header statement and all other statements which are language specific. + + On the Symbian platform, the \c default_deployment item specifies + default platform and package dependencies. Those dependencies can be + selectively disabled if alternative dependencies need to be defined + - e.g. if a specific device is required to run the application or + more languages need to be supported by the package file. The supported + \c default_deployment rules that can be disabled are: - On the Symbian platform, the \c default_deployment item specifies - default platform dependencies. It can be overwritten if a more - restrictive set is needed - e.g. if a specific - device is required to run the application. - + \list + \o pkg_depends_qt + \o pkg_depends_webkit + \o pkg_platform_dependencies + \endlist + For example: \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 141 diff --git a/doc/src/snippets/code/doc_src_deployment.qdoc b/doc/src/snippets/code/doc_src_deployment.qdoc index 3b0cda1..48e9ac6 100644 --- a/doc/src/snippets/code/doc_src_deployment.qdoc +++ b/doc/src/snippets/code/doc_src_deployment.qdoc @@ -463,7 +463,8 @@ vendorinfo = \ "%{\"Example Localized Vendor\"}" \ ":\"Example Vendor\"" -default_deployment.pkg_prerules = vendorinfo +my_deployment.pkg_prerules = vendorinfo +DEPLOYMENT += my_deployment //! [56] //! [57] @@ -471,7 +472,9 @@ supported_platforms = \ "; This demo only supports S60 5.0" \ "[0x1028315F],0,0,0,{\"S60ProductID\"}" -default_deployment.pkg_prerules += supported_platforms +default_deployment.pkg_prerules -= pkg_platform_dependencies +my_deployment.pkg_prerules += supported_platforms +DEPLOYMENT += my_deployment //! [57] //! [58] diff --git a/doc/src/snippets/code/doc_src_qmake-manual.qdoc b/doc/src/snippets/code/doc_src_qmake-manual.qdoc index 36676ae..d9e5d3c 100644 --- a/doc/src/snippets/code/doc_src_qmake-manual.qdoc +++ b/doc/src/snippets/code/doc_src_qmake-manual.qdoc @@ -933,7 +933,9 @@ DEPLOYMENT += somelib justdep //! [140] //! [141] -default_deployment.pkg_prerules = "[0x11223344],0,0,0,{\"SomeSpecificDeviceID\"}" +default_deployment.pkg_prerules -= pkg_platform_dependencies +my_deployment.pkg_prerules = "[0x11223344],0,0,0,{\"SomeSpecificDeviceID\"}" +DEPLOYMENT += my_deployment //! [141] //! [142] -- cgit v0.12 From d0645d1792e1cbdf417a923ea071975e4390fccd Mon Sep 17 00:00:00 2001 From: mread Date: Wed, 24 Mar 2010 12:25:58 +0000 Subject: QIODevice::read() and QFile::atEnd() performance improvements atEnd improvements, since atEnd is used in published example Qt read loops. The two main ideas are to push the buffer test forward, which optimises the normal buffered case, and to cache the file size till you get to the end, which otherwise has to get the file size every 16K of data. read buffer improvements: The ring buffer structure was causing significant performance overheads. In practice QIODevice has much simpler requirements on its read buffer, and a linear buffer can be used instead. This now uses a buffer optimised to QIODevice's use of it. QIODevice read function improvements. There are a number of sub-themes here, which all are aimed at getting the normal buffered path through the code done as fast as possible. This gives greatest improvements for small reads, but it is these small reads that have the biggest problems. - removing the isSequential test, by setting a pointer to the qint64 to update and using a dummy qint64 target when isSequential, then writing through the pointer. - doing the readability check on the first read only, out of the fast path - doing the maxSize<0 test after the getchar fast path - removing the buffer isEmpty test and giving a fast exit test instead - moving arithmetic out of the fast path, so "data" and "maxSize" are now dynamically updating - for RCVT builds, ARM mode is used for the read functions because the 64-bit operations are much slower with this compiler in Thumb mode There are some other changes to read() which improve clarity: - bytesToBuffer is now always set to QIODEVICE_BUFFERSIZE. This has always been the case, its just that the logic was not clear before. - moreToRead is set to false now in the case where the request was met by a direct device read. Leaving it true in this case was pointless, and setting it true in the converse case seems dangerous because the function might iterate for a very long time, although it might meet the API semantics better and would be a change in behavior because the function used to not read more when it claimed it would. Reviewed-by: Joao Reviewed-by: Aleksandar Babic --- src/corelib/io/qfile.cpp | 46 +++++++++--- src/corelib/io/qfile_p.h | 2 + src/corelib/io/qiodevice.cpp | 163 +++++++++++++++++++++++++------------------ src/corelib/io/qiodevice_p.h | 127 ++++++++++++++++++++++++++++++++- 4 files changed, 260 insertions(+), 78 deletions(-) diff --git a/src/corelib/io/qfile.cpp b/src/corelib/io/qfile.cpp index aa1c7d9..50e9a8f 100644 --- a/src/corelib/io/qfile.cpp +++ b/src/corelib/io/qfile.cpp @@ -90,7 +90,8 @@ QFile::DecoderFn QFilePrivate::decoder = locale_decode; QFilePrivate::QFilePrivate() : fileEngine(0), lastWasWrite(false), - writeBuffer(QFILE_WRITEBUFFER_SIZE), error(QFile::NoError) + writeBuffer(QFILE_WRITEBUFFER_SIZE), error(QFile::NoError), + cachedSize(0) { } @@ -1257,8 +1258,10 @@ QFile::resize(qint64 sz) seek(sz); if(d->fileEngine->setSize(sz)) { unsetError(); + d->cachedSize = sz; return true; } + d->cachedSize = 0; d->setError(QFile::ResizeError, d->fileEngine->errorString()); return false; } @@ -1420,7 +1423,8 @@ qint64 QFile::size() const Q_D(const QFile); if (!d->ensureFlushed()) return 0; - return fileEngine()->size(); + d->cachedSize = fileEngine()->size(); + return d->cachedSize; } /*! @@ -1446,16 +1450,16 @@ bool QFile::atEnd() const { Q_D(const QFile); + // If there's buffered data left, we're not at the end. + if (!d->buffer.isEmpty()) + return false; + if (!isOpen()) return true; if (!d->ensureFlushed()) return false; - // If there's buffered data left, we're not at the end. - if (!d->buffer.isEmpty()) - return false; - // If the file engine knows best, say what it says. if (d->fileEngine->supportsExtension(QAbstractFileEngine::AtEndExtension)) { // Check if the file engine supports AtEndExtension, and if it does, @@ -1463,6 +1467,11 @@ bool QFile::atEnd() const return d->fileEngine->atEnd(); } + // if it looks like we are at the end, or if size is not cached, + // fall through to bytesAvailable() to make sure. + if (pos() < d->cachedSize) + return false; + // Fall back to checking how much is available (will stat files). return bytesAvailable() == 0; } @@ -1502,12 +1511,21 @@ qint64 QFile::readLineData(char *data, qint64 maxlen) if (!d->ensureFlushed()) return -1; - if (d->fileEngine->supportsExtension(QAbstractFileEngine::FastReadLineExtension)) - return d->fileEngine->readLine(data, maxlen); + qint64 read; + if (d->fileEngine->supportsExtension(QAbstractFileEngine::FastReadLineExtension)) { + read = d->fileEngine->readLine(data, maxlen); + } else { + // Fall back to QIODevice's readLine implementation if the engine + // cannot do it faster. + read = QIODevice::readLineData(data, maxlen); + } + + if (read < maxlen) { + // failed to read all requested, may be at the end of file, stop caching size so that it's rechecked + d->cachedSize = 0; + } - // Fall back to QIODevice's readLine implementation if the engine - // cannot do it faster. - return QIODevice::readLineData(data, maxlen); + return read; } /*! @@ -1528,6 +1546,12 @@ qint64 QFile::readData(char *data, qint64 len) err = QFile::ReadError; d->setError(err, d->fileEngine->errorString()); } + + if (read < len) { + // failed to read all requested, may be at the end of file, stop caching size so that it's rechecked + d->cachedSize = 0; + } + return read; } diff --git a/src/corelib/io/qfile_p.h b/src/corelib/io/qfile_p.h index f8f5f5c..cf76c09 100644 --- a/src/corelib/io/qfile_p.h +++ b/src/corelib/io/qfile_p.h @@ -84,6 +84,8 @@ protected: void setError(QFile::FileError err, const QString &errorString); void setError(QFile::FileError err, int errNum); + mutable qint64 cachedSize; + private: static QFile::EncoderFn encoder; static QFile::DecoderFn decoder; diff --git a/src/corelib/io/qiodevice.cpp b/src/corelib/io/qiodevice.cpp index c93f0c3..f83c142 100644 --- a/src/corelib/io/qiodevice.cpp +++ b/src/corelib/io/qiodevice.cpp @@ -84,10 +84,6 @@ void debugBinaryString(const char *data, qint64 maxlen) } #endif -#ifndef QIODEVICE_BUFFERSIZE -#define QIODEVICE_BUFFERSIZE Q_INT64_C(16384) -#endif - #define Q_VOID #define CHECK_MAXLEN(function, returnType) \ @@ -123,7 +119,9 @@ void debugBinaryString(const char *data, qint64 maxlen) QIODevicePrivate::QIODevicePrivate() : openMode(QIODevice::NotOpen), buffer(QIODEVICE_BUFFERSIZE), pos(0), devicePos(0) + , pPos(&pos), pDevicePos(&devicePos) , baseReadLineDataCalled(false) + , firstRead(true) , accessMode(Unset) #ifdef QT_NO_QOBJECT , q_ptr(0) @@ -449,11 +447,15 @@ QIODevice::OpenMode QIODevice::openMode() const */ void QIODevice::setOpenMode(OpenMode openMode) { + Q_D(QIODevice); #if defined QIODEVICE_DEBUG printf("%p QIODevice::setOpenMode(0x%x)\n", this, int(openMode)); #endif - d_func()->openMode = openMode; - d_func()->accessMode = QIODevicePrivate::Unset; + d->openMode = openMode; + d->accessMode = QIODevicePrivate::Unset; + d->firstRead = true; + if (!isReadable()) + d->buffer.clear(); } /*! @@ -537,6 +539,7 @@ bool QIODevice::open(OpenMode mode) d->pos = (mode & Append) ? size() : qint64(0); d->buffer.clear(); d->accessMode = QIODevicePrivate::Unset; + d->firstRead = true; #if defined QIODEVICE_DEBUG printf("%p QIODevice::open(0x%x)\n", this, quint32(mode)); #endif @@ -566,6 +569,7 @@ void QIODevice::close() d->errorString.clear(); d->pos = 0; d->buffer.clear(); + d->firstRead = true; } /*! @@ -729,6 +733,12 @@ qint64 QIODevice::bytesToWrite() const return qint64(0); } +#ifdef Q_CC_RVCT +// arm mode makes the 64-bit integer operations much faster in RVCT 2.2 +#pragma push +#pragma arm +#endif + /*! Reads at most \a maxSize bytes from the device into \a data, and returns the number of bytes read. If an error occurs, such as when @@ -745,21 +755,17 @@ qint64 QIODevice::bytesToWrite() const qint64 QIODevice::read(char *data, qint64 maxSize) { Q_D(QIODevice); - CHECK_READABLE(read, qint64(-1)); - CHECK_MAXLEN(read, qint64(-1)); #if defined QIODEVICE_DEBUG printf("%p QIODevice::read(%p, %d), d->pos = %d, d->buffer.size() = %d\n", this, data, int(maxSize), int(d->pos), int(d->buffer.size())); #endif - const bool sequential = d->isSequential(); // Short circuit for getChar() if (maxSize == 1) { int chint; while ((chint = d->buffer.getChar()) != -1) { - if (!sequential) - ++d->pos; + ++(*d->pPos); char c = char(uchar(chint)); if (c == '\r' && (d->openMode & Text)) @@ -773,61 +779,77 @@ qint64 QIODevice::read(char *data, qint64 maxSize) } } + CHECK_MAXLEN(read, qint64(-1)); qint64 readSoFar = 0; bool moreToRead = true; do { - int lastReadChunkSize = 0; - // Try reading from the buffer. - if (!d->buffer.isEmpty()) { - lastReadChunkSize = d->buffer.read(data + readSoFar, maxSize - readSoFar); - readSoFar += lastReadChunkSize; - if (!sequential) - d->pos += lastReadChunkSize; + int lastReadChunkSize = d->buffer.read(data, maxSize); + *d->pPos += lastReadChunkSize; + readSoFar += lastReadChunkSize; + // fast exit when satisfied by buffer + if (lastReadChunkSize == maxSize && !(d->openMode & Text)) + return readSoFar; + + if (lastReadChunkSize > 0) { + data += lastReadChunkSize; + maxSize -= lastReadChunkSize; #if defined QIODEVICE_DEBUG printf("%p \treading %d bytes from buffer into position %d\n", this, lastReadChunkSize, int(readSoFar) - lastReadChunkSize); #endif - } else if ((d->openMode & Unbuffered) == 0 && maxSize < QIODEVICE_BUFFERSIZE) { - // In buffered mode, we try to fill up the QIODevice buffer before - // we do anything else. - int bytesToBuffer = qMax(maxSize - readSoFar, QIODEVICE_BUFFERSIZE); - char *writePointer = d->buffer.reserve(bytesToBuffer); - - // Make sure the device is positioned correctly. - if (d->pos != d->devicePos && !sequential && !seek(d->pos)) - return qint64(-1); - qint64 readFromDevice = readData(writePointer, bytesToBuffer); - d->buffer.chop(bytesToBuffer - (readFromDevice < 0 ? 0 : int(readFromDevice))); + } else { + if (d->firstRead) { + // this is the first time the file has been read, check it's valid and set up pos pointers + // for fast pos updates. + CHECK_READABLE(read, qint64(-1)); + d->firstRead = false; + if (d->isSequential()) { + d->pPos = &d->seqDumpPos; + d->pDevicePos = &d->seqDumpPos; + } + } - if (readFromDevice > 0) { - if (!sequential) - d->devicePos += readFromDevice; + if ((d->openMode & Unbuffered) == 0 && maxSize < QIODEVICE_BUFFERSIZE) { + // In buffered mode, we try to fill up the QIODevice buffer before + // we do anything else. + // buffer is empty at this point, try to fill it + int bytesToBuffer = QIODEVICE_BUFFERSIZE; + char *writePointer = d->buffer.reserve(bytesToBuffer); + + // Make sure the device is positioned correctly. + if (d->pos != d->devicePos && !d->isSequential() && !seek(d->pos)) + return readSoFar ? readSoFar : qint64(-1); + qint64 readFromDevice = readData(writePointer, bytesToBuffer); + d->buffer.chop(bytesToBuffer - (readFromDevice < 0 ? 0 : int(readFromDevice))); + + if (readFromDevice > 0) { + *d->pDevicePos += readFromDevice; #if defined QIODEVICE_DEBUG - printf("%p \treading %d from device into buffer\n", this, int(readFromDevice)); + printf("%p \treading %d from device into buffer\n", this, int(readFromDevice)); #endif - if (readFromDevice < bytesToBuffer) - d->buffer.truncate(int(readFromDevice)); - if (!d->buffer.isEmpty()) { - lastReadChunkSize = d->buffer.read(data + readSoFar, maxSize - readSoFar); - readSoFar += lastReadChunkSize; - if (!sequential) - d->pos += lastReadChunkSize; + if (!d->buffer.isEmpty()) { + lastReadChunkSize = d->buffer.read(data, maxSize); + readSoFar += lastReadChunkSize; + data += lastReadChunkSize; + maxSize -= lastReadChunkSize; + *d->pPos += lastReadChunkSize; #if defined QIODEVICE_DEBUG - printf("%p \treading %d bytes from buffer at position %d\n", this, - lastReadChunkSize, int(readSoFar)); + printf("%p \treading %d bytes from buffer at position %d\n", this, + lastReadChunkSize, int(readSoFar)); #endif + } } } } // If we need more, try reading from the device. - if (readSoFar < maxSize) { + if (maxSize > 0) { // Make sure the device is positioned correctly. - if (d->pos != d->devicePos && !sequential && !seek(d->pos)) - return qint64(-1); - qint64 readFromDevice = readData(data + readSoFar, maxSize - readSoFar); + if (d->pos != d->devicePos && !d->isSequential() && !seek(d->pos)) + return readSoFar ? readSoFar : qint64(-1); + qint64 readFromDevice = readData(data, maxSize); #if defined QIODEVICE_DEBUG printf("%p \treading %d bytes from device (total %d)\n", this, int(readFromDevice), int(readSoFar)); #endif @@ -835,27 +857,21 @@ qint64 QIODevice::read(char *data, qint64 maxSize) // error and we haven't read anything: return immediately return -1; } - if (readFromDevice <= 0) { - moreToRead = false; - } else { - // see if we read as much data as we asked for - if (readFromDevice < maxSize - readSoFar) - moreToRead = false; - + if (readFromDevice > 0) { lastReadChunkSize += int(readFromDevice); readSoFar += readFromDevice; - if (!sequential) { - d->pos += readFromDevice; - d->devicePos += readFromDevice; - } + data += readFromDevice; + maxSize -= readFromDevice; + *d->pPos += readFromDevice; + *d->pDevicePos += readFromDevice; } - } else { - moreToRead = false; } + // Best attempt has been made to read data, don't try again except for text mode adjustment below + moreToRead = false; if (readSoFar && d->openMode & Text) { - char *readPtr = data + readSoFar - lastReadChunkSize; - const char *endPtr = data + readSoFar; + char *readPtr = data - lastReadChunkSize; + const char *endPtr = data; if (readPtr < endPtr) { // optimization to avoid initial self-assignment @@ -870,8 +886,11 @@ qint64 QIODevice::read(char *data, qint64 maxSize) char ch = *readPtr++; if (ch != '\r') *writePtr++ = ch; - else + else { --readSoFar; + --data; + ++maxSize; + } } // Make sure we get more data if there is room for more. This @@ -885,11 +904,15 @@ qint64 QIODevice::read(char *data, qint64 maxSize) #if defined QIODEVICE_DEBUG printf("%p \treturning %d, d->pos == %d, d->buffer.size() == %d\n", this, int(readSoFar), int(d->pos), d->buffer.size()); - debugBinaryString(data, readSoFar); + debugBinaryString(data - readSoFar, readSoFar); #endif return readSoFar; } +#ifdef Q_CC_RVCT +#pragma pop +#endif + /*! \overload @@ -997,6 +1020,12 @@ QByteArray QIODevice::readAll() return result; } +#ifdef Q_CC_RVCT +// arm mode makes the 64-bit integer operations much faster in RVCT 2.2 +#pragma push +#pragma arm +#endif + /*! This function reads a line of ASCII characters from the device, up to a maximum of \a maxSize - 1 bytes, stores the characters in \a @@ -1229,6 +1258,10 @@ qint64 QIODevice::readLineData(char *data, qint64 maxSize) return readSoFar; } +#ifdef Q_CC_RVCT +#pragma pop +#endif + /*! Returns true if a complete line of data can be read from the device; otherwise returns false. @@ -1416,9 +1449,7 @@ bool QIODevicePrivate::putCharHelper(char c) */ bool QIODevice::getChar(char *c) { - Q_D(QIODevice); - CHECK_READABLE(getChar, false); - + // readability checked in read() char ch; return (1 == read(c ? c : &ch, 1)); } diff --git a/src/corelib/io/qiodevice_p.h b/src/corelib/io/qiodevice_p.h index cc4a237..94dadca 100644 --- a/src/corelib/io/qiodevice_p.h +++ b/src/corelib/io/qiodevice_p.h @@ -64,6 +64,126 @@ QT_BEGIN_NAMESPACE +#ifndef QIODEVICE_BUFFERSIZE +#define QIODEVICE_BUFFERSIZE Q_INT64_C(16384) +#endif + +// This is QIODevice's read buffer, optimised for read(), isEmpty() and getChar() +class QIODevicePrivateLinearBuffer +{ +public: + QIODevicePrivateLinearBuffer(int) : len(0), first(0), buf(0), capacity(0) { + } + ~QIODevicePrivateLinearBuffer() { + delete [] buf; + } + void clear() { + first = buf; + len = 0; + } + int size() const { + return len; + } + bool isEmpty() const { + return len == 0; + } + void skip(int n) { + if (n >= len) { + clear(); + } else { + len -= n; + first += n; + } + } + int getChar() { + if (len == 0) + return -1; + int ch = uchar(*first); + len--; + first++; + return ch; + } + int read(char* target, int size) { + int r = qMin(size, len); + memcpy(target, first, r); + len -= r; + first += r; + return r; + } + char* reserve(int size) { + makeSpace(size + len, freeSpaceAtEnd); + char* writePtr = first + len; + len += size; + return writePtr; + } + void chop(int size) { + if (size >= len) { + clear(); + } else { + len -= size; + } + } + QByteArray readAll() { + char* f = first; + int l = len; + clear(); + return QByteArray(f, l); + } + int readLine(char* target, int size) { + int r = qMin(size, len); + char* eol = static_cast(memchr(first, '\n', r)); + if (eol) + r = 1+(eol-first); + memcpy(target, first, r); + len -= r; + first += r; + return int(r); + } + bool canReadLine() const { + return memchr(first, '\n', len); + } + void ungetChar(char c) { + if (first == buf) { + // underflow, the existing valid data needs to move to the end of the (potentially bigger) buffer + makeSpace(len+1, freeSpaceAtStart); + } + first--; + len++; + *first = c; + } + +private: + enum FreeSpacePos {freeSpaceAtStart, freeSpaceAtEnd}; + void makeSpace(size_t required, FreeSpacePos where) { + size_t newCapacity = qMax(capacity, size_t(QIODEVICE_BUFFERSIZE)); + while (newCapacity < required) + newCapacity *= 2; + int moveOffset = (where == freeSpaceAtEnd) ? 0 : newCapacity - len; + if (newCapacity > capacity) { + // allocate more space + char* newBuf = new char[newCapacity]; + memmove(newBuf + moveOffset, first, len); + delete [] buf; + buf = newBuf; + capacity = newCapacity; + } else { + // shift any existing data to make space + memmove(buf + moveOffset, first, len); + } + first = buf + moveOffset; + } + +private: + // length of the unread data + int len; + // start of the unread data + char* first; + // the allocated buffer + char* buf; + // allocated buffer size + size_t capacity; +}; + class Q_CORE_EXPORT QIODevicePrivate #ifndef QT_NO_QOBJECT : public QObjectPrivate @@ -78,10 +198,15 @@ public: QIODevice::OpenMode openMode; QString errorString; - QRingBuffer buffer; + QIODevicePrivateLinearBuffer buffer; qint64 pos; qint64 devicePos; + // these three are for fast position updates during read, avoiding isSequential test + qint64 seqDumpPos; + qint64 *pPos; + qint64 *pDevicePos; bool baseReadLineDataCalled; + bool firstRead; virtual bool putCharHelper(char c); -- cgit v0.12 From 96bd304a62f88dc097d5ac4f16d60fd8751227fd Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Wed, 24 Mar 2010 13:52:57 +0100 Subject: Stabilize QGraphicsEffect test on X11 --- tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp index 02899ae..49b840f 100644 --- a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp +++ b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp @@ -512,6 +512,7 @@ void tst_QGraphicsEffect::drawPixmapItem() QGraphicsView view(&scene); view.show(); QTest::qWaitForWindowShown(&view); + QTRY_VERIFY(effect->repaints >= 1); item->rotate(180); QTest::qWait(50); @@ -642,7 +643,7 @@ void tst_QGraphicsEffect::childrenVisibilityShouldInvalidateCache() view.show(); QApplication::setActiveWindow(&view); QTest::qWaitForWindowShown(&view); - QCOMPARE(parent.nbPaint, 1); + QTRY_COMPARE(parent.nbPaint, 1); //we set an effect on the parent parent.setGraphicsEffect(new QGraphicsDropShadowEffect(&parent)); //flush the events -- cgit v0.12 From 4fa9387f6cbba798fcd262f970d87a01e66267f5 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Wed, 24 Mar 2010 14:00:39 +0000 Subject: Fix error reporting when symbian file copy fails. When a file copy failed on symbian, the file engine error was not set. Now translates the symbian os error code to set the file engine error. Reviewed-by: Marius Storm-Olsen --- src/corelib/io/qfsfileengine_p.h | 4 ++++ src/corelib/io/qfsfileengine_unix.cpp | 40 +++++++++++++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/corelib/io/qfsfileengine_p.h b/src/corelib/io/qfsfileengine_p.h index 0f63eb8..e50777b 100644 --- a/src/corelib/io/qfsfileengine_p.h +++ b/src/corelib/io/qfsfileengine_p.h @@ -151,6 +151,10 @@ public: static bool uncListSharesOnServer(const QString &server, QStringList *list); #endif +#ifdef Q_OS_SYMBIAN + void setSymbianError(int symbianError, QFile::FileError defaultError, QString defaultString); +#endif + protected: QFSFileEnginePrivate(); diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp index 1331f54..33e00f6 100644 --- a/src/corelib/io/qfsfileengine_unix.cpp +++ b/src/corelib/io/qfsfileengine_unix.cpp @@ -81,6 +81,40 @@ static bool isRelativePathSymbian(const QString& fileName) && ((fileName.at(0).isLetter() && fileName.at(1) == QLatin1Char(':')) || (fileName.at(0) == QLatin1Char('/') && fileName.at(1) == QLatin1Char('/'))))); } + +/*! + \internal + convert symbian error code to the one suitable for setError. + example usage: setSymbianError(err, QFile::CopyError, QLatin1String("copy error")) +*/ +void QFSFileEnginePrivate::setSymbianError(int symbianError, QFile::FileError defaultError, QString defaultString) +{ + Q_Q(QFSFileEngine); + switch (symbianError) { + case KErrNone: + q->setError(QFile::NoError, QLatin1String("")); + break; + case KErrAccessDenied: + q->setError(QFile::PermissionsError, QLatin1String("access denied")); + break; + case KErrPermissionDenied: + q->setError(QFile::PermissionsError, QLatin1String("permission denied")); + break; + case KErrAbort: + q->setError(QFile::AbortError, QLatin1String("aborted")); + break; + case KErrCancel: + q->setError(QFile::AbortError, QLatin1String("cancelled")); + break; + case KErrTimedOut: + q->setError(QFile::TimeOutError, QLatin1String("timed out")); + break; + default: + q->setError(defaultError, defaultString); + break; + } +} + #endif /*! @@ -427,8 +461,10 @@ bool QFSFileEngine::copy(const QString &newName) } ) // End TRAP delete fm; - // ### Add error reporting on failure - return (err == KErrNone); + if (err == KErrNone) + return true; + d->setSymbianError(err, QFile::CopyError, QLatin1String("copy error")); + return false; #else Q_UNUSED(newName); // ### Add copy code for Unix here -- cgit v0.12 From 7140a55d883492564ba704a010aff547f5d7a89c Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Thu, 25 Mar 2010 14:00:35 +1000 Subject: Begin dragging PathView up to the level (quality and functionality) of other views. Task-number: QT-319 --- .../graphicsitems/qdeclarativepathview.cpp | 641 +++++++++++---------- .../graphicsitems/qdeclarativepathview_p.h | 25 +- .../graphicsitems/qdeclarativepathview_p_p.h | 25 +- .../qdeclarativepathview/data/pathview0.qml | 5 + .../qdeclarativepathview/data/pathview3.qml | 2 +- .../tst_qdeclarativepathview.cpp | 22 +- 6 files changed, 411 insertions(+), 309 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp index b9c8971..f3d6137 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview.cpp +++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp @@ -138,6 +138,103 @@ void QDeclarativePathViewPrivate::clear() items.clear(); } +void QDeclarativePathViewPrivate::updateMappedRange() +{ + if (model && pathItems != -1 && pathItems < model->count()) + mappedRange = qreal(pathItems)/model->count(); + else + mappedRange = 1.0; +} + +qreal QDeclarativePathViewPrivate::positionOfIndex(int index) const +{ + qreal pos = -1.0; + + if (model && index >= 0 && index < model->count()) { + qreal globalPos = qreal(index) + offset; + globalPos = qmlMod(globalPos, qreal(model->count())) / model->count(); + if (pathItems != -1 && pathItems < model->count()) { + globalPos += snapPos * mappedRange; + globalPos = qmlMod(globalPos, 1.0); + if (globalPos < mappedRange) + pos = globalPos / mappedRange; + } else { + pos = qmlMod(globalPos + snapPos, 1.0); + } + } + + return pos; +} + +void QDeclarativePathViewPrivate::createHighlight() +{ + Q_Q(QDeclarativePathView); + bool changed = false; + if (highlightItem) { + delete highlightItem; + highlightItem = 0; + changed = true; + } + + QDeclarativeItem *item = 0; + if (highlightComponent) { + QDeclarativeContext *highlightContext = new QDeclarativeContext(qmlContext(q)); + QObject *nobj = highlightComponent->create(highlightContext); + if (nobj) { + highlightContext->setParent(nobj); + item = qobject_cast(nobj); + if (!item) + delete nobj; + } else { + delete highlightContext; + } + } else { + item = new QDeclarativeItem; + } + if (item) { + item->setParent(q); + highlightItem = item; + changed = true; + } + if (changed) + emit q->highlightItemChanged(); +} + +void QDeclarativePathViewPrivate::updateHighlight() +{ + Q_Q(QDeclarativePathView); + if (!q->isComponentComplete()) + return; + if (highlightItem) + updateItem(highlightItem, snapPos); +} + +void QDeclarativePathViewPrivate::updateItem(QDeclarativeItem *item, qreal percent) +{ + if (QDeclarativePathViewAttached *att = attached(item)) { + foreach(const QString &attr, path->attributes()) + att->setValue(attr.toUtf8(), path->attributeAt(attr, percent)); + } + QPointF pf = path->pointAt(percent); + item->setX(pf.x() - item->width()*item->scale()/2); + item->setY(pf.y() - item->height()*item->scale()/2); +} + +void QDeclarativePathViewPrivate::regenerate() +{ + Q_Q(QDeclarativePathView); + if (!q->isComponentComplete()) + return; + + clear(); + + if (!isValid()) + return; + + firstIndex = -1; + updateMappedRange(); + q->refill(); +} /*! \qmlclass PathView QDeclarativePathView @@ -232,6 +329,7 @@ void QDeclarativePathView::setModel(const QVariant &model) if (d->model) { disconnect(d->model, SIGNAL(itemsInserted(int,int)), this, SLOT(itemsInserted(int,int))); disconnect(d->model, SIGNAL(itemsRemoved(int,int)), this, SLOT(itemsRemoved(int,int))); + disconnect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int))); disconnect(d->model, SIGNAL(modelReset()), this, SLOT(modelReset())); disconnect(d->model, SIGNAL(createdItem(int, QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*))); for (int i=0; iitems.count(); i++){ @@ -261,13 +359,16 @@ void QDeclarativePathView::setModel(const QVariant &model) if (d->model) { connect(d->model, SIGNAL(itemsInserted(int,int)), this, SLOT(itemsInserted(int,int))); connect(d->model, SIGNAL(itemsRemoved(int,int)), this, SLOT(itemsRemoved(int,int))); + connect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int))); connect(d->model, SIGNAL(modelReset()), this, SLOT(modelReset())); connect(d->model, SIGNAL(createdItem(int, QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*))); } - d->firstIndex = 0; - d->pathOffset = 0; + d->offset = qmlMod(d->offset, qreal(d->model->count())); + if (d->offset < 0) + d->offset = d->model->count() + d->offset; d->regenerate(); d->fixOffset(); + emit countChanged(); emit modelChanged(); } @@ -330,7 +431,7 @@ void QDeclarativePathView::setCurrentIndex(int idx) if (d->model->count()) { int itemIndex = (d->currentIndex - d->firstIndex + d->model->count()) % d->model->count(); if (itemIndex < d->items.count()) { - if (QDeclarativeItem *item = d->items.at(d->currentIndex)) { + if (QDeclarativeItem *item = d->items.at(itemIndex)) { if (QDeclarativePathViewAttached *att = d->attached(item)) att->setIsCurrentItem(false); } @@ -354,12 +455,13 @@ void QDeclarativePathView::setCurrentIndex(int idx) /*! \qmlproperty real PathView::offset - The offset specifies how far along the path (0.0-1.0) the items are from their initial positions. + The offset specifies how far along the path the items are from their initial positions. + This is a real number that ranges from 0.0 to the count of items in the model. */ qreal QDeclarativePathView::offset() const { Q_D(const QDeclarativePathView); - return d->_offset; + return d->offset; } void QDeclarativePathView::setOffset(qreal offset) @@ -372,18 +474,25 @@ void QDeclarativePathView::setOffset(qreal offset) void QDeclarativePathViewPrivate::setOffset(qreal o) { Q_Q(QDeclarativePathView); - if (_offset != o) { - _offset = qmlMod(o, qreal(1.0)); - if (_offset < 0) - _offset = 1.0 + _offset; - q->refill(); + if (offset != o) { + if (isValid() && q->isComponentComplete()) { + offset = qmlMod(o, qreal(model->count())); + if (offset < 0) + offset = model->count() + offset; + q->refill(); + } else { + offset = o; + } + emit q->offsetChanged(); } } /*! \qmlproperty real PathView::snapPosition - This property determines the position (0.0-1.0) the nearest item will snap to. + This property determines the position on the path (0.0-1.0) the nearest item will snap to. + The item nearest this position will set currentIndex, for example when offset is 0.0 the + first item will be placed at this position and currentIndex will be 0. */ qreal QDeclarativePathView::snapPosition() const { @@ -398,10 +507,34 @@ void QDeclarativePathView::setSnapPosition(qreal pos) if (qFuzzyCompare(normalizedPos, d->snapPos)) return; d->snapPos = normalizedPos; + d->updateHighlight(); d->fixOffset(); emit snapPositionChanged(); } +QDeclarativeComponent *QDeclarativePathView::highlight() const +{ + Q_D(const QDeclarativePathView); + return d->highlightComponent; +} + +void QDeclarativePathView::setHighlight(QDeclarativeComponent *highlight) +{ + Q_D(QDeclarativePathView); + if (highlight != d->highlightComponent) { + d->highlightComponent = highlight; + d->createHighlight(); + d->updateHighlight(); + emit highlightChanged(); + } +} + +QDeclarativeItem *QDeclarativePathView::highlightItem() +{ + Q_D(const QDeclarativePathView); + return d->highlightItem; +} + /*! \qmlproperty real PathView::dragMargin This property holds the maximum distance from the path that initiate mouse dragging. @@ -426,6 +559,52 @@ void QDeclarativePathView::setDragMargin(qreal dragMargin) } /*! + \qmlproperty real PathView::flickDeceleration + This property holds the rate at which a flick will decelerate. + + The default is 100. +*/ +qreal QDeclarativePathView::flickDeceleration() const +{ + Q_D(const QDeclarativePathView); + return d->deceleration; +} + +void QDeclarativePathView::setFlickDeceleration(qreal dec) +{ + Q_D(QDeclarativePathView); + if (d->deceleration == dec) + return; + d->deceleration = dec; + emit flickDecelerationChanged(); +} + +/*! + \qmlproperty bool PathView::interactive + + A user cannot drag or flick a PathView that is not interactive. + + This property is useful for temporarily disabling flicking. This allows + special interaction with PathView's children. +*/ +bool QDeclarativePathView::isInteractive() const +{ + Q_D(const QDeclarativePathView); + return d->interactive; +} + +void QDeclarativePathView::setInteractive(bool interactive) +{ + Q_D(QDeclarativePathView); + if (interactive != d->interactive) { + d->interactive = interactive; + if (!interactive) + d->tl.clear(); + emit interactiveChanged(); + } +} + +/*! \qmlproperty component PathView::delegate The delegate provides a template defining each item instantiated by the view. @@ -467,7 +646,7 @@ void QDeclarativePathView::setDelegate(QDeclarativeComponent *delegate) /*! \qmlproperty int PathView::pathItemCount - This property holds the number of items visible on the path at any one time + This property holds the number of items visible on the path at any one time. */ int QDeclarativePathView::pathItemCount() const { @@ -480,9 +659,13 @@ void QDeclarativePathView::setPathItemCount(int i) Q_D(QDeclarativePathView); if (i == d->pathItems) return; + if (i < 1) + i = 1; d->pathItems = i; - d->regenerate(); - pathItemCountChanged(); + if (d->isValid() && isComponentComplete()) { + d->regenerate(); + } + emit pathItemCountChanged(); } QPointF QDeclarativePathViewPrivate::pointNear(const QPointF &point, qreal *nearPercent) const @@ -512,7 +695,7 @@ QPointF QDeclarativePathViewPrivate::pointNear(const QPointF &point, qreal *near void QDeclarativePathView::mousePressEvent(QGraphicsSceneMouseEvent *event) { Q_D(QDeclarativePathView); - if (!d->items.count()) + if (!d->interactive || !d->items.count()) return; QPointF scenePoint = mapToScene(event->pos()); int idx = 0; @@ -542,7 +725,7 @@ void QDeclarativePathView::mousePressEvent(QGraphicsSceneMouseEvent *event) void QDeclarativePathView::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { Q_D(QDeclarativePathView); - if (d->lastPosTime.isNull()) + if (!d->interactive || d->lastPosTime.isNull()) return; if (!d->stealMouse) { @@ -555,14 +738,14 @@ void QDeclarativePathView::mouseMoveEvent(QGraphicsSceneMouseEvent *event) d->moveReason = QDeclarativePathViewPrivate::Mouse; qreal newPc; d->pointNear(event->pos(), &newPc); - qreal diff = newPc - d->startPc; + qreal diff = (newPc - d->startPc)*d->model->count()*d->mappedRange; if (diff) { - setOffset(d->_offset + diff); + setOffset(d->offset + diff); - if (diff > 0.5) - diff -= 1.0; - else if (diff < -0.5) - diff += 1.0; + if (diff > d->model->count()/2) + diff -= d->model->count(); + else if (diff < -d->model->count()/2) + diff += d->model->count(); d->lastElapsed = QDeclarativeItemPrivate::restart(d->lastPosTime); d->lastDist = diff; @@ -574,27 +757,37 @@ void QDeclarativePathView::mouseMoveEvent(QGraphicsSceneMouseEvent *event) void QDeclarativePathView::mouseReleaseEvent(QGraphicsSceneMouseEvent *) { Q_D(QDeclarativePathView); - if (d->lastPosTime.isNull()) + d->stealMouse = false; + setKeepMouseGrab(false); + if (!d->interactive || d->lastPosTime.isNull()) return; qreal elapsed = qreal(d->lastElapsed + QDeclarativeItemPrivate::elapsed(d->lastPosTime)) / 1000.; qreal velocity = elapsed > 0. ? d->lastDist / elapsed : 0; - if (d->model && d->model->count() && qAbs(velocity) > 0.05) { - if (velocity > 1.5) - velocity = 1.5; - else if (velocity < -1.5) - velocity = -1.5; - qreal inc = qmlMod(d->_offset - d->snapPos, qreal(1.0 / d->model->count())); - qreal dist = qAbs(velocity/2 - qmlMod(velocity/2, qreal(1.0 / d->model->count()) - inc)); - d->moveOffset.setValue(d->_offset); - d->tl.accel(d->moveOffset, velocity, 0.1, dist); + if (d->model && d->model->count() && qAbs(velocity) > 1.) { + qreal count = d->pathItems == -1 ? d->model->count() : d->pathItems; + if (qAbs(velocity) > count * 2) // limit velocity + velocity = (velocity > 0 ? count : -count) * 2; + // Calculate the distance to be travelled + qreal v2 = velocity*velocity; + qreal accel = d->deceleration; + // + 0.25 to encourage moving at least one item in the flick direction + qreal dist = qMin(qreal(d->model->count()-1), d->model->count() * v2 / (accel * 2.0) + 0.25); + // round to nearest item. + if (velocity > 0.) + dist = qRound(dist + d->offset) - d->offset; + else + dist = qRound(dist - d->offset) + d->offset; + // Calculate accel required to stop on item boundary + accel = v2 / (2.0f * qAbs(dist)); + d->moveOffset.setValue(d->offset); + d->tl.accel(d->moveOffset, velocity, accel, dist); d->tl.callback(QDeclarativeTimeLineCallback(&d->moveOffset, d->fixOffsetCallback, d)); } else { d->fixOffset(); } d->lastPosTime = QTime(); - d->stealMouse = false; ungrabMouse(); } @@ -644,7 +837,8 @@ bool QDeclarativePathView::sendMouseEvent(QGraphicsSceneMouseEvent *event) bool QDeclarativePathView::sceneEventFilter(QGraphicsItem *i, QEvent *e) { - if (!isVisible()) + Q_D(QDeclarativePathView); + if (!isVisible() || !d->interactive) return QDeclarativeItem::sceneEventFilter(i, e); switch (e->type()) { @@ -669,72 +863,7 @@ void QDeclarativePathView::componentComplete() Q_D(QDeclarativePathView); QDeclarativeItem::componentComplete(); d->regenerate(); - - // move to correct offset - if (d->items.count()) { - int itemIndex = (d->currentIndex - d->firstIndex + d->model->count()) % d->model->count(); - - itemIndex += d->pathOffset; - itemIndex %= d->items.count(); - qreal targetOffset = qmlMod(1.0 + d->snapPos - qreal(itemIndex) / d->items.count(), qreal(1.0)); - - if (targetOffset < 0) - targetOffset = 1.0 + targetOffset; - if (targetOffset != d->_offset) { - d->moveOffset.setValue(targetOffset); - } - } -} - -void QDeclarativePathViewPrivate::regenerate() -{ - Q_Q(QDeclarativePathView); - if (!q->isComponentComplete()) - return; - - clear(); - - if (!isValid()) - return; - - if (firstIndex >= model->count()) - firstIndex = model->count()-1; - if (pathOffset >= model->count()) - pathOffset = model->count()-1; - - int numItems = pathItems >= 0 ? pathItems : model->count(); - for (int i=0; i < numItems && i < model->count(); ++i){ - int index = (i + firstIndex) % model->count(); - QDeclarativeItem *item = getItem(index); - if (!item) { - qWarning() << "PathView: Cannot create item, index" << (i + firstIndex) % model->count(); - return; - } - items.append(item); - item->setZValue(i); - qreal percent = qreal(i) / numItems + _offset; - percent = qAbs(qmlMod(percent, qreal(1.0))); - updateItem(item, percent); - model->completeItem(); - if (currentIndex == index) { - item->setFocus(true); - if (QDeclarativePathViewAttached *att = attached(item)) - att->setIsCurrentItem(true); - } - } - if (pathItems != -1) - q->refill(); -} - -void QDeclarativePathViewPrivate::updateItem(QDeclarativeItem *item, qreal percent) -{ - if (QDeclarativePathViewAttached *att = attached(item)) { - foreach(const QString &attr, path->attributes()) - att->setValue(attr.toUtf8(), path->attributeAt(attr, percent)); - } - QPointF pf = path->pointAt(percent); - item->setX(pf.x() - item->width()*item->scale()/2); - item->setY(pf.y() - item->height()*item->scale()/2); + d->updateHighlight(); } void QDeclarativePathView::refill() @@ -743,81 +872,85 @@ void QDeclarativePathView::refill() if (!d->isValid() || !isComponentComplete()) return; - QList positions; - for (int i=0; iitems.count(); i++){ - qreal percent = qreal(i) / d->items.count(); - percent = percent + d->_offset; - percent = qmlMod(percent, qreal(1.0)); - positions << qAbs(percent); - } - - if (d->pathItems==-1) { - for (int i=0; iupdateItem(d->items.at(i), positions[i]); - return; +// qDebug() << "offset" << d->_offset; + + // first move existing items and remove items off path + int idx = d->firstIndex; + QList::iterator it = d->items.begin(); + while (it != d->items.end()) { + qreal pos = d->positionOfIndex(idx); + QDeclarativeItem *item = *it; + if (pos >= 0.0) { + d->updateItem(item, pos); + ++it; + } else { +// qDebug() << "release"; + d->updateItem(item, 1.0); + d->releaseItem(item); + if (it == d->items.begin()) { + if (++d->firstIndex >= d->model->count()) + d->firstIndex = 0; + } + it = d->items.erase(it); + } + ++idx; + if (idx >= d->model->count()) + idx = 0; } - QList rotatedPositions; - for (int i=0; iitems.count(); i++) - rotatedPositions << positions[(i + d->pathOffset + d->items.count()) % d->items.count()]; - - int wrapIndex= -1; - for (int i=0; iitems.count()-1; i++) { - if (rotatedPositions[i] > rotatedPositions[i+1]){ - wrapIndex = i; - break; + // add items to beginning and end + int count = d->pathItems == -1 ? d->model->count() : qMin(d->pathItems, d->model->count()); + if (d->items.count() < count) { + int idx = qRound(d->model->count() - d->offset) % d->model->count(); + qreal startPos = d->snapPos; + if (d->firstIndex >= 0) { + startPos = d->positionOfIndex(d->firstIndex); + idx = (d->firstIndex + d->items.count()) % d->model->count(); } - } - if (wrapIndex != -1 ){ - //A wraparound has occured - if (wrapIndex < d->items.count()/2){ - while(wrapIndex-- >= 0){ - QDeclarativeItem* p = d->items.takeFirst(); - d->updateItem(p, 0.0); - d->releaseItem(p); - d->firstIndex++; - d->firstIndex %= d->model->count(); - int index = (d->firstIndex + d->items.count())%d->model->count(); - QDeclarativeItem *item = d->getItem(index); - item->setZValue(wrapIndex); - d->model->completeItem(); - if (d->currentIndex == index) { - item->setFocus(true); - if (QDeclarativePathViewAttached *att = d->attached(item)) - att->setIsCurrentItem(true); - } - d->items << item; - d->pathOffset++; - d->pathOffset=d->pathOffset % d->items.count(); + qreal pos = d->positionOfIndex(idx); + while ((pos > startPos || !d->items.count()) && d->items.count() < count) { +// qDebug() << "append" << idx; + QDeclarativeItem *item = d->getItem(idx); + item->setZValue(idx+1); + d->model->completeItem(); + if (d->currentIndex == idx) { + item->setFocus(true); + if (QDeclarativePathViewAttached *att = d->attached(item)) + att->setIsCurrentItem(true); } - } else { - while(wrapIndex++ < d->items.count()-1){ - QDeclarativeItem* p = d->items.takeLast(); - d->updateItem(p, 1.0); - d->releaseItem(p); - d->firstIndex--; - if (d->firstIndex < 0) - d->firstIndex = d->model->count() - 1; - QDeclarativeItem *item = d->getItem(d->firstIndex); - item->setZValue(d->firstIndex); - d->model->completeItem(); - if (d->currentIndex == d->firstIndex) { - item->setFocus(true); - if (QDeclarativePathViewAttached *att = d->attached(item)) - att->setIsCurrentItem(true); - } - d->items.prepend(item); - d->pathOffset--; - if (d->pathOffset < 0) - d->pathOffset = d->items.count() - 1; + if (d->items.count() == 0) + d->firstIndex = idx; + d->items.append(item); + d->updateItem(item, pos); + ++idx; + if (idx >= d->model->count()) + idx = 0; + pos = d->positionOfIndex(idx); + } + + idx = d->firstIndex - 1; + if (idx < 0) + idx = d->model->count() - 1; + pos = d->positionOfIndex(idx); + while (pos >= 0.0 && pos < startPos) { +// qDebug() << "prepend" << idx; + QDeclarativeItem *item = d->getItem(idx); + item->setZValue(idx+1); + d->model->completeItem(); + if (d->currentIndex == idx) { + item->setFocus(true); + if (QDeclarativePathViewAttached *att = d->attached(item)) + att->setIsCurrentItem(true); } + d->items.prepend(item); + d->updateItem(item, pos); + d->firstIndex = idx; + idx = d->firstIndex - 1; + if (idx < 0) + idx = d->model->count() - 1; + pos = d->positionOfIndex(idx); } - for (int i=0; iitems.count(); i++) - rotatedPositions[i] = positions[(i + d->pathOffset + d->items.count()) - % d->items.count()]; } - for (int i=0; iitems.count(); i++) - d->updateItem(d->items.at(i), rotatedPositions[i]); } void QDeclarativePathView::itemsInserted(int modelIndex, int count) @@ -826,29 +959,14 @@ void QDeclarativePathView::itemsInserted(int modelIndex, int count) Q_D(QDeclarativePathView); if (!d->isValid() || !isComponentComplete()) return; - if (d->pathItems == -1) { - for (int i = 0; i < count; ++i) { - QDeclarativeItem *item = d->getItem(modelIndex + i); - item->setZValue(modelIndex + i); - d->model->completeItem(); - d->items.insert(modelIndex + i, item); - } - refill(); - } else { - //XXX This is pretty heavy handed until we reference count items. - d->regenerate(); - } - // make sure the current item is still at the snap position - int itemIndex = (d->currentIndex - d->firstIndex + d->model->count())%d->model->count(); - itemIndex += d->pathOffset; - itemIndex %= d->items.count(); - qreal targetOffset = qmlMod(1.0 + d->snapPos - qreal(itemIndex) / d->items.count(), qreal(1.0)); - - if (targetOffset < 0) - targetOffset = 1.0 + targetOffset; - if (targetOffset != d->_offset) - d->moveOffset.setValue(targetOffset); + QList removedItems = d->items; + d->items.clear(); + d->regenerate(); + while (removedItems.count()) + d->releaseItem(removedItems.takeLast()); + d->updateCurrent(); + emit countChanged(); } void QDeclarativePathView::itemsRemoved(int modelIndex, int count) @@ -857,41 +975,37 @@ void QDeclarativePathView::itemsRemoved(int modelIndex, int count) Q_D(QDeclarativePathView); if (!d->isValid() || !isComponentComplete()) return; - if (d->pathItems == -1) { - for (int i = 0; i < count && d->items.count() > modelIndex; ++i) { - QDeclarativeItem* p = d->items.takeAt(modelIndex); - d->model->release(p); - } - d->snapToCurrent(); - refill(); - } else { - d->regenerate(); - } - if (d->model->count() == 0) { - d->currentIndex = -1; - d->moveOffset.setValue(0); + QList removedItems = d->items; + d->items.clear(); + if (d->offset >= d->model->count()) + d->offset = d->model->count() - 1; + d->regenerate(); + while (removedItems.count()) + d->releaseItem(removedItems.takeLast()); + d->updateCurrent(); + emit countChanged(); +} + +void QDeclarativePathView::itemsMoved(int from, int to, int count) +{ + Q_D(QDeclarativePathView); + if (!d->isValid() || !isComponentComplete()) return; - } - // make sure the current item is still at the snap position - if (d->currentIndex >= d->model->count()) - d->currentIndex = d->model->count() - 1; - int itemIndex = (d->currentIndex - d->firstIndex + d->model->count())%d->model->count(); - itemIndex += d->pathOffset; - itemIndex %= d->items.count(); - qreal targetOffset = qmlMod(1.0 + d->snapPos - qreal(itemIndex) / d->items.count(), qreal(1.0)); - - if (targetOffset < 0) - targetOffset = 1.0 + targetOffset; - if (targetOffset != d->_offset) - d->moveOffset.setValue(targetOffset); + QList removedItems = d->items; + d->items.clear(); + d->regenerate(); + while (removedItems.count()) + d->releaseItem(removedItems.takeLast()); + d->updateCurrent(); } void QDeclarativePathView::modelReset() { Q_D(QDeclarativePathView); d->regenerate(); + emit countChanged(); } void QDeclarativePathView::createdItem(int index, QDeclarativeItem *item) @@ -919,36 +1033,10 @@ int QDeclarativePathViewPrivate::calcCurrentIndex() { int current = -1; if (model && items.count()) { - _offset = qmlMod(_offset, qreal(1.0)); - if (_offset < 0) - _offset += 1.0; - - if (pathItems == -1) { - qreal delta = qmlMod(_offset - snapPos, qreal(1.0)); - if (delta < 0) - delta = 1.0 + delta; - int ii = model->count() - qRound(delta * model->count()); - if (ii < 0) - ii = 0; - current = ii; - } else { - qreal bestDiff=1e9; - int bestI=-1; - for (int i=0; icount()); + offset = qmlMod(offset, model->count()); + if (offset < 0) + offset += model->count(); + current = qRound(qAbs(qmlMod(model->count() - offset, model->count()))); } return current; @@ -1002,57 +1090,26 @@ void QDeclarativePathViewPrivate::snapToCurrent() if (!model || model->count() <= 0) return; - int itemIndex = (currentIndex - firstIndex + model->count()) % model->count(); - - //Rounds is the number of times round to make the current item visible - int rounds = itemIndex / items.count(); - int otherWayRounds = (model->count() - (itemIndex)) / items.count(); - if (otherWayRounds < rounds) - rounds = -otherWayRounds; - - itemIndex += pathOffset; - if(model->count() % items.count() && itemIndex - model->count() + items.count() > 0){ - //When model.count() is not a multiple of pathItemCount we need to manually - //fix the index so that going backwards one step works correctly. - itemIndex = itemIndex - model->count() + items.count(); - } - itemIndex %= items.count(); - qreal targetOffset = qmlMod(1.0 + snapPos - qreal(itemIndex) / items.count(), qreal(1.0)); - - if (targetOffset < 0) - targetOffset = 1.0 + targetOffset; - if (targetOffset == _offset && rounds == 0) - return; + qreal targetOffset = model->count() - currentIndex; moveReason = Other; tl.clear(); - moveOffset.setValue(_offset); - - if (rounds!=0){ - //Compensate if the targetOffset would bring the target in from off the screen - qreal distance = targetOffset - _offset; - if (distance <= -0.5) - rounds--; - if (distance > 0.5) - rounds++; - tl.move(moveOffset, targetOffset -rounds, QEasingCurve(QEasingCurve::InOutQuad), - int(items.count()*qMax((qreal)(2.0/items.count()),(qreal)qAbs(rounds)))); - tl.callback(QDeclarativeTimeLineCallback(&moveOffset, fixOffsetCallback, this)); - return; - } - - if (targetOffset - _offset > 0.5) { - qreal distance = 1 - targetOffset + _offset; - tl.move(moveOffset, 0.0, QEasingCurve(QEasingCurve::OutQuad), int(200 * _offset / distance)); - tl.set(moveOffset, 1.0); - tl.move(moveOffset, targetOffset, QEasingCurve(QEasingCurve::InQuad), int(200 * (1.0-targetOffset) / distance)); - } else if (targetOffset - _offset <= -0.5) { - qreal distance = 1 - _offset + targetOffset; - tl.move(moveOffset, 1.0, QEasingCurve(QEasingCurve::OutQuad), int(200 * (1.0-_offset) / distance)); + moveOffset.setValue(offset); + + const int duration = 300; + + if (targetOffset - offset > model->count()/2) { + qreal distance = model->count() - targetOffset + offset; + tl.move(moveOffset, 0.0, QEasingCurve(QEasingCurve::InQuad), int(duration * offset / distance)); + tl.set(moveOffset, model->count()); + tl.move(moveOffset, targetOffset, QEasingCurve(QEasingCurve::OutQuad), int(duration * (model->count()-targetOffset) / distance)); + } else if (targetOffset - offset <= -model->count()/2) { + qreal distance = model->count() - offset + targetOffset; + tl.move(moveOffset, model->count(), QEasingCurve(QEasingCurve::InQuad), int(duration * (model->count()-offset) / distance)); tl.set(moveOffset, 0.0); - tl.move(moveOffset, targetOffset, QEasingCurve(QEasingCurve::InQuad), int(200 * targetOffset / distance)); + tl.move(moveOffset, targetOffset, QEasingCurve(QEasingCurve::OutQuad), int(duration * targetOffset / distance)); } else { - tl.move(moveOffset, targetOffset, QEasingCurve(QEasingCurve::InOutQuad), 200); + tl.move(moveOffset, targetOffset, QEasingCurve(QEasingCurve::InOutQuad), duration); } } diff --git a/src/declarative/graphicsitems/qdeclarativepathview_p.h b/src/declarative/graphicsitems/qdeclarativepathview_p.h index 6dbd044..07b8f6f 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview_p.h +++ b/src/declarative/graphicsitems/qdeclarativepathview_p.h @@ -62,8 +62,15 @@ class Q_DECLARATIVE_EXPORT QDeclarativePathView : public QDeclarativeItem Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged) Q_PROPERTY(qreal offset READ offset WRITE setOffset NOTIFY offsetChanged) Q_PROPERTY(qreal snapPosition READ snapPosition WRITE setSnapPosition NOTIFY snapPositionChanged) + + Q_PROPERTY(QDeclarativeComponent *highlight READ highlight WRITE setHighlight NOTIFY highlightChanged) + Q_PROPERTY(QDeclarativeItem *highlightItem READ highlightItem NOTIFY highlightItemChanged) + Q_PROPERTY(qreal dragMargin READ dragMargin WRITE setDragMargin NOTIFY dragMarginChanged) - Q_PROPERTY(int count READ count) + Q_PROPERTY(qreal flickDeceleration READ flickDeceleration WRITE setFlickDeceleration NOTIFY flickDecelerationChanged) + Q_PROPERTY(bool interactive READ isInteractive WRITE setInteractive NOTIFY interactiveChanged) + + Q_PROPERTY(int count READ count NOTIFY countChanged) Q_PROPERTY(QDeclarativeComponent *delegate READ delegate WRITE setDelegate NOTIFY delegateChanged) Q_PROPERTY(int pathItemCount READ pathItemCount WRITE setPathItemCount NOTIFY pathItemCountChanged) @@ -86,9 +93,19 @@ public: qreal snapPosition() const; void setSnapPosition(qreal pos); + QDeclarativeComponent *highlight() const; + void setHighlight(QDeclarativeComponent *highlight); + QDeclarativeItem *highlightItem(); + qreal dragMargin() const; void setDragMargin(qreal margin); + qreal flickDeceleration() const; + void setFlickDeceleration(qreal dec); + + bool isInteractive() const; + void setInteractive(bool); + int count() const; QDeclarativeComponent *delegate() const; @@ -103,11 +120,16 @@ Q_SIGNALS: void currentIndexChanged(); void offsetChanged(); void modelChanged(); + void countChanged(); void pathChanged(); void dragMarginChanged(); void snapPositionChanged(); void delegateChanged(); void pathItemCountChanged(); + void flickDecelerationChanged(); + void interactiveChanged(); + void highlightChanged(); + void highlightItemChanged(); protected: void mousePressEvent(QGraphicsSceneMouseEvent *event); @@ -122,6 +144,7 @@ private Q_SLOTS: void ticked(); void itemsInserted(int index, int count); void itemsRemoved(int index, int count); + void itemsMoved(int,int,int); void modelReset(); void createdItem(int index, QDeclarativeItem *item); void destroyingItem(QDeclarativeItem *item); diff --git a/src/declarative/graphicsitems/qdeclarativepathview_p_p.h b/src/declarative/graphicsitems/qdeclarativepathview_p_p.h index 62f7d95..1780869 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativepathview_p_p.h @@ -75,17 +75,18 @@ class QDeclarativePathViewPrivate : public QDeclarativeItemPrivate public: QDeclarativePathViewPrivate() : path(0), currentIndex(0), startPc(0), lastDist(0) - , lastElapsed(0), stealMouse(false), ownModel(false), activeItem(0) - , snapPos(0), dragMargin(0), moveOffset(this, &QDeclarativePathViewPrivate::setOffset) - , firstIndex(0), pathItems(-1), pathOffset(0), requestedIndex(-1) - , moveReason(Other), attType(0) + , lastElapsed(0), mappedRange(1.0), stealMouse(false), ownModel(false), interactive(true) + , snapPos(0), dragMargin(0), deceleration(100) + , moveOffset(this, &QDeclarativePathViewPrivate::setOffset) + , firstIndex(-1), pathItems(-1), requestedIndex(-1) + , moveReason(Other), attType(0), highlightComponent(0), highlightItem(0) { } void init() { Q_Q(QDeclarativePathView); - _offset = 0; + offset = 0; q->setAcceptedMouseButtons(Qt::LeftButton); q->setFlag(QGraphicsItem::ItemIsFocusScope); q->setFiltersChildEvents(true); @@ -96,7 +97,10 @@ public: void releaseItem(QDeclarativeItem *item); QDeclarativePathViewAttached *attached(QDeclarativeItem *item); void clear(); - + void updateMappedRange(); + qreal positionOfIndex(int index) const; + void createHighlight(); + void updateHighlight(); bool isValid() const { return model && model->count() > 0 && model->isValid() && path; } @@ -117,19 +121,20 @@ public: QPointF startPoint; qreal lastDist; int lastElapsed; - qreal _offset; + qreal offset; + qreal mappedRange; bool stealMouse : 1; bool ownModel : 1; + bool interactive : 1; QTime lastPosTime; QPointF lastPos; - QDeclarativeItem *activeItem; qreal snapPos; qreal dragMargin; + qreal deceleration; QDeclarativeTimeLine tl; QDeclarativeTimeLineValueProxy moveOffset; int firstIndex; int pathItems; - int pathOffset; int requestedIndex; QList items; QDeclarativeGuard model; @@ -137,6 +142,8 @@ public: enum MovementReason { Other, Key, Mouse }; MovementReason moveReason; QDeclarativeOpenMetaObjectType *attType; + QDeclarativeComponent *highlightComponent; + QDeclarativeItem *highlightItem; }; QT_END_NAMESPACE diff --git a/tests/auto/declarative/qdeclarativepathview/data/pathview0.qml b/tests/auto/declarative/qdeclarativepathview/data/pathview0.qml index ae0c86a..8e2c251 100644 --- a/tests/auto/declarative/qdeclarativepathview/data/pathview0.qml +++ b/tests/auto/declarative/qdeclarativepathview/data/pathview0.qml @@ -49,6 +49,11 @@ Rectangle { model: testModel delegate: delegate snapPosition: 0.0001 + highlight: Rectangle { + width: 60 + height: 20 + color: "yellow" + } path: Path { startY: 120 startX: 160 diff --git a/tests/auto/declarative/qdeclarativepathview/data/pathview3.qml b/tests/auto/declarative/qdeclarativepathview/data/pathview3.qml index 70cfbcd..f1bc66e 100644 --- a/tests/auto/declarative/qdeclarativepathview/data/pathview3.qml +++ b/tests/auto/declarative/qdeclarativepathview/data/pathview3.qml @@ -2,7 +2,7 @@ import Qt 4.6 PathView { id: photoPathView - y: 100; width: 800; height: 330; pathItemCount: 4; offset: 0.1 + y: 100; width: 800; height: 330; pathItemCount: 4; offset: 1 dragMargin: 24; snapPosition: 0.50 path: Path { diff --git a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp index c16c46f..6d7cc0d 100644 --- a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp +++ b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp @@ -219,7 +219,7 @@ void tst_QDeclarativePathView::items() QDeclarativePathView *pathview = findItem(canvas->rootObject(), "view"); QVERIFY(pathview != 0); - QCOMPARE(pathview->childItems().count(), model.count()); // assumes all are visible + QCOMPARE(pathview->childItems().count(), model.count()+1); // assumes all are visible, including highlight for (int i = 0; i < model.count(); ++i) { QDeclarativeText *name = findItem(pathview, "textName", i); @@ -230,6 +230,16 @@ void tst_QDeclarativePathView::items() QCOMPARE(number->text(), model.number(i)); } + QDeclarativePath *path = qobject_cast(pathview->path()); + QVERIFY(path); + + QVERIFY(pathview->highlightItem()); + QPointF start = path->pointAt(0.0); + QPointF offset; + offset.setX(pathview->highlightItem()->width()/2); + offset.setY(pathview->highlightItem()->height()/2); + QCOMPARE(pathview->highlightItem()->pos() + offset, start); + delete canvas; } @@ -262,8 +272,8 @@ void tst_QDeclarativePathView::pathview3() QVERIFY(obj->delegate() != 0); QVERIFY(obj->model() != QVariant()); QCOMPARE(obj->currentIndex(), 0); - QCOMPARE(obj->offset(), 0.5); // ??? - QCOMPARE(obj->snapPosition(), 0.5); // ??? + QCOMPARE(obj->offset(), 1.0); + QCOMPARE(obj->snapPosition(), 0.5); QCOMPARE(obj->dragMargin(), 24.); QCOMPARE(obj->count(), 8); QCOMPARE(obj->pathItemCount(), 4); @@ -422,14 +432,14 @@ void tst_QDeclarativePathView::pathMoved() offset.setX(firstItem->width()/2); offset.setY(firstItem->height()/2); QCOMPARE(firstItem->pos() + offset, start); - pathview->setOffset(0.1); + pathview->setOffset(1.0); for(int i=0; i(pathview, "wrapper", i); - QCOMPARE(curItem->pos() + offset, path->pointAt(0.1 + i*0.25)); + QCOMPARE(curItem->pos() + offset, path->pointAt(0.25 + i*0.25)); } - pathview->setOffset(1.0); + pathview->setOffset(0.0); QCOMPARE(firstItem->pos() + offset, start); delete canvas; -- cgit v0.12 From f20433bb8b72589fff27ec66f2e283b2f48fb019 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Thu, 25 Mar 2010 14:32:05 +1000 Subject: Pen is not a creatable type. --- src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp b/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp index 1a48cbd..07d7f4d 100644 --- a/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp @@ -114,7 +114,6 @@ void QDeclarativeItemModule::defineModule() qmlRegisterType("Qt",4,6,"PathPercent"); qmlRegisterType("Qt",4,6,"PathQuad"); qmlRegisterType("Qt",4,6,"PathView"); - qmlRegisterType("Qt",4,6,"Pen"); qmlRegisterType("Qt",4,6,"QIntValidator"); #if (QT_VERSION >= QT_VERSION_CHECK(4,7,0)) qmlRegisterType("Qt",4,7,"QDoubleValidator"); @@ -146,6 +145,7 @@ void QDeclarativeItemModule::defineModule() qmlRegisterType(); qmlRegisterType(); qmlRegisterType(); + qmlRegisterType(); #ifdef QT_WEBKIT_LIB qmlRegisterType(); #endif -- cgit v0.12 From d373f8b8ee0a5841bcdb264b0b01b262c15e7f89 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Thu, 25 Mar 2010 15:01:30 +1000 Subject: Update AnchorChanges to use more natural form for setting anchors. Instead of specifying left, right, etc directly, we keep the regular syntax and specify anchors.left, anchors.right, etc. Also get rid of the hacky "reset" string property and use undefined to reset (like PropertyChanges). --- src/declarative/QmlChanges.txt | 2 + .../util/qdeclarativestateoperations.cpp | 474 +++++++++++++-------- .../util/qdeclarativestateoperations_p.h | 123 +++++- src/declarative/util/qdeclarativeutilmodule.cpp | 1 + .../qdeclarativestates/data/anchorChanges1.qml | 4 +- .../qdeclarativestates/data/anchorChanges2.qml | 4 +- .../qdeclarativestates/data/anchorChanges3.qml | 8 +- .../qdeclarativestates/data/anchorChanges4.qml | 4 +- .../qdeclarativestates/data/anchorChanges5.qml | 4 +- .../qdeclarativestates/tst_qdeclarativestates.cpp | 38 +- .../visual/animation/reanchor/reanchor.qml | 15 +- 11 files changed, 447 insertions(+), 230 deletions(-) diff --git a/src/declarative/QmlChanges.txt b/src/declarative/QmlChanges.txt index 2a35dda..9a55bde 100644 --- a/src/declarative/QmlChanges.txt +++ b/src/declarative/QmlChanges.txt @@ -13,6 +13,8 @@ AnchorAnimation must now be used to animate anchor changes (and not NumberAnimat Removed ParentAction (use ParentAnimation instead) ScriptAction: renamed stateChangeScriptName -> scriptName Animation: replace repeat with loops (loops: Animation.Infinite gives the old repeat behavior) +AnchorChanges: use natural form to specify anchors (anchors.left instead of left) +AnchorChanges: removed reset property. (reset: "left" should now be anchors.left: undefined) C++ API ------- diff --git a/src/declarative/util/qdeclarativestateoperations.cpp b/src/declarative/util/qdeclarativestateoperations.cpp index 0bc81ee..3469136 100644 --- a/src/declarative/util/qdeclarativestateoperations.cpp +++ b/src/declarative/util/qdeclarativestateoperations.cpp @@ -609,209 +609,343 @@ QString QDeclarativeStateChangeScript::typeName() const For more information on anchors see \l {anchor-layout}{Anchor Layouts}. */ - - -class QDeclarativeAnchorChangesPrivate : public QObjectPrivate +class QDeclarativeAnchorSetPrivate : public QObjectPrivate { + Q_DECLARE_PUBLIC(QDeclarativeAnchorSet) public: - QDeclarativeAnchorChangesPrivate() : target(0) {} + QDeclarativeAnchorSetPrivate() + : usedAnchors(0), fill(0), + centerIn(0)/*, leftMargin(0), rightMargin(0), topMargin(0), bottomMargin(0), + margins(0), vCenterOffset(0), hCenterOffset(0), baselineOffset(0)*/ + { + } - QDeclarativeItem *target; - QString resetString; + QDeclarativeAnchors::UsedAnchors usedAnchors; + //### change to QDeclarativeAnchors::UsedAnchors resetAnchors QStringList resetList; + QDeclarativeItem *fill; + QDeclarativeItem *centerIn; + QDeclarativeAnchorLine left; QDeclarativeAnchorLine right; - QDeclarativeAnchorLine horizontalCenter; QDeclarativeAnchorLine top; QDeclarativeAnchorLine bottom; - QDeclarativeAnchorLine verticalCenter; + QDeclarativeAnchorLine vCenter; + QDeclarativeAnchorLine hCenter; QDeclarativeAnchorLine baseline; - QDeclarativeAnchorLine origLeft; - QDeclarativeAnchorLine origRight; - QDeclarativeAnchorLine origHCenter; - QDeclarativeAnchorLine origTop; - QDeclarativeAnchorLine origBottom; - QDeclarativeAnchorLine origVCenter; - QDeclarativeAnchorLine origBaseline; - - QDeclarativeAnchorLine rewindLeft; - QDeclarativeAnchorLine rewindRight; - QDeclarativeAnchorLine rewindHCenter; - QDeclarativeAnchorLine rewindTop; - QDeclarativeAnchorLine rewindBottom; - QDeclarativeAnchorLine rewindVCenter; - QDeclarativeAnchorLine rewindBaseline; + /*qreal leftMargin; + qreal rightMargin; + qreal topMargin; + qreal bottomMargin; + qreal margins; + qreal vCenterOffset; + qreal hCenterOffset; + qreal baselineOffset;*/ +}; - qreal fromX; - qreal fromY; - qreal fromWidth; - qreal fromHeight; +QDeclarativeAnchorSet::QDeclarativeAnchorSet(QObject *parent) + : QObject(*new QDeclarativeAnchorSetPrivate, parent) +{ +} - qreal toX; - qreal toY; - qreal toWidth; - qreal toHeight; +QDeclarativeAnchorSet::~QDeclarativeAnchorSet() +{ +} - qreal rewindX; - qreal rewindY; - qreal rewindWidth; - qreal rewindHeight; +QDeclarativeAnchorLine QDeclarativeAnchorSet::top() const +{ + Q_D(const QDeclarativeAnchorSet); + return d->top; +} - bool applyOrigLeft; - bool applyOrigRight; - bool applyOrigHCenter; - bool applyOrigTop; - bool applyOrigBottom; - bool applyOrigVCenter; - bool applyOrigBaseline; -}; +void QDeclarativeAnchorSet::setTop(const QDeclarativeAnchorLine &edge) +{ + Q_D(QDeclarativeAnchorSet); + d->usedAnchors |= QDeclarativeAnchors::HasTopAnchor; + d->top = edge; +} -/*! - \qmlproperty Item AnchorChanges::target - This property holds the Item whose anchors will change -*/ +void QDeclarativeAnchorSet::resetTop() +{ + Q_D(QDeclarativeAnchorSet); + d->usedAnchors &= ~QDeclarativeAnchors::HasTopAnchor; + d->top = QDeclarativeAnchorLine(); + d->resetList << QLatin1String("top"); +} -QDeclarativeAnchorChanges::QDeclarativeAnchorChanges(QObject *parent) - : QDeclarativeStateOperation(*(new QDeclarativeAnchorChangesPrivate), parent) +QDeclarativeAnchorLine QDeclarativeAnchorSet::bottom() const { + Q_D(const QDeclarativeAnchorSet); + return d->bottom; } -QDeclarativeAnchorChanges::~QDeclarativeAnchorChanges() +void QDeclarativeAnchorSet::setBottom(const QDeclarativeAnchorLine &edge) { + Q_D(QDeclarativeAnchorSet); + d->usedAnchors |= QDeclarativeAnchors::HasBottomAnchor; + d->bottom = edge; } -QDeclarativeAnchorChanges::ActionList QDeclarativeAnchorChanges::actions() +void QDeclarativeAnchorSet::resetBottom() { - QDeclarativeAction a; - a.event = this; - return ActionList() << a; + Q_D(QDeclarativeAnchorSet); + d->usedAnchors &= ~QDeclarativeAnchors::HasBottomAnchor; + d->bottom = QDeclarativeAnchorLine(); + d->resetList << QLatin1String("bottom"); } -QDeclarativeItem *QDeclarativeAnchorChanges::object() const +QDeclarativeAnchorLine QDeclarativeAnchorSet::verticalCenter() const { - Q_D(const QDeclarativeAnchorChanges); - return d->target; + Q_D(const QDeclarativeAnchorSet); + return d->vCenter; } -void QDeclarativeAnchorChanges::setObject(QDeclarativeItem *target) +void QDeclarativeAnchorSet::setVerticalCenter(const QDeclarativeAnchorLine &edge) { - Q_D(QDeclarativeAnchorChanges); - d->target = target; + Q_D(QDeclarativeAnchorSet); + d->usedAnchors |= QDeclarativeAnchors::HasVCenterAnchor; + d->vCenter = edge; } -QString QDeclarativeAnchorChanges::reset() const +void QDeclarativeAnchorSet::resetVerticalCenter() { - Q_D(const QDeclarativeAnchorChanges); - return d->resetString; + Q_D(QDeclarativeAnchorSet); + d->usedAnchors &= ~QDeclarativeAnchors::HasVCenterAnchor; + d->vCenter = QDeclarativeAnchorLine(); + d->resetList << QLatin1String("verticalCenter"); } -void QDeclarativeAnchorChanges::setReset(const QString &reset) +QDeclarativeAnchorLine QDeclarativeAnchorSet::baseline() const { - Q_D(QDeclarativeAnchorChanges); - d->resetString = reset; - d->resetList = d->resetString.split(QLatin1Char(',')); - for (int i = 0; i < d->resetList.count(); ++i) - d->resetList[i] = d->resetList.at(i).trimmed(); + Q_D(const QDeclarativeAnchorSet); + return d->baseline; } -/*! - \qmlproperty AnchorLine AnchorChanges::left - \qmlproperty AnchorLine AnchorChanges::right - \qmlproperty AnchorLine AnchorChanges::horizontalCenter - \qmlproperty AnchorLine AnchorChanges::top - \qmlproperty AnchorLine AnchorChanges::bottom - \qmlproperty AnchorLine AnchorChanges::verticalCenter - \qmlproperty AnchorLine AnchorChanges::baseline +void QDeclarativeAnchorSet::setBaseline(const QDeclarativeAnchorLine &edge) +{ + Q_D(QDeclarativeAnchorSet); + d->usedAnchors |= QDeclarativeAnchors::HasBaselineAnchor; + d->baseline = edge; +} - These properties change the respective anchors of the item. -*/ +void QDeclarativeAnchorSet::resetBaseline() +{ + Q_D(QDeclarativeAnchorSet); + d->usedAnchors &= ~QDeclarativeAnchors::HasBaselineAnchor; + d->baseline = QDeclarativeAnchorLine(); + d->resetList << QLatin1String("baseline"); +} -QDeclarativeAnchorLine QDeclarativeAnchorChanges::left() const +QDeclarativeAnchorLine QDeclarativeAnchorSet::left() const { - Q_D(const QDeclarativeAnchorChanges); + Q_D(const QDeclarativeAnchorSet); return d->left; } -void QDeclarativeAnchorChanges::setLeft(const QDeclarativeAnchorLine &edge) +void QDeclarativeAnchorSet::setLeft(const QDeclarativeAnchorLine &edge) { - Q_D(QDeclarativeAnchorChanges); + Q_D(QDeclarativeAnchorSet); + d->usedAnchors |= QDeclarativeAnchors::HasLeftAnchor; d->left = edge; } -QDeclarativeAnchorLine QDeclarativeAnchorChanges::right() const +void QDeclarativeAnchorSet::resetLeft() { - Q_D(const QDeclarativeAnchorChanges); + Q_D(QDeclarativeAnchorSet); + d->usedAnchors &= ~QDeclarativeAnchors::HasLeftAnchor; + d->left = QDeclarativeAnchorLine(); + d->resetList << QLatin1String("left"); +} + +QDeclarativeAnchorLine QDeclarativeAnchorSet::right() const +{ + Q_D(const QDeclarativeAnchorSet); return d->right; } -void QDeclarativeAnchorChanges::setRight(const QDeclarativeAnchorLine &edge) +void QDeclarativeAnchorSet::setRight(const QDeclarativeAnchorLine &edge) { - Q_D(QDeclarativeAnchorChanges); + Q_D(QDeclarativeAnchorSet); + d->usedAnchors |= QDeclarativeAnchors::HasRightAnchor; d->right = edge; } -QDeclarativeAnchorLine QDeclarativeAnchorChanges::horizontalCenter() const +void QDeclarativeAnchorSet::resetRight() { - Q_D(const QDeclarativeAnchorChanges); - return d->horizontalCenter; + Q_D(QDeclarativeAnchorSet); + d->usedAnchors &= ~QDeclarativeAnchors::HasRightAnchor; + d->right = QDeclarativeAnchorLine(); + d->resetList << QLatin1String("right"); } -void QDeclarativeAnchorChanges::setHorizontalCenter(const QDeclarativeAnchorLine &edge) +QDeclarativeAnchorLine QDeclarativeAnchorSet::horizontalCenter() const { - Q_D(QDeclarativeAnchorChanges); - d->horizontalCenter = edge; + Q_D(const QDeclarativeAnchorSet); + return d->hCenter; } -QDeclarativeAnchorLine QDeclarativeAnchorChanges::top() const +void QDeclarativeAnchorSet::setHorizontalCenter(const QDeclarativeAnchorLine &edge) { - Q_D(const QDeclarativeAnchorChanges); - return d->top; + Q_D(QDeclarativeAnchorSet); + d->usedAnchors |= QDeclarativeAnchors::HasHCenterAnchor; + d->hCenter = edge; } -void QDeclarativeAnchorChanges::setTop(const QDeclarativeAnchorLine &edge) +void QDeclarativeAnchorSet::resetHorizontalCenter() { - Q_D(QDeclarativeAnchorChanges); - d->top = edge; + Q_D(QDeclarativeAnchorSet); + d->usedAnchors &= ~QDeclarativeAnchors::HasHCenterAnchor; + d->hCenter = QDeclarativeAnchorLine(); + d->resetList << QLatin1String("horizontalCenter"); } -QDeclarativeAnchorLine QDeclarativeAnchorChanges::bottom() const +QDeclarativeItem *QDeclarativeAnchorSet::fill() const { - Q_D(const QDeclarativeAnchorChanges); - return d->bottom; + Q_D(const QDeclarativeAnchorSet); + return d->fill; } -void QDeclarativeAnchorChanges::setBottom(const QDeclarativeAnchorLine &edge) +void QDeclarativeAnchorSet::setFill(QDeclarativeItem *f) { - Q_D(QDeclarativeAnchorChanges); - d->bottom = edge; + Q_D(QDeclarativeAnchorSet); + d->fill = f; } -QDeclarativeAnchorLine QDeclarativeAnchorChanges::verticalCenter() const +void QDeclarativeAnchorSet::resetFill() { - Q_D(const QDeclarativeAnchorChanges); - return d->verticalCenter; + setFill(0); +} + +QDeclarativeItem *QDeclarativeAnchorSet::centerIn() const +{ + Q_D(const QDeclarativeAnchorSet); + return d->centerIn; } -void QDeclarativeAnchorChanges::setVerticalCenter(const QDeclarativeAnchorLine &edge) +void QDeclarativeAnchorSet::setCenterIn(QDeclarativeItem* c) +{ + Q_D(QDeclarativeAnchorSet); + d->centerIn = c; +} + +void QDeclarativeAnchorSet::resetCenterIn() +{ + setCenterIn(0); +} + + +class QDeclarativeAnchorChangesPrivate : public QObjectPrivate +{ +public: + QDeclarativeAnchorChangesPrivate() + : target(0), anchorSet(new QDeclarativeAnchorSet) {} + ~QDeclarativeAnchorChangesPrivate() { delete anchorSet; } + + QDeclarativeItem *target; + QDeclarativeAnchorSet *anchorSet; + + QDeclarativeAnchorLine origLeft; + QDeclarativeAnchorLine origRight; + QDeclarativeAnchorLine origHCenter; + QDeclarativeAnchorLine origTop; + QDeclarativeAnchorLine origBottom; + QDeclarativeAnchorLine origVCenter; + QDeclarativeAnchorLine origBaseline; + + QDeclarativeAnchorLine rewindLeft; + QDeclarativeAnchorLine rewindRight; + QDeclarativeAnchorLine rewindHCenter; + QDeclarativeAnchorLine rewindTop; + QDeclarativeAnchorLine rewindBottom; + QDeclarativeAnchorLine rewindVCenter; + QDeclarativeAnchorLine rewindBaseline; + + qreal fromX; + qreal fromY; + qreal fromWidth; + qreal fromHeight; + + qreal toX; + qreal toY; + qreal toWidth; + qreal toHeight; + + qreal rewindX; + qreal rewindY; + qreal rewindWidth; + qreal rewindHeight; + + bool applyOrigLeft; + bool applyOrigRight; + bool applyOrigHCenter; + bool applyOrigTop; + bool applyOrigBottom; + bool applyOrigVCenter; + bool applyOrigBaseline; +}; + +/*! + \qmlproperty Item AnchorChanges::target + This property holds the Item whose anchors will change +*/ + +QDeclarativeAnchorChanges::QDeclarativeAnchorChanges(QObject *parent) + : QDeclarativeStateOperation(*(new QDeclarativeAnchorChangesPrivate), parent) +{ +} + +QDeclarativeAnchorChanges::~QDeclarativeAnchorChanges() +{ +} + +QDeclarativeAnchorChanges::ActionList QDeclarativeAnchorChanges::actions() +{ + QDeclarativeAction a; + a.event = this; + return ActionList() << a; +} + +QDeclarativeAnchorSet *QDeclarativeAnchorChanges::anchors() { Q_D(QDeclarativeAnchorChanges); - d->verticalCenter = edge; + return d->anchorSet; } -QDeclarativeAnchorLine QDeclarativeAnchorChanges::baseline() const +QDeclarativeItem *QDeclarativeAnchorChanges::object() const { Q_D(const QDeclarativeAnchorChanges); - return d->baseline; + return d->target; } -void QDeclarativeAnchorChanges::setBaseline(const QDeclarativeAnchorLine &edge) +void QDeclarativeAnchorChanges::setObject(QDeclarativeItem *target) { Q_D(QDeclarativeAnchorChanges); - d->baseline = edge; + d->target = target; } +/*! + \qmlproperty AnchorLine AnchorChanges::anchors.left + \qmlproperty AnchorLine AnchorChanges::anchors.right + \qmlproperty AnchorLine AnchorChanges::anchors.horizontalCenter + \qmlproperty AnchorLine AnchorChanges::anchors.top + \qmlproperty AnchorLine AnchorChanges::anchors.bottom + \qmlproperty AnchorLine AnchorChanges::anchors.verticalCenter + \qmlproperty AnchorLine AnchorChanges::anchors.baseline + + These properties change the respective anchors of the item. + + To reset an anchor you can assign \c undefined: + \qml + AnchorChanges { + target: myItem + left: undefined //remove myItem's left anchor + right: otherItem.right + } + \endqml +*/ + void QDeclarativeAnchorChanges::execute() { Q_D(QDeclarativeAnchorChanges); @@ -835,36 +969,36 @@ void QDeclarativeAnchorChanges::execute() d->target->anchors()->setBaseline(d->origBaseline); //reset any anchors that have been specified - if (d->resetList.contains(QLatin1String("left"))) + if (d->anchorSet->d_func()->resetList .contains(QLatin1String("left"))) d->target->anchors()->resetLeft(); - if (d->resetList.contains(QLatin1String("right"))) + if (d->anchorSet->d_func()->resetList .contains(QLatin1String("right"))) d->target->anchors()->resetRight(); - if (d->resetList.contains(QLatin1String("horizontalCenter"))) + if (d->anchorSet->d_func()->resetList .contains(QLatin1String("horizontalCenter"))) d->target->anchors()->resetHorizontalCenter(); - if (d->resetList.contains(QLatin1String("top"))) + if (d->anchorSet->d_func()->resetList .contains(QLatin1String("top"))) d->target->anchors()->resetTop(); - if (d->resetList.contains(QLatin1String("bottom"))) + if (d->anchorSet->d_func()->resetList .contains(QLatin1String("bottom"))) d->target->anchors()->resetBottom(); - if (d->resetList.contains(QLatin1String("verticalCenter"))) + if (d->anchorSet->d_func()->resetList .contains(QLatin1String("verticalCenter"))) d->target->anchors()->resetVerticalCenter(); - if (d->resetList.contains(QLatin1String("baseline"))) + if (d->anchorSet->d_func()->resetList .contains(QLatin1String("baseline"))) d->target->anchors()->resetBaseline(); //set any anchors that have been specified - if (d->left.anchorLine != QDeclarativeAnchorLine::Invalid) - d->target->anchors()->setLeft(d->left); - if (d->right.anchorLine != QDeclarativeAnchorLine::Invalid) - d->target->anchors()->setRight(d->right); - if (d->horizontalCenter.anchorLine != QDeclarativeAnchorLine::Invalid) - d->target->anchors()->setHorizontalCenter(d->horizontalCenter); - if (d->top.anchorLine != QDeclarativeAnchorLine::Invalid) - d->target->anchors()->setTop(d->top); - if (d->bottom.anchorLine != QDeclarativeAnchorLine::Invalid) - d->target->anchors()->setBottom(d->bottom); - if (d->verticalCenter.anchorLine != QDeclarativeAnchorLine::Invalid) - d->target->anchors()->setVerticalCenter(d->verticalCenter); - if (d->baseline.anchorLine != QDeclarativeAnchorLine::Invalid) - d->target->anchors()->setBaseline(d->baseline); + if (d->anchorSet->d_func()->left.anchorLine != QDeclarativeAnchorLine::Invalid) + d->target->anchors()->setLeft(d->anchorSet->d_func()->left); + if (d->anchorSet->d_func()->right.anchorLine != QDeclarativeAnchorLine::Invalid) + d->target->anchors()->setRight(d->anchorSet->d_func()->right); + if (d->anchorSet->d_func()->hCenter.anchorLine != QDeclarativeAnchorLine::Invalid) + d->target->anchors()->setHorizontalCenter(d->anchorSet->d_func()->hCenter); + if (d->anchorSet->d_func()->top.anchorLine != QDeclarativeAnchorLine::Invalid) + d->target->anchors()->setTop(d->anchorSet->d_func()->top); + if (d->anchorSet->d_func()->bottom.anchorLine != QDeclarativeAnchorLine::Invalid) + d->target->anchors()->setBottom(d->anchorSet->d_func()->bottom); + if (d->anchorSet->d_func()->vCenter.anchorLine != QDeclarativeAnchorLine::Invalid) + d->target->anchors()->setVerticalCenter(d->anchorSet->d_func()->vCenter); + if (d->anchorSet->d_func()->baseline.anchorLine != QDeclarativeAnchorLine::Invalid) + d->target->anchors()->setBaseline(d->anchorSet->d_func()->baseline); } bool QDeclarativeAnchorChanges::isReversable() @@ -879,19 +1013,19 @@ void QDeclarativeAnchorChanges::reverse() return; //reset any anchors set by the state - if (d->left.anchorLine != QDeclarativeAnchorLine::Invalid) + if (d->anchorSet->d_func()->left.anchorLine != QDeclarativeAnchorLine::Invalid) d->target->anchors()->resetLeft(); - if (d->right.anchorLine != QDeclarativeAnchorLine::Invalid) + if (d->anchorSet->d_func()->right.anchorLine != QDeclarativeAnchorLine::Invalid) d->target->anchors()->resetRight(); - if (d->horizontalCenter.anchorLine != QDeclarativeAnchorLine::Invalid) + if (d->anchorSet->d_func()->hCenter.anchorLine != QDeclarativeAnchorLine::Invalid) d->target->anchors()->resetHorizontalCenter(); - if (d->top.anchorLine != QDeclarativeAnchorLine::Invalid) + if (d->anchorSet->d_func()->top.anchorLine != QDeclarativeAnchorLine::Invalid) d->target->anchors()->resetTop(); - if (d->bottom.anchorLine != QDeclarativeAnchorLine::Invalid) + if (d->anchorSet->d_func()->bottom.anchorLine != QDeclarativeAnchorLine::Invalid) d->target->anchors()->resetBottom(); - if (d->verticalCenter.anchorLine != QDeclarativeAnchorLine::Invalid) + if (d->anchorSet->d_func()->vCenter.anchorLine != QDeclarativeAnchorLine::Invalid) d->target->anchors()->resetVerticalCenter(); - if (d->baseline.anchorLine != QDeclarativeAnchorLine::Invalid) + if (d->anchorSet->d_func()->baseline.anchorLine != QDeclarativeAnchorLine::Invalid) d->target->anchors()->resetBaseline(); //restore previous anchors @@ -977,26 +1111,26 @@ void QDeclarativeAnchorChanges::copyOriginals(QDeclarativeActionEvent *other) QDeclarativeAnchorChangesPrivate *acp = ac->d_func(); //probably also need to revert some things - d->applyOrigLeft = (acp->left.anchorLine != QDeclarativeAnchorLine::Invalid || - acp->resetList.contains(QLatin1String("left"))); + d->applyOrigLeft = (acp->anchorSet->d_func()->left.anchorLine != QDeclarativeAnchorLine::Invalid || + acp->anchorSet->d_func()->resetList.contains(QLatin1String("left"))); - d->applyOrigRight = (acp->right.anchorLine != QDeclarativeAnchorLine::Invalid || - acp->resetList.contains(QLatin1String("right"))); + d->applyOrigRight = (acp->anchorSet->d_func()->right.anchorLine != QDeclarativeAnchorLine::Invalid || + acp->anchorSet->d_func()->resetList.contains(QLatin1String("right"))); - d->applyOrigHCenter = (acp->horizontalCenter.anchorLine != QDeclarativeAnchorLine::Invalid || - acp->resetList.contains(QLatin1String("horizontalCenter"))); + d->applyOrigHCenter = (acp->anchorSet->d_func()->hCenter.anchorLine != QDeclarativeAnchorLine::Invalid || + acp->anchorSet->d_func()->resetList.contains(QLatin1String("horizontalCenter"))); - d->applyOrigTop = (acp->top.anchorLine != QDeclarativeAnchorLine::Invalid || - acp->resetList.contains(QLatin1String("top"))); + d->applyOrigTop = (acp->anchorSet->d_func()->top.anchorLine != QDeclarativeAnchorLine::Invalid || + acp->anchorSet->d_func()->resetList.contains(QLatin1String("top"))); - d->applyOrigBottom = (acp->bottom.anchorLine != QDeclarativeAnchorLine::Invalid || - acp->resetList.contains(QLatin1String("bottom"))); + d->applyOrigBottom = (acp->anchorSet->d_func()->bottom.anchorLine != QDeclarativeAnchorLine::Invalid || + acp->anchorSet->d_func()->resetList.contains(QLatin1String("bottom"))); - d->applyOrigVCenter = (acp->verticalCenter.anchorLine != QDeclarativeAnchorLine::Invalid || - acp->resetList.contains(QLatin1String("verticalCenter"))); + d->applyOrigVCenter = (acp->anchorSet->d_func()->vCenter.anchorLine != QDeclarativeAnchorLine::Invalid || + acp->anchorSet->d_func()->resetList.contains(QLatin1String("verticalCenter"))); - d->applyOrigBaseline = (acp->baseline.anchorLine != QDeclarativeAnchorLine::Invalid || - acp->resetList.contains(QLatin1String("baseline"))); + d->applyOrigBaseline = (acp->anchorSet->d_func()->baseline.anchorLine != QDeclarativeAnchorLine::Invalid || + acp->anchorSet->d_func()->resetList.contains(QLatin1String("baseline"))); d->origLeft = ac->d_func()->origLeft; d->origRight = ac->d_func()->origRight; @@ -1034,35 +1168,35 @@ void QDeclarativeAnchorChanges::clearBindings() d->target->anchors()->resetBaseline(); //reset any anchors that have been specified - if (d->resetList.contains(QLatin1String("left"))) + if (d->anchorSet->d_func()->resetList .contains(QLatin1String("left"))) d->target->anchors()->resetLeft(); - if (d->resetList.contains(QLatin1String("right"))) + if (d->anchorSet->d_func()->resetList .contains(QLatin1String("right"))) d->target->anchors()->resetRight(); - if (d->resetList.contains(QLatin1String("horizontalCenter"))) + if (d->anchorSet->d_func()->resetList .contains(QLatin1String("horizontalCenter"))) d->target->anchors()->resetHorizontalCenter(); - if (d->resetList.contains(QLatin1String("top"))) + if (d->anchorSet->d_func()->resetList .contains(QLatin1String("top"))) d->target->anchors()->resetTop(); - if (d->resetList.contains(QLatin1String("bottom"))) + if (d->anchorSet->d_func()->resetList .contains(QLatin1String("bottom"))) d->target->anchors()->resetBottom(); - if (d->resetList.contains(QLatin1String("verticalCenter"))) + if (d->anchorSet->d_func()->resetList .contains(QLatin1String("verticalCenter"))) d->target->anchors()->resetVerticalCenter(); - if (d->resetList.contains(QLatin1String("baseline"))) + if (d->anchorSet->d_func()->resetList .contains(QLatin1String("baseline"))) d->target->anchors()->resetBaseline(); //reset any anchors that we'll be setting in the state - if (d->left.anchorLine != QDeclarativeAnchorLine::Invalid) + if (d->anchorSet->d_func()->left.anchorLine != QDeclarativeAnchorLine::Invalid) d->target->anchors()->resetLeft(); - if (d->right.anchorLine != QDeclarativeAnchorLine::Invalid) + if (d->anchorSet->d_func()->right.anchorLine != QDeclarativeAnchorLine::Invalid) d->target->anchors()->resetRight(); - if (d->horizontalCenter.anchorLine != QDeclarativeAnchorLine::Invalid) + if (d->anchorSet->d_func()->hCenter.anchorLine != QDeclarativeAnchorLine::Invalid) d->target->anchors()->resetHorizontalCenter(); - if (d->top.anchorLine != QDeclarativeAnchorLine::Invalid) + if (d->anchorSet->d_func()->top.anchorLine != QDeclarativeAnchorLine::Invalid) d->target->anchors()->resetTop(); - if (d->bottom.anchorLine != QDeclarativeAnchorLine::Invalid) + if (d->anchorSet->d_func()->bottom.anchorLine != QDeclarativeAnchorLine::Invalid) d->target->anchors()->resetBottom(); - if (d->verticalCenter.anchorLine != QDeclarativeAnchorLine::Invalid) + if (d->anchorSet->d_func()->vCenter.anchorLine != QDeclarativeAnchorLine::Invalid) d->target->anchors()->resetVerticalCenter(); - if (d->baseline.anchorLine != QDeclarativeAnchorLine::Invalid) + if (d->anchorSet->d_func()->baseline.anchorLine != QDeclarativeAnchorLine::Invalid) d->target->anchors()->resetBaseline(); } diff --git a/src/declarative/util/qdeclarativestateoperations_p.h b/src/declarative/util/qdeclarativestateoperations_p.h index 66a8717..c97b2da 100644 --- a/src/declarative/util/qdeclarativestateoperations_p.h +++ b/src/declarative/util/qdeclarativestateoperations_p.h @@ -143,54 +143,132 @@ public: virtual void execute(); }; -class QDeclarativeAnchorChangesPrivate; -class Q_DECLARATIVE_EXPORT QDeclarativeAnchorChanges : public QDeclarativeStateOperation, public QDeclarativeActionEvent +class QDeclarativeAnchorChanges; +class QDeclarativeAnchorSetPrivate; +class Q_AUTOTEST_EXPORT QDeclarativeAnchorSet : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE(QDeclarativeAnchorChanges) - Q_PROPERTY(QDeclarativeItem *target READ object WRITE setObject) - Q_PROPERTY(QString reset READ reset WRITE setReset) - Q_PROPERTY(QDeclarativeAnchorLine left READ left WRITE setLeft) - Q_PROPERTY(QDeclarativeAnchorLine right READ right WRITE setRight) - Q_PROPERTY(QDeclarativeAnchorLine horizontalCenter READ horizontalCenter WRITE setHorizontalCenter) - Q_PROPERTY(QDeclarativeAnchorLine top READ top WRITE setTop) - Q_PROPERTY(QDeclarativeAnchorLine bottom READ bottom WRITE setBottom) - Q_PROPERTY(QDeclarativeAnchorLine verticalCenter READ verticalCenter WRITE setVerticalCenter) - Q_PROPERTY(QDeclarativeAnchorLine baseline READ baseline WRITE setBaseline) + Q_PROPERTY(QDeclarativeAnchorLine left READ left WRITE setLeft RESET resetLeft) + Q_PROPERTY(QDeclarativeAnchorLine right READ right WRITE setRight RESET resetRight) + Q_PROPERTY(QDeclarativeAnchorLine horizontalCenter READ horizontalCenter WRITE setHorizontalCenter RESET resetHorizontalCenter) + Q_PROPERTY(QDeclarativeAnchorLine top READ top WRITE setTop RESET resetTop) + Q_PROPERTY(QDeclarativeAnchorLine bottom READ bottom WRITE setBottom RESET resetBottom) + Q_PROPERTY(QDeclarativeAnchorLine verticalCenter READ verticalCenter WRITE setVerticalCenter RESET resetVerticalCenter) + Q_PROPERTY(QDeclarativeAnchorLine baseline READ baseline WRITE setBaseline RESET resetBaseline) + //Q_PROPERTY(QDeclarativeItem *fill READ fill WRITE setFill RESET resetFill) + //Q_PROPERTY(QDeclarativeItem *centerIn READ centerIn WRITE setCenterIn RESET resetCenterIn) + + /*Q_PROPERTY(qreal margins READ margins WRITE setMargins NOTIFY marginsChanged) + Q_PROPERTY(qreal leftMargin READ leftMargin WRITE setLeftMargin NOTIFY leftMarginChanged) + Q_PROPERTY(qreal rightMargin READ rightMargin WRITE setRightMargin NOTIFY rightMarginChanged) + Q_PROPERTY(qreal horizontalCenterOffset READ horizontalCenterOffset WRITE setHorizontalCenterOffset NOTIFY horizontalCenterOffsetChanged()) + Q_PROPERTY(qreal topMargin READ topMargin WRITE setTopMargin NOTIFY topMarginChanged) + Q_PROPERTY(qreal bottomMargin READ bottomMargin WRITE setBottomMargin NOTIFY bottomMarginChanged) + Q_PROPERTY(qreal verticalCenterOffset READ verticalCenterOffset WRITE setVerticalCenterOffset NOTIFY verticalCenterOffsetChanged()) + Q_PROPERTY(qreal baselineOffset READ baselineOffset WRITE setBaselineOffset NOTIFY baselineOffsetChanged())*/ public: - QDeclarativeAnchorChanges(QObject *parent=0); - ~QDeclarativeAnchorChanges(); - - virtual ActionList actions(); - - QDeclarativeItem *object() const; - void setObject(QDeclarativeItem *); - - QString reset() const; - void setReset(const QString &); + QDeclarativeAnchorSet(QObject *parent=0); + virtual ~QDeclarativeAnchorSet(); QDeclarativeAnchorLine left() const; void setLeft(const QDeclarativeAnchorLine &edge); + void resetLeft(); QDeclarativeAnchorLine right() const; void setRight(const QDeclarativeAnchorLine &edge); + void resetRight(); QDeclarativeAnchorLine horizontalCenter() const; void setHorizontalCenter(const QDeclarativeAnchorLine &edge); + void resetHorizontalCenter(); QDeclarativeAnchorLine top() const; void setTop(const QDeclarativeAnchorLine &edge); + void resetTop(); QDeclarativeAnchorLine bottom() const; void setBottom(const QDeclarativeAnchorLine &edge); + void resetBottom(); QDeclarativeAnchorLine verticalCenter() const; void setVerticalCenter(const QDeclarativeAnchorLine &edge); + void resetVerticalCenter(); QDeclarativeAnchorLine baseline() const; void setBaseline(const QDeclarativeAnchorLine &edge); + void resetBaseline(); + + QDeclarativeItem *fill() const; + void setFill(QDeclarativeItem *); + void resetFill(); + + QDeclarativeItem *centerIn() const; + void setCenterIn(QDeclarativeItem *); + void resetCenterIn(); + + /*qreal leftMargin() const; + void setLeftMargin(qreal); + + qreal rightMargin() const; + void setRightMargin(qreal); + + qreal horizontalCenterOffset() const; + void setHorizontalCenterOffset(qreal); + + qreal topMargin() const; + void setTopMargin(qreal); + + qreal bottomMargin() const; + void setBottomMargin(qreal); + + qreal margins() const; + void setMargins(qreal); + + qreal verticalCenterOffset() const; + void setVerticalCenterOffset(qreal); + + qreal baselineOffset() const; + void setBaselineOffset(qreal);*/ + + QDeclarativeAnchors::UsedAnchors usedAnchors() const; + +/*Q_SIGNALS: + void leftMarginChanged(); + void rightMarginChanged(); + void topMarginChanged(); + void bottomMarginChanged(); + void marginsChanged(); + void verticalCenterOffsetChanged(); + void horizontalCenterOffsetChanged(); + void baselineOffsetChanged();*/ + +private: + friend class QDeclarativeAnchorChanges; + Q_DISABLE_COPY(QDeclarativeAnchorSet) + Q_DECLARE_PRIVATE(QDeclarativeAnchorSet) +}; + +class QDeclarativeAnchorChangesPrivate; +class Q_DECLARATIVE_EXPORT QDeclarativeAnchorChanges : public QDeclarativeStateOperation, public QDeclarativeActionEvent +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QDeclarativeAnchorChanges) + + Q_PROPERTY(QDeclarativeItem *target READ object WRITE setObject) + Q_PROPERTY(QDeclarativeAnchorSet *anchors READ anchors CONSTANT) + +public: + QDeclarativeAnchorChanges(QObject *parent=0); + ~QDeclarativeAnchorChanges(); + + virtual ActionList actions(); + + QDeclarativeAnchorSet *anchors(); + + QDeclarativeItem *object() const; + void setObject(QDeclarativeItem *); virtual void execute(); virtual bool isReversable(); @@ -212,6 +290,7 @@ QT_END_NAMESPACE QML_DECLARE_TYPE(QDeclarativeParentChange) QML_DECLARE_TYPE(QDeclarativeStateChangeScript) +QML_DECLARE_TYPE(QDeclarativeAnchorSet) QML_DECLARE_TYPE(QDeclarativeAnchorChanges) QT_END_HEADER diff --git a/src/declarative/util/qdeclarativeutilmodule.cpp b/src/declarative/util/qdeclarativeutilmodule.cpp index d79c6ba..2a02ffe 100644 --- a/src/declarative/util/qdeclarativeutilmodule.cpp +++ b/src/declarative/util/qdeclarativeutilmodule.cpp @@ -140,6 +140,7 @@ void QDeclarativeUtilModule::defineModule() qmlRegisterType(); qmlRegisterType(); + qmlRegisterType(); qmlRegisterTypeEnums("Animation"); diff --git a/tests/auto/declarative/qdeclarativestates/data/anchorChanges1.qml b/tests/auto/declarative/qdeclarativestates/data/anchorChanges1.qml index 7dce889..5443e54 100644 --- a/tests/auto/declarative/qdeclarativestates/data/anchorChanges1.qml +++ b/tests/auto/declarative/qdeclarativestates/data/anchorChanges1.qml @@ -16,8 +16,8 @@ Rectangle { AnchorChanges { id: ancCh target: myRect; - reset: "left" - right: container.right + anchors.left: undefined + anchors.right: container.right } } } diff --git a/tests/auto/declarative/qdeclarativestates/data/anchorChanges2.qml b/tests/auto/declarative/qdeclarativestates/data/anchorChanges2.qml index 545345e..56de560 100644 --- a/tests/auto/declarative/qdeclarativestates/data/anchorChanges2.qml +++ b/tests/auto/declarative/qdeclarativestates/data/anchorChanges2.qml @@ -14,8 +14,8 @@ Rectangle { name: "right" AnchorChanges { target: myRect; - reset: "left" - right: parent.right + anchors.left: undefined + anchors.right: parent.right } } } diff --git a/tests/auto/declarative/qdeclarativestates/data/anchorChanges3.qml b/tests/auto/declarative/qdeclarativestates/data/anchorChanges3.qml index 9d5b317..59c3c06 100644 --- a/tests/auto/declarative/qdeclarativestates/data/anchorChanges3.qml +++ b/tests/auto/declarative/qdeclarativestates/data/anchorChanges3.qml @@ -20,10 +20,10 @@ Rectangle { name: "reanchored" AnchorChanges { target: myRect; - left: leftGuideline.left - right: container.right - top: container.top - bottom: bottomGuideline.bottom + anchors.left: leftGuideline.left + anchors.right: container.right + anchors.top: container.top + anchors.bottom: bottomGuideline.bottom } } } diff --git a/tests/auto/declarative/qdeclarativestates/data/anchorChanges4.qml b/tests/auto/declarative/qdeclarativestates/data/anchorChanges4.qml index f128989..7e3ba1c 100644 --- a/tests/auto/declarative/qdeclarativestates/data/anchorChanges4.qml +++ b/tests/auto/declarative/qdeclarativestates/data/anchorChanges4.qml @@ -15,8 +15,8 @@ Rectangle { name: "reanchored" AnchorChanges { target: myRect; - horizontalCenter: bottomGuideline.horizontalCenter - verticalCenter: leftGuideline.verticalCenter + anchors.horizontalCenter: bottomGuideline.horizontalCenter + anchors.verticalCenter: leftGuideline.verticalCenter } } } diff --git a/tests/auto/declarative/qdeclarativestates/data/anchorChanges5.qml b/tests/auto/declarative/qdeclarativestates/data/anchorChanges5.qml index 4e6d34b..b85a922 100644 --- a/tests/auto/declarative/qdeclarativestates/data/anchorChanges5.qml +++ b/tests/auto/declarative/qdeclarativestates/data/anchorChanges5.qml @@ -15,8 +15,8 @@ Rectangle { name: "reanchored" AnchorChanges { target: myRect; - horizontalCenter: bottomGuideline.horizontalCenter - baseline: leftGuideline.baseline + anchors.horizontalCenter: bottomGuideline.horizontalCenter + anchors.baseline: leftGuideline.baseline } } } diff --git a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp index 91883c9..2ab21a4 100644 --- a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp +++ b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp @@ -564,10 +564,10 @@ void tst_qdeclarativestates::anchorChanges() rect->setState("right"); QCOMPARE(innerRect->x(), qreal(150)); - QCOMPARE(aChanges->reset(), QString("left")); + QCOMPARE(aChanges->anchors()->left().anchorLine, QDeclarativeAnchorLine::Invalid); //### was reset (how do we distinguish from not set at all) QCOMPARE(aChanges->object(), qobject_cast(innerRect)); - QCOMPARE(aChanges->right().item, rect->right().item); - QCOMPARE(aChanges->right().anchorLine, rect->right().anchorLine); + QCOMPARE(aChanges->anchors()->right().item, rect->right().item); + QCOMPARE(aChanges->anchors()->right().anchorLine, rect->right().anchorLine); rect->setState(""); QCOMPARE(innerRect->x(), qreal(5)); @@ -623,14 +623,14 @@ void tst_qdeclarativestates::anchorChanges3() rect->setState("reanchored"); QCOMPARE(aChanges->object(), qobject_cast(innerRect)); - QCOMPARE(aChanges->left().item, leftGuideline->left().item); - QCOMPARE(aChanges->left().anchorLine, leftGuideline->left().anchorLine); - QCOMPARE(aChanges->right().item, rect->right().item); - QCOMPARE(aChanges->right().anchorLine, rect->right().anchorLine); - QCOMPARE(aChanges->top().item, rect->top().item); - QCOMPARE(aChanges->top().anchorLine, rect->top().anchorLine); - QCOMPARE(aChanges->bottom().item, bottomGuideline->bottom().item); - QCOMPARE(aChanges->bottom().anchorLine, bottomGuideline->bottom().anchorLine); + QCOMPARE(aChanges->anchors()->left().item, leftGuideline->left().item); + QCOMPARE(aChanges->anchors()->left().anchorLine, leftGuideline->left().anchorLine); + QCOMPARE(aChanges->anchors()->right().item, rect->right().item); + QCOMPARE(aChanges->anchors()->right().anchorLine, rect->right().anchorLine); + QCOMPARE(aChanges->anchors()->top().item, rect->top().item); + QCOMPARE(aChanges->anchors()->top().anchorLine, rect->top().anchorLine); + QCOMPARE(aChanges->anchors()->bottom().item, bottomGuideline->bottom().item); + QCOMPARE(aChanges->anchors()->bottom().anchorLine, bottomGuideline->bottom().anchorLine); QCOMPARE(innerRect->x(), qreal(10)); QCOMPARE(innerRect->y(), qreal(0)); @@ -673,10 +673,10 @@ void tst_qdeclarativestates::anchorChanges4() rect->setState("reanchored"); QCOMPARE(aChanges->object(), qobject_cast(innerRect)); - QCOMPARE(aChanges->horizontalCenter().item, bottomGuideline->horizontalCenter().item); - QCOMPARE(aChanges->horizontalCenter().anchorLine, bottomGuideline->horizontalCenter().anchorLine); - QCOMPARE(aChanges->verticalCenter().item, leftGuideline->verticalCenter().item); - QCOMPARE(aChanges->verticalCenter().anchorLine, leftGuideline->verticalCenter().anchorLine); + QCOMPARE(aChanges->anchors()->horizontalCenter().item, bottomGuideline->horizontalCenter().item); + QCOMPARE(aChanges->anchors()->horizontalCenter().anchorLine, bottomGuideline->horizontalCenter().anchorLine); + QCOMPARE(aChanges->anchors()->verticalCenter().item, leftGuideline->verticalCenter().item); + QCOMPARE(aChanges->anchors()->verticalCenter().anchorLine, leftGuideline->verticalCenter().anchorLine); delete rect; } @@ -708,10 +708,10 @@ void tst_qdeclarativestates::anchorChanges5() rect->setState("reanchored"); QCOMPARE(aChanges->object(), qobject_cast(innerRect)); - QCOMPARE(aChanges->horizontalCenter().item, bottomGuideline->horizontalCenter().item); - QCOMPARE(aChanges->horizontalCenter().anchorLine, bottomGuideline->horizontalCenter().anchorLine); - QCOMPARE(aChanges->baseline().item, leftGuideline->baseline().item); - QCOMPARE(aChanges->baseline().anchorLine, leftGuideline->baseline().anchorLine); + QCOMPARE(aChanges->anchors()->horizontalCenter().item, bottomGuideline->horizontalCenter().item); + QCOMPARE(aChanges->anchors()->horizontalCenter().anchorLine, bottomGuideline->horizontalCenter().anchorLine); + QCOMPARE(aChanges->anchors()->baseline().item, leftGuideline->baseline().item); + QCOMPARE(aChanges->anchors()->baseline().anchorLine, leftGuideline->baseline().anchorLine); delete rect; } diff --git a/tests/auto/declarative/visual/animation/reanchor/reanchor.qml b/tests/auto/declarative/visual/animation/reanchor/reanchor.qml index e41a254..1d0495e 100644 --- a/tests/auto/declarative/visual/animation/reanchor/reanchor.qml +++ b/tests/auto/declarative/visual/animation/reanchor/reanchor.qml @@ -36,18 +36,19 @@ Rectangle { name: "reanchored" AnchorChanges { target: myRect; - left: leftGuideline.left - right: container.right - top: container.top - bottom: bottomGuideline.bottom + anchors.left: leftGuideline.left + anchors.right: container.right + anchors.top: container.top + anchors.bottom: bottomGuideline.bottom } }, State { name: "reanchored2" AnchorChanges { target: myRect; - reset: "left, right" - top: topGuideline2.top - bottom: bottomGuideline2.bottom + anchors.left: undefined + anchors.right: undefined + anchors.top: topGuideline2.top + anchors.bottom: bottomGuideline2.bottom } }] -- cgit v0.12 From 3828aea7c4a1e08d518c32e585929e379116e870 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Thu, 25 Mar 2010 15:24:52 +1000 Subject: Rename qdeclarativetime -> qmltime Consistent with "qml" runtime binary --- tests/benchmarks/declarative/declarative.pro | 2 +- .../declarative/qdeclarativetime/example.qml | 14 -- .../qdeclarativetime/qdeclarativetime.cpp | 231 --------------------- .../qdeclarativetime/qdeclarativetime.pro | 23 -- .../qdeclarativetime/tests/anchors/empty.qml | 34 --- .../qdeclarativetime/tests/anchors/fill.qml | 41 ---- .../qdeclarativetime/tests/anchors/null.qml | 27 --- .../qdeclarativetime/tests/animation/large.qml | 41 ---- .../tests/animation/largeNoProps.qml | 41 ---- .../tests/item_creation/children.qml | 34 --- .../qdeclarativetime/tests/item_creation/data.qml | 34 --- .../tests/item_creation/no_creation.qml | 12 -- .../tests/item_creation/resources.qml | 34 --- .../qdeclarativetime/tests/loader/Loaded.qml | 7 - .../tests/loader/component_loader.qml | 16 -- .../qdeclarativetime/tests/loader/empty_loader.qml | 15 -- .../qdeclarativetime/tests/loader/no_loader.qml | 14 -- .../tests/loader/source_loader.qml | 16 -- .../tests/positioner_creation/no_positioner.qml | 37 ---- .../tests/positioner_creation/null_positioner.qml | 34 --- .../tests/positioner_creation/positioner.qml | 37 ---- tests/benchmarks/declarative/qmltime/example.qml | 14 ++ tests/benchmarks/declarative/qmltime/qmltime.cpp | 231 +++++++++++++++++++++ tests/benchmarks/declarative/qmltime/qmltime.pro | 23 ++ .../declarative/qmltime/tests/anchors/empty.qml | 34 +++ .../declarative/qmltime/tests/anchors/fill.qml | 41 ++++ .../declarative/qmltime/tests/anchors/null.qml | 27 +++ .../declarative/qmltime/tests/animation/large.qml | 41 ++++ .../qmltime/tests/animation/largeNoProps.qml | 41 ++++ .../qmltime/tests/item_creation/children.qml | 34 +++ .../qmltime/tests/item_creation/data.qml | 34 +++ .../qmltime/tests/item_creation/no_creation.qml | 12 ++ .../qmltime/tests/item_creation/resources.qml | 34 +++ .../declarative/qmltime/tests/loader/Loaded.qml | 7 + .../qmltime/tests/loader/component_loader.qml | 16 ++ .../qmltime/tests/loader/empty_loader.qml | 15 ++ .../declarative/qmltime/tests/loader/no_loader.qml | 14 ++ .../qmltime/tests/loader/source_loader.qml | 16 ++ .../tests/positioner_creation/no_positioner.qml | 37 ++++ .../tests/positioner_creation/null_positioner.qml | 34 +++ .../tests/positioner_creation/positioner.qml | 37 ++++ 41 files changed, 743 insertions(+), 743 deletions(-) delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/example.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/qdeclarativetime.cpp delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/qdeclarativetime.pro delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/anchors/empty.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/anchors/fill.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/anchors/null.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/animation/large.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/animation/largeNoProps.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/children.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/data.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/no_creation.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/resources.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/loader/Loaded.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/loader/component_loader.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/loader/empty_loader.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/loader/no_loader.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/loader/source_loader.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/no_positioner.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/null_positioner.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/positioner.qml create mode 100644 tests/benchmarks/declarative/qmltime/example.qml create mode 100644 tests/benchmarks/declarative/qmltime/qmltime.cpp create mode 100644 tests/benchmarks/declarative/qmltime/qmltime.pro create mode 100644 tests/benchmarks/declarative/qmltime/tests/anchors/empty.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/anchors/fill.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/anchors/null.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/animation/large.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/animation/largeNoProps.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/item_creation/children.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/item_creation/data.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/item_creation/no_creation.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/item_creation/resources.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/loader/Loaded.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/loader/component_loader.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/loader/empty_loader.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/loader/no_loader.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/loader/source_loader.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/positioner_creation/no_positioner.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/positioner_creation/null_positioner.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/positioner_creation/positioner.qml diff --git a/tests/benchmarks/declarative/declarative.pro b/tests/benchmarks/declarative/declarative.pro index 38ea6c4..a7d426c 100644 --- a/tests/benchmarks/declarative/declarative.pro +++ b/tests/benchmarks/declarative/declarative.pro @@ -8,4 +8,4 @@ SUBDIRS += \ qdeclarativeimage \ qdeclarativemetaproperty \ script \ - qdeclarativetime + qmltime diff --git a/tests/benchmarks/declarative/qdeclarativetime/example.qml b/tests/benchmarks/declarative/qdeclarativetime/example.qml deleted file mode 100644 index dd6185d..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/example.qml +++ /dev/null @@ -1,14 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - property string name: "Bob Smith" - - QDeclarativeTime.Timer { - component: Item { - Text { text: name } - } - } -} - diff --git a/tests/benchmarks/declarative/qdeclarativetime/qdeclarativetime.cpp b/tests/benchmarks/declarative/qdeclarativetime/qdeclarativetime.cpp deleted file mode 100644 index 20f0d93d..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/qdeclarativetime.cpp +++ /dev/null @@ -1,231 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include - -class Timer : public QObject -{ - Q_OBJECT - Q_PROPERTY(QDeclarativeComponent *component READ component WRITE setComponent); - -public: - Timer(); - - QDeclarativeComponent *component() const; - void setComponent(QDeclarativeComponent *); - - static Timer *timerInstance(); - - void run(uint); - - bool willParent() const; - void setWillParent(bool p); - -private: - void runTest(QDeclarativeContext *, uint); - - QDeclarativeComponent *m_component; - static Timer *m_timer; - - bool m_willparent; - QGraphicsScene m_scene; - QGraphicsRectItem m_item; -}; -QML_DECLARE_TYPE(Timer); - -Timer *Timer::m_timer = 0; - -Timer::Timer() -: m_component(0), m_willparent(false) -{ - if (m_timer) - qWarning("Timer: Timer already registered"); - m_timer = this; - - m_scene.setItemIndexMethod(QGraphicsScene::NoIndex); - m_scene.addItem(&m_item); -} - -QDeclarativeComponent *Timer::component() const -{ - return m_component; -} - -void Timer::setComponent(QDeclarativeComponent *c) -{ - m_component = c; -} - -Timer *Timer::timerInstance() -{ - return m_timer; -} - -void Timer::run(uint iterations) -{ - QDeclarativeContext context(qmlContext(this)); - - QObject *o = m_component->create(&context); - QGraphicsObject *go = qobject_cast(o); - if (m_willparent && go) - go->setParentItem(&m_item); - delete o; - - runTest(&context, iterations); -} - -bool Timer::willParent() const -{ - return m_willparent; -} - -void Timer::setWillParent(bool p) -{ - m_willparent = p; -} - -void Timer::runTest(QDeclarativeContext *context, uint iterations) -{ - QTime t; - t.start(); - for (uint ii = 0; ii < iterations; ++ii) { - QObject *o = m_component->create(context); - QGraphicsObject *go = qobject_cast(o); - if (m_willparent && go) - go->setParentItem(&m_item); - delete o; - } - - int e = t.elapsed(); - - qWarning() << "Total:" << e << "ms, Per iteration:" << qreal(e) / qreal(iterations) << "ms"; - -} - -void usage(const char *name) -{ - qWarning("Usage: %s [-iterations ] [-parent] ", name); - exit(-1); -} - -int main(int argc, char ** argv) -{ - QApplication app(argc, argv); - - qmlRegisterType("QDeclarativeTime", 1, 0, "Timer"); - - uint iterations = 1024; - QString filename; - bool willParent = false; - - for (int ii = 1; ii < argc; ++ii) { - QByteArray arg(argv[ii]); - - if (arg == "-iterations") { - if (ii + 1 < argc) { - ++ii; - QByteArray its(argv[ii]); - bool ok = false; - iterations = its.toUInt(&ok); - if (!ok) - usage(argv[0]); - } else { - usage(argv[0]); - } - } else if (arg == "-parent") { - willParent = true; - } else { - filename = QLatin1String(argv[ii]); - } - } - - if (filename.isEmpty()) -#ifdef Q_OS_SYMBIAN - filename = QLatin1String("./tests/item_creation/data.qml"); -#else - usage(argv[0]); -#endif - - QDeclarativeEngine engine; - QDeclarativeComponent component(&engine, filename); - if (component.isError()) { - qWarning() << component.errors(); - return -1; - } - - QObject *obj = component.create(); - if (!obj) { - qWarning() << component.errors(); - return -1; - } - - Timer *timer = Timer::timerInstance(); - if (!timer) { - qWarning() << "A Tester.Timer instance is required."; - return -1; - } - -#ifdef Q_OS_SYMBIAN - willParent = true; -#endif - timer->setWillParent(willParent); - - if (!timer->component()) { - qWarning() << "The timer has no component"; - return -1; - } - -#ifdef Q_OS_SYMBIAN - iterations = 1024; -#endif - - timer->run(iterations); - - return 0; -} - -#include "qdeclarativetime.moc" diff --git a/tests/benchmarks/declarative/qdeclarativetime/qdeclarativetime.pro b/tests/benchmarks/declarative/qdeclarativetime/qdeclarativetime.pro deleted file mode 100644 index 7902ee1..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/qdeclarativetime.pro +++ /dev/null @@ -1,23 +0,0 @@ -load(qttest_p4) -TEMPLATE = app -TARGET = qdeclarativetime -QT += declarative -macx:CONFIG -= app_bundle - -SOURCES += qdeclarativetime.cpp - -symbian* { - TARGET.CAPABILITY = "All -TCB" - example.sources = example.qml - esample.path = . - tests.sources = tests/* - tests.path = tests - anshors.sources = tests/anchors/* - anchors.path = tests/anchors - item_creation.sources = tests/item_creation/* - item_creation.path = tests/item_creation - positioner_creation.sources = tests/positioner_creation/* - positioner_creation.path = tests/positioner_creation - DEPLOYMENT += example tests anchors item_creation positioner_creation -} - diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/anchors/empty.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/anchors/empty.qml deleted file mode 100644 index 8d93594..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/anchors/empty.qml +++ /dev/null @@ -1,34 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - Item { - Item { - anchors.leftMargin: 0 - } - Item { - anchors.leftMargin: 0 - } - Item { - anchors.leftMargin: 0 - } - Item { - anchors.leftMargin: 0 - } - Item { - anchors.leftMargin: 0 - } - Item { - anchors.leftMargin: 0 - } - Item { - anchors.leftMargin: 0 - } - } - } - } -} - diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/anchors/fill.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/anchors/fill.qml deleted file mode 100644 index 918c48a..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/anchors/fill.qml +++ /dev/null @@ -1,41 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - Item { - Item { - anchors.fill: parent - anchors.leftMargin: 0 - } - Item { - anchors.fill: parent - anchors.leftMargin: 0 - } - Item { - anchors.fill: parent - anchors.leftMargin: 0 - } - Item { - anchors.fill: parent - anchors.leftMargin: 0 - } - Item { - anchors.fill: parent - anchors.leftMargin: 0 - } - Item { - anchors.fill: parent - anchors.leftMargin: 0 - } - Item { - anchors.fill: parent - anchors.leftMargin: 0 - } - } - } - } -} - diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/anchors/null.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/anchors/null.qml deleted file mode 100644 index bb84538..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/anchors/null.qml +++ /dev/null @@ -1,27 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - Item { - Item { - } - Item { - } - Item { - } - Item { - } - Item { - } - Item { - } - Item { - } - } - } - } -} - diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/animation/large.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/animation/large.qml deleted file mode 100644 index 978e3bf..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/animation/large.qml +++ /dev/null @@ -1,41 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - ParallelAnimation { - NumberAnimation { duration: 500 } - NumberAnimation { duration: 4000; } - NumberAnimation { duration: 2000; easing.type: "OutBack"} - ColorAnimation { duration: 3000} - SequentialAnimation { - PauseAnimation { duration: 1000 } - ScriptAction { script: doSomething(); } - PauseAnimation { duration: 800 } - ScriptAction { script: doSomethingElse(); } - PauseAnimation { duration: 800 } - ParallelAnimation { - NumberAnimation { duration: 200;} - SequentialAnimation { - PauseAnimation { duration: 200} - ParallelAnimation { - NumberAnimation { duration: 300;} - NumberAnimation { duration: 300;} - } - NumberAnimation { from: 0; to: 1; duration: 500 } - PauseAnimation { duration: 200 } - NumberAnimation { from: 1; to: 0; duration: 500 } - } - SequentialAnimation { - PauseAnimation { duration: 150} - NumberAnimation { duration: 300; easing.type: "OutBounce" } - } - } - } - } - } - } - -} diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/animation/largeNoProps.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/animation/largeNoProps.qml deleted file mode 100644 index cceb3f4..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/animation/largeNoProps.qml +++ /dev/null @@ -1,41 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - ParallelAnimation { - NumberAnimation { } - NumberAnimation { } - NumberAnimation { } - ColorAnimation { } - SequentialAnimation { - PauseAnimation { } - ScriptAction { } - PauseAnimation { } - ScriptAction { } - PauseAnimation { } - ParallelAnimation { - NumberAnimation { } - SequentialAnimation { - PauseAnimation { } - ParallelAnimation { - NumberAnimation { } - NumberAnimation { } - } - NumberAnimation { } - PauseAnimation { } - NumberAnimation { } - } - SequentialAnimation { - PauseAnimation { } - NumberAnimation { } - } - } - } - } - } - } - -} diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/children.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/children.qml deleted file mode 100644 index 3387a32..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/children.qml +++ /dev/null @@ -1,34 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - Item { - children: [ - Rectangle { }, - Rectangle { }, - Item { }, - Image { }, - Text { }, - Item { }, - Item { }, - Image { }, - Image { }, - Row { }, - Image { }, - Image { }, - Column { }, - Row { }, - Text { }, - Text { }, - Text { }, - MouseArea { } - ] - - } - } - } - -} diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/data.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/data.qml deleted file mode 100644 index a8b653c..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/data.qml +++ /dev/null @@ -1,34 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - Item { - data: [ - Rectangle { }, - Rectangle { }, - Item { }, - Image { }, - Text { }, - Item { }, - Item { }, - Image { }, - Image { }, - Row { }, - Image { }, - Image { }, - Column { }, - Row { }, - Text { }, - Text { }, - Text { }, - MouseArea { } - ] - - } - } - } - -} diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/no_creation.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/no_creation.qml deleted file mode 100644 index 0a507d4..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/no_creation.qml +++ /dev/null @@ -1,12 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - Item { - } - } - } -} diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/resources.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/resources.qml deleted file mode 100644 index 227d8ad..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/resources.qml +++ /dev/null @@ -1,34 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - Item { - resources: [ - Rectangle { }, - Rectangle { }, - Item { }, - Image { }, - Text { }, - Item { }, - Item { }, - Image { }, - Image { }, - Row { }, - Image { }, - Image { }, - Column { }, - Row { }, - Text { }, - Text { }, - Text { }, - MouseArea { } - ] - - } - } - } - -} diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/loader/Loaded.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/loader/Loaded.qml deleted file mode 100644 index 6f8d849..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/loader/Loaded.qml +++ /dev/null @@ -1,7 +0,0 @@ -import Qt 4.6 - -Item { - Rectangle {} - Text {} - Image {} -} diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/loader/component_loader.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/loader/component_loader.qml deleted file mode 100644 index 270add4..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/loader/component_loader.qml +++ /dev/null @@ -1,16 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - Item { - Loader { - sourceComponent: Loaded {} - } - } - } - } -} - diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/loader/empty_loader.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/loader/empty_loader.qml deleted file mode 100644 index d3b84cc..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/loader/empty_loader.qml +++ /dev/null @@ -1,15 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - Item { - Loader {} - Loaded {} - } - } - } -} - diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/loader/no_loader.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/loader/no_loader.qml deleted file mode 100644 index a94a12a..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/loader/no_loader.qml +++ /dev/null @@ -1,14 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - Item { - Loaded {} - } - } - } -} - diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/loader/source_loader.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/loader/source_loader.qml deleted file mode 100644 index 39ed1a6..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/loader/source_loader.qml +++ /dev/null @@ -1,16 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - Item { - Loader { - source: "Loaded.qml" - } - } - } - } -} - diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/no_positioner.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/no_positioner.qml deleted file mode 100644 index c1f54a4..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/no_positioner.qml +++ /dev/null @@ -1,37 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - QDeclarativeTime.Timer { - component: Component { - Item { - Rectangle { } - Rectangle { } - Item { - Image { } - Text { } - } - - Item { - Item { - Image { } - Image { } - Item { - Image { } - Image { } - } - } - - Item { - Item { - Text { } - Text { } - } - Text { } - } - } - MouseArea { } - } - } - } -} diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/null_positioner.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/null_positioner.qml deleted file mode 100644 index d49ff78..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/null_positioner.qml +++ /dev/null @@ -1,34 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - QDeclarativeTime.Timer { - component: Component { - Item { - Rectangle { } - Rectangle { } - Item { - Image { } - Text { } - } - - Item { - Item { - Image { } - Image { } - Row { } - Image { } - Image { } - } - - Column { } - Row { } - Text { } - Text { } - Text { } - } - MouseArea { } - } - } - } -} diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/positioner.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/positioner.qml deleted file mode 100644 index 05ca804..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/positioner.qml +++ /dev/null @@ -1,37 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - QDeclarativeTime.Timer { - component: Component { - Item { - Rectangle { } - Rectangle { } - Item { - Image { } - Text { } - } - - Item { - Item { - Image { } - Image { } - Row { - Image { } - Image { } - } - } - - Column { - Row { - Text { } - Text { } - } - Text { } - } - } - MouseArea { } - } - } - } -} diff --git a/tests/benchmarks/declarative/qmltime/example.qml b/tests/benchmarks/declarative/qmltime/example.qml new file mode 100644 index 0000000..68889f0 --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/example.qml @@ -0,0 +1,14 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + property string name: "Bob Smith" + + QmlTime.Timer { + component: Item { + Text { text: name } + } + } +} + diff --git a/tests/benchmarks/declarative/qmltime/qmltime.cpp b/tests/benchmarks/declarative/qmltime/qmltime.cpp new file mode 100644 index 0000000..3932e01 --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/qmltime.cpp @@ -0,0 +1,231 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include +#include +#include +#include +#include +#include +#include +#include + +class Timer : public QObject +{ + Q_OBJECT + Q_PROPERTY(QDeclarativeComponent *component READ component WRITE setComponent); + +public: + Timer(); + + QDeclarativeComponent *component() const; + void setComponent(QDeclarativeComponent *); + + static Timer *timerInstance(); + + void run(uint); + + bool willParent() const; + void setWillParent(bool p); + +private: + void runTest(QDeclarativeContext *, uint); + + QDeclarativeComponent *m_component; + static Timer *m_timer; + + bool m_willparent; + QGraphicsScene m_scene; + QGraphicsRectItem m_item; +}; +QML_DECLARE_TYPE(Timer); + +Timer *Timer::m_timer = 0; + +Timer::Timer() +: m_component(0), m_willparent(false) +{ + if (m_timer) + qWarning("Timer: Timer already registered"); + m_timer = this; + + m_scene.setItemIndexMethod(QGraphicsScene::NoIndex); + m_scene.addItem(&m_item); +} + +QDeclarativeComponent *Timer::component() const +{ + return m_component; +} + +void Timer::setComponent(QDeclarativeComponent *c) +{ + m_component = c; +} + +Timer *Timer::timerInstance() +{ + return m_timer; +} + +void Timer::run(uint iterations) +{ + QDeclarativeContext context(qmlContext(this)); + + QObject *o = m_component->create(&context); + QGraphicsObject *go = qobject_cast(o); + if (m_willparent && go) + go->setParentItem(&m_item); + delete o; + + runTest(&context, iterations); +} + +bool Timer::willParent() const +{ + return m_willparent; +} + +void Timer::setWillParent(bool p) +{ + m_willparent = p; +} + +void Timer::runTest(QDeclarativeContext *context, uint iterations) +{ + QTime t; + t.start(); + for (uint ii = 0; ii < iterations; ++ii) { + QObject *o = m_component->create(context); + QGraphicsObject *go = qobject_cast(o); + if (m_willparent && go) + go->setParentItem(&m_item); + delete o; + } + + int e = t.elapsed(); + + qWarning() << "Total:" << e << "ms, Per iteration:" << qreal(e) / qreal(iterations) << "ms"; + +} + +void usage(const char *name) +{ + qWarning("Usage: %s [-iterations ] [-parent] ", name); + exit(-1); +} + +int main(int argc, char ** argv) +{ + QApplication app(argc, argv); + + qmlRegisterType("QmlTime", 1, 0, "Timer"); + + uint iterations = 1024; + QString filename; + bool willParent = false; + + for (int ii = 1; ii < argc; ++ii) { + QByteArray arg(argv[ii]); + + if (arg == "-iterations") { + if (ii + 1 < argc) { + ++ii; + QByteArray its(argv[ii]); + bool ok = false; + iterations = its.toUInt(&ok); + if (!ok) + usage(argv[0]); + } else { + usage(argv[0]); + } + } else if (arg == "-parent") { + willParent = true; + } else { + filename = QLatin1String(argv[ii]); + } + } + + if (filename.isEmpty()) +#ifdef Q_OS_SYMBIAN + filename = QLatin1String("./tests/item_creation/data.qml"); +#else + usage(argv[0]); +#endif + + QDeclarativeEngine engine; + QDeclarativeComponent component(&engine, filename); + if (component.isError()) { + qWarning() << component.errors(); + return -1; + } + + QObject *obj = component.create(); + if (!obj) { + qWarning() << component.errors(); + return -1; + } + + Timer *timer = Timer::timerInstance(); + if (!timer) { + qWarning() << "A Tester.Timer instance is required."; + return -1; + } + +#ifdef Q_OS_SYMBIAN + willParent = true; +#endif + timer->setWillParent(willParent); + + if (!timer->component()) { + qWarning() << "The timer has no component"; + return -1; + } + +#ifdef Q_OS_SYMBIAN + iterations = 1024; +#endif + + timer->run(iterations); + + return 0; +} + +#include "qmltime.moc" diff --git a/tests/benchmarks/declarative/qmltime/qmltime.pro b/tests/benchmarks/declarative/qmltime/qmltime.pro new file mode 100644 index 0000000..9352f3b --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/qmltime.pro @@ -0,0 +1,23 @@ +load(qttest_p4) +TEMPLATE = app +TARGET = qmltime +QT += declarative +macx:CONFIG -= app_bundle + +SOURCES += qmltime.cpp + +symbian* { + TARGET.CAPABILITY = "All -TCB" + example.sources = example.qml + esample.path = . + tests.sources = tests/* + tests.path = tests + anshors.sources = tests/anchors/* + anchors.path = tests/anchors + item_creation.sources = tests/item_creation/* + item_creation.path = tests/item_creation + positioner_creation.sources = tests/positioner_creation/* + positioner_creation.path = tests/positioner_creation + DEPLOYMENT += example tests anchors item_creation positioner_creation +} + diff --git a/tests/benchmarks/declarative/qmltime/tests/anchors/empty.qml b/tests/benchmarks/declarative/qmltime/tests/anchors/empty.qml new file mode 100644 index 0000000..31c879b --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/anchors/empty.qml @@ -0,0 +1,34 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + Item { + Item { + anchors.leftMargin: 0 + } + Item { + anchors.leftMargin: 0 + } + Item { + anchors.leftMargin: 0 + } + Item { + anchors.leftMargin: 0 + } + Item { + anchors.leftMargin: 0 + } + Item { + anchors.leftMargin: 0 + } + Item { + anchors.leftMargin: 0 + } + } + } + } +} + diff --git a/tests/benchmarks/declarative/qmltime/tests/anchors/fill.qml b/tests/benchmarks/declarative/qmltime/tests/anchors/fill.qml new file mode 100644 index 0000000..23fe78e --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/anchors/fill.qml @@ -0,0 +1,41 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + Item { + Item { + anchors.fill: parent + anchors.leftMargin: 0 + } + Item { + anchors.fill: parent + anchors.leftMargin: 0 + } + Item { + anchors.fill: parent + anchors.leftMargin: 0 + } + Item { + anchors.fill: parent + anchors.leftMargin: 0 + } + Item { + anchors.fill: parent + anchors.leftMargin: 0 + } + Item { + anchors.fill: parent + anchors.leftMargin: 0 + } + Item { + anchors.fill: parent + anchors.leftMargin: 0 + } + } + } + } +} + diff --git a/tests/benchmarks/declarative/qmltime/tests/anchors/null.qml b/tests/benchmarks/declarative/qmltime/tests/anchors/null.qml new file mode 100644 index 0000000..bc447ef --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/anchors/null.qml @@ -0,0 +1,27 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + Item { + Item { + } + Item { + } + Item { + } + Item { + } + Item { + } + Item { + } + Item { + } + } + } + } +} + diff --git a/tests/benchmarks/declarative/qmltime/tests/animation/large.qml b/tests/benchmarks/declarative/qmltime/tests/animation/large.qml new file mode 100644 index 0000000..c1cdb68 --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/animation/large.qml @@ -0,0 +1,41 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + ParallelAnimation { + NumberAnimation { duration: 500 } + NumberAnimation { duration: 4000; } + NumberAnimation { duration: 2000; easing.type: "OutBack"} + ColorAnimation { duration: 3000} + SequentialAnimation { + PauseAnimation { duration: 1000 } + ScriptAction { script: doSomething(); } + PauseAnimation { duration: 800 } + ScriptAction { script: doSomethingElse(); } + PauseAnimation { duration: 800 } + ParallelAnimation { + NumberAnimation { duration: 200;} + SequentialAnimation { + PauseAnimation { duration: 200} + ParallelAnimation { + NumberAnimation { duration: 300;} + NumberAnimation { duration: 300;} + } + NumberAnimation { from: 0; to: 1; duration: 500 } + PauseAnimation { duration: 200 } + NumberAnimation { from: 1; to: 0; duration: 500 } + } + SequentialAnimation { + PauseAnimation { duration: 150} + NumberAnimation { duration: 300; easing.type: "OutBounce" } + } + } + } + } + } + } + +} diff --git a/tests/benchmarks/declarative/qmltime/tests/animation/largeNoProps.qml b/tests/benchmarks/declarative/qmltime/tests/animation/largeNoProps.qml new file mode 100644 index 0000000..3db9f08 --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/animation/largeNoProps.qml @@ -0,0 +1,41 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + ParallelAnimation { + NumberAnimation { } + NumberAnimation { } + NumberAnimation { } + ColorAnimation { } + SequentialAnimation { + PauseAnimation { } + ScriptAction { } + PauseAnimation { } + ScriptAction { } + PauseAnimation { } + ParallelAnimation { + NumberAnimation { } + SequentialAnimation { + PauseAnimation { } + ParallelAnimation { + NumberAnimation { } + NumberAnimation { } + } + NumberAnimation { } + PauseAnimation { } + NumberAnimation { } + } + SequentialAnimation { + PauseAnimation { } + NumberAnimation { } + } + } + } + } + } + } + +} diff --git a/tests/benchmarks/declarative/qmltime/tests/item_creation/children.qml b/tests/benchmarks/declarative/qmltime/tests/item_creation/children.qml new file mode 100644 index 0000000..996602c --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/item_creation/children.qml @@ -0,0 +1,34 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + Item { + children: [ + Rectangle { }, + Rectangle { }, + Item { }, + Image { }, + Text { }, + Item { }, + Item { }, + Image { }, + Image { }, + Row { }, + Image { }, + Image { }, + Column { }, + Row { }, + Text { }, + Text { }, + Text { }, + MouseArea { } + ] + + } + } + } + +} diff --git a/tests/benchmarks/declarative/qmltime/tests/item_creation/data.qml b/tests/benchmarks/declarative/qmltime/tests/item_creation/data.qml new file mode 100644 index 0000000..9f79c34 --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/item_creation/data.qml @@ -0,0 +1,34 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + Item { + data: [ + Rectangle { }, + Rectangle { }, + Item { }, + Image { }, + Text { }, + Item { }, + Item { }, + Image { }, + Image { }, + Row { }, + Image { }, + Image { }, + Column { }, + Row { }, + Text { }, + Text { }, + Text { }, + MouseArea { } + ] + + } + } + } + +} diff --git a/tests/benchmarks/declarative/qmltime/tests/item_creation/no_creation.qml b/tests/benchmarks/declarative/qmltime/tests/item_creation/no_creation.qml new file mode 100644 index 0000000..f228c2a --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/item_creation/no_creation.qml @@ -0,0 +1,12 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + Item { + } + } + } +} diff --git a/tests/benchmarks/declarative/qmltime/tests/item_creation/resources.qml b/tests/benchmarks/declarative/qmltime/tests/item_creation/resources.qml new file mode 100644 index 0000000..335aeb8 --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/item_creation/resources.qml @@ -0,0 +1,34 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + Item { + resources: [ + Rectangle { }, + Rectangle { }, + Item { }, + Image { }, + Text { }, + Item { }, + Item { }, + Image { }, + Image { }, + Row { }, + Image { }, + Image { }, + Column { }, + Row { }, + Text { }, + Text { }, + Text { }, + MouseArea { } + ] + + } + } + } + +} diff --git a/tests/benchmarks/declarative/qmltime/tests/loader/Loaded.qml b/tests/benchmarks/declarative/qmltime/tests/loader/Loaded.qml new file mode 100644 index 0000000..6f8d849 --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/loader/Loaded.qml @@ -0,0 +1,7 @@ +import Qt 4.6 + +Item { + Rectangle {} + Text {} + Image {} +} diff --git a/tests/benchmarks/declarative/qmltime/tests/loader/component_loader.qml b/tests/benchmarks/declarative/qmltime/tests/loader/component_loader.qml new file mode 100644 index 0000000..65d5010 --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/loader/component_loader.qml @@ -0,0 +1,16 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + Item { + Loader { + sourceComponent: Loaded {} + } + } + } + } +} + diff --git a/tests/benchmarks/declarative/qmltime/tests/loader/empty_loader.qml b/tests/benchmarks/declarative/qmltime/tests/loader/empty_loader.qml new file mode 100644 index 0000000..2dfe922 --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/loader/empty_loader.qml @@ -0,0 +1,15 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + Item { + Loader {} + Loaded {} + } + } + } +} + diff --git a/tests/benchmarks/declarative/qmltime/tests/loader/no_loader.qml b/tests/benchmarks/declarative/qmltime/tests/loader/no_loader.qml new file mode 100644 index 0000000..1fa0d3b --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/loader/no_loader.qml @@ -0,0 +1,14 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + Item { + Loaded {} + } + } + } +} + diff --git a/tests/benchmarks/declarative/qmltime/tests/loader/source_loader.qml b/tests/benchmarks/declarative/qmltime/tests/loader/source_loader.qml new file mode 100644 index 0000000..33bb91c --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/loader/source_loader.qml @@ -0,0 +1,16 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + Item { + Loader { + source: "Loaded.qml" + } + } + } + } +} + diff --git a/tests/benchmarks/declarative/qmltime/tests/positioner_creation/no_positioner.qml b/tests/benchmarks/declarative/qmltime/tests/positioner_creation/no_positioner.qml new file mode 100644 index 0000000..97bad47 --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/positioner_creation/no_positioner.qml @@ -0,0 +1,37 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + QmlTime.Timer { + component: Component { + Item { + Rectangle { } + Rectangle { } + Item { + Image { } + Text { } + } + + Item { + Item { + Image { } + Image { } + Item { + Image { } + Image { } + } + } + + Item { + Item { + Text { } + Text { } + } + Text { } + } + } + MouseArea { } + } + } + } +} diff --git a/tests/benchmarks/declarative/qmltime/tests/positioner_creation/null_positioner.qml b/tests/benchmarks/declarative/qmltime/tests/positioner_creation/null_positioner.qml new file mode 100644 index 0000000..36dda15 --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/positioner_creation/null_positioner.qml @@ -0,0 +1,34 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + QmlTime.Timer { + component: Component { + Item { + Rectangle { } + Rectangle { } + Item { + Image { } + Text { } + } + + Item { + Item { + Image { } + Image { } + Row { } + Image { } + Image { } + } + + Column { } + Row { } + Text { } + Text { } + Text { } + } + MouseArea { } + } + } + } +} diff --git a/tests/benchmarks/declarative/qmltime/tests/positioner_creation/positioner.qml b/tests/benchmarks/declarative/qmltime/tests/positioner_creation/positioner.qml new file mode 100644 index 0000000..396e27d --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/positioner_creation/positioner.qml @@ -0,0 +1,37 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + QmlTime.Timer { + component: Component { + Item { + Rectangle { } + Rectangle { } + Item { + Image { } + Text { } + } + + Item { + Item { + Image { } + Image { } + Row { + Image { } + Image { } + } + } + + Column { + Row { + Text { } + Text { } + } + Text { } + } + } + MouseArea { } + } + } + } +} -- cgit v0.12 From 3ded7df045edf0639d83664605aa4236715c6d39 Mon Sep 17 00:00:00 2001 From: Alexis Menard Date: Thu, 25 Mar 2010 07:02:48 +0100 Subject: Remove the children property from QDeclarativeItem. This commit remove the children property from QDeclarativeItem because it's now in QGraphicsObject. This commit also get rid of width and height properties to use the one in QGraphicsObject. Task-number:QT-2757 Reviewed-by:akennedy --- src/declarative/graphicsitems/qdeclarativeitem.cpp | 173 +++++++++------------ src/declarative/graphicsitems/qdeclarativeitem.h | 8 +- src/declarative/graphicsitems/qdeclarativeitem_p.h | 25 +-- 3 files changed, 93 insertions(+), 113 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index 9b1bdba..f61ad8e 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -1273,16 +1273,6 @@ QDeclarativeKeysAttached *QDeclarativeKeysAttached::qmlAttachedProperties(QObjec */ /*! - \fn void QDeclarativeItem::widthChanged() - \internal -*/ - -/*! - \fn void QDeclarativeItem::heightChanged() - \internal -*/ - -/*! \fn void QDeclarativeItem::stateChanged(const QString &state) \internal */ @@ -1462,11 +1452,6 @@ QDeclarativeItem *QDeclarativeItem::parentItem() const */ /*! - \property QDeclarativeItem::children - \internal -*/ - -/*! \property QDeclarativeItem::resources \internal */ @@ -1500,11 +1485,12 @@ QDeclarativeAnchors *QDeclarativeItem::anchors() void QDeclarativeItemPrivate::data_append(QDeclarativeListProperty *prop, QObject *o) { - QDeclarativeItem *i = qobject_cast(o); - if (i) + QGraphicsObject *i = qobject_cast(o); + if (i) { i->setParentItem(static_cast(prop->object)); - else + } else { o->setParent(static_cast(prop->object)); + } } QObject *QDeclarativeItemPrivate::resources_at(QDeclarativeListProperty *prop, int index) @@ -1526,27 +1512,6 @@ int QDeclarativeItemPrivate::resources_count(QDeclarativeListProperty * return prop->object->children().count(); } -QDeclarativeItem *QDeclarativeItemPrivate::children_at(QDeclarativeListProperty *prop, int index) -{ - QList children = static_cast(prop->object)->childItems(); - - if (index < children.count()) - return qobject_cast(children.at(index)); - else - return 0; -} - -void QDeclarativeItemPrivate::children_append(QDeclarativeListProperty *prop, QDeclarativeItem *i) -{ - if (i) - i->setParentItem(static_cast(prop->object)); -} - -int QDeclarativeItemPrivate::children_count(QDeclarativeListProperty *prop) -{ - return static_cast(prop->object)->childItems().count(); -} - int QDeclarativeItemPrivate::transform_count(QDeclarativeListProperty *list) { QGraphicsObject *object = qobject_cast(list->object); @@ -1678,18 +1643,6 @@ void QDeclarativeItem::setClip(bool c) */ /*! - \property QDeclarativeItem::width - - Defines the item's width relative to its parent. - */ - -/*! - \property QDeclarativeItem::height - - Defines the item's height relative to its parent. - */ - -/*! \qmlproperty real Item::z Sets the stacking order of the item. By default the stacking order is 0. @@ -1801,11 +1754,11 @@ void QDeclarativeItem::geometryChanged(const QRectF &newGeometry, if (newGeometry.x() != oldGeometry.x()) emit xChanged(); if (newGeometry.width() != oldGeometry.width()) - emit widthChanged(newGeometry.width()); + emit widthChanged(); if (newGeometry.y() != oldGeometry.y()) emit yChanged(); if (newGeometry.height() != oldGeometry.height()) - emit heightChanged(newGeometry.height()); + emit heightChanged(); for(int ii = 0; ii < d->changeListeners.count(); ++ii) { const QDeclarativeItemPrivate::ChangeListener &change = d->changeListeners.at(ii); @@ -2281,14 +2234,6 @@ void QDeclarativeItemPrivate::focusChanged(bool flag) } /*! \internal */ -QDeclarativeListProperty QDeclarativeItem::fxChildren() -{ - return QDeclarativeListProperty(this, 0, QDeclarativeItemPrivate::children_append, - QDeclarativeItemPrivate::children_count, - QDeclarativeItemPrivate::children_at); -} - -/*! \internal */ QDeclarativeListProperty QDeclarativeItem::resources() { return QDeclarativeListProperty(this, 0, QDeclarativeItemPrivate::resources_append, @@ -2632,7 +2577,7 @@ QVariant QDeclarativeItem::itemChange(GraphicsItemChange change, QRectF QDeclarativeItem::boundingRect() const { Q_D(const QDeclarativeItem); - return QRectF(0, 0, d->width, d->height); + return QRectF(0, 0, d->mWidth, d->mHeight); } /*! @@ -2717,33 +2662,50 @@ void QDeclarativeItem::setSmooth(bool smooth) qreal QDeclarativeItem::width() const { Q_D(const QDeclarativeItem); - return d->width; + return d->width(); } void QDeclarativeItem::setWidth(qreal w) { Q_D(QDeclarativeItem); + d->setWidth(w); +} + +void QDeclarativeItem::resetWidth() +{ + Q_D(QDeclarativeItem); + d->resetWidth(); +} + +qreal QDeclarativeItemPrivate::width() const +{ + return mWidth; +} + +void QDeclarativeItemPrivate::setWidth(qreal w) +{ + Q_Q(QDeclarativeItem); if (qIsNaN(w)) return; - d->widthValid = true; - if (d->width == w) + widthValid = true; + if (mWidth == w) return; - qreal oldWidth = d->width; + qreal oldWidth = mWidth; - prepareGeometryChange(); - d->width = w; + q->prepareGeometryChange(); + mWidth = w; - geometryChanged(QRectF(x(), y(), width(), height()), - QRectF(x(), y(), oldWidth, height())); + q->geometryChanged(QRectF(q->x(), q->y(), width(), height()), + QRectF(q->x(), q->y(), oldWidth, height())); } -void QDeclarativeItem::resetWidth() +void QDeclarativeItemPrivate ::resetWidth() { - Q_D(QDeclarativeItem); - d->widthValid = false; - setImplicitWidth(implicitWidth()); + Q_Q(QDeclarativeItem); + widthValid = false; + q->setImplicitWidth(q->implicitWidth()); } /*! @@ -2763,13 +2725,13 @@ void QDeclarativeItem::setImplicitWidth(qreal w) { Q_D(QDeclarativeItem); d->implicitWidth = w; - if (d->width == w || widthValid()) + if (d->mWidth == w || widthValid()) return; - qreal oldWidth = d->width; + qreal oldWidth = d->mWidth; prepareGeometryChange(); - d->width = w; + d->mWidth = w; geometryChanged(QRectF(x(), y(), width(), height()), QRectF(x(), y(), oldWidth, height())); @@ -2787,33 +2749,50 @@ bool QDeclarativeItem::widthValid() const qreal QDeclarativeItem::height() const { Q_D(const QDeclarativeItem); - return d->height; + return d->height(); } void QDeclarativeItem::setHeight(qreal h) { Q_D(QDeclarativeItem); + d->setHeight(h); +} + +void QDeclarativeItem::resetHeight() +{ + Q_D(QDeclarativeItem); + d->resetHeight(); +} + +qreal QDeclarativeItemPrivate::height() const +{ + return mHeight; +} + +void QDeclarativeItemPrivate::setHeight(qreal h) +{ + Q_Q(QDeclarativeItem); if (qIsNaN(h)) return; - d->heightValid = true; - if (d->height == h) + heightValid = true; + if (mHeight == h) return; - qreal oldHeight = d->height; + qreal oldHeight = mHeight; - prepareGeometryChange(); - d->height = h; + q->prepareGeometryChange(); + mHeight = h; - geometryChanged(QRectF(x(), y(), width(), height()), - QRectF(x(), y(), width(), oldHeight)); + q->geometryChanged(QRectF(q->x(), q->y(), width(), height()), + QRectF(q->x(), q->y(), width(), oldHeight)); } -void QDeclarativeItem::resetHeight() +void QDeclarativeItemPrivate::resetHeight() { - Q_D(QDeclarativeItem); - d->heightValid = false; - setImplicitHeight(implicitHeight()); + Q_Q(QDeclarativeItem); + heightValid = false; + q->setImplicitHeight(q->implicitHeight()); } /*! @@ -2833,13 +2812,13 @@ void QDeclarativeItem::setImplicitHeight(qreal h) { Q_D(QDeclarativeItem); d->implicitHeight = h; - if (d->height == h || heightValid()) + if (d->mHeight == h || heightValid()) return; - qreal oldHeight = d->height; + qreal oldHeight = d->mHeight; prepareGeometryChange(); - d->height = h; + d->mHeight = h; geometryChanged(QRectF(x(), y(), width(), height()), QRectF(x(), y(), width(), oldHeight)); @@ -2861,15 +2840,15 @@ void QDeclarativeItem::setSize(const QSizeF &size) d->heightValid = true; d->widthValid = true; - if (d->height == size.height() && d->width == size.width()) + if (d->height() == size.height() && d->width() == size.width()) return; - qreal oldHeight = d->height; - qreal oldWidth = d->width; + qreal oldHeight = d->height(); + qreal oldWidth = d->width(); prepareGeometryChange(); - d->height = size.height(); - d->width = size.width(); + d->setHeight(size.height()); + d->setWidth(size.width()); geometryChanged(QRectF(x(), y(), width(), height()), QRectF(x(), y(), oldWidth, oldHeight)); diff --git a/src/declarative/graphicsitems/qdeclarativeitem.h b/src/declarative/graphicsitems/qdeclarativeitem.h index c88b1db..712e854 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.h +++ b/src/declarative/graphicsitems/qdeclarativeitem.h @@ -71,13 +71,10 @@ class Q_DECLARATIVE_EXPORT QDeclarativeItem : public QGraphicsObject, public QDe Q_PROPERTY(QDeclarativeItem * parent READ parentItem WRITE setParentItem NOTIFY parentChanged DESIGNABLE false FINAL) Q_PROPERTY(QDeclarativeListProperty data READ data DESIGNABLE false) - Q_PROPERTY(QDeclarativeListProperty children READ fxChildren DESIGNABLE false NOTIFY childrenChanged) Q_PROPERTY(QDeclarativeListProperty resources READ resources DESIGNABLE false) Q_PROPERTY(QDeclarativeListProperty states READ states DESIGNABLE false) Q_PROPERTY(QDeclarativeListProperty transitions READ transitions DESIGNABLE false) Q_PROPERTY(QString state READ state WRITE setState NOTIFY stateChanged) - Q_PROPERTY(qreal width READ width WRITE setWidth NOTIFY widthChanged RESET resetWidth FINAL) - Q_PROPERTY(qreal height READ height WRITE setHeight NOTIFY heightChanged RESET resetHeight FINAL) Q_PROPERTY(QRectF childrenRect READ childrenRect NOTIFY childrenRectChanged DESIGNABLE false FINAL) Q_PROPERTY(QDeclarativeAnchors * anchors READ anchors DESIGNABLE false CONSTANT FINAL) Q_PROPERTY(QDeclarativeAnchorLine left READ left CONSTANT FINAL) @@ -113,7 +110,6 @@ public: void setParent(QDeclarativeItem *parent) { setParentItem(parent); } QDeclarativeListProperty data(); - QDeclarativeListProperty fxChildren(); QDeclarativeListProperty resources(); QDeclarativeAnchors *anchors(); @@ -173,8 +169,6 @@ public: QDeclarativeAnchorLine baseline() const; Q_SIGNALS: - void widthChanged(qreal); - void heightChanged(qreal); void childrenChanged(); void childrenRectChanged(const QRectF &); void baselineOffsetChanged(qreal); @@ -235,9 +229,11 @@ QDebug Q_DECLARATIVE_EXPORT operator<<(QDebug debug, QDeclarativeItem *item); QT_END_NAMESPACE QML_DECLARE_TYPE(QDeclarativeItem) +QML_DECLARE_TYPE(QGraphicsObject) QML_DECLARE_TYPE(QGraphicsTransform) QML_DECLARE_TYPE(QGraphicsScale) QML_DECLARE_TYPE(QGraphicsRotation) +QML_DECLARE_TYPE(QGraphicsWidget) QML_DECLARE_TYPE(QAction) QT_END_HEADER diff --git a/src/declarative/graphicsitems/qdeclarativeitem_p.h b/src/declarative/graphicsitems/qdeclarativeitem_p.h index 55df063..56b0d77 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem_p.h +++ b/src/declarative/graphicsitems/qdeclarativeitem_p.h @@ -114,7 +114,7 @@ public: widthValid(false), heightValid(false), _componentComplete(true), _keepMouse(false), smooth(false), keyHandler(0), - width(0), height(0), implicitWidth(0), implicitHeight(0) + mWidth(0), mHeight(0), implicitWidth(0), implicitHeight(0) { QGraphicsItemPrivate::acceptedMouseButtons = 0; QGraphicsItemPrivate::flags = QGraphicsItem::GraphicsItemFlags( @@ -136,6 +136,16 @@ public: QString _id; + // Private Properties + qreal width() const; + void setWidth(qreal); + void resetWidth(); + + qreal height() const; + void setHeight(qreal); + void resetHeight(); + + // data property static void data_append(QDeclarativeListProperty *, QObject *); @@ -144,11 +154,6 @@ public: static void resources_append(QDeclarativeListProperty *, QObject *); static int resources_count(QDeclarativeListProperty *); - // children property - static QDeclarativeItem *children_at(QDeclarativeListProperty *, int); - static void children_append(QDeclarativeListProperty *, QDeclarativeItem *); - static int children_count(QDeclarativeListProperty *); - // transform property static int transform_count(QDeclarativeListProperty *list); static void transform_append(QDeclarativeListProperty *list, QGraphicsTransform *); @@ -222,8 +227,8 @@ public: QDeclarativeItemKeyFilter *keyHandler; - qreal width; - qreal height; + qreal mWidth; + qreal mHeight; qreal implicitWidth; qreal implicitHeight; @@ -232,9 +237,9 @@ public: virtual void setPosHelper(const QPointF &pos) { Q_Q(QDeclarativeItem); - QRectF oldGeometry(this->pos.x(), this->pos.y(), width, height); + QRectF oldGeometry(this->pos.x(), this->pos.y(), mWidth, mHeight); QGraphicsItemPrivate::setPosHelper(pos); - q->geometryChanged(QRectF(this->pos.x(), this->pos.y(), width, height), oldGeometry); + q->geometryChanged(QRectF(this->pos.x(), this->pos.y(), mWidth, mHeight), oldGeometry); } // Reimplemented from QGraphicsItemPrivate -- cgit v0.12 From c2df63f457229ce8d3806a30f75221796c931c86 Mon Sep 17 00:00:00 2001 From: Alexis Menard Date: Thu, 25 Mar 2010 07:05:32 +0100 Subject: Fix the build due to new properties in QGraphicsObject. Reviewed-by:Martin Jones --- .../graphicsitems/qdeclarativegraphicsobjectcontainer.cpp | 10 +++++----- .../graphicsitems/qdeclarativegraphicsobjectcontainer_p.h | 1 - 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativegraphicsobjectcontainer.cpp b/src/declarative/graphicsitems/qdeclarativegraphicsobjectcontainer.cpp index eb5b6ce..ff85bbd 100644 --- a/src/declarative/graphicsitems/qdeclarativegraphicsobjectcontainer.cpp +++ b/src/declarative/graphicsitems/qdeclarativegraphicsobjectcontainer.cpp @@ -65,12 +65,12 @@ public: if (graphicsObject && graphicsObject->isWidget()) { if (!on) { graphicsObject->removeEventFilter(q); - QObject::disconnect(q, SIGNAL(widthChanged(qreal)), q, SLOT(_q_updateSize())); - QObject::disconnect(q, SIGNAL(heightChanged(qreal)), q, SLOT(_q_updateSize())); + QObject::disconnect(q, SIGNAL(widthChanged()), q, SLOT(_q_updateSize())); + QObject::disconnect(q, SIGNAL(heightChanged()), q, SLOT(_q_updateSize())); } else { graphicsObject->installEventFilter(q); - QObject::connect(q, SIGNAL(widthChanged(qreal)), q, SLOT(_q_updateSize())); - QObject::connect(q, SIGNAL(heightChanged(qreal)), q, SLOT(_q_updateSize())); + QObject::connect(q, SIGNAL(widthChanged()), q, SLOT(_q_updateSize())); + QObject::connect(q, SIGNAL(heightChanged()), q, SLOT(_q_updateSize())); } } } @@ -251,7 +251,7 @@ void QDeclarativeGraphicsObjectContainerPrivate::_q_updateSize() return; QGraphicsWidget *gw = static_cast(graphicsObject); - const QSizeF newSize(width, height); + const QSizeF newSize(width(), height()); gw->resize(newSize); //### will respecting the widgets min/max ever get us in trouble? (all other items always diff --git a/src/declarative/graphicsitems/qdeclarativegraphicsobjectcontainer_p.h b/src/declarative/graphicsitems/qdeclarativegraphicsobjectcontainer_p.h index 95d7a4b..20c5bcf 100644 --- a/src/declarative/graphicsitems/qdeclarativegraphicsobjectcontainer_p.h +++ b/src/declarative/graphicsitems/qdeclarativegraphicsobjectcontainer_p.h @@ -82,7 +82,6 @@ private: QT_END_NAMESPACE -QML_DECLARE_TYPE(QGraphicsObject) QML_DECLARE_TYPE(QDeclarativeGraphicsObjectContainer) QT_END_HEADER -- cgit v0.12 From f4c7b4f046669a4a3d6ed1e8d538e17648d27b4d Mon Sep 17 00:00:00 2001 From: Alexis Menard Date: Thu, 25 Mar 2010 07:06:38 +0100 Subject: Protect the QDeclarativeListProperty used in QGraphicsItem with ifdef Then it fixes the build Reviewed-by:TrustMe --- src/declarative/qml/qdeclarativelist.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/declarative/qml/qdeclarativelist.h b/src/declarative/qml/qdeclarativelist.h index ed402a8..bd87990 100644 --- a/src/declarative/qml/qdeclarativelist.h +++ b/src/declarative/qml/qdeclarativelist.h @@ -54,6 +54,9 @@ QT_MODULE(Declarative) class QObject; struct QMetaObject; + +#ifndef QDECLARATIVELISTPROPERTY +#define QDECLARATIVELISTPROPERTY template struct QDeclarativeListProperty { typedef void (*AppendFunction)(QDeclarativeListProperty *, T*); @@ -106,6 +109,7 @@ private: return ((QList *)p->data)->clear(); } }; +#endif class QDeclarativeEngine; class QDeclarativeListReferencePrivate; -- cgit v0.12 From 9ace4e68eb0636284ecf73ed82e4518bbf0208be Mon Sep 17 00:00:00 2001 From: Alexis Menard Date: Thu, 25 Mar 2010 07:08:15 +0100 Subject: Port Flickable and Flipable to support QGraphicsObject. Replacing QDeclarativeItem* members by QGraphicsObject*. Build fix too. Reviewed-by:akennedy --- .../graphicsitems/qdeclarativeflickable.cpp | 4 ++-- .../graphicsitems/qdeclarativeflickable_p.h | 4 ++-- .../graphicsitems/qdeclarativeflipable.cpp | 21 +++++++++++---------- .../graphicsitems/qdeclarativeflipable_p.h | 12 ++++++------ 4 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp index 9ccb3b6..98502fd 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp @@ -990,10 +990,10 @@ QDeclarativeListProperty QDeclarativeFlickable::flickableData() return QDeclarativeListProperty(this, (void *)d, QDeclarativeFlickablePrivate::data_append); } -QDeclarativeListProperty QDeclarativeFlickable::flickableChildren() +QDeclarativeListProperty QDeclarativeFlickable::flickableChildren() { Q_D(QDeclarativeFlickable); - return d->viewport->fxChildren(); + return QGraphicsItemPrivate::get(d->viewport)->childrenList(); } /*! diff --git a/src/declarative/graphicsitems/qdeclarativeflickable_p.h b/src/declarative/graphicsitems/qdeclarativeflickable_p.h index 7dcab98..1fa2c74 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable_p.h +++ b/src/declarative/graphicsitems/qdeclarativeflickable_p.h @@ -82,7 +82,7 @@ class Q_DECLARATIVE_EXPORT QDeclarativeFlickable : public QDeclarativeItem Q_PROPERTY(QDeclarativeFlickableVisibleArea *visibleArea READ visibleArea CONSTANT) Q_PROPERTY(QDeclarativeListProperty flickableData READ flickableData) - Q_PROPERTY(QDeclarativeListProperty flickableChildren READ flickableChildren) + Q_PROPERTY(QDeclarativeListProperty flickableChildren READ flickableChildren) Q_CLASSINFO("DefaultProperty", "flickableData") Q_ENUMS(FlickDirection) @@ -92,7 +92,7 @@ public: ~QDeclarativeFlickable(); QDeclarativeListProperty flickableData(); - QDeclarativeListProperty flickableChildren(); + QDeclarativeListProperty flickableChildren(); bool overShoot() const; void setOverShoot(bool); diff --git a/src/declarative/graphicsitems/qdeclarativeflipable.cpp b/src/declarative/graphicsitems/qdeclarativeflipable.cpp index 0e2ae63..cb4044f 100644 --- a/src/declarative/graphicsitems/qdeclarativeflipable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflipable.cpp @@ -59,8 +59,8 @@ public: void updateSceneTransformFromParent(); QDeclarativeFlipable::Side current; - QDeclarativeGuard front; - QDeclarativeGuard back; + QDeclarativeGuard front; + QDeclarativeGuard back; }; /*! @@ -112,13 +112,13 @@ QDeclarativeFlipable::~QDeclarativeFlipable() The front and back sides of the flipable. */ -QDeclarativeItem *QDeclarativeFlipable::front() +QGraphicsObject *QDeclarativeFlipable::front() { Q_D(const QDeclarativeFlipable); return d->front; } -void QDeclarativeFlipable::setFront(QDeclarativeItem *front) +void QDeclarativeFlipable::setFront(QGraphicsObject *front) { Q_D(QDeclarativeFlipable); if (d->front) { @@ -131,13 +131,13 @@ void QDeclarativeFlipable::setFront(QDeclarativeItem *front) d->front->setOpacity(0.); } -QDeclarativeItem *QDeclarativeFlipable::back() +QGraphicsObject *QDeclarativeFlipable::back() { Q_D(const QDeclarativeFlipable); return d->back; } -void QDeclarativeFlipable::setBack(QDeclarativeItem *back) +void QDeclarativeFlipable::setBack(QGraphicsObject *back) { Q_D(QDeclarativeFlipable); if (d->back) { @@ -195,12 +195,13 @@ void QDeclarativeFlipablePrivate::updateSceneTransformFromParent() current = newSide; if (current == QDeclarativeFlipable::Back && back) { QTransform mat; - mat.translate(back->width()/2,back->height()/2); - if (back->width() && p1.x() >= p2.x()) + QGraphicsItemPrivate *dBack = QGraphicsItemPrivate::get(back); + mat.translate(dBack->width()/2,dBack->height()/2); + if (dBack->width() && p1.x() >= p2.x()) mat.rotate(180, Qt::YAxis); - if (back->height() && p2.y() >= p3.y()) + if (dBack->height() && p2.y() >= p3.y()) mat.rotate(180, Qt::XAxis); - mat.translate(-back->width()/2,-back->height()/2); + mat.translate(-dBack->width()/2,-dBack->height()/2); back->setTransform(mat); } if (front) diff --git a/src/declarative/graphicsitems/qdeclarativeflipable_p.h b/src/declarative/graphicsitems/qdeclarativeflipable_p.h index 8b9c24c..302f083 100644 --- a/src/declarative/graphicsitems/qdeclarativeflipable_p.h +++ b/src/declarative/graphicsitems/qdeclarativeflipable_p.h @@ -60,8 +60,8 @@ class Q_DECLARATIVE_EXPORT QDeclarativeFlipable : public QDeclarativeItem Q_OBJECT Q_ENUMS(Side) - Q_PROPERTY(QDeclarativeItem *front READ front WRITE setFront) - Q_PROPERTY(QDeclarativeItem *back READ back WRITE setBack) + Q_PROPERTY(QGraphicsObject *front READ front WRITE setFront) + Q_PROPERTY(QGraphicsObject *back READ back WRITE setBack) Q_PROPERTY(Side side READ side NOTIFY sideChanged) //### flipAxis //### flipRotation @@ -69,11 +69,11 @@ public: QDeclarativeFlipable(QDeclarativeItem *parent=0); ~QDeclarativeFlipable(); - QDeclarativeItem *front(); - void setFront(QDeclarativeItem *); + QGraphicsObject *front(); + void setFront(QGraphicsObject *); - QDeclarativeItem *back(); - void setBack(QDeclarativeItem *); + QGraphicsObject *back(); + void setBack(QGraphicsObject *); enum Side { Front, Back }; Side side() const; -- cgit v0.12 From 4ad6036f30db22562df4478babdc61820d94f774 Mon Sep 17 00:00:00 2001 From: Alexis Menard Date: Thu, 25 Mar 2010 07:16:42 +0100 Subject: Build Fix and port to new width and height properties Reviewed-by:Martin Jones --- src/declarative/graphicsitems/qdeclarativeborderimage.cpp | 2 +- src/declarative/graphicsitems/qdeclarativelistview.cpp | 4 ++-- src/declarative/graphicsitems/qdeclarativepainteditem.cpp | 4 ++-- src/declarative/graphicsitems/qdeclarativerectangle.cpp | 2 +- src/declarative/util/qdeclarativeview.cpp | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp index a7534b8..f92c207 100644 --- a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp @@ -444,7 +444,7 @@ void QDeclarativeBorderImage::paint(QPainter *p, const QStyleOptionGraphicsItem const QDeclarativeScaleGrid *border = d->getScaleGrid(); QMargins margins(border->left(), border->top(), border->right(), border->bottom()); QTileRules rules((Qt::TileRule)d->horizontalTileMode, (Qt::TileRule)d->verticalTileMode); - qDrawBorderPixmap(p, QRect(0, 0, (int)d->width, (int)d->height), margins, d->pix, d->pix.rect(), margins, rules); + qDrawBorderPixmap(p, QRect(0, 0, (int)d->width(), (int)d->height()), margins, d->pix, d->pix.rect(), margins, rules); if (d->smooth) { p->setRenderHint(QPainter::Antialiasing, oldAA); p->setRenderHint(QPainter::SmoothPixmapTransform, oldSmooth); diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 320a2f0..8a70c07 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -562,7 +562,7 @@ void QDeclarativeListViewPrivate::releaseItem(FxListItem *item) return; if (trackedItem == item) { const char *notifier1 = orient == QDeclarativeListView::Vertical ? SIGNAL(yChanged()) : SIGNAL(xChanged()); - const char *notifier2 = orient == QDeclarativeListView::Vertical ? SIGNAL(heightChanged(qreal)) : SIGNAL(widthChanged(qreal)); + const char *notifier2 = orient == QDeclarativeListView::Vertical ? SIGNAL(heightChanged()) : SIGNAL(widthChanged()); QObject::disconnect(trackedItem->item, notifier1, q, SLOT(trackedPositionChanged())); QObject::disconnect(trackedItem->item, notifier2, q, SLOT(trackedPositionChanged())); trackedItem = 0; @@ -763,7 +763,7 @@ void QDeclarativeListViewPrivate::updateTrackedItem() FxListItem *oldTracked = trackedItem; const char *notifier1 = orient == QDeclarativeListView::Vertical ? SIGNAL(yChanged()) : SIGNAL(xChanged()); - const char *notifier2 = orient == QDeclarativeListView::Vertical ? SIGNAL(heightChanged(qreal)) : SIGNAL(widthChanged(qreal)); + const char *notifier2 = orient == QDeclarativeListView::Vertical ? SIGNAL(heightChanged()) : SIGNAL(widthChanged()); if (trackedItem && item != trackedItem) { QObject::disconnect(trackedItem->item, notifier1, q, SLOT(trackedPositionChanged())); diff --git a/src/declarative/graphicsitems/qdeclarativepainteditem.cpp b/src/declarative/graphicsitems/qdeclarativepainteditem.cpp index 28a93d2..ab6007a 100644 --- a/src/declarative/graphicsitems/qdeclarativepainteditem.cpp +++ b/src/declarative/graphicsitems/qdeclarativepainteditem.cpp @@ -211,8 +211,8 @@ QDeclarativePaintedItem::~QDeclarativePaintedItem() */ void QDeclarativePaintedItem::init() { - connect(this,SIGNAL(widthChanged(qreal)),this,SLOT(clearCache())); - connect(this,SIGNAL(heightChanged(qreal)),this,SLOT(clearCache())); + connect(this,SIGNAL(widthChanged()),this,SLOT(clearCache())); + connect(this,SIGNAL(heightChanged()),this,SLOT(clearCache())); connect(this,SIGNAL(visibleChanged()),this,SLOT(clearCache())); } diff --git a/src/declarative/graphicsitems/qdeclarativerectangle.cpp b/src/declarative/graphicsitems/qdeclarativerectangle.cpp index 207d05e..b82fb53 100644 --- a/src/declarative/graphicsitems/qdeclarativerectangle.cpp +++ b/src/declarative/graphicsitems/qdeclarativerectangle.cpp @@ -470,7 +470,7 @@ void QDeclarativeRectangle::drawRect(QPainter &p) QRectF QDeclarativeRectangle::boundingRect() const { Q_D(const QDeclarativeRectangle); - return QRectF(-d->paintmargin, -d->paintmargin, d->width+d->paintmargin*2, d->height+d->paintmargin*2); + return QRectF(-d->paintmargin, -d->paintmargin, d->width()+d->paintmargin*2, d->height()+d->paintmargin*2); } QT_END_NAMESPACE diff --git a/src/declarative/util/qdeclarativeview.cpp b/src/declarative/util/qdeclarativeview.cpp index d97fb5f..8e65151 100644 --- a/src/declarative/util/qdeclarativeview.cpp +++ b/src/declarative/util/qdeclarativeview.cpp @@ -448,8 +448,8 @@ void QDeclarativeView::setRootObject(QObject *obj) d->root = item; d->qmlRoot = item; - connect(item, SIGNAL(widthChanged(qreal)), this, SLOT(sizeChanged())); - connect(item, SIGNAL(heightChanged(qreal)), this, SLOT(sizeChanged())); + connect(item, SIGNAL(widthChanged()), this, SLOT(sizeChanged())); + connect(item, SIGNAL(heightChanged()), this, SLOT(sizeChanged())); if (d->initialSize.height() <= 0 && d->qmlRoot->width() > 0) d->initialSize.setWidth(d->qmlRoot->width()); if (d->initialSize.height() <= 0 && d->qmlRoot->height() > 0) -- cgit v0.12 From 18137c664abd3bb3825ec44864a938d1acaf7b79 Mon Sep 17 00:00:00 2001 From: Alexis Menard Date: Thu, 25 Mar 2010 07:38:55 +0100 Subject: Auto-test fix. Also fix a connect in QDeclarativeItem. Reviewed-by:TrustMe --- src/declarative/graphicsitems/qdeclarativeitem.cpp | 4 ++-- .../auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp | 10 ++-------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index f61ad8e..e6ade00 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -312,9 +312,9 @@ void QDeclarativeContents::setItem(QDeclarativeItem *item) QDeclarativeItem *child = qobject_cast(children.at(i)); if(!child)//### Should this be ignoring non-QDeclarativeItem graphicsobjects? continue; - connect(child, SIGNAL(heightChanged(qreal)), this, SLOT(calcHeight())); + connect(child, SIGNAL(heightChanged()), this, SLOT(calcHeight())); connect(child, SIGNAL(yChanged()), this, SLOT(calcHeight())); - connect(child, SIGNAL(widthChanged(qreal)), this, SLOT(calcWidth())); + connect(child, SIGNAL(widthChanged()), this, SLOT(calcWidth())); connect(child, SIGNAL(xChanged()), this, SLOT(calcWidth())); connect(this, SIGNAL(rectChanged(QRectF)), m_item, SIGNAL(childrenRectChanged(QRectF))); } diff --git a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp index ba69cd8..7665e18 100644 --- a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp +++ b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp @@ -421,8 +421,8 @@ void tst_QDeclarativeItem::propertyChanges() QVERIFY(parentItem); QSignalSpy parentSpy(item, SIGNAL(parentChanged(QDeclarativeItem *))); - QSignalSpy widthSpy(item, SIGNAL(widthChanged(qreal))); - QSignalSpy heightSpy(item, SIGNAL(heightChanged(qreal))); + QSignalSpy widthSpy(item, SIGNAL(widthChanged())); + QSignalSpy heightSpy(item, SIGNAL(heightChanged())); QSignalSpy baselineOffsetSpy(item, SIGNAL(baselineOffsetChanged(qreal))); QSignalSpy childrenRectSpy(parentItem, SIGNAL(childrenRectChanged(QRectF))); QSignalSpy focusSpy(item, SIGNAL(focusChanged(bool))); @@ -442,15 +442,9 @@ void tst_QDeclarativeItem::propertyChanges() QCOMPARE(item->width(), 100.0); QCOMPARE(widthSpy.count(),1); - QList widthArguments = widthSpy.first(); - QVERIFY(widthArguments.count() == 1); - QCOMPARE(item->width(), widthArguments.at(0).toReal()); QCOMPARE(item->height(), 200.0); QCOMPARE(heightSpy.count(),1); - QList heightArguments = heightSpy.first(); - QVERIFY(heightArguments.count() == 1); - QCOMPARE(item->height(), heightArguments.at(0).toReal()); QCOMPARE(item->baselineOffset(), 10.0); QCOMPARE(baselineOffsetSpy.count(),1); -- cgit v0.12 From 0ae469c1bbe2f5fa033b88116546b293a8bdf565 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Thu, 25 Mar 2010 15:24:52 +1000 Subject: Rename qdeclarativetime -> qmltime Consistent with "qml" runtime binary --- tests/benchmarks/declarative/declarative.pro | 2 +- .../declarative/qdeclarativetime/example.qml | 14 -- .../qdeclarativetime/qdeclarativetime.cpp | 231 --------------------- .../qdeclarativetime/qdeclarativetime.pro | 23 -- .../qdeclarativetime/tests/anchors/empty.qml | 34 --- .../qdeclarativetime/tests/anchors/fill.qml | 41 ---- .../qdeclarativetime/tests/anchors/null.qml | 27 --- .../qdeclarativetime/tests/animation/large.qml | 41 ---- .../tests/animation/largeNoProps.qml | 41 ---- .../tests/item_creation/children.qml | 34 --- .../qdeclarativetime/tests/item_creation/data.qml | 34 --- .../tests/item_creation/no_creation.qml | 12 -- .../tests/item_creation/resources.qml | 34 --- .../qdeclarativetime/tests/loader/Loaded.qml | 7 - .../tests/loader/component_loader.qml | 16 -- .../qdeclarativetime/tests/loader/empty_loader.qml | 15 -- .../qdeclarativetime/tests/loader/no_loader.qml | 14 -- .../tests/loader/source_loader.qml | 16 -- .../tests/positioner_creation/no_positioner.qml | 37 ---- .../tests/positioner_creation/null_positioner.qml | 34 --- .../tests/positioner_creation/positioner.qml | 37 ---- tests/benchmarks/declarative/qmltime/example.qml | 14 ++ tests/benchmarks/declarative/qmltime/qmltime.cpp | 231 +++++++++++++++++++++ tests/benchmarks/declarative/qmltime/qmltime.pro | 23 ++ .../declarative/qmltime/tests/anchors/empty.qml | 34 +++ .../declarative/qmltime/tests/anchors/fill.qml | 41 ++++ .../declarative/qmltime/tests/anchors/null.qml | 27 +++ .../declarative/qmltime/tests/animation/large.qml | 41 ++++ .../qmltime/tests/animation/largeNoProps.qml | 41 ++++ .../qmltime/tests/item_creation/children.qml | 34 +++ .../qmltime/tests/item_creation/data.qml | 34 +++ .../qmltime/tests/item_creation/no_creation.qml | 12 ++ .../qmltime/tests/item_creation/resources.qml | 34 +++ .../declarative/qmltime/tests/loader/Loaded.qml | 7 + .../qmltime/tests/loader/component_loader.qml | 16 ++ .../qmltime/tests/loader/empty_loader.qml | 15 ++ .../declarative/qmltime/tests/loader/no_loader.qml | 14 ++ .../qmltime/tests/loader/source_loader.qml | 16 ++ .../tests/positioner_creation/no_positioner.qml | 37 ++++ .../tests/positioner_creation/null_positioner.qml | 34 +++ .../tests/positioner_creation/positioner.qml | 37 ++++ 41 files changed, 743 insertions(+), 743 deletions(-) delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/example.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/qdeclarativetime.cpp delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/qdeclarativetime.pro delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/anchors/empty.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/anchors/fill.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/anchors/null.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/animation/large.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/animation/largeNoProps.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/children.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/data.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/no_creation.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/resources.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/loader/Loaded.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/loader/component_loader.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/loader/empty_loader.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/loader/no_loader.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/loader/source_loader.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/no_positioner.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/null_positioner.qml delete mode 100644 tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/positioner.qml create mode 100644 tests/benchmarks/declarative/qmltime/example.qml create mode 100644 tests/benchmarks/declarative/qmltime/qmltime.cpp create mode 100644 tests/benchmarks/declarative/qmltime/qmltime.pro create mode 100644 tests/benchmarks/declarative/qmltime/tests/anchors/empty.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/anchors/fill.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/anchors/null.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/animation/large.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/animation/largeNoProps.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/item_creation/children.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/item_creation/data.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/item_creation/no_creation.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/item_creation/resources.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/loader/Loaded.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/loader/component_loader.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/loader/empty_loader.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/loader/no_loader.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/loader/source_loader.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/positioner_creation/no_positioner.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/positioner_creation/null_positioner.qml create mode 100644 tests/benchmarks/declarative/qmltime/tests/positioner_creation/positioner.qml diff --git a/tests/benchmarks/declarative/declarative.pro b/tests/benchmarks/declarative/declarative.pro index 38ea6c4..a7d426c 100644 --- a/tests/benchmarks/declarative/declarative.pro +++ b/tests/benchmarks/declarative/declarative.pro @@ -8,4 +8,4 @@ SUBDIRS += \ qdeclarativeimage \ qdeclarativemetaproperty \ script \ - qdeclarativetime + qmltime diff --git a/tests/benchmarks/declarative/qdeclarativetime/example.qml b/tests/benchmarks/declarative/qdeclarativetime/example.qml deleted file mode 100644 index dd6185d..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/example.qml +++ /dev/null @@ -1,14 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - property string name: "Bob Smith" - - QDeclarativeTime.Timer { - component: Item { - Text { text: name } - } - } -} - diff --git a/tests/benchmarks/declarative/qdeclarativetime/qdeclarativetime.cpp b/tests/benchmarks/declarative/qdeclarativetime/qdeclarativetime.cpp deleted file mode 100644 index 20f0d93d..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/qdeclarativetime.cpp +++ /dev/null @@ -1,231 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include - -class Timer : public QObject -{ - Q_OBJECT - Q_PROPERTY(QDeclarativeComponent *component READ component WRITE setComponent); - -public: - Timer(); - - QDeclarativeComponent *component() const; - void setComponent(QDeclarativeComponent *); - - static Timer *timerInstance(); - - void run(uint); - - bool willParent() const; - void setWillParent(bool p); - -private: - void runTest(QDeclarativeContext *, uint); - - QDeclarativeComponent *m_component; - static Timer *m_timer; - - bool m_willparent; - QGraphicsScene m_scene; - QGraphicsRectItem m_item; -}; -QML_DECLARE_TYPE(Timer); - -Timer *Timer::m_timer = 0; - -Timer::Timer() -: m_component(0), m_willparent(false) -{ - if (m_timer) - qWarning("Timer: Timer already registered"); - m_timer = this; - - m_scene.setItemIndexMethod(QGraphicsScene::NoIndex); - m_scene.addItem(&m_item); -} - -QDeclarativeComponent *Timer::component() const -{ - return m_component; -} - -void Timer::setComponent(QDeclarativeComponent *c) -{ - m_component = c; -} - -Timer *Timer::timerInstance() -{ - return m_timer; -} - -void Timer::run(uint iterations) -{ - QDeclarativeContext context(qmlContext(this)); - - QObject *o = m_component->create(&context); - QGraphicsObject *go = qobject_cast(o); - if (m_willparent && go) - go->setParentItem(&m_item); - delete o; - - runTest(&context, iterations); -} - -bool Timer::willParent() const -{ - return m_willparent; -} - -void Timer::setWillParent(bool p) -{ - m_willparent = p; -} - -void Timer::runTest(QDeclarativeContext *context, uint iterations) -{ - QTime t; - t.start(); - for (uint ii = 0; ii < iterations; ++ii) { - QObject *o = m_component->create(context); - QGraphicsObject *go = qobject_cast(o); - if (m_willparent && go) - go->setParentItem(&m_item); - delete o; - } - - int e = t.elapsed(); - - qWarning() << "Total:" << e << "ms, Per iteration:" << qreal(e) / qreal(iterations) << "ms"; - -} - -void usage(const char *name) -{ - qWarning("Usage: %s [-iterations ] [-parent] ", name); - exit(-1); -} - -int main(int argc, char ** argv) -{ - QApplication app(argc, argv); - - qmlRegisterType("QDeclarativeTime", 1, 0, "Timer"); - - uint iterations = 1024; - QString filename; - bool willParent = false; - - for (int ii = 1; ii < argc; ++ii) { - QByteArray arg(argv[ii]); - - if (arg == "-iterations") { - if (ii + 1 < argc) { - ++ii; - QByteArray its(argv[ii]); - bool ok = false; - iterations = its.toUInt(&ok); - if (!ok) - usage(argv[0]); - } else { - usage(argv[0]); - } - } else if (arg == "-parent") { - willParent = true; - } else { - filename = QLatin1String(argv[ii]); - } - } - - if (filename.isEmpty()) -#ifdef Q_OS_SYMBIAN - filename = QLatin1String("./tests/item_creation/data.qml"); -#else - usage(argv[0]); -#endif - - QDeclarativeEngine engine; - QDeclarativeComponent component(&engine, filename); - if (component.isError()) { - qWarning() << component.errors(); - return -1; - } - - QObject *obj = component.create(); - if (!obj) { - qWarning() << component.errors(); - return -1; - } - - Timer *timer = Timer::timerInstance(); - if (!timer) { - qWarning() << "A Tester.Timer instance is required."; - return -1; - } - -#ifdef Q_OS_SYMBIAN - willParent = true; -#endif - timer->setWillParent(willParent); - - if (!timer->component()) { - qWarning() << "The timer has no component"; - return -1; - } - -#ifdef Q_OS_SYMBIAN - iterations = 1024; -#endif - - timer->run(iterations); - - return 0; -} - -#include "qdeclarativetime.moc" diff --git a/tests/benchmarks/declarative/qdeclarativetime/qdeclarativetime.pro b/tests/benchmarks/declarative/qdeclarativetime/qdeclarativetime.pro deleted file mode 100644 index 7902ee1..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/qdeclarativetime.pro +++ /dev/null @@ -1,23 +0,0 @@ -load(qttest_p4) -TEMPLATE = app -TARGET = qdeclarativetime -QT += declarative -macx:CONFIG -= app_bundle - -SOURCES += qdeclarativetime.cpp - -symbian* { - TARGET.CAPABILITY = "All -TCB" - example.sources = example.qml - esample.path = . - tests.sources = tests/* - tests.path = tests - anshors.sources = tests/anchors/* - anchors.path = tests/anchors - item_creation.sources = tests/item_creation/* - item_creation.path = tests/item_creation - positioner_creation.sources = tests/positioner_creation/* - positioner_creation.path = tests/positioner_creation - DEPLOYMENT += example tests anchors item_creation positioner_creation -} - diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/anchors/empty.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/anchors/empty.qml deleted file mode 100644 index 8d93594..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/anchors/empty.qml +++ /dev/null @@ -1,34 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - Item { - Item { - anchors.leftMargin: 0 - } - Item { - anchors.leftMargin: 0 - } - Item { - anchors.leftMargin: 0 - } - Item { - anchors.leftMargin: 0 - } - Item { - anchors.leftMargin: 0 - } - Item { - anchors.leftMargin: 0 - } - Item { - anchors.leftMargin: 0 - } - } - } - } -} - diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/anchors/fill.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/anchors/fill.qml deleted file mode 100644 index 918c48a..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/anchors/fill.qml +++ /dev/null @@ -1,41 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - Item { - Item { - anchors.fill: parent - anchors.leftMargin: 0 - } - Item { - anchors.fill: parent - anchors.leftMargin: 0 - } - Item { - anchors.fill: parent - anchors.leftMargin: 0 - } - Item { - anchors.fill: parent - anchors.leftMargin: 0 - } - Item { - anchors.fill: parent - anchors.leftMargin: 0 - } - Item { - anchors.fill: parent - anchors.leftMargin: 0 - } - Item { - anchors.fill: parent - anchors.leftMargin: 0 - } - } - } - } -} - diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/anchors/null.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/anchors/null.qml deleted file mode 100644 index bb84538..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/anchors/null.qml +++ /dev/null @@ -1,27 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - Item { - Item { - } - Item { - } - Item { - } - Item { - } - Item { - } - Item { - } - Item { - } - } - } - } -} - diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/animation/large.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/animation/large.qml deleted file mode 100644 index 978e3bf..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/animation/large.qml +++ /dev/null @@ -1,41 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - ParallelAnimation { - NumberAnimation { duration: 500 } - NumberAnimation { duration: 4000; } - NumberAnimation { duration: 2000; easing.type: "OutBack"} - ColorAnimation { duration: 3000} - SequentialAnimation { - PauseAnimation { duration: 1000 } - ScriptAction { script: doSomething(); } - PauseAnimation { duration: 800 } - ScriptAction { script: doSomethingElse(); } - PauseAnimation { duration: 800 } - ParallelAnimation { - NumberAnimation { duration: 200;} - SequentialAnimation { - PauseAnimation { duration: 200} - ParallelAnimation { - NumberAnimation { duration: 300;} - NumberAnimation { duration: 300;} - } - NumberAnimation { from: 0; to: 1; duration: 500 } - PauseAnimation { duration: 200 } - NumberAnimation { from: 1; to: 0; duration: 500 } - } - SequentialAnimation { - PauseAnimation { duration: 150} - NumberAnimation { duration: 300; easing.type: "OutBounce" } - } - } - } - } - } - } - -} diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/animation/largeNoProps.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/animation/largeNoProps.qml deleted file mode 100644 index cceb3f4..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/animation/largeNoProps.qml +++ /dev/null @@ -1,41 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - ParallelAnimation { - NumberAnimation { } - NumberAnimation { } - NumberAnimation { } - ColorAnimation { } - SequentialAnimation { - PauseAnimation { } - ScriptAction { } - PauseAnimation { } - ScriptAction { } - PauseAnimation { } - ParallelAnimation { - NumberAnimation { } - SequentialAnimation { - PauseAnimation { } - ParallelAnimation { - NumberAnimation { } - NumberAnimation { } - } - NumberAnimation { } - PauseAnimation { } - NumberAnimation { } - } - SequentialAnimation { - PauseAnimation { } - NumberAnimation { } - } - } - } - } - } - } - -} diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/children.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/children.qml deleted file mode 100644 index 3387a32..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/children.qml +++ /dev/null @@ -1,34 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - Item { - children: [ - Rectangle { }, - Rectangle { }, - Item { }, - Image { }, - Text { }, - Item { }, - Item { }, - Image { }, - Image { }, - Row { }, - Image { }, - Image { }, - Column { }, - Row { }, - Text { }, - Text { }, - Text { }, - MouseArea { } - ] - - } - } - } - -} diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/data.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/data.qml deleted file mode 100644 index a8b653c..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/data.qml +++ /dev/null @@ -1,34 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - Item { - data: [ - Rectangle { }, - Rectangle { }, - Item { }, - Image { }, - Text { }, - Item { }, - Item { }, - Image { }, - Image { }, - Row { }, - Image { }, - Image { }, - Column { }, - Row { }, - Text { }, - Text { }, - Text { }, - MouseArea { } - ] - - } - } - } - -} diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/no_creation.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/no_creation.qml deleted file mode 100644 index 0a507d4..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/no_creation.qml +++ /dev/null @@ -1,12 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - Item { - } - } - } -} diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/resources.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/resources.qml deleted file mode 100644 index 227d8ad..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/item_creation/resources.qml +++ /dev/null @@ -1,34 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - Item { - resources: [ - Rectangle { }, - Rectangle { }, - Item { }, - Image { }, - Text { }, - Item { }, - Item { }, - Image { }, - Image { }, - Row { }, - Image { }, - Image { }, - Column { }, - Row { }, - Text { }, - Text { }, - Text { }, - MouseArea { } - ] - - } - } - } - -} diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/loader/Loaded.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/loader/Loaded.qml deleted file mode 100644 index 6f8d849..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/loader/Loaded.qml +++ /dev/null @@ -1,7 +0,0 @@ -import Qt 4.6 - -Item { - Rectangle {} - Text {} - Image {} -} diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/loader/component_loader.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/loader/component_loader.qml deleted file mode 100644 index 270add4..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/loader/component_loader.qml +++ /dev/null @@ -1,16 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - Item { - Loader { - sourceComponent: Loaded {} - } - } - } - } -} - diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/loader/empty_loader.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/loader/empty_loader.qml deleted file mode 100644 index d3b84cc..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/loader/empty_loader.qml +++ /dev/null @@ -1,15 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - Item { - Loader {} - Loaded {} - } - } - } -} - diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/loader/no_loader.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/loader/no_loader.qml deleted file mode 100644 index a94a12a..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/loader/no_loader.qml +++ /dev/null @@ -1,14 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - Item { - Loaded {} - } - } - } -} - diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/loader/source_loader.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/loader/source_loader.qml deleted file mode 100644 index 39ed1a6..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/loader/source_loader.qml +++ /dev/null @@ -1,16 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - - QDeclarativeTime.Timer { - component: Component { - Item { - Loader { - source: "Loaded.qml" - } - } - } - } -} - diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/no_positioner.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/no_positioner.qml deleted file mode 100644 index c1f54a4..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/no_positioner.qml +++ /dev/null @@ -1,37 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - QDeclarativeTime.Timer { - component: Component { - Item { - Rectangle { } - Rectangle { } - Item { - Image { } - Text { } - } - - Item { - Item { - Image { } - Image { } - Item { - Image { } - Image { } - } - } - - Item { - Item { - Text { } - Text { } - } - Text { } - } - } - MouseArea { } - } - } - } -} diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/null_positioner.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/null_positioner.qml deleted file mode 100644 index d49ff78..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/null_positioner.qml +++ /dev/null @@ -1,34 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - QDeclarativeTime.Timer { - component: Component { - Item { - Rectangle { } - Rectangle { } - Item { - Image { } - Text { } - } - - Item { - Item { - Image { } - Image { } - Row { } - Image { } - Image { } - } - - Column { } - Row { } - Text { } - Text { } - Text { } - } - MouseArea { } - } - } - } -} diff --git a/tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/positioner.qml b/tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/positioner.qml deleted file mode 100644 index 05ca804..0000000 --- a/tests/benchmarks/declarative/qdeclarativetime/tests/positioner_creation/positioner.qml +++ /dev/null @@ -1,37 +0,0 @@ -import Qt 4.6 -import QDeclarativeTime 1.0 as QDeclarativeTime - -Item { - QDeclarativeTime.Timer { - component: Component { - Item { - Rectangle { } - Rectangle { } - Item { - Image { } - Text { } - } - - Item { - Item { - Image { } - Image { } - Row { - Image { } - Image { } - } - } - - Column { - Row { - Text { } - Text { } - } - Text { } - } - } - MouseArea { } - } - } - } -} diff --git a/tests/benchmarks/declarative/qmltime/example.qml b/tests/benchmarks/declarative/qmltime/example.qml new file mode 100644 index 0000000..68889f0 --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/example.qml @@ -0,0 +1,14 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + property string name: "Bob Smith" + + QmlTime.Timer { + component: Item { + Text { text: name } + } + } +} + diff --git a/tests/benchmarks/declarative/qmltime/qmltime.cpp b/tests/benchmarks/declarative/qmltime/qmltime.cpp new file mode 100644 index 0000000..3932e01 --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/qmltime.cpp @@ -0,0 +1,231 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include +#include +#include +#include +#include +#include +#include +#include + +class Timer : public QObject +{ + Q_OBJECT + Q_PROPERTY(QDeclarativeComponent *component READ component WRITE setComponent); + +public: + Timer(); + + QDeclarativeComponent *component() const; + void setComponent(QDeclarativeComponent *); + + static Timer *timerInstance(); + + void run(uint); + + bool willParent() const; + void setWillParent(bool p); + +private: + void runTest(QDeclarativeContext *, uint); + + QDeclarativeComponent *m_component; + static Timer *m_timer; + + bool m_willparent; + QGraphicsScene m_scene; + QGraphicsRectItem m_item; +}; +QML_DECLARE_TYPE(Timer); + +Timer *Timer::m_timer = 0; + +Timer::Timer() +: m_component(0), m_willparent(false) +{ + if (m_timer) + qWarning("Timer: Timer already registered"); + m_timer = this; + + m_scene.setItemIndexMethod(QGraphicsScene::NoIndex); + m_scene.addItem(&m_item); +} + +QDeclarativeComponent *Timer::component() const +{ + return m_component; +} + +void Timer::setComponent(QDeclarativeComponent *c) +{ + m_component = c; +} + +Timer *Timer::timerInstance() +{ + return m_timer; +} + +void Timer::run(uint iterations) +{ + QDeclarativeContext context(qmlContext(this)); + + QObject *o = m_component->create(&context); + QGraphicsObject *go = qobject_cast(o); + if (m_willparent && go) + go->setParentItem(&m_item); + delete o; + + runTest(&context, iterations); +} + +bool Timer::willParent() const +{ + return m_willparent; +} + +void Timer::setWillParent(bool p) +{ + m_willparent = p; +} + +void Timer::runTest(QDeclarativeContext *context, uint iterations) +{ + QTime t; + t.start(); + for (uint ii = 0; ii < iterations; ++ii) { + QObject *o = m_component->create(context); + QGraphicsObject *go = qobject_cast(o); + if (m_willparent && go) + go->setParentItem(&m_item); + delete o; + } + + int e = t.elapsed(); + + qWarning() << "Total:" << e << "ms, Per iteration:" << qreal(e) / qreal(iterations) << "ms"; + +} + +void usage(const char *name) +{ + qWarning("Usage: %s [-iterations ] [-parent] ", name); + exit(-1); +} + +int main(int argc, char ** argv) +{ + QApplication app(argc, argv); + + qmlRegisterType("QmlTime", 1, 0, "Timer"); + + uint iterations = 1024; + QString filename; + bool willParent = false; + + for (int ii = 1; ii < argc; ++ii) { + QByteArray arg(argv[ii]); + + if (arg == "-iterations") { + if (ii + 1 < argc) { + ++ii; + QByteArray its(argv[ii]); + bool ok = false; + iterations = its.toUInt(&ok); + if (!ok) + usage(argv[0]); + } else { + usage(argv[0]); + } + } else if (arg == "-parent") { + willParent = true; + } else { + filename = QLatin1String(argv[ii]); + } + } + + if (filename.isEmpty()) +#ifdef Q_OS_SYMBIAN + filename = QLatin1String("./tests/item_creation/data.qml"); +#else + usage(argv[0]); +#endif + + QDeclarativeEngine engine; + QDeclarativeComponent component(&engine, filename); + if (component.isError()) { + qWarning() << component.errors(); + return -1; + } + + QObject *obj = component.create(); + if (!obj) { + qWarning() << component.errors(); + return -1; + } + + Timer *timer = Timer::timerInstance(); + if (!timer) { + qWarning() << "A Tester.Timer instance is required."; + return -1; + } + +#ifdef Q_OS_SYMBIAN + willParent = true; +#endif + timer->setWillParent(willParent); + + if (!timer->component()) { + qWarning() << "The timer has no component"; + return -1; + } + +#ifdef Q_OS_SYMBIAN + iterations = 1024; +#endif + + timer->run(iterations); + + return 0; +} + +#include "qmltime.moc" diff --git a/tests/benchmarks/declarative/qmltime/qmltime.pro b/tests/benchmarks/declarative/qmltime/qmltime.pro new file mode 100644 index 0000000..9352f3b --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/qmltime.pro @@ -0,0 +1,23 @@ +load(qttest_p4) +TEMPLATE = app +TARGET = qmltime +QT += declarative +macx:CONFIG -= app_bundle + +SOURCES += qmltime.cpp + +symbian* { + TARGET.CAPABILITY = "All -TCB" + example.sources = example.qml + esample.path = . + tests.sources = tests/* + tests.path = tests + anshors.sources = tests/anchors/* + anchors.path = tests/anchors + item_creation.sources = tests/item_creation/* + item_creation.path = tests/item_creation + positioner_creation.sources = tests/positioner_creation/* + positioner_creation.path = tests/positioner_creation + DEPLOYMENT += example tests anchors item_creation positioner_creation +} + diff --git a/tests/benchmarks/declarative/qmltime/tests/anchors/empty.qml b/tests/benchmarks/declarative/qmltime/tests/anchors/empty.qml new file mode 100644 index 0000000..31c879b --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/anchors/empty.qml @@ -0,0 +1,34 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + Item { + Item { + anchors.leftMargin: 0 + } + Item { + anchors.leftMargin: 0 + } + Item { + anchors.leftMargin: 0 + } + Item { + anchors.leftMargin: 0 + } + Item { + anchors.leftMargin: 0 + } + Item { + anchors.leftMargin: 0 + } + Item { + anchors.leftMargin: 0 + } + } + } + } +} + diff --git a/tests/benchmarks/declarative/qmltime/tests/anchors/fill.qml b/tests/benchmarks/declarative/qmltime/tests/anchors/fill.qml new file mode 100644 index 0000000..23fe78e --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/anchors/fill.qml @@ -0,0 +1,41 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + Item { + Item { + anchors.fill: parent + anchors.leftMargin: 0 + } + Item { + anchors.fill: parent + anchors.leftMargin: 0 + } + Item { + anchors.fill: parent + anchors.leftMargin: 0 + } + Item { + anchors.fill: parent + anchors.leftMargin: 0 + } + Item { + anchors.fill: parent + anchors.leftMargin: 0 + } + Item { + anchors.fill: parent + anchors.leftMargin: 0 + } + Item { + anchors.fill: parent + anchors.leftMargin: 0 + } + } + } + } +} + diff --git a/tests/benchmarks/declarative/qmltime/tests/anchors/null.qml b/tests/benchmarks/declarative/qmltime/tests/anchors/null.qml new file mode 100644 index 0000000..bc447ef --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/anchors/null.qml @@ -0,0 +1,27 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + Item { + Item { + } + Item { + } + Item { + } + Item { + } + Item { + } + Item { + } + Item { + } + } + } + } +} + diff --git a/tests/benchmarks/declarative/qmltime/tests/animation/large.qml b/tests/benchmarks/declarative/qmltime/tests/animation/large.qml new file mode 100644 index 0000000..c1cdb68 --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/animation/large.qml @@ -0,0 +1,41 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + ParallelAnimation { + NumberAnimation { duration: 500 } + NumberAnimation { duration: 4000; } + NumberAnimation { duration: 2000; easing.type: "OutBack"} + ColorAnimation { duration: 3000} + SequentialAnimation { + PauseAnimation { duration: 1000 } + ScriptAction { script: doSomething(); } + PauseAnimation { duration: 800 } + ScriptAction { script: doSomethingElse(); } + PauseAnimation { duration: 800 } + ParallelAnimation { + NumberAnimation { duration: 200;} + SequentialAnimation { + PauseAnimation { duration: 200} + ParallelAnimation { + NumberAnimation { duration: 300;} + NumberAnimation { duration: 300;} + } + NumberAnimation { from: 0; to: 1; duration: 500 } + PauseAnimation { duration: 200 } + NumberAnimation { from: 1; to: 0; duration: 500 } + } + SequentialAnimation { + PauseAnimation { duration: 150} + NumberAnimation { duration: 300; easing.type: "OutBounce" } + } + } + } + } + } + } + +} diff --git a/tests/benchmarks/declarative/qmltime/tests/animation/largeNoProps.qml b/tests/benchmarks/declarative/qmltime/tests/animation/largeNoProps.qml new file mode 100644 index 0000000..3db9f08 --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/animation/largeNoProps.qml @@ -0,0 +1,41 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + ParallelAnimation { + NumberAnimation { } + NumberAnimation { } + NumberAnimation { } + ColorAnimation { } + SequentialAnimation { + PauseAnimation { } + ScriptAction { } + PauseAnimation { } + ScriptAction { } + PauseAnimation { } + ParallelAnimation { + NumberAnimation { } + SequentialAnimation { + PauseAnimation { } + ParallelAnimation { + NumberAnimation { } + NumberAnimation { } + } + NumberAnimation { } + PauseAnimation { } + NumberAnimation { } + } + SequentialAnimation { + PauseAnimation { } + NumberAnimation { } + } + } + } + } + } + } + +} diff --git a/tests/benchmarks/declarative/qmltime/tests/item_creation/children.qml b/tests/benchmarks/declarative/qmltime/tests/item_creation/children.qml new file mode 100644 index 0000000..996602c --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/item_creation/children.qml @@ -0,0 +1,34 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + Item { + children: [ + Rectangle { }, + Rectangle { }, + Item { }, + Image { }, + Text { }, + Item { }, + Item { }, + Image { }, + Image { }, + Row { }, + Image { }, + Image { }, + Column { }, + Row { }, + Text { }, + Text { }, + Text { }, + MouseArea { } + ] + + } + } + } + +} diff --git a/tests/benchmarks/declarative/qmltime/tests/item_creation/data.qml b/tests/benchmarks/declarative/qmltime/tests/item_creation/data.qml new file mode 100644 index 0000000..9f79c34 --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/item_creation/data.qml @@ -0,0 +1,34 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + Item { + data: [ + Rectangle { }, + Rectangle { }, + Item { }, + Image { }, + Text { }, + Item { }, + Item { }, + Image { }, + Image { }, + Row { }, + Image { }, + Image { }, + Column { }, + Row { }, + Text { }, + Text { }, + Text { }, + MouseArea { } + ] + + } + } + } + +} diff --git a/tests/benchmarks/declarative/qmltime/tests/item_creation/no_creation.qml b/tests/benchmarks/declarative/qmltime/tests/item_creation/no_creation.qml new file mode 100644 index 0000000..f228c2a --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/item_creation/no_creation.qml @@ -0,0 +1,12 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + Item { + } + } + } +} diff --git a/tests/benchmarks/declarative/qmltime/tests/item_creation/resources.qml b/tests/benchmarks/declarative/qmltime/tests/item_creation/resources.qml new file mode 100644 index 0000000..335aeb8 --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/item_creation/resources.qml @@ -0,0 +1,34 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + Item { + resources: [ + Rectangle { }, + Rectangle { }, + Item { }, + Image { }, + Text { }, + Item { }, + Item { }, + Image { }, + Image { }, + Row { }, + Image { }, + Image { }, + Column { }, + Row { }, + Text { }, + Text { }, + Text { }, + MouseArea { } + ] + + } + } + } + +} diff --git a/tests/benchmarks/declarative/qmltime/tests/loader/Loaded.qml b/tests/benchmarks/declarative/qmltime/tests/loader/Loaded.qml new file mode 100644 index 0000000..6f8d849 --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/loader/Loaded.qml @@ -0,0 +1,7 @@ +import Qt 4.6 + +Item { + Rectangle {} + Text {} + Image {} +} diff --git a/tests/benchmarks/declarative/qmltime/tests/loader/component_loader.qml b/tests/benchmarks/declarative/qmltime/tests/loader/component_loader.qml new file mode 100644 index 0000000..65d5010 --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/loader/component_loader.qml @@ -0,0 +1,16 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + Item { + Loader { + sourceComponent: Loaded {} + } + } + } + } +} + diff --git a/tests/benchmarks/declarative/qmltime/tests/loader/empty_loader.qml b/tests/benchmarks/declarative/qmltime/tests/loader/empty_loader.qml new file mode 100644 index 0000000..2dfe922 --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/loader/empty_loader.qml @@ -0,0 +1,15 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + Item { + Loader {} + Loaded {} + } + } + } +} + diff --git a/tests/benchmarks/declarative/qmltime/tests/loader/no_loader.qml b/tests/benchmarks/declarative/qmltime/tests/loader/no_loader.qml new file mode 100644 index 0000000..1fa0d3b --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/loader/no_loader.qml @@ -0,0 +1,14 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + Item { + Loaded {} + } + } + } +} + diff --git a/tests/benchmarks/declarative/qmltime/tests/loader/source_loader.qml b/tests/benchmarks/declarative/qmltime/tests/loader/source_loader.qml new file mode 100644 index 0000000..33bb91c --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/loader/source_loader.qml @@ -0,0 +1,16 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + + QmlTime.Timer { + component: Component { + Item { + Loader { + source: "Loaded.qml" + } + } + } + } +} + diff --git a/tests/benchmarks/declarative/qmltime/tests/positioner_creation/no_positioner.qml b/tests/benchmarks/declarative/qmltime/tests/positioner_creation/no_positioner.qml new file mode 100644 index 0000000..97bad47 --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/positioner_creation/no_positioner.qml @@ -0,0 +1,37 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + QmlTime.Timer { + component: Component { + Item { + Rectangle { } + Rectangle { } + Item { + Image { } + Text { } + } + + Item { + Item { + Image { } + Image { } + Item { + Image { } + Image { } + } + } + + Item { + Item { + Text { } + Text { } + } + Text { } + } + } + MouseArea { } + } + } + } +} diff --git a/tests/benchmarks/declarative/qmltime/tests/positioner_creation/null_positioner.qml b/tests/benchmarks/declarative/qmltime/tests/positioner_creation/null_positioner.qml new file mode 100644 index 0000000..36dda15 --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/positioner_creation/null_positioner.qml @@ -0,0 +1,34 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + QmlTime.Timer { + component: Component { + Item { + Rectangle { } + Rectangle { } + Item { + Image { } + Text { } + } + + Item { + Item { + Image { } + Image { } + Row { } + Image { } + Image { } + } + + Column { } + Row { } + Text { } + Text { } + Text { } + } + MouseArea { } + } + } + } +} diff --git a/tests/benchmarks/declarative/qmltime/tests/positioner_creation/positioner.qml b/tests/benchmarks/declarative/qmltime/tests/positioner_creation/positioner.qml new file mode 100644 index 0000000..396e27d --- /dev/null +++ b/tests/benchmarks/declarative/qmltime/tests/positioner_creation/positioner.qml @@ -0,0 +1,37 @@ +import Qt 4.6 +import QmlTime 1.0 as QmlTime + +Item { + QmlTime.Timer { + component: Component { + Item { + Rectangle { } + Rectangle { } + Item { + Image { } + Text { } + } + + Item { + Item { + Image { } + Image { } + Row { + Image { } + Image { } + } + } + + Column { + Row { + Text { } + Text { } + } + Text { } + } + } + MouseArea { } + } + } + } +} -- cgit v0.12 From ef9fd657a71375b58be01efb18a16fb04a1b90f5 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Thu, 25 Mar 2010 14:00:35 +1000 Subject: Begin dragging PathView up to the level (quality and functionality) of other views. Task-number: QT-319 --- .../graphicsitems/qdeclarativepathview.cpp | 641 +++++++++++---------- .../graphicsitems/qdeclarativepathview_p.h | 25 +- .../graphicsitems/qdeclarativepathview_p_p.h | 25 +- .../qdeclarativepathview/data/pathview0.qml | 5 + .../qdeclarativepathview/data/pathview3.qml | 2 +- .../tst_qdeclarativepathview.cpp | 22 +- 6 files changed, 411 insertions(+), 309 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp index b9c8971..f3d6137 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview.cpp +++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp @@ -138,6 +138,103 @@ void QDeclarativePathViewPrivate::clear() items.clear(); } +void QDeclarativePathViewPrivate::updateMappedRange() +{ + if (model && pathItems != -1 && pathItems < model->count()) + mappedRange = qreal(pathItems)/model->count(); + else + mappedRange = 1.0; +} + +qreal QDeclarativePathViewPrivate::positionOfIndex(int index) const +{ + qreal pos = -1.0; + + if (model && index >= 0 && index < model->count()) { + qreal globalPos = qreal(index) + offset; + globalPos = qmlMod(globalPos, qreal(model->count())) / model->count(); + if (pathItems != -1 && pathItems < model->count()) { + globalPos += snapPos * mappedRange; + globalPos = qmlMod(globalPos, 1.0); + if (globalPos < mappedRange) + pos = globalPos / mappedRange; + } else { + pos = qmlMod(globalPos + snapPos, 1.0); + } + } + + return pos; +} + +void QDeclarativePathViewPrivate::createHighlight() +{ + Q_Q(QDeclarativePathView); + bool changed = false; + if (highlightItem) { + delete highlightItem; + highlightItem = 0; + changed = true; + } + + QDeclarativeItem *item = 0; + if (highlightComponent) { + QDeclarativeContext *highlightContext = new QDeclarativeContext(qmlContext(q)); + QObject *nobj = highlightComponent->create(highlightContext); + if (nobj) { + highlightContext->setParent(nobj); + item = qobject_cast(nobj); + if (!item) + delete nobj; + } else { + delete highlightContext; + } + } else { + item = new QDeclarativeItem; + } + if (item) { + item->setParent(q); + highlightItem = item; + changed = true; + } + if (changed) + emit q->highlightItemChanged(); +} + +void QDeclarativePathViewPrivate::updateHighlight() +{ + Q_Q(QDeclarativePathView); + if (!q->isComponentComplete()) + return; + if (highlightItem) + updateItem(highlightItem, snapPos); +} + +void QDeclarativePathViewPrivate::updateItem(QDeclarativeItem *item, qreal percent) +{ + if (QDeclarativePathViewAttached *att = attached(item)) { + foreach(const QString &attr, path->attributes()) + att->setValue(attr.toUtf8(), path->attributeAt(attr, percent)); + } + QPointF pf = path->pointAt(percent); + item->setX(pf.x() - item->width()*item->scale()/2); + item->setY(pf.y() - item->height()*item->scale()/2); +} + +void QDeclarativePathViewPrivate::regenerate() +{ + Q_Q(QDeclarativePathView); + if (!q->isComponentComplete()) + return; + + clear(); + + if (!isValid()) + return; + + firstIndex = -1; + updateMappedRange(); + q->refill(); +} /*! \qmlclass PathView QDeclarativePathView @@ -232,6 +329,7 @@ void QDeclarativePathView::setModel(const QVariant &model) if (d->model) { disconnect(d->model, SIGNAL(itemsInserted(int,int)), this, SLOT(itemsInserted(int,int))); disconnect(d->model, SIGNAL(itemsRemoved(int,int)), this, SLOT(itemsRemoved(int,int))); + disconnect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int))); disconnect(d->model, SIGNAL(modelReset()), this, SLOT(modelReset())); disconnect(d->model, SIGNAL(createdItem(int, QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*))); for (int i=0; iitems.count(); i++){ @@ -261,13 +359,16 @@ void QDeclarativePathView::setModel(const QVariant &model) if (d->model) { connect(d->model, SIGNAL(itemsInserted(int,int)), this, SLOT(itemsInserted(int,int))); connect(d->model, SIGNAL(itemsRemoved(int,int)), this, SLOT(itemsRemoved(int,int))); + connect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int))); connect(d->model, SIGNAL(modelReset()), this, SLOT(modelReset())); connect(d->model, SIGNAL(createdItem(int, QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*))); } - d->firstIndex = 0; - d->pathOffset = 0; + d->offset = qmlMod(d->offset, qreal(d->model->count())); + if (d->offset < 0) + d->offset = d->model->count() + d->offset; d->regenerate(); d->fixOffset(); + emit countChanged(); emit modelChanged(); } @@ -330,7 +431,7 @@ void QDeclarativePathView::setCurrentIndex(int idx) if (d->model->count()) { int itemIndex = (d->currentIndex - d->firstIndex + d->model->count()) % d->model->count(); if (itemIndex < d->items.count()) { - if (QDeclarativeItem *item = d->items.at(d->currentIndex)) { + if (QDeclarativeItem *item = d->items.at(itemIndex)) { if (QDeclarativePathViewAttached *att = d->attached(item)) att->setIsCurrentItem(false); } @@ -354,12 +455,13 @@ void QDeclarativePathView::setCurrentIndex(int idx) /*! \qmlproperty real PathView::offset - The offset specifies how far along the path (0.0-1.0) the items are from their initial positions. + The offset specifies how far along the path the items are from their initial positions. + This is a real number that ranges from 0.0 to the count of items in the model. */ qreal QDeclarativePathView::offset() const { Q_D(const QDeclarativePathView); - return d->_offset; + return d->offset; } void QDeclarativePathView::setOffset(qreal offset) @@ -372,18 +474,25 @@ void QDeclarativePathView::setOffset(qreal offset) void QDeclarativePathViewPrivate::setOffset(qreal o) { Q_Q(QDeclarativePathView); - if (_offset != o) { - _offset = qmlMod(o, qreal(1.0)); - if (_offset < 0) - _offset = 1.0 + _offset; - q->refill(); + if (offset != o) { + if (isValid() && q->isComponentComplete()) { + offset = qmlMod(o, qreal(model->count())); + if (offset < 0) + offset = model->count() + offset; + q->refill(); + } else { + offset = o; + } + emit q->offsetChanged(); } } /*! \qmlproperty real PathView::snapPosition - This property determines the position (0.0-1.0) the nearest item will snap to. + This property determines the position on the path (0.0-1.0) the nearest item will snap to. + The item nearest this position will set currentIndex, for example when offset is 0.0 the + first item will be placed at this position and currentIndex will be 0. */ qreal QDeclarativePathView::snapPosition() const { @@ -398,10 +507,34 @@ void QDeclarativePathView::setSnapPosition(qreal pos) if (qFuzzyCompare(normalizedPos, d->snapPos)) return; d->snapPos = normalizedPos; + d->updateHighlight(); d->fixOffset(); emit snapPositionChanged(); } +QDeclarativeComponent *QDeclarativePathView::highlight() const +{ + Q_D(const QDeclarativePathView); + return d->highlightComponent; +} + +void QDeclarativePathView::setHighlight(QDeclarativeComponent *highlight) +{ + Q_D(QDeclarativePathView); + if (highlight != d->highlightComponent) { + d->highlightComponent = highlight; + d->createHighlight(); + d->updateHighlight(); + emit highlightChanged(); + } +} + +QDeclarativeItem *QDeclarativePathView::highlightItem() +{ + Q_D(const QDeclarativePathView); + return d->highlightItem; +} + /*! \qmlproperty real PathView::dragMargin This property holds the maximum distance from the path that initiate mouse dragging. @@ -426,6 +559,52 @@ void QDeclarativePathView::setDragMargin(qreal dragMargin) } /*! + \qmlproperty real PathView::flickDeceleration + This property holds the rate at which a flick will decelerate. + + The default is 100. +*/ +qreal QDeclarativePathView::flickDeceleration() const +{ + Q_D(const QDeclarativePathView); + return d->deceleration; +} + +void QDeclarativePathView::setFlickDeceleration(qreal dec) +{ + Q_D(QDeclarativePathView); + if (d->deceleration == dec) + return; + d->deceleration = dec; + emit flickDecelerationChanged(); +} + +/*! + \qmlproperty bool PathView::interactive + + A user cannot drag or flick a PathView that is not interactive. + + This property is useful for temporarily disabling flicking. This allows + special interaction with PathView's children. +*/ +bool QDeclarativePathView::isInteractive() const +{ + Q_D(const QDeclarativePathView); + return d->interactive; +} + +void QDeclarativePathView::setInteractive(bool interactive) +{ + Q_D(QDeclarativePathView); + if (interactive != d->interactive) { + d->interactive = interactive; + if (!interactive) + d->tl.clear(); + emit interactiveChanged(); + } +} + +/*! \qmlproperty component PathView::delegate The delegate provides a template defining each item instantiated by the view. @@ -467,7 +646,7 @@ void QDeclarativePathView::setDelegate(QDeclarativeComponent *delegate) /*! \qmlproperty int PathView::pathItemCount - This property holds the number of items visible on the path at any one time + This property holds the number of items visible on the path at any one time. */ int QDeclarativePathView::pathItemCount() const { @@ -480,9 +659,13 @@ void QDeclarativePathView::setPathItemCount(int i) Q_D(QDeclarativePathView); if (i == d->pathItems) return; + if (i < 1) + i = 1; d->pathItems = i; - d->regenerate(); - pathItemCountChanged(); + if (d->isValid() && isComponentComplete()) { + d->regenerate(); + } + emit pathItemCountChanged(); } QPointF QDeclarativePathViewPrivate::pointNear(const QPointF &point, qreal *nearPercent) const @@ -512,7 +695,7 @@ QPointF QDeclarativePathViewPrivate::pointNear(const QPointF &point, qreal *near void QDeclarativePathView::mousePressEvent(QGraphicsSceneMouseEvent *event) { Q_D(QDeclarativePathView); - if (!d->items.count()) + if (!d->interactive || !d->items.count()) return; QPointF scenePoint = mapToScene(event->pos()); int idx = 0; @@ -542,7 +725,7 @@ void QDeclarativePathView::mousePressEvent(QGraphicsSceneMouseEvent *event) void QDeclarativePathView::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { Q_D(QDeclarativePathView); - if (d->lastPosTime.isNull()) + if (!d->interactive || d->lastPosTime.isNull()) return; if (!d->stealMouse) { @@ -555,14 +738,14 @@ void QDeclarativePathView::mouseMoveEvent(QGraphicsSceneMouseEvent *event) d->moveReason = QDeclarativePathViewPrivate::Mouse; qreal newPc; d->pointNear(event->pos(), &newPc); - qreal diff = newPc - d->startPc; + qreal diff = (newPc - d->startPc)*d->model->count()*d->mappedRange; if (diff) { - setOffset(d->_offset + diff); + setOffset(d->offset + diff); - if (diff > 0.5) - diff -= 1.0; - else if (diff < -0.5) - diff += 1.0; + if (diff > d->model->count()/2) + diff -= d->model->count(); + else if (diff < -d->model->count()/2) + diff += d->model->count(); d->lastElapsed = QDeclarativeItemPrivate::restart(d->lastPosTime); d->lastDist = diff; @@ -574,27 +757,37 @@ void QDeclarativePathView::mouseMoveEvent(QGraphicsSceneMouseEvent *event) void QDeclarativePathView::mouseReleaseEvent(QGraphicsSceneMouseEvent *) { Q_D(QDeclarativePathView); - if (d->lastPosTime.isNull()) + d->stealMouse = false; + setKeepMouseGrab(false); + if (!d->interactive || d->lastPosTime.isNull()) return; qreal elapsed = qreal(d->lastElapsed + QDeclarativeItemPrivate::elapsed(d->lastPosTime)) / 1000.; qreal velocity = elapsed > 0. ? d->lastDist / elapsed : 0; - if (d->model && d->model->count() && qAbs(velocity) > 0.05) { - if (velocity > 1.5) - velocity = 1.5; - else if (velocity < -1.5) - velocity = -1.5; - qreal inc = qmlMod(d->_offset - d->snapPos, qreal(1.0 / d->model->count())); - qreal dist = qAbs(velocity/2 - qmlMod(velocity/2, qreal(1.0 / d->model->count()) - inc)); - d->moveOffset.setValue(d->_offset); - d->tl.accel(d->moveOffset, velocity, 0.1, dist); + if (d->model && d->model->count() && qAbs(velocity) > 1.) { + qreal count = d->pathItems == -1 ? d->model->count() : d->pathItems; + if (qAbs(velocity) > count * 2) // limit velocity + velocity = (velocity > 0 ? count : -count) * 2; + // Calculate the distance to be travelled + qreal v2 = velocity*velocity; + qreal accel = d->deceleration; + // + 0.25 to encourage moving at least one item in the flick direction + qreal dist = qMin(qreal(d->model->count()-1), d->model->count() * v2 / (accel * 2.0) + 0.25); + // round to nearest item. + if (velocity > 0.) + dist = qRound(dist + d->offset) - d->offset; + else + dist = qRound(dist - d->offset) + d->offset; + // Calculate accel required to stop on item boundary + accel = v2 / (2.0f * qAbs(dist)); + d->moveOffset.setValue(d->offset); + d->tl.accel(d->moveOffset, velocity, accel, dist); d->tl.callback(QDeclarativeTimeLineCallback(&d->moveOffset, d->fixOffsetCallback, d)); } else { d->fixOffset(); } d->lastPosTime = QTime(); - d->stealMouse = false; ungrabMouse(); } @@ -644,7 +837,8 @@ bool QDeclarativePathView::sendMouseEvent(QGraphicsSceneMouseEvent *event) bool QDeclarativePathView::sceneEventFilter(QGraphicsItem *i, QEvent *e) { - if (!isVisible()) + Q_D(QDeclarativePathView); + if (!isVisible() || !d->interactive) return QDeclarativeItem::sceneEventFilter(i, e); switch (e->type()) { @@ -669,72 +863,7 @@ void QDeclarativePathView::componentComplete() Q_D(QDeclarativePathView); QDeclarativeItem::componentComplete(); d->regenerate(); - - // move to correct offset - if (d->items.count()) { - int itemIndex = (d->currentIndex - d->firstIndex + d->model->count()) % d->model->count(); - - itemIndex += d->pathOffset; - itemIndex %= d->items.count(); - qreal targetOffset = qmlMod(1.0 + d->snapPos - qreal(itemIndex) / d->items.count(), qreal(1.0)); - - if (targetOffset < 0) - targetOffset = 1.0 + targetOffset; - if (targetOffset != d->_offset) { - d->moveOffset.setValue(targetOffset); - } - } -} - -void QDeclarativePathViewPrivate::regenerate() -{ - Q_Q(QDeclarativePathView); - if (!q->isComponentComplete()) - return; - - clear(); - - if (!isValid()) - return; - - if (firstIndex >= model->count()) - firstIndex = model->count()-1; - if (pathOffset >= model->count()) - pathOffset = model->count()-1; - - int numItems = pathItems >= 0 ? pathItems : model->count(); - for (int i=0; i < numItems && i < model->count(); ++i){ - int index = (i + firstIndex) % model->count(); - QDeclarativeItem *item = getItem(index); - if (!item) { - qWarning() << "PathView: Cannot create item, index" << (i + firstIndex) % model->count(); - return; - } - items.append(item); - item->setZValue(i); - qreal percent = qreal(i) / numItems + _offset; - percent = qAbs(qmlMod(percent, qreal(1.0))); - updateItem(item, percent); - model->completeItem(); - if (currentIndex == index) { - item->setFocus(true); - if (QDeclarativePathViewAttached *att = attached(item)) - att->setIsCurrentItem(true); - } - } - if (pathItems != -1) - q->refill(); -} - -void QDeclarativePathViewPrivate::updateItem(QDeclarativeItem *item, qreal percent) -{ - if (QDeclarativePathViewAttached *att = attached(item)) { - foreach(const QString &attr, path->attributes()) - att->setValue(attr.toUtf8(), path->attributeAt(attr, percent)); - } - QPointF pf = path->pointAt(percent); - item->setX(pf.x() - item->width()*item->scale()/2); - item->setY(pf.y() - item->height()*item->scale()/2); + d->updateHighlight(); } void QDeclarativePathView::refill() @@ -743,81 +872,85 @@ void QDeclarativePathView::refill() if (!d->isValid() || !isComponentComplete()) return; - QList positions; - for (int i=0; iitems.count(); i++){ - qreal percent = qreal(i) / d->items.count(); - percent = percent + d->_offset; - percent = qmlMod(percent, qreal(1.0)); - positions << qAbs(percent); - } - - if (d->pathItems==-1) { - for (int i=0; iupdateItem(d->items.at(i), positions[i]); - return; +// qDebug() << "offset" << d->_offset; + + // first move existing items and remove items off path + int idx = d->firstIndex; + QList::iterator it = d->items.begin(); + while (it != d->items.end()) { + qreal pos = d->positionOfIndex(idx); + QDeclarativeItem *item = *it; + if (pos >= 0.0) { + d->updateItem(item, pos); + ++it; + } else { +// qDebug() << "release"; + d->updateItem(item, 1.0); + d->releaseItem(item); + if (it == d->items.begin()) { + if (++d->firstIndex >= d->model->count()) + d->firstIndex = 0; + } + it = d->items.erase(it); + } + ++idx; + if (idx >= d->model->count()) + idx = 0; } - QList rotatedPositions; - for (int i=0; iitems.count(); i++) - rotatedPositions << positions[(i + d->pathOffset + d->items.count()) % d->items.count()]; - - int wrapIndex= -1; - for (int i=0; iitems.count()-1; i++) { - if (rotatedPositions[i] > rotatedPositions[i+1]){ - wrapIndex = i; - break; + // add items to beginning and end + int count = d->pathItems == -1 ? d->model->count() : qMin(d->pathItems, d->model->count()); + if (d->items.count() < count) { + int idx = qRound(d->model->count() - d->offset) % d->model->count(); + qreal startPos = d->snapPos; + if (d->firstIndex >= 0) { + startPos = d->positionOfIndex(d->firstIndex); + idx = (d->firstIndex + d->items.count()) % d->model->count(); } - } - if (wrapIndex != -1 ){ - //A wraparound has occured - if (wrapIndex < d->items.count()/2){ - while(wrapIndex-- >= 0){ - QDeclarativeItem* p = d->items.takeFirst(); - d->updateItem(p, 0.0); - d->releaseItem(p); - d->firstIndex++; - d->firstIndex %= d->model->count(); - int index = (d->firstIndex + d->items.count())%d->model->count(); - QDeclarativeItem *item = d->getItem(index); - item->setZValue(wrapIndex); - d->model->completeItem(); - if (d->currentIndex == index) { - item->setFocus(true); - if (QDeclarativePathViewAttached *att = d->attached(item)) - att->setIsCurrentItem(true); - } - d->items << item; - d->pathOffset++; - d->pathOffset=d->pathOffset % d->items.count(); + qreal pos = d->positionOfIndex(idx); + while ((pos > startPos || !d->items.count()) && d->items.count() < count) { +// qDebug() << "append" << idx; + QDeclarativeItem *item = d->getItem(idx); + item->setZValue(idx+1); + d->model->completeItem(); + if (d->currentIndex == idx) { + item->setFocus(true); + if (QDeclarativePathViewAttached *att = d->attached(item)) + att->setIsCurrentItem(true); } - } else { - while(wrapIndex++ < d->items.count()-1){ - QDeclarativeItem* p = d->items.takeLast(); - d->updateItem(p, 1.0); - d->releaseItem(p); - d->firstIndex--; - if (d->firstIndex < 0) - d->firstIndex = d->model->count() - 1; - QDeclarativeItem *item = d->getItem(d->firstIndex); - item->setZValue(d->firstIndex); - d->model->completeItem(); - if (d->currentIndex == d->firstIndex) { - item->setFocus(true); - if (QDeclarativePathViewAttached *att = d->attached(item)) - att->setIsCurrentItem(true); - } - d->items.prepend(item); - d->pathOffset--; - if (d->pathOffset < 0) - d->pathOffset = d->items.count() - 1; + if (d->items.count() == 0) + d->firstIndex = idx; + d->items.append(item); + d->updateItem(item, pos); + ++idx; + if (idx >= d->model->count()) + idx = 0; + pos = d->positionOfIndex(idx); + } + + idx = d->firstIndex - 1; + if (idx < 0) + idx = d->model->count() - 1; + pos = d->positionOfIndex(idx); + while (pos >= 0.0 && pos < startPos) { +// qDebug() << "prepend" << idx; + QDeclarativeItem *item = d->getItem(idx); + item->setZValue(idx+1); + d->model->completeItem(); + if (d->currentIndex == idx) { + item->setFocus(true); + if (QDeclarativePathViewAttached *att = d->attached(item)) + att->setIsCurrentItem(true); } + d->items.prepend(item); + d->updateItem(item, pos); + d->firstIndex = idx; + idx = d->firstIndex - 1; + if (idx < 0) + idx = d->model->count() - 1; + pos = d->positionOfIndex(idx); } - for (int i=0; iitems.count(); i++) - rotatedPositions[i] = positions[(i + d->pathOffset + d->items.count()) - % d->items.count()]; } - for (int i=0; iitems.count(); i++) - d->updateItem(d->items.at(i), rotatedPositions[i]); } void QDeclarativePathView::itemsInserted(int modelIndex, int count) @@ -826,29 +959,14 @@ void QDeclarativePathView::itemsInserted(int modelIndex, int count) Q_D(QDeclarativePathView); if (!d->isValid() || !isComponentComplete()) return; - if (d->pathItems == -1) { - for (int i = 0; i < count; ++i) { - QDeclarativeItem *item = d->getItem(modelIndex + i); - item->setZValue(modelIndex + i); - d->model->completeItem(); - d->items.insert(modelIndex + i, item); - } - refill(); - } else { - //XXX This is pretty heavy handed until we reference count items. - d->regenerate(); - } - // make sure the current item is still at the snap position - int itemIndex = (d->currentIndex - d->firstIndex + d->model->count())%d->model->count(); - itemIndex += d->pathOffset; - itemIndex %= d->items.count(); - qreal targetOffset = qmlMod(1.0 + d->snapPos - qreal(itemIndex) / d->items.count(), qreal(1.0)); - - if (targetOffset < 0) - targetOffset = 1.0 + targetOffset; - if (targetOffset != d->_offset) - d->moveOffset.setValue(targetOffset); + QList removedItems = d->items; + d->items.clear(); + d->regenerate(); + while (removedItems.count()) + d->releaseItem(removedItems.takeLast()); + d->updateCurrent(); + emit countChanged(); } void QDeclarativePathView::itemsRemoved(int modelIndex, int count) @@ -857,41 +975,37 @@ void QDeclarativePathView::itemsRemoved(int modelIndex, int count) Q_D(QDeclarativePathView); if (!d->isValid() || !isComponentComplete()) return; - if (d->pathItems == -1) { - for (int i = 0; i < count && d->items.count() > modelIndex; ++i) { - QDeclarativeItem* p = d->items.takeAt(modelIndex); - d->model->release(p); - } - d->snapToCurrent(); - refill(); - } else { - d->regenerate(); - } - if (d->model->count() == 0) { - d->currentIndex = -1; - d->moveOffset.setValue(0); + QList removedItems = d->items; + d->items.clear(); + if (d->offset >= d->model->count()) + d->offset = d->model->count() - 1; + d->regenerate(); + while (removedItems.count()) + d->releaseItem(removedItems.takeLast()); + d->updateCurrent(); + emit countChanged(); +} + +void QDeclarativePathView::itemsMoved(int from, int to, int count) +{ + Q_D(QDeclarativePathView); + if (!d->isValid() || !isComponentComplete()) return; - } - // make sure the current item is still at the snap position - if (d->currentIndex >= d->model->count()) - d->currentIndex = d->model->count() - 1; - int itemIndex = (d->currentIndex - d->firstIndex + d->model->count())%d->model->count(); - itemIndex += d->pathOffset; - itemIndex %= d->items.count(); - qreal targetOffset = qmlMod(1.0 + d->snapPos - qreal(itemIndex) / d->items.count(), qreal(1.0)); - - if (targetOffset < 0) - targetOffset = 1.0 + targetOffset; - if (targetOffset != d->_offset) - d->moveOffset.setValue(targetOffset); + QList removedItems = d->items; + d->items.clear(); + d->regenerate(); + while (removedItems.count()) + d->releaseItem(removedItems.takeLast()); + d->updateCurrent(); } void QDeclarativePathView::modelReset() { Q_D(QDeclarativePathView); d->regenerate(); + emit countChanged(); } void QDeclarativePathView::createdItem(int index, QDeclarativeItem *item) @@ -919,36 +1033,10 @@ int QDeclarativePathViewPrivate::calcCurrentIndex() { int current = -1; if (model && items.count()) { - _offset = qmlMod(_offset, qreal(1.0)); - if (_offset < 0) - _offset += 1.0; - - if (pathItems == -1) { - qreal delta = qmlMod(_offset - snapPos, qreal(1.0)); - if (delta < 0) - delta = 1.0 + delta; - int ii = model->count() - qRound(delta * model->count()); - if (ii < 0) - ii = 0; - current = ii; - } else { - qreal bestDiff=1e9; - int bestI=-1; - for (int i=0; icount()); + offset = qmlMod(offset, model->count()); + if (offset < 0) + offset += model->count(); + current = qRound(qAbs(qmlMod(model->count() - offset, model->count()))); } return current; @@ -1002,57 +1090,26 @@ void QDeclarativePathViewPrivate::snapToCurrent() if (!model || model->count() <= 0) return; - int itemIndex = (currentIndex - firstIndex + model->count()) % model->count(); - - //Rounds is the number of times round to make the current item visible - int rounds = itemIndex / items.count(); - int otherWayRounds = (model->count() - (itemIndex)) / items.count(); - if (otherWayRounds < rounds) - rounds = -otherWayRounds; - - itemIndex += pathOffset; - if(model->count() % items.count() && itemIndex - model->count() + items.count() > 0){ - //When model.count() is not a multiple of pathItemCount we need to manually - //fix the index so that going backwards one step works correctly. - itemIndex = itemIndex - model->count() + items.count(); - } - itemIndex %= items.count(); - qreal targetOffset = qmlMod(1.0 + snapPos - qreal(itemIndex) / items.count(), qreal(1.0)); - - if (targetOffset < 0) - targetOffset = 1.0 + targetOffset; - if (targetOffset == _offset && rounds == 0) - return; + qreal targetOffset = model->count() - currentIndex; moveReason = Other; tl.clear(); - moveOffset.setValue(_offset); - - if (rounds!=0){ - //Compensate if the targetOffset would bring the target in from off the screen - qreal distance = targetOffset - _offset; - if (distance <= -0.5) - rounds--; - if (distance > 0.5) - rounds++; - tl.move(moveOffset, targetOffset -rounds, QEasingCurve(QEasingCurve::InOutQuad), - int(items.count()*qMax((qreal)(2.0/items.count()),(qreal)qAbs(rounds)))); - tl.callback(QDeclarativeTimeLineCallback(&moveOffset, fixOffsetCallback, this)); - return; - } - - if (targetOffset - _offset > 0.5) { - qreal distance = 1 - targetOffset + _offset; - tl.move(moveOffset, 0.0, QEasingCurve(QEasingCurve::OutQuad), int(200 * _offset / distance)); - tl.set(moveOffset, 1.0); - tl.move(moveOffset, targetOffset, QEasingCurve(QEasingCurve::InQuad), int(200 * (1.0-targetOffset) / distance)); - } else if (targetOffset - _offset <= -0.5) { - qreal distance = 1 - _offset + targetOffset; - tl.move(moveOffset, 1.0, QEasingCurve(QEasingCurve::OutQuad), int(200 * (1.0-_offset) / distance)); + moveOffset.setValue(offset); + + const int duration = 300; + + if (targetOffset - offset > model->count()/2) { + qreal distance = model->count() - targetOffset + offset; + tl.move(moveOffset, 0.0, QEasingCurve(QEasingCurve::InQuad), int(duration * offset / distance)); + tl.set(moveOffset, model->count()); + tl.move(moveOffset, targetOffset, QEasingCurve(QEasingCurve::OutQuad), int(duration * (model->count()-targetOffset) / distance)); + } else if (targetOffset - offset <= -model->count()/2) { + qreal distance = model->count() - offset + targetOffset; + tl.move(moveOffset, model->count(), QEasingCurve(QEasingCurve::InQuad), int(duration * (model->count()-offset) / distance)); tl.set(moveOffset, 0.0); - tl.move(moveOffset, targetOffset, QEasingCurve(QEasingCurve::InQuad), int(200 * targetOffset / distance)); + tl.move(moveOffset, targetOffset, QEasingCurve(QEasingCurve::OutQuad), int(duration * targetOffset / distance)); } else { - tl.move(moveOffset, targetOffset, QEasingCurve(QEasingCurve::InOutQuad), 200); + tl.move(moveOffset, targetOffset, QEasingCurve(QEasingCurve::InOutQuad), duration); } } diff --git a/src/declarative/graphicsitems/qdeclarativepathview_p.h b/src/declarative/graphicsitems/qdeclarativepathview_p.h index 6dbd044..07b8f6f 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview_p.h +++ b/src/declarative/graphicsitems/qdeclarativepathview_p.h @@ -62,8 +62,15 @@ class Q_DECLARATIVE_EXPORT QDeclarativePathView : public QDeclarativeItem Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged) Q_PROPERTY(qreal offset READ offset WRITE setOffset NOTIFY offsetChanged) Q_PROPERTY(qreal snapPosition READ snapPosition WRITE setSnapPosition NOTIFY snapPositionChanged) + + Q_PROPERTY(QDeclarativeComponent *highlight READ highlight WRITE setHighlight NOTIFY highlightChanged) + Q_PROPERTY(QDeclarativeItem *highlightItem READ highlightItem NOTIFY highlightItemChanged) + Q_PROPERTY(qreal dragMargin READ dragMargin WRITE setDragMargin NOTIFY dragMarginChanged) - Q_PROPERTY(int count READ count) + Q_PROPERTY(qreal flickDeceleration READ flickDeceleration WRITE setFlickDeceleration NOTIFY flickDecelerationChanged) + Q_PROPERTY(bool interactive READ isInteractive WRITE setInteractive NOTIFY interactiveChanged) + + Q_PROPERTY(int count READ count NOTIFY countChanged) Q_PROPERTY(QDeclarativeComponent *delegate READ delegate WRITE setDelegate NOTIFY delegateChanged) Q_PROPERTY(int pathItemCount READ pathItemCount WRITE setPathItemCount NOTIFY pathItemCountChanged) @@ -86,9 +93,19 @@ public: qreal snapPosition() const; void setSnapPosition(qreal pos); + QDeclarativeComponent *highlight() const; + void setHighlight(QDeclarativeComponent *highlight); + QDeclarativeItem *highlightItem(); + qreal dragMargin() const; void setDragMargin(qreal margin); + qreal flickDeceleration() const; + void setFlickDeceleration(qreal dec); + + bool isInteractive() const; + void setInteractive(bool); + int count() const; QDeclarativeComponent *delegate() const; @@ -103,11 +120,16 @@ Q_SIGNALS: void currentIndexChanged(); void offsetChanged(); void modelChanged(); + void countChanged(); void pathChanged(); void dragMarginChanged(); void snapPositionChanged(); void delegateChanged(); void pathItemCountChanged(); + void flickDecelerationChanged(); + void interactiveChanged(); + void highlightChanged(); + void highlightItemChanged(); protected: void mousePressEvent(QGraphicsSceneMouseEvent *event); @@ -122,6 +144,7 @@ private Q_SLOTS: void ticked(); void itemsInserted(int index, int count); void itemsRemoved(int index, int count); + void itemsMoved(int,int,int); void modelReset(); void createdItem(int index, QDeclarativeItem *item); void destroyingItem(QDeclarativeItem *item); diff --git a/src/declarative/graphicsitems/qdeclarativepathview_p_p.h b/src/declarative/graphicsitems/qdeclarativepathview_p_p.h index 62f7d95..1780869 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativepathview_p_p.h @@ -75,17 +75,18 @@ class QDeclarativePathViewPrivate : public QDeclarativeItemPrivate public: QDeclarativePathViewPrivate() : path(0), currentIndex(0), startPc(0), lastDist(0) - , lastElapsed(0), stealMouse(false), ownModel(false), activeItem(0) - , snapPos(0), dragMargin(0), moveOffset(this, &QDeclarativePathViewPrivate::setOffset) - , firstIndex(0), pathItems(-1), pathOffset(0), requestedIndex(-1) - , moveReason(Other), attType(0) + , lastElapsed(0), mappedRange(1.0), stealMouse(false), ownModel(false), interactive(true) + , snapPos(0), dragMargin(0), deceleration(100) + , moveOffset(this, &QDeclarativePathViewPrivate::setOffset) + , firstIndex(-1), pathItems(-1), requestedIndex(-1) + , moveReason(Other), attType(0), highlightComponent(0), highlightItem(0) { } void init() { Q_Q(QDeclarativePathView); - _offset = 0; + offset = 0; q->setAcceptedMouseButtons(Qt::LeftButton); q->setFlag(QGraphicsItem::ItemIsFocusScope); q->setFiltersChildEvents(true); @@ -96,7 +97,10 @@ public: void releaseItem(QDeclarativeItem *item); QDeclarativePathViewAttached *attached(QDeclarativeItem *item); void clear(); - + void updateMappedRange(); + qreal positionOfIndex(int index) const; + void createHighlight(); + void updateHighlight(); bool isValid() const { return model && model->count() > 0 && model->isValid() && path; } @@ -117,19 +121,20 @@ public: QPointF startPoint; qreal lastDist; int lastElapsed; - qreal _offset; + qreal offset; + qreal mappedRange; bool stealMouse : 1; bool ownModel : 1; + bool interactive : 1; QTime lastPosTime; QPointF lastPos; - QDeclarativeItem *activeItem; qreal snapPos; qreal dragMargin; + qreal deceleration; QDeclarativeTimeLine tl; QDeclarativeTimeLineValueProxy moveOffset; int firstIndex; int pathItems; - int pathOffset; int requestedIndex; QList items; QDeclarativeGuard model; @@ -137,6 +142,8 @@ public: enum MovementReason { Other, Key, Mouse }; MovementReason moveReason; QDeclarativeOpenMetaObjectType *attType; + QDeclarativeComponent *highlightComponent; + QDeclarativeItem *highlightItem; }; QT_END_NAMESPACE diff --git a/tests/auto/declarative/qdeclarativepathview/data/pathview0.qml b/tests/auto/declarative/qdeclarativepathview/data/pathview0.qml index ae0c86a..8e2c251 100644 --- a/tests/auto/declarative/qdeclarativepathview/data/pathview0.qml +++ b/tests/auto/declarative/qdeclarativepathview/data/pathview0.qml @@ -49,6 +49,11 @@ Rectangle { model: testModel delegate: delegate snapPosition: 0.0001 + highlight: Rectangle { + width: 60 + height: 20 + color: "yellow" + } path: Path { startY: 120 startX: 160 diff --git a/tests/auto/declarative/qdeclarativepathview/data/pathview3.qml b/tests/auto/declarative/qdeclarativepathview/data/pathview3.qml index 70cfbcd..f1bc66e 100644 --- a/tests/auto/declarative/qdeclarativepathview/data/pathview3.qml +++ b/tests/auto/declarative/qdeclarativepathview/data/pathview3.qml @@ -2,7 +2,7 @@ import Qt 4.6 PathView { id: photoPathView - y: 100; width: 800; height: 330; pathItemCount: 4; offset: 0.1 + y: 100; width: 800; height: 330; pathItemCount: 4; offset: 1 dragMargin: 24; snapPosition: 0.50 path: Path { diff --git a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp index c16c46f..6d7cc0d 100644 --- a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp +++ b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp @@ -219,7 +219,7 @@ void tst_QDeclarativePathView::items() QDeclarativePathView *pathview = findItem(canvas->rootObject(), "view"); QVERIFY(pathview != 0); - QCOMPARE(pathview->childItems().count(), model.count()); // assumes all are visible + QCOMPARE(pathview->childItems().count(), model.count()+1); // assumes all are visible, including highlight for (int i = 0; i < model.count(); ++i) { QDeclarativeText *name = findItem(pathview, "textName", i); @@ -230,6 +230,16 @@ void tst_QDeclarativePathView::items() QCOMPARE(number->text(), model.number(i)); } + QDeclarativePath *path = qobject_cast(pathview->path()); + QVERIFY(path); + + QVERIFY(pathview->highlightItem()); + QPointF start = path->pointAt(0.0); + QPointF offset; + offset.setX(pathview->highlightItem()->width()/2); + offset.setY(pathview->highlightItem()->height()/2); + QCOMPARE(pathview->highlightItem()->pos() + offset, start); + delete canvas; } @@ -262,8 +272,8 @@ void tst_QDeclarativePathView::pathview3() QVERIFY(obj->delegate() != 0); QVERIFY(obj->model() != QVariant()); QCOMPARE(obj->currentIndex(), 0); - QCOMPARE(obj->offset(), 0.5); // ??? - QCOMPARE(obj->snapPosition(), 0.5); // ??? + QCOMPARE(obj->offset(), 1.0); + QCOMPARE(obj->snapPosition(), 0.5); QCOMPARE(obj->dragMargin(), 24.); QCOMPARE(obj->count(), 8); QCOMPARE(obj->pathItemCount(), 4); @@ -422,14 +432,14 @@ void tst_QDeclarativePathView::pathMoved() offset.setX(firstItem->width()/2); offset.setY(firstItem->height()/2); QCOMPARE(firstItem->pos() + offset, start); - pathview->setOffset(0.1); + pathview->setOffset(1.0); for(int i=0; i(pathview, "wrapper", i); - QCOMPARE(curItem->pos() + offset, path->pointAt(0.1 + i*0.25)); + QCOMPARE(curItem->pos() + offset, path->pointAt(0.25 + i*0.25)); } - pathview->setOffset(1.0); + pathview->setOffset(0.0); QCOMPARE(firstItem->pos() + offset, start); delete canvas; -- cgit v0.12 From 72599ca45c416f2f0a9654412c14a148ca3d728c Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Thu, 25 Mar 2010 17:49:33 +1000 Subject: Optimize QML "parent" property access For properties that are as important as "parent", QML cannot afford the overhead of a signal/slot connection. --- src/declarative/graphicsitems/qdeclarativeitem.cpp | 11 ++- src/declarative/graphicsitems/qdeclarativeitem_p.h | 6 ++ .../qml/qdeclarativecompiledbindings.cpp | 88 ++++++++++++++++++---- src/declarative/qml/qml.pri | 2 + 4 files changed, 91 insertions(+), 16 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index e6ade00..ee0682a 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -1554,6 +1554,14 @@ void QDeclarativeItemPrivate::transform_clear(QDeclarativeListProperty(o); + if (e) + e->connect(&item->d_func()->parentNotifier); + *((QDeclarativeItem **)rv) = item->parentItem(); +} + /*! \qmlproperty list Item::data \default @@ -2539,10 +2547,11 @@ bool QDeclarativeItem::sceneEvent(QEvent *event) QVariant QDeclarativeItem::itemChange(GraphicsItemChange change, const QVariant &value) { - Q_D(const QDeclarativeItem); + Q_D(QDeclarativeItem); switch (change) { case ItemParentHasChanged: emit parentChanged(parentItem()); + d->parentNotifier.notify(); break; case ItemChildAddedChange: case ItemChildRemovedChange: diff --git a/src/declarative/graphicsitems/qdeclarativeitem_p.h b/src/declarative/graphicsitems/qdeclarativeitem_p.h index 56b0d77..4828f4e 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem_p.h +++ b/src/declarative/graphicsitems/qdeclarativeitem_p.h @@ -62,6 +62,8 @@ #include #include +#include + #include #include @@ -160,6 +162,10 @@ public: static QGraphicsTransform *transform_at(QDeclarativeListProperty *list, int); static void transform_clear(QDeclarativeListProperty *list); + // Accelerated property accessors + QDeclarativeNotifier parentNotifier; + static void parentProperty(QObject *o, void *rv, QDeclarativeNotifierEndpoint *e); + QDeclarativeAnchors *anchors() { if (!_anchors) { Q_Q(QDeclarativeItem); diff --git a/src/declarative/qml/qdeclarativecompiledbindings.cpp b/src/declarative/qml/qdeclarativecompiledbindings.cpp index 1acca2f..67750a4 100644 --- a/src/declarative/qml/qdeclarativecompiledbindings.cpp +++ b/src/declarative/qml/qdeclarativecompiledbindings.cpp @@ -53,11 +53,15 @@ #include #include #include +#include QT_BEGIN_NAMESPACE DEFINE_BOOL_CONFIG_OPTION(qmlExperimental, QML_EXPERIMENTAL); DEFINE_BOOL_CONFIG_OPTION(qmlDisableOptimizer, QML_DISABLE_OPTIMIZER); +DEFINE_BOOL_CONFIG_OPTION(qmlDisableFastProperties, QML_DISABLE_FAST_PROPERTIES); + +Q_GLOBAL_STATIC(QDeclarativeFastProperties, fastProperties); using namespace QDeclarativeJS; @@ -334,6 +338,8 @@ struct Instr { Subscribe, // subscribe SubscribeId, // subscribe + FetchAndSubscribe, // fetchAndSubscribe + LoadId, // load LoadScope, // load LoadRoot, // load @@ -433,6 +439,14 @@ struct Instr { qint8 output; qint8 objectReg; quint8 exceptionId; + quint16 subscription; + quint16 function; + } fetchAndSubscribe; + struct { + quint8 type; + qint8 output; + qint8 objectReg; + quint8 exceptionId; quint32 index; } fetch; struct { @@ -937,6 +951,9 @@ static void dumpInstruction(const Instr *instr) case Instr::SubscribeId: qWarning().nospace() << "SubscribeId" << "\t\t" << instr->subscribe.offset << "\t" << instr->subscribe.reg << "\t" << instr->subscribe.index; break; + case Instr::FetchAndSubscribe: + qWarning().nospace() << "FetchAndSubscribe" << "\t" << instr->fetchAndSubscribe.output << "\t" << instr->fetchAndSubscribe.objectReg << "\t" << instr->fetchAndSubscribe.subscription; + break; case Instr::LoadId: qWarning().nospace() << "LoadId" << "\t\t\t" << instr->load.index << "\t" << instr->load.reg; break; @@ -1070,6 +1087,8 @@ void QDeclarativeCompiledBindingsPrivate::run(int instrIndex, QDeclarativeContextData *context, QDeclarativeDelayedError *error, QObject *scope, QObject *output) { + Q_Q(QDeclarativeCompiledBindings); + error->removeError(); Register registers[32]; @@ -1081,6 +1100,7 @@ void QDeclarativeCompiledBindingsPrivate::run(int instrIndex, instr += instrIndex; const char *data = program->data(); + // return; #ifdef COMPILEDBINDINGS_DEBUG qWarning().nospace() << "Begin binding run"; #endif @@ -1107,6 +1127,32 @@ void QDeclarativeCompiledBindingsPrivate::run(int instrIndex, } break; + case Instr::FetchAndSubscribe: + { + const Register &input = registers[instr->fetchAndSubscribe.objectReg]; + Register &output = registers[instr->fetchAndSubscribe.output]; + + if (input.isUndefined()) { + throwException(instr->fetchAndSubscribe.exceptionId, error, program, context); + return; + } + + QObject *object = input.getQObject(); + if (!object) { + output.setUndefined(); + } else { + int subIdx = instr->fetchAndSubscribe.subscription; + QDeclarativeCompiledBindingsPrivate::Subscription *sub = 0; + if (subIdx != -1) { + sub = (subscriptions + subIdx); + sub->target = q; + sub->targetMethod = methodCount + subIdx; + } + fastProperties()->accessor(instr->fetchAndSubscribe.function)(object, output.typeDataPtr(), sub); + } + } + break; + case Instr::LoadId: registers[instr->load.reg].setQObject(context->idValues[instr->load.index].data()); break; @@ -2376,29 +2422,41 @@ bool QDeclarativeBindingCompilerPrivate::buildName(QStringList &name, return true; } - bool QDeclarativeBindingCompilerPrivate::fetch(Result &rv, const QMetaObject *mo, int reg, - int idx, const QStringList &subName, QDeclarativeJS::AST::ExpressionNode *node) + int idx, const QStringList &subName, + QDeclarativeJS::AST::ExpressionNode *node) { QMetaProperty prop = mo->property(idx); rv.metaObject = 0; rv.type = 0; - if (subscription(subName, &rv) && prop.hasNotifySignal() && prop.notifySignalIndex() != -1) { - Instr sub; - sub.common.type = Instr::Subscribe; - sub.subscribe.offset = subscriptionIndex(subName); - sub.subscribe.reg = reg; - sub.subscribe.index = prop.notifySignalIndex(); - bytecode << sub; - } + int fastFetchIndex = fastProperties()->accessorIndexForProperty(mo, idx); Instr fetch; - fetch.common.type = Instr::Fetch; - fetch.fetch.objectReg = reg; - fetch.fetch.index = idx; - fetch.fetch.output = reg; - fetch.fetch.exceptionId = exceptionId(node); + + if (!qmlDisableFastProperties() && fastFetchIndex != -1) { + fetch.common.type = Instr::FetchAndSubscribe; + fetch.fetchAndSubscribe.objectReg = reg; + fetch.fetchAndSubscribe.output = reg; + fetch.fetchAndSubscribe.function = fastFetchIndex; + fetch.fetchAndSubscribe.subscription = subscriptionIndex(subName); + fetch.fetchAndSubscribe.exceptionId = exceptionId(node); + } else { + if (subscription(subName, &rv) && prop.hasNotifySignal() && prop.notifySignalIndex() != -1) { + Instr sub; + sub.common.type = Instr::Subscribe; + sub.subscribe.offset = subscriptionIndex(subName); + sub.subscribe.reg = reg; + sub.subscribe.index = prop.notifySignalIndex(); + bytecode << sub; + } + + fetch.common.type = Instr::Fetch; + fetch.fetch.objectReg = reg; + fetch.fetch.index = idx; + fetch.fetch.output = reg; + fetch.fetch.exceptionId = exceptionId(node); + } rv.type = prop.userType(); rv.metaObject = engine->metaObjectForType(rv.type); diff --git a/src/declarative/qml/qml.pri b/src/declarative/qml/qml.pri index 49888c3..fc8ba50 100644 --- a/src/declarative/qml/qml.pri +++ b/src/declarative/qml/qml.pri @@ -31,6 +31,7 @@ SOURCES += \ $$PWD/qdeclarativerewrite.cpp \ $$PWD/qdeclarativevaluetype.cpp \ $$PWD/qdeclarativecompiledbindings.cpp \ + $$PWD/qdeclarativefastproperties.cpp \ $$PWD/qdeclarativexmlhttprequest.cpp \ $$PWD/qdeclarativesqldatabase.cpp \ $$PWD/qmetaobjectbuilder.cpp \ @@ -103,6 +104,7 @@ HEADERS += \ $$PWD/qbitfield_p.h \ $$PWD/qdeclarativevaluetype_p.h \ $$PWD/qdeclarativecompiledbindings_p.h \ + $$PWD/qdeclarativefastproperties_p.h \ $$PWD/qdeclarativexmlhttprequest_p.h \ $$PWD/qdeclarativesqldatabase_p.h \ $$PWD/qmetaobjectbuilder_p.h \ -- cgit v0.12 From 870dbc7542beb07b84378f356cbe568a2ae8b7e1 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Thu, 25 Mar 2010 09:19:07 +0100 Subject: Tweak import behaviour The implicit import of types in the same directory/module now imports version -1 (which means all versions). This fixes the Twitter demo. Additionally, the current directory is not added to the imports path. No functionality is lost, as you can import local modules with relative paths for the same effect. Improved docs are on the way. Reviewed-by: mae --- demos/declarative/minehunt/minehunt.qml | 2 +- demos/declarative/photoviewer/photoviewer.qml | 2 +- demos/declarative/samegame/samegame.qml | 2 +- demos/declarative/twitter/twitter.qml | 2 +- .../data/lib/com/nokia/installedtest/InstalledTest.qml | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/demos/declarative/minehunt/minehunt.qml b/demos/declarative/minehunt/minehunt.qml index 9e99706..2ca6c4c 100644 --- a/demos/declarative/minehunt/minehunt.qml +++ b/demos/declarative/minehunt/minehunt.qml @@ -1,5 +1,5 @@ import Qt 4.6 -import MinehuntCore 1.0 +import "MinehuntCore" 1.0 Item { id: field diff --git a/demos/declarative/photoviewer/photoviewer.qml b/demos/declarative/photoviewer/photoviewer.qml index 8feee02..662ea12 100644 --- a/demos/declarative/photoviewer/photoviewer.qml +++ b/demos/declarative/photoviewer/photoviewer.qml @@ -1,5 +1,5 @@ import Qt 4.6 -import PhotoViewerCore 1.0 +import "PhotoViewerCore" 1.0 Rectangle { id: mainWindow diff --git a/demos/declarative/samegame/samegame.qml b/demos/declarative/samegame/samegame.qml index f084ff6..6c58d49 100644 --- a/demos/declarative/samegame/samegame.qml +++ b/demos/declarative/samegame/samegame.qml @@ -1,5 +1,5 @@ import Qt 4.6 -import SamegameCore 1.0 +import "SamegameCore" 1.0 import "SamegameCore/samegame.js" as Logic Rectangle { diff --git a/demos/declarative/twitter/twitter.qml b/demos/declarative/twitter/twitter.qml index 259f79a..94d53f1 100644 --- a/demos/declarative/twitter/twitter.qml +++ b/demos/declarative/twitter/twitter.qml @@ -1,5 +1,5 @@ import Qt 4.6 -import TwitterCore 1.0 as Twitter +import "TwitterCore" 1.0 as Twitter Item { id: screen; width: 320; height: 480 diff --git a/tests/auto/declarative/qdeclarativelanguage/data/lib/com/nokia/installedtest/InstalledTest.qml b/tests/auto/declarative/qdeclarativelanguage/data/lib/com/nokia/installedtest/InstalledTest.qml index d8a22a8..38cf6bb 100644 --- a/tests/auto/declarative/qdeclarativelanguage/data/lib/com/nokia/installedtest/InstalledTest.qml +++ b/tests/auto/declarative/qdeclarativelanguage/data/lib/com/nokia/installedtest/InstalledTest.qml @@ -1,2 +1,2 @@ -import Qt 4.6 -Rectangle {} +import Qt 4.6 as Qt +Qt.Rectangle {} -- cgit v0.12 From 7c1fab0905357ece5746269140593794529e6724 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Thu, 25 Mar 2010 09:31:59 +0100 Subject: Add an initial attempt at docs on the new runtime and imports. --- doc/src/declarative/declarativeui.qdoc | 1 + doc/src/declarative/modules.qdoc | 137 ++++++++++++++++++++++----------- doc/src/declarative/qmlruntime.qdoc | 84 ++++++++++++++++---- 3 files changed, 161 insertions(+), 61 deletions(-) diff --git a/doc/src/declarative/declarativeui.qdoc b/doc/src/declarative/declarativeui.qdoc index ca4c5da..69a8216 100644 --- a/doc/src/declarative/declarativeui.qdoc +++ b/doc/src/declarative/declarativeui.qdoc @@ -94,6 +94,7 @@ completely new applications. QML is fully \l {Extending QML in C++}{extensible \o \l {qdeclarativefocus.html}{Keyboard Focus} \o \l {Extending types from QML} \o \l {Dynamic Object Creation} +\o \l {qmlruntime.html}{The Qt Declarative Runtime} \endlist \section1 Reference: diff --git a/doc/src/declarative/modules.qdoc b/doc/src/declarative/modules.qdoc index 53de32c..f90e23b 100644 --- a/doc/src/declarative/modules.qdoc +++ b/doc/src/declarative/modules.qdoc @@ -42,14 +42,79 @@ /*! \page qdeclarativemodules.html \title Modules +\section1 QML Modules. +QUERY: Is a directory with no qmldir really a module? Assumed NO. -A \bold module is a collection of QML types. +A \bold module is a collection of QML types. These types can be defined in QML, or in C++ +through a QDeclarativeExtensionPlugin. They can then be collected into a directory to comprise +a module. + +Additionally a module can also be a collection of types which was compiled into your application, see \l{Extending QML in C++}. + +While a directory containing types can be used to organize QML components, QML modules also contain a \c qmldir file. +This file provides a manifest of all types available in the module, +and allows versioned imports (among other things). A directory containing only QML files or plugins behaves similarly +to a module, but a QML module requires a \c qmldir file (unless it is written in C++ and compiled into your application). + +\section2 The \c qmldir File + +QML modules containing installed files and remote content require a file \c qmldir which specifies the +mapping from all type names to versioned QML files. It is a list of lines of the form: + +\code +# + +plugin [] +\endcode + +# lines are ignored, and can be used for comments. + + lines are used to add QML files as types. + is the type being made available; is a version +number like \c 4.0; is the (relative) +file name of the QML file defining the type. + +plugin [] lines are used to add plugins (QDeclarativeExtensionPlugin subclasses +written in C++) to the module. The line starts with the keyword 'plugin'; is the +name of the library; is an optional argument specifying the full path to the directory +containing the plugin file, if it is omitted then the directory is assumed to be the same as +the directory of the qmldir file. Note that is not usually the same as the file name +of the plugin binary, which is platform dependent e.g. the library MyAppTypes would produce a libMyAppTypes.so on linux and MyAppTypes.dll on windows. + +The same type can be provided by different files in different versions, in which +case later earlier versions (eg. 1.2) must precede earlier versions (eg. 1.0), +since the \e first name-version match is used. + +Installed files do not need to import the module of which they are a part, as they can refer +to the other QML files in the module as relative (local) files. +If the module is imported from a remote location, those files must nevertheless be listed in +the \c qmldir file. Internal files can be marked with the \c internal keyword, to ensure +they are not visible outside the module: + +\code +internal +\endcode + +Installed and remote files \e must be referred to by version information described above, +local files \e may have it. + +The versioning system ensures that a given QML file will work regardless of the version +of installed software, since a versioned import \e only imports types for that version, +leaving other identifiers available, even if the actual installed version might otherwise +use those identifiers. + +\section1 Importing Modules To use types from a module it must be imported using the \c import statement. Successive import statements override earlier import statements, however, since imports have version qualifiers, changes in modules do not alter the semantics of imports. -\section1 Importing Types Defined in C++ +While it is possible to import some modules without specifying a version this is only advisable +during prototyping, where version numbers mean very little. The rest of the time it is recommended that +you take advantage of the versioning capabilities of the language. + +You can import a directory in the same way that you import a module, except that you cannot specify a version +number. This will import all the types in that directory as QML files or as part of plugins. Types \link adding-types defined in C++\endlink can be from types your application defines, standard QML types, or types defined in plugins. To use any such types, you must import @@ -90,7 +155,7 @@ Installed plugins and QML files can both contribute types to the same module. The specification of types to versions is given by a special file, \c qmldir which must exist in the module directory. The syntax is described below. -The \c -L option to the \l {qmlviewer}{viewer} application also adds paths to the import path. +The \c -L option to the \l {qmlviewer}{runtime} application also adds paths to the import path. \section2 Local QML Files @@ -103,62 +168,31 @@ import "path" \endcode This allows all components defined in the directory \c path to be used in -the component where this statement appears. +the component where this statement appears. Because no version number is specified, +all types in the directory will be imported. -In this case, and only this case, it is not necessary for the module directory to include +In this case, and only this case, it is not necessary for the directory to include a \c qmldir file, nor is it necessary to provide a version qualifier. The basis of this is that the files in the subdirectory are assumed to be packaged with the importer, and therefore -they form a single versioned unit. - - -\section2 Remote QML Files - -To import types defined in QML file at arbitrary network locations, a quoted absolute URL is used: +they form a single versioned unit. It is however recommended that you add a qmldir file and create +a QML module, as this provides additional options such as more flexible versioning. If the directory +is a module then you can use a version qualifier, like below \code -import "http://url/.../" 1.0 +import "path" 1.0 \endcode -This works the same as for relative directory imports, except that the target location \e must -include a \c qmldir file, and a version qualifier must be given. - -\section2 The \c qmldir File - -Directories of installed files and remote content must include a file \c qmldir which specifies the -mapping from all type names to versioned QML files. It is a list of lines of the form: - -\code -# - -\endcode - - is the type being made available; is a version -number like \c 4.0; is the (relative) -file name of the QML file defining the type. - -The same type can be provided by different files in different versions, in which -case later earlier versions (eg. 1.2) must precede earlier versions (eg. 1.0), -since the \e first name-version match is used. +\section2 Remote QML Files -Installed files do not need to import the module of which they are a part, as they can refer -to the other QML files in the module as relative (local) files. -If the module is imported from a remote location, those files must nevertheless be listed in -the \c qmldir file. Internal files can be marked with the \c internal keyword, to ensure -they are not visible outside the module: +To import types defined in QML file at arbitrary network locations, a quoted absolute URL is used: \code -internal +import "http://url/.../" 1.0 \endcode -Installed and remote files \e must be referred to by version information described above, -local files \e may have it. - -The versioning system ensures that a given QML file will work regardless of the version -of installed software, since a versioned import \e only imports types for that version, -leaving other identifiers available, even if the actual installed version might otherwise -use those identifiers. - +This works the same as for relative directory imports, except that the target location contain a QML module (\e must +include a \c qmldir file), and a version qualifier must be given. \section1 Namespaces - Named Imports @@ -185,6 +219,17 @@ modules can be imported into the global namespace: import Qt 4.6 as Nokia import Ovi 1.0 as Nokia \endcode + +There is one special module, called Qt, which contains all of the types that are part of +Qt Declarative. While it still needs to be imported, this module can be used in all QML +files. + +While import statements are need to make any types available in QML, the directory of the +current file is implicitly loaded. This is the exact same as if you had added 'import "."' to +every QML file. The effect of this is that you can automatically use Types defined in C++ plugins +or QML files if they reside in the same directory. + + */ /* diff --git a/doc/src/declarative/qmlruntime.qdoc b/doc/src/declarative/qmlruntime.qdoc index 6d3e109..710a030 100644 --- a/doc/src/declarative/qmlruntime.qdoc +++ b/doc/src/declarative/qmlruntime.qdoc @@ -41,32 +41,82 @@ /*! \page qmlruntime.html - \title Qt Declarative UI Viewer (qmlviewer) + \title Qt Declarative UI Runtime \ingroup qttools \keyword qmlviewer - This page documents the \e{Declarative UI Viewer} for the Qt GUI - toolkit. The \c qmlviewer reads a declarative user interface definition + This page documents the \e{Declarative UI Runtime} for the Qt GUI + toolkit, and the \c qml executable which can be used to run apps + written for the runtime. The \c qml executable reads a declarative user interface definition (\c .qml) file and displays the user interface it describes. - qmlviewer is a development tool. It is not intended to be - installed in a production environment. + QML is a runtime, as you can run plain qml files which pull in their required modules. + To run apps with the QML runtime, you can either start the runtime + from your on application (using a QDeclarativeView) or with the simple \c qml application. + The \c qml application can be + installed in a production environment, assuming that it is not already + present in the system. It is generally packaged alongside Qt. - \section1 Options + To deploy an application using the QML runtime, you have two options. You can either write your + own Qt application including a QDeclarative view and deploy it the same as + any other Qt application (not discussed further on this page). Alternatively you can write a main QML file for + your application, and run your application using the \c qml executable. If a qml file + is passed as an argument to the \c qml executable, it will automatically run it. - When run with the \c -help option, qmlviewer shows available options. + Deploying a QML application via the \c qml executable allows for QML only deployments, but can also + include custom C++ modules just as easily. Below is an example of how you might structure + a complex application deployed via the qml runtime, it is a listing of the files that would + be included in the deployment package. - \section1 Dummy Data + \code + MyApp.qml + MyAppCore/qmldir + MyAppCore/libMyAppCore.so + MyAppCore/MyAppCore.dll + MyAppCore/AnAppElement.qml + MyAppCore/AnotherElement.qml + MyAppCore/images/Logo.png + OtherModule/qmldir + OtherModule/OtherElement.qml + \endcode + + Note that this example is for deploying the example to both windows and linux. You will still need to compile the C++ + modules for each target platform, but you can deploy multiple versions of the modules across platforms with different naming conventions, + as the appropriate module file is chosen based on platform naming conventions. The C++ + modules must contain a QDeclarativeExtentionPlugin subclass. + + The application would be executed either with your own application, the command 'qml MyApp.qml' or by + opening the qml file if your system has the \c qml executable registered as the handler for qml files. The MyApp.qml file would have access + to all of the deployed types using the import statements such as the following: - One use of qmlviewer is to allow QML files to be viewed stand-alone, - rather than being loaded from within a Qt program. Qt applications will - usually bind objects and properties into the execution context before - running the QML. To stand-in for such bindings, you can provide dummy - data: create a directory called "dummydata" in the same directory as + \code + import "MyAppCore" + import "OtherModule" 1.0 as Other + \endcode + + \section1 \c qml application functionality + The \c qml application implements some additional functionality to help it serve the role of a launcher + for myriad applications. If you implement your own launcher application, you may also wish to reimplement + some or all of this functionality. However, much of this functionality is intended to aid the prototyping of + qml applications and may not be necessary for a deployed application. + + \section2 Options + + When run with the \c -help option, qml shows available options. + + \section2 Dummy Data + + The secondary use of the qml runtime is to allow QML files to be viewed with + dummy data. This is useful when prototyping the UI, as the dummy data can + be later replaced with actual data and bindings from a C++ plugin. + To provide dummy data: create a directory called "dummydata" in the same directory as the target QML file and create files there with the "qml" extension. All such files will be loaded as QML objects and bound to the root context as a property with the name of the file (without ".qml"). + To replace this with real data, you simply bind the real object to + the root context in C++. + For example, if the Qt application has a "clock.time" property that is a qreal from 0 to 86400 representing the number of seconds since midnight, dummy data for this could be provided by \c dummydata/clock.qml: @@ -76,9 +126,9 @@ Any QML can be used in the dummy data files. You could even animate the fictional data! - \section1 Screen Orientation + \section2 Screen Orientation - A special piece of dummy data which is integrated into the viewer is + A special piece of dummy data which is integrated into the runtime is a simple orientation property. The orientation can be set via the settings menu in the application, or by pressing Ctrl+T to toggle it. @@ -96,4 +146,8 @@ } \endcode + This allows your application to respond to the orientation of the screen changing. The runtime + will automatically update this on some platforms (currently the N900 only) to match the physical + screen's orientation. On other plaforms orientation changes will only happen when explictly asked for. + */ -- cgit v0.12 From a701a744a1e292803823c43aad4d81a9cff25a32 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Thu, 25 Mar 2010 09:33:17 +0100 Subject: Forgot to add a file. Forgot to add these, the primary changes, to commit 870dbc7542beb07b84378f356cbe568a2ae8b7e1 --- src/declarative/qml/qdeclarativeengine.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index d4872e2..164fab7 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -1390,7 +1390,9 @@ struct QDeclarativeEnginePrivate::ImportedNamespace { foreach (const QDeclarativeDirParser::Component &c, qmldircomponents) { if (c.typeName == typeName) { typeWasDeclaredInQmldir = true; - if (c.majorVersion < vmaj || (c.majorVersion == vmaj && vmin >= c.minorVersion)) { + + // importing version -1 means import ALL versions + if ((vmaj == -1) || (c.majorVersion < vmaj || (c.majorVersion == vmaj && vmin >= c.minorVersion))) { QUrl candidate = url.resolved(QUrl(c.fileName)); if (c.internal && base) { if (base->resolved(QUrl(c.fileName)) != candidate) @@ -1479,10 +1481,10 @@ public: QStringList paths; - if (!base.isEmpty()) { - QString baseDir = QFileInfo(toLocalFileOrQrc(base)).path(); - paths += baseDir; - } +// if (!base.isEmpty()) { +// QString baseDir = QFileInfo(toLocalFileOrQrc(base)).path(); +// paths += baseDir; +// } QString applicationDirPath = QCoreApplication::applicationDirPath(); if (!applicationDirPath.isEmpty()) @@ -1542,9 +1544,9 @@ public: // user import paths QStringList paths; // base.. - QString localFileOrQrc = toLocalFileOrQrc(base); - QString localFileOrQrcPath = QFileInfo(localFileOrQrc).path(); - paths += localFileOrQrcPath; +// QString localFileOrQrc = toLocalFileOrQrc(base); +// QString localFileOrQrcPath = QFileInfo(localFileOrQrc).path(); +// paths += localFileOrQrcPath; paths += QDeclarativeEnginePrivate::get(engine)->fileImportPath; QString applicationDirPath = QCoreApplication::applicationDirPath(); -- cgit v0.12 From de85d147d38acb1d9dd3feacf968c72cb74490e8 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Fri, 26 Mar 2010 09:12:26 +1000 Subject: Ensure both qMin() parameters are the same type. --- src/declarative/graphicsitems/qdeclarativepathview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp index f3d6137..c98b006 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview.cpp +++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp @@ -772,7 +772,7 @@ void QDeclarativePathView::mouseReleaseEvent(QGraphicsSceneMouseEvent *) qreal v2 = velocity*velocity; qreal accel = d->deceleration; // + 0.25 to encourage moving at least one item in the flick direction - qreal dist = qMin(qreal(d->model->count()-1), d->model->count() * v2 / (accel * 2.0) + 0.25); + qreal dist = qMin(qreal(d->model->count()-1), qreal(d->model->count()) * v2 / (accel * 2.0) + 0.25); // round to nearest item. if (velocity > 0.) dist = qRound(dist + d->offset) - d->offset; -- cgit v0.12 From 75e793d0ff07fd094918cf00c4cd0e10dad6bfa8 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Thu, 25 Mar 2010 10:56:29 +1000 Subject: Remove int parameter from ListModel countChanged() to be consistent with other classes with countChanged() signals. --- src/declarative/util/qdeclarativelistmodel.cpp | 6 +++--- src/declarative/util/qdeclarativelistmodel_p.h | 2 +- src/declarative/util/qdeclarativelistmodelworkeragent.cpp | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/declarative/util/qdeclarativelistmodel.cpp b/src/declarative/util/qdeclarativelistmodel.cpp index 3e25234..3904458 100644 --- a/src/declarative/util/qdeclarativelistmodel.cpp +++ b/src/declarative/util/qdeclarativelistmodel.cpp @@ -365,7 +365,7 @@ void QDeclarativeListModel::clear() if (!m_isWorkerCopy) { emit itemsRemoved(0, cleared); - emit countChanged(0); + emit countChanged(); } } @@ -390,7 +390,7 @@ void QDeclarativeListModel::remove(int index) if (!m_isWorkerCopy) { emit itemsRemoved(index, 1); - emit countChanged(this->count()); + emit countChanged(); } } @@ -424,7 +424,7 @@ void QDeclarativeListModel::insert(int index, const QScriptValue& valuemap) bool ok = m_flat ? m_flat->insert(index, valuemap) : m_nested->insert(index, valuemap); if (ok && !m_isWorkerCopy) { emit itemsInserted(index, 1); - emit countChanged(this->count()); + emit countChanged(); } } diff --git a/src/declarative/util/qdeclarativelistmodel_p.h b/src/declarative/util/qdeclarativelistmodel_p.h index 6a0426b..d09062e 100644 --- a/src/declarative/util/qdeclarativelistmodel_p.h +++ b/src/declarative/util/qdeclarativelistmodel_p.h @@ -91,7 +91,7 @@ public: QDeclarativeListModelWorkerAgent *agent(); Q_SIGNALS: - void countChanged(int); + void countChanged(); private: friend class QDeclarativeListModelParser; diff --git a/src/declarative/util/qdeclarativelistmodelworkeragent.cpp b/src/declarative/util/qdeclarativelistmodelworkeragent.cpp index 2951262..0e38632 100644 --- a/src/declarative/util/qdeclarativelistmodelworkeragent.cpp +++ b/src/declarative/util/qdeclarativelistmodelworkeragent.cpp @@ -229,7 +229,7 @@ bool QDeclarativeListModelWorkerAgent::event(QEvent *e) } if (cc) - emit m_orig->countChanged(m_copy->count()); + emit m_orig->countChanged(); } } -- cgit v0.12 From 7b42ee836b8cc1ae345d1d24d4419f0c6b77c97d Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Thu, 25 Mar 2010 10:58:56 +1000 Subject: Clean up --- src/declarative/util/qdeclarativexmllistmodel.cpp | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/src/declarative/util/qdeclarativexmllistmodel.cpp b/src/declarative/util/qdeclarativexmllistmodel.cpp index f7beeaa..e148469 100644 --- a/src/declarative/util/qdeclarativexmllistmodel.cpp +++ b/src/declarative/util/qdeclarativexmllistmodel.cpp @@ -173,22 +173,6 @@ public: return job.queryId; } - QList > modelData() { - QMutexLocker locker(&m_mutex); - return m_modelData; - } - - QList insertedItemRanges() { - QMutexLocker locker(&m_mutex); - return m_insertedItemRanges; - } - - QList removedItemRanges() { - QMutexLocker locker(&m_mutex); - return m_removedItemRanges; - } - - Q_SIGNALS: void queryCompleted(const QDeclarativeXmlQueryResult &); @@ -254,13 +238,10 @@ void QDeclarativeXmlQuery::doQueryJob() query.setQuery(job.namespaces + job.query); query.evaluateTo(&r); - //qDebug() << r; - //always need a single root element QByteArray xml = "\n" + r.toUtf8() + ""; QBuffer b(&xml); b.open(QIODevice::ReadOnly); - //qDebug() << xml; QString namespaces = QLatin1String("declare namespace dummy=\"http://qtsotware.com/dummy\";\n") + job.namespaces; QString prefix = QLatin1String("doc($inputDocument)/dummy:items") + @@ -278,7 +259,6 @@ void QDeclarativeXmlQuery::doQueryJob() if (item.isAtomicValue()) count = item.toAtomicValue().toInt(); } - //qDebug() << count; job.data = xml; m_prefix = namespaces + prefix + QLatin1Char('/'); -- cgit v0.12 From 778e1fd21f5a6c94656dfbb99a7613656d0569a1 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Thu, 25 Mar 2010 14:44:35 +1000 Subject: Fix where data() is called before xml is loaded. Also add status tests. --- src/declarative/util/qdeclarativexmllistmodel.cpp | 6 ++- .../tst_qdeclarativexmllistmodel.cpp | 43 ++++++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/declarative/util/qdeclarativexmllistmodel.cpp b/src/declarative/util/qdeclarativexmllistmodel.cpp index e148469..3e08854 100644 --- a/src/declarative/util/qdeclarativexmllistmodel.cpp +++ b/src/declarative/util/qdeclarativexmllistmodel.cpp @@ -532,7 +532,7 @@ QHash QDeclarativeXmlListModel::data(int index, const QList & for (int i = 0; i < roles.size(); ++i) { int role = roles.at(i); int roleIndex = d->roles.indexOf(role); - rv.insert(role, roleIndex == -1 ? QVariant() : d->data.at(roleIndex).at(index)); + rv.insert(role, roleIndex == -1 ? QVariant() : d->data.value(roleIndex).value(index)); } return rv; } @@ -541,7 +541,7 @@ QVariant QDeclarativeXmlListModel::data(int index, int role) const { Q_D(const QDeclarativeXmlListModel); int roleIndex = d->roles.indexOf(role); - return (roleIndex == -1) ? QVariant() : d->data.at(roleIndex).at(index); + return (roleIndex == -1) ? QVariant() : d->data.value(roleIndex).value(index); } /*! @@ -728,6 +728,8 @@ void QDeclarativeXmlListModel::componentComplete() Otherwise, items are only added if the model does not already contain items with matching key role values. + + \sa XmlRole::isKey */ void QDeclarativeXmlListModel::reload() { diff --git a/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp b/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp index 81cc922..e3aa5cc 100644 --- a/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp +++ b/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp @@ -69,6 +69,8 @@ private slots: void roles(); void roleErrors(); void uniqueRoleNames(); + void status(); + void data(); void reload(); void useKeys(); void useKeys_data(); @@ -247,6 +249,47 @@ void tst_qdeclarativexmllistmodel::uniqueRoleNames() delete model; } +void tst_qdeclarativexmllistmodel::status() +{ + QDeclarativeXmlListModel *model; + model = new QDeclarativeXmlListModel; + QCOMPARE(model->status(), QDeclarativeXmlListModel::Null); + + model->setXml(""); + QCOMPARE(model->status(), QDeclarativeXmlListModel::Ready); + delete model; + + QDeclarativeComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/model.qml")); + model = qobject_cast(component.create()); + QVERIFY(model != 0); + QCOMPARE(model->status(), QDeclarativeXmlListModel::Loading); + + QTRY_COMPARE(model->count(), 9); + QCOMPARE(model->status(), QDeclarativeXmlListModel::Ready); + + delete model; +} + +void tst_qdeclarativexmllistmodel::data() +{ + QDeclarativeComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/model.qml")); + QDeclarativeXmlListModel *model = qobject_cast(component.create()); + QVERIFY(model != 0); + + QHash blank; + for (int i=0; iroles().count(); i++) + blank.insert(model->roles()[i], QVariant()); + for (int i=0; i<9; i++) { + QCOMPARE(model->data(i, model->roles()), blank); + for (int j=0; jroles().count(); j++) { + QCOMPARE(model->data(i, j), QVariant()); + } + } + QTRY_COMPARE(model->count(), 9); + + delete model; +} + void tst_qdeclarativexmllistmodel::reload() { // If no keys are used, the model should be rebuilt from scratch when -- cgit v0.12 From f75961dfd20b82f2f5e2a4b7feaf59c841a93f6b Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Fri, 26 Mar 2010 09:49:39 +1000 Subject: Remove some Script {} docs --- src/declarative/graphicsitems/qdeclarativeitem.cpp | 16 ++-- src/declarative/qml/qdeclarativescript.cpp | 88 ---------------------- src/declarative/qml/qml.pri | 1 - src/declarative/util/qdeclarativestategroup.cpp | 12 ++- 4 files changed, 12 insertions(+), 105 deletions(-) delete mode 100644 src/declarative/qml/qdeclarativescript.cpp diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index f575fdb..dd6056e 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -1575,7 +1575,7 @@ void QDeclarativeItemPrivate::parentProperty(QObject *o, void *rv, QDeclarativeN Item { Text {} Rectangle {} - Script {} + Timer {} } \endqml @@ -1587,7 +1587,7 @@ void QDeclarativeItemPrivate::parentProperty(QObject *o, void *rv, QDeclarativeN Rectangle {} ] resources: [ - Script {} + Timer {} ] } \endqml @@ -2356,13 +2356,11 @@ QDeclarativeListProperty QDeclarativeItem::transitions() example: \qml - Script { - function toggle() { - if (button.state == 'On') - button.state = 'Off'; - else - button.state = 'On'; - } + function toggle() { + if (button.state == 'On') + button.state = 'Off'; + else + button.state = 'On'; } \endqml diff --git a/src/declarative/qml/qdeclarativescript.cpp b/src/declarative/qml/qdeclarativescript.cpp deleted file mode 100644 index ac4b2c1..0000000 --- a/src/declarative/qml/qdeclarativescript.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtDeclarative module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -// This is just a dummy file to include the documentation - -/*! - \qmlclass Script QDeclarativeScript - \since 4.7 - \brief The Script element provides a way to add JavaScript code snippets in QML. - \ingroup group_utility - - The Script element is used to add convenient JavaScript "glue" methods to - your Qt Declarative application or component. - - An example: - - \qml - Script { - function debugMyComponent() { - console.log(text.text); - console.log(otherinterestingitem.property); - } - } - MouseArea { onClicked: debugMyComponent() } - \endqml - - \note While it is possible to use any JavaScript code within a Script element, - it is recommended that the code be limited to defining functions. The Script - element executes JavaScript as soon as it is specified, so - when defining a component, this may be done before the execution context is - fully specified. As a result, some properties or items may not be - accessible. You can avoid this problem by limiting your JavaScript to - defining functions that are only executed later once the context is fully - defined. - - \sa {JavaScript Blocks} -*/ - -/*! - \qmlproperty string Script::script - \default - The JavaScript code to be executed. -*/ - -/*! - \qmlproperty url Script::source - - Specifies a source file containing JavaScript code. This can be used instead - of providing inline JavaScript code in the Script element. -*/ diff --git a/src/declarative/qml/qml.pri b/src/declarative/qml/qml.pri index fc8ba50..e2f0c67 100644 --- a/src/declarative/qml/qml.pri +++ b/src/declarative/qml/qml.pri @@ -36,7 +36,6 @@ SOURCES += \ $$PWD/qdeclarativesqldatabase.cpp \ $$PWD/qmetaobjectbuilder.cpp \ $$PWD/qdeclarativewatcher.cpp \ - $$PWD/qdeclarativescript.cpp \ $$PWD/qdeclarativecleanup.cpp \ $$PWD/qdeclarativepropertycache.cpp \ $$PWD/qdeclarativenotifier.cpp \ diff --git a/src/declarative/util/qdeclarativestategroup.cpp b/src/declarative/util/qdeclarativestategroup.cpp index 083e87d..bc4582c 100644 --- a/src/declarative/util/qdeclarativestategroup.cpp +++ b/src/declarative/util/qdeclarativestategroup.cpp @@ -206,13 +206,11 @@ QDeclarativeListProperty QDeclarativeStateGroup::transit example: \qml - Script { - function toggle() { - if (button.state == 'On') - button.state = 'Off'; - else - button.state = 'On'; - } + function toggle() { + if (button.state == 'On') + button.state = 'Off'; + else + button.state = 'On'; } \endqml -- cgit v0.12 From 1b10d66a05208ca24d12d062fd7c7d15a01df436 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Fri, 26 Mar 2010 10:06:23 +1000 Subject: Document Particles module import. --- doc/src/declarative/elements.qdoc | 1 - src/imports/particles/qdeclarativeparticles.cpp | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/src/declarative/elements.qdoc b/doc/src/declarative/elements.qdoc index e35d67c..e62d546 100644 --- a/doc/src/declarative/elements.qdoc +++ b/doc/src/declarative/elements.qdoc @@ -97,7 +97,6 @@ The following table lists the QML elements provided by the Qt Declarative module \o \list -\o \l Script \o \l Connections \o \l Component \o \l Timer diff --git a/src/imports/particles/qdeclarativeparticles.cpp b/src/imports/particles/qdeclarativeparticles.cpp index 83be59b..e69c235 100644 --- a/src/imports/particles/qdeclarativeparticles.cpp +++ b/src/imports/particles/qdeclarativeparticles.cpp @@ -623,6 +623,8 @@ void QDeclarativeParticlesPrivate::updateOpacity(QDeclarativeParticle &p, int ag \brief The Particles object generates and moves particles. \inherits Item + Particles are available in the Qt.labs.particles 1.0 module. + This element provides preliminary support for particles in QML, and may be heavily changed or removed in later versions. @@ -640,6 +642,9 @@ void QDeclarativeParticlesPrivate::updateOpacity(QDeclarativeParticle &p, int ag snow, the lower one has particles expelled up like a fountain. \qml +import Qt 4.6 +import Qt.labs.particles 1.0 + Rectangle { width: 240 height: 320 -- cgit v0.12 From 9f6b271e942d48cef566891bd9d9712e147df3a2 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Fri, 26 Mar 2010 10:07:25 +1000 Subject: Add missing files from 72599ca45c416f2f0a9654412c14a148ca3d728c --- src/declarative/qml/qdeclarativefastproperties.cpp | 92 ++++++++++++++++++++++ src/declarative/qml/qdeclarativefastproperties_p.h | 75 ++++++++++++++++++ 2 files changed, 167 insertions(+) create mode 100644 src/declarative/qml/qdeclarativefastproperties.cpp create mode 100644 src/declarative/qml/qdeclarativefastproperties_p.h diff --git a/src/declarative/qml/qdeclarativefastproperties.cpp b/src/declarative/qml/qdeclarativefastproperties.cpp new file mode 100644 index 0000000..088d329 --- /dev/null +++ b/src/declarative/qml/qdeclarativefastproperties.cpp @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qdeclarativefastproperties_p.h" + +#include + +QT_BEGIN_NAMESPACE + +// Adding entries to the QDeclarativeFastProperties class allows the QML +// binding optimizer to bypass Qt's meta system and read and, more +// importantly, subscribe to properties directly. Any property that is +// primarily read from bindings is a candidate for inclusion as a fast +// property. + +QDeclarativeFastProperties::QDeclarativeFastProperties() +{ + add(&QDeclarativeItem::staticMetaObject, QDeclarativeItem::staticMetaObject.indexOfProperty("parent"), + QDeclarativeItemPrivate::parentProperty); +} + +int QDeclarativeFastProperties::accessorIndexForProperty(const QMetaObject *metaObject, int propertyIndex) +{ + Q_ASSERT(metaObject); + Q_ASSERT(propertyIndex >= 0); + + // Find the "real" metaObject + while (metaObject->propertyOffset() > propertyIndex) + metaObject = metaObject->superClass(); + + QHash, int>::Iterator iter = + m_index.find(qMakePair(metaObject, propertyIndex)); + if (iter != m_index.end()) + return *iter; + else + return -1; +} + +void QDeclarativeFastProperties::add(const QMetaObject *metaObject, int propertyIndex, Accessor accessor) +{ + Q_ASSERT(metaObject); + Q_ASSERT(propertyIndex >= 0); + + // Find the "real" metaObject + while (metaObject->propertyOffset() > propertyIndex) + metaObject = metaObject->superClass(); + + QPair data = qMakePair(metaObject, propertyIndex); + int accessorIndex = m_accessors.count(); + m_accessors.append(accessor); + m_index.insert(data, accessorIndex); +} + +QT_END_NAMESPACE diff --git a/src/declarative/qml/qdeclarativefastproperties_p.h b/src/declarative/qml/qdeclarativefastproperties_p.h new file mode 100644 index 0000000..60df947 --- /dev/null +++ b/src/declarative/qml/qdeclarativefastproperties_p.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QDECLARATIVEFASTPROPERTIES_P_H +#define QDECLARATIVEFASTPROPERTIES_P_H + +#include +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QObject; +class QDeclarativeNotifierEndpoint; +class QDeclarativeFastProperties +{ +public: + typedef void (*Accessor)(QObject *object, void *output, QDeclarativeNotifierEndpoint *endpoint); + + QDeclarativeFastProperties(); + + Accessor accessor(int index) const { return m_accessors.at(index); } + int accessorIndexForProperty(const QMetaObject *, int); + +private: + void add(const QMetaObject *, int, Accessor); + + QHash, int> m_index; + QVector m_accessors; +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QDECLARATIVEFASTPROPERTIES_P_H -- cgit v0.12 From 1dc40aa28ee93ee067c18349dc54e7b8b4f4dc4f Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Thu, 25 Mar 2010 15:55:30 +1000 Subject: Add Symbian deploy section for qml import plugins Task-number: QTBUG-9364 Reviewed-by: jbarron --- demos/declarative/minehunt/minehunt.pro | 15 +++++++++++++++ mkspecs/features/symbian/data_caging_paths.prf | 1 + src/imports/multimedia/multimedia.pro | 11 +++++++++++ src/imports/particles/particles.pro | 11 +++++++++++ src/imports/webkit/webkit.pro | 11 +++++++++++ src/imports/widgets/widgets.pro | 11 +++++++++++ 6 files changed, 60 insertions(+) diff --git a/demos/declarative/minehunt/minehunt.pro b/demos/declarative/minehunt/minehunt.pro index 2df33e6..03059c7 100644 --- a/demos/declarative/minehunt/minehunt.pro +++ b/demos/declarative/minehunt/minehunt.pro @@ -23,3 +23,18 @@ MinehuntCore_sources.path = $$[QT_INSTALL_DEMOS]/declarative/minehunt/MinehuntCo INSTALLS = sources MinehuntCore_sources target +symbian:{ + load(data_caging_paths) + TARGET.EPOCALLOWDLLDATA = 1 + TARGET.CAPABILITY = CAP_GENERAL_DLL + include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) + + importFiles.sources = minehunt.dll \ + MinehuntCore/Explosion.qml \ + MinehuntCore/pics \ + MinehuntCore/qmldir + importFiles.path = $$QT_IMPORTS_BASE_DIR/MinehuntCore + DEPLOYMENT = importFiles +} + +INSTALLS = sources MinehuntCore_sources target diff --git a/mkspecs/features/symbian/data_caging_paths.prf b/mkspecs/features/symbian/data_caging_paths.prf index 6f40bb5..ae9bc09 100644 --- a/mkspecs/features/symbian/data_caging_paths.prf +++ b/mkspecs/features/symbian/data_caging_paths.prf @@ -75,6 +75,7 @@ exists($${EPOCROOT}epoc32/include/data_caging_paths.prf) { } isEmpty(QT_PLUGINS_BASE_DIR): QT_PLUGINS_BASE_DIR = /$$RESOURCE_FILES_DIR/qt$${QT_LIBINFIX}/plugins +isEmpty(QT_IMPORTS_BASE_DIR): QT_IMPORTS_BASE_DIR = /$$RESOURCE_FILES_DIR/qt/imports isEmpty(HW_ZDIR): HW_ZDIR = epoc32/data/z isEmpty(REG_RESOURCE_DIR): REG_RESOURCE_DIR = /private/10003a3f/apps isEmpty(REG_RESOURCE_IMPORT_DIR): REG_RESOURCE_IMPORT_DIR = /private/10003a3f/import/apps \ No newline at end of file diff --git a/src/imports/multimedia/multimedia.pro b/src/imports/multimedia/multimedia.pro index 16b3ace..8792e2b 100644 --- a/src/imports/multimedia/multimedia.pro +++ b/src/imports/multimedia/multimedia.pro @@ -23,4 +23,15 @@ target.path = $$[QT_INSTALL_IMPORTS]/$$TARGETPATH qmldir.files += $$QT_BUILD_TREE/imports/$$TARGETPATH/qmldir qmldir.path += $$[QT_INSTALL_IMPORTS]/$$TARGETPATH +symbian:{ + load(data_caging_paths) + include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) + + importFiles.sources = multimedia.dll \ + qmldir + importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH + + DEPLOYMENT = importFiles +} + INSTALLS += target qmldir diff --git a/src/imports/particles/particles.pro b/src/imports/particles/particles.pro index 02d9ea6..53d9c24 100644 --- a/src/imports/particles/particles.pro +++ b/src/imports/particles/particles.pro @@ -17,4 +17,15 @@ target.path = $$[QT_INSTALL_IMPORTS]/$$TARGETPATH qmldir.files += $$QT_BUILD_TREE/imports/$$TARGETPATH/qmldir qmldir.path += $$[QT_INSTALL_IMPORTS]/$$TARGETPATH +symbian:{ + load(data_caging_paths) + include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) + + importFiles.sources = particles.dll \ + qmldir + importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH + + DEPLOYMENT = importFiles +} + INSTALLS += target qmldir diff --git a/src/imports/webkit/webkit.pro b/src/imports/webkit/webkit.pro index ef08efe..a11f87f 100644 --- a/src/imports/webkit/webkit.pro +++ b/src/imports/webkit/webkit.pro @@ -14,4 +14,15 @@ target.path = $$[QT_INSTALL_IMPORTS]/$$TARGETPATH qmldir.files += $$QT_BUILD_TREE/imports/$$TARGETPATH/qmldir qmldir.path += $$[QT_INSTALL_IMPORTS]/$$TARGETPATH +symbian:{ + load(data_caging_paths) + include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) + + importFiles.sources = webkitqmlplugin.dll \ + qmldir + importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH + + DEPLOYMENT = importFiles +} + INSTALLS += target qmldir diff --git a/src/imports/widgets/widgets.pro b/src/imports/widgets/widgets.pro index aa09b3c..bf2576d 100644 --- a/src/imports/widgets/widgets.pro +++ b/src/imports/widgets/widgets.pro @@ -18,4 +18,15 @@ target.path = $$[QT_INSTALL_IMPORTS]/$$TARGETPATH qmldir.files += $$QT_BUILD_TREE/imports/$$TARGETPATH/qmldir qmldir.path += $$[QT_INSTALL_IMPORTS]/$$TARGETPATH +symbian:{ + load(data_caging_paths) + include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) + + importFiles.sources = widgets.dll \ + qmldir + importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH + + DEPLOYMENT = importFiles +} + INSTALLS += target qmldir -- cgit v0.12 From 2fff42f7fa4a38e8f5b709493562a81b75762da6 Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Thu, 25 Mar 2010 18:06:19 +1000 Subject: Add declarative subdir to examples.pro Task-number: Reviewed-by: Martin Jones --- examples/examples.pro | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/examples.pro b/examples/examples.pro index ec5cc5f9..b046167 100644 --- a/examples/examples.pro +++ b/examples/examples.pro @@ -57,6 +57,7 @@ embedded:SUBDIRS += qws contains(QT_CONFIG, opengl): SUBDIRS += opengl contains(QT_CONFIG, openvg): SUBDIRS += openvg contains(QT_CONFIG, dbus): SUBDIRS += dbus +contains(QT_CONFIG, declarative): SUBDIRS += declarative win32: SUBDIRS += activeqt contains(QT_CONFIG, xmlpatterns): SUBDIRS += xmlpatterns contains(DEFINES, QT_NO_CURSOR): SUBDIRS -= mainwindows -- cgit v0.12 From 4e5b463542385f4f4b3fc640926988dfb949ce54 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Fri, 26 Mar 2010 11:08:38 +1000 Subject: Really fix qMin() parameter types. --- src/declarative/graphicsitems/qdeclarativepathview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp index c98b006..783387c 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview.cpp +++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp @@ -772,7 +772,7 @@ void QDeclarativePathView::mouseReleaseEvent(QGraphicsSceneMouseEvent *) qreal v2 = velocity*velocity; qreal accel = d->deceleration; // + 0.25 to encourage moving at least one item in the flick direction - qreal dist = qMin(qreal(d->model->count()-1), qreal(d->model->count()) * v2 / (accel * 2.0) + 0.25); + qreal dist = qMin(qreal(d->model->count()-1), qreal(qreal(d->model->count()) * v2 / (accel * 2.0) + 0.25)); // round to nearest item. if (velocity > 0.) dist = qRound(dist + d->offset) - d->offset; -- cgit v0.12 From 47c0d01115aebd4cbad3ceca463c74411eeef9f9 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Fri, 26 Mar 2010 11:25:20 +1000 Subject: Remove Q prefix from the validators. --- src/declarative/QmlChanges.txt | 1 + .../graphicsitems/qdeclarativeitemsmodule.cpp | 6 +++--- src/declarative/graphicsitems/qdeclarativetextinput.cpp | 17 +++++++++-------- .../qdeclarativetextinput/data/validators.qml | 7 +++---- .../qdeclarativetextinput/tst_qdeclarativetextinput.cpp | 1 - 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/declarative/QmlChanges.txt b/src/declarative/QmlChanges.txt index 9a55bde..d35a4c2 100644 --- a/src/declarative/QmlChanges.txt +++ b/src/declarative/QmlChanges.txt @@ -1,6 +1,7 @@ ============================================================================= The changes below are pre Qt 4.7.0 beta +Removed Q-prefix from validators (IntValidator, DoubleValidator, and RegExpValidator) PathView: offset property now uses range 0-1.0 rather than 0-100 ListView, GridView::positionViewAtIndex() gained a 'mode' parameter Removed Qt.playSound (replaced by SoundEffect element) diff --git a/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp b/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp index 07d7f4d..f422365 100644 --- a/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp @@ -114,10 +114,10 @@ void QDeclarativeItemModule::defineModule() qmlRegisterType("Qt",4,6,"PathPercent"); qmlRegisterType("Qt",4,6,"PathQuad"); qmlRegisterType("Qt",4,6,"PathView"); - qmlRegisterType("Qt",4,6,"QIntValidator"); + qmlRegisterType("Qt",4,6,"IntValidator"); #if (QT_VERSION >= QT_VERSION_CHECK(4,7,0)) - qmlRegisterType("Qt",4,7,"QDoubleValidator"); - qmlRegisterType("Qt",4,7,"QRegExpValidator"); + qmlRegisterType("Qt",4,7,"DoubleValidator"); + qmlRegisterType("Qt",4,7,"RegExpValidator"); #endif qmlRegisterType("Qt",4,6,"Rectangle"); qmlRegisterType("Qt",4,6,"Repeater"); diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index b049728..f57ffc1 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -428,20 +428,21 @@ void QDeclarativeTextInput::setFocusOnPress(bool b) } /*! - \qmlproperty QValidator* TextInput::validator + \qmlproperty Validator TextInput::validator - Allows you to set a QValidator on the TextInput. When a validator is set + Allows you to set a validator on the TextInput. When a validator is set the TextInput will only accept input which leaves the text property in an acceptable or intermediate state. The accepted signal will only be sent if the text is in an acceptable state when enter is pressed. - Currently supported validators are QIntValidator, QDoubleValidator and - QRegExpValidator. For details, refer to their C++ documentation and remember + Currently supported validators are IntValidator, DoubleValidator and + RegExpValidator. For details, refer to their C++ documentation (QIntValidator, + QDoubleValidator, and QRegExpValidator) and remember that all Q_PROPERTIES are accessible from Qml. A brief usage guide follows: - QIntValidator and QDoubleValidator both are controllable through two properties, - top and bottom. The difference is that for QIntValidator the top and bottom properties - should be integers, and for QDoubleValidator they should be doubles. QRegExpValidator + IntValidator and DoubleValidator both are controllable through two properties, + top and bottom. The difference is that for IntValidator the top and bottom properties + should be integers, and for DoubleValidator they should be doubles. RegExpValidator has a single string property, regExp, which should be set to the regular expression to be used for validation. An example of using validators is shown below, which allows input of integers between 11 and 31 into the text input: @@ -449,7 +450,7 @@ void QDeclarativeTextInput::setFocusOnPress(bool b) \code import Qt 4.6 TextInput{ - validator: QIntValidator{bottom: 11; top: 31;} + validator: IntValidator{bottom: 11; top: 31;} focus: true } \endcode diff --git a/tests/auto/declarative/qdeclarativetextinput/data/validators.qml b/tests/auto/declarative/qdeclarativetextinput/data/validators.qml index 0c81548..efe7570 100644 --- a/tests/auto/declarative/qdeclarativetextinput/data/validators.qml +++ b/tests/auto/declarative/qdeclarativetextinput/data/validators.qml @@ -9,14 +9,13 @@ Item { Column{ TextInput { id: intInput; - validator: QIntValidator{top: 11; bottom: 2} + validator: IntValidator{top: 11; bottom: 2} } TextInput { id: dblInput; - validator: QDoubleValidator{top: 12.12; bottom: 2.93; decimals: 2; notation: QDoubleValidator.StandardNotation} + validator: DoubleValidator{top: 12.12; bottom: 2.93; decimals: 2; notation: DoubleValidator.StandardNotation} } TextInput { id: strInput; - //Requires QTBUG-8025 to be implemented first - //validator: QRegExpValidator { regExp: /[a-zA-z]{2,4}/;} + validator: RegExpValidator { regExp: RegExp(/[a-zA-z]{2,4}/) } } } diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index febcec3..84e7182 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -463,7 +463,6 @@ void tst_qdeclarativetextinput::validators() QVERIFY(strInput->hasFocus() == true); QTest::keyPress(canvas, Qt::Key_1); QTest::keyRelease(canvas, Qt::Key_1, Qt::NoModifier ,10); - QEXPECT_FAIL("","Will not work until QTBUG-8025 is resolved", Abort); QCOMPARE(strInput->text(), QLatin1String("")); QCOMPARE(strInput->hasAcceptableInput(), false); QTest::keyPress(canvas, Qt::Key_A); -- cgit v0.12 From f096fb75c20b82e89e74bb48b7e82fcdfe3f06de Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Fri, 26 Mar 2010 12:22:01 +1000 Subject: Add autotest for QTBUG-9367. --- tests/auto/declarative/qdeclarativeecmascript/data/regExp.qml | 7 +++++++ tests/auto/declarative/qdeclarativeecmascript/testtypes.h | 5 +++++ .../qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp | 11 +++++++++++ 3 files changed, 23 insertions(+) create mode 100644 tests/auto/declarative/qdeclarativeecmascript/data/regExp.qml diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/regExp.qml b/tests/auto/declarative/qdeclarativeecmascript/data/regExp.qml new file mode 100644 index 0000000..0dc404b --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/regExp.qml @@ -0,0 +1,7 @@ +import Qt.test 1.0 + +MyQmlObject{ + id: obj + objectName: "obj" + regExp: /[a-zA-z]/ +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/testtypes.h b/tests/auto/declarative/qdeclarativeecmascript/testtypes.h index 72dc3bb..faad8b7 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/testtypes.h +++ b/tests/auto/declarative/qdeclarativeecmascript/testtypes.h @@ -90,6 +90,7 @@ class MyQmlObject : public QObject Q_PROPERTY(QObject *objectProperty READ objectProperty WRITE setObjectProperty NOTIFY objectChanged) Q_PROPERTY(QDeclarativeListProperty objectListProperty READ objectListProperty CONSTANT) Q_PROPERTY(int resettableProperty READ resettableProperty WRITE setResettableProperty RESET resetProperty) + Q_PROPERTY(QRegExp regExp READ regExp WRITE setRegExp) public: MyQmlObject(): m_methodCalled(false), m_methodIntCalled(false), m_object(0), m_value(0), m_resetProperty(13) {} @@ -138,6 +139,9 @@ public: void setResettableProperty(int v) { m_resetProperty = v; } void resetProperty() { m_resetProperty = 13; } + QRegExp regExp() { return m_regExp; } + void setRegExp(const QRegExp ®Exp) { m_regExp = regExp; } + signals: void basicSignal(); void argumentSignal(int a, QString b, qreal c); @@ -162,6 +166,7 @@ private: QList m_objectQList; int m_value; int m_resetProperty; + QRegExp m_regExp; }; QML_DECLARE_TYPEINFO(MyQmlObject, QML_HAS_ATTACHED_PROPERTIES) diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp index 87d73a0..041fd4d 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp +++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp @@ -131,6 +131,7 @@ private slots: void bug1(); void dynamicCreationCrash(); + void regExpBug(); void callQtInvokables(); private: @@ -1241,6 +1242,16 @@ void tst_qdeclarativeecmascript::dynamicCreationCrash() QVERIFY(created == 0); } +//QTBUG-9367 +void tst_qdeclarativeecmascript::regExpBug() +{ + QDeclarativeComponent component(&engine, TEST_FILE("regExp.qml")); + MyQmlObject *object = qobject_cast(component.create()); + QVERIFY(object != 0); + QEXPECT_FAIL("", "QTBUG-9367", Continue); + QCOMPARE(object->regExp().pattern(), QLatin1String("[a-zA-z]")); +} + void tst_qdeclarativeecmascript::callQtInvokables() { MyInvokableObject o; -- cgit v0.12 From 6da3b5b7e49c17cb7159eb9fd752abe45c1e2fac Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Fri, 26 Mar 2010 12:38:49 +1000 Subject: Update test. --- tests/auto/declarative/qdeclarativelistview/data/listviewtest.qml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/auto/declarative/qdeclarativelistview/data/listviewtest.qml b/tests/auto/declarative/qdeclarativelistview/data/listviewtest.qml index 1c1b3f8..cc64c3f 100644 --- a/tests/auto/declarative/qdeclarativelistview/data/listviewtest.qml +++ b/tests/auto/declarative/qdeclarativelistview/data/listviewtest.qml @@ -85,12 +85,10 @@ Rectangle { } color: ListView.isCurrentItem ? "lightsteelblue" : "white" ListView.onRemove: SequentialAnimation { - ScriptAction { script: console.log("Fix PropertyAction with attached properties") } -/* PropertyAction { target: wrapper; property: "ListView.delayRemove"; value: true } NumberAnimation { target: wrapper; property: "scale"; to: 0; duration: 250; easing.type: "InOutQuad" } PropertyAction { target: wrapper; property: "ListView.delayRemove"; value: false } -*/ + } } }, -- cgit v0.12 From 33f7ae1c2edf7c414a5f8b3af79c9529718c29b1 Mon Sep 17 00:00:00 2001 From: Yann Bodson Date: Fri, 26 Mar 2010 14:28:44 +1000 Subject: Do not call parent implementation if we accept the keyPressEvent in GridView and ListView delegates. --- src/declarative/graphicsitems/qdeclarativegridview.cpp | 6 +++--- src/declarative/graphicsitems/qdeclarativelistview.cpp | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index de0cb04..17f74db 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -1552,9 +1552,6 @@ qreal QDeclarativeGridView::maxXExtent() const void QDeclarativeGridView::keyPressEvent(QKeyEvent *event) { Q_D(QDeclarativeGridView); - QDeclarativeFlickable::keyPressEvent(event); - if (event->isAccepted()) - return; if (d->model && d->model->count() && d->interactive) { d->moveReason = QDeclarativeGridViewPrivate::SetIndex; int oldCurrent = currentIndex(); @@ -1580,6 +1577,9 @@ void QDeclarativeGridView::keyPressEvent(QKeyEvent *event) } } d->moveReason = QDeclarativeGridViewPrivate::Other; + QDeclarativeFlickable::keyPressEvent(event); + if (event->isAccepted()) + return; event->ignore(); } diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 8a70c07..85fcc27 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -2124,9 +2124,6 @@ qreal QDeclarativeListView::maxXExtent() const void QDeclarativeListView::keyPressEvent(QKeyEvent *event) { Q_D(QDeclarativeListView); - QDeclarativeFlickable::keyPressEvent(event); - if (event->isAccepted()) - return; if (d->model && d->model->count() && d->interactive) { if ((d->orient == QDeclarativeListView::Horizontal && event->key() == Qt::Key_Left) @@ -2151,6 +2148,9 @@ void QDeclarativeListView::keyPressEvent(QKeyEvent *event) } } } + QDeclarativeFlickable::keyPressEvent(event); + if (event->isAccepted()) + return; event->ignore(); } -- cgit v0.12 From 09a40e13174b9f34007ce9fbd98e06b4e48c1954 Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Fri, 26 Mar 2010 14:33:04 +1000 Subject: Control of image rendered size (esp. SVG). Add Translate transform. Image::sourceWidth and Image::sourceHeight read/write properties. Task-number: QTBUG-8984 --- examples/declarative/images/content/lemonade.jpg | Bin 0 -> 6645 bytes examples/declarative/images/images.qml | 70 +++++++++ src/declarative/graphicsitems/graphicsitems.pri | 2 + .../graphicsitems/qdeclarativeborderimage.cpp | 23 +-- .../graphicsitems/qdeclarativeimage.cpp | 26 ++++ .../graphicsitems/qdeclarativeimagebase.cpp | 58 ++++++- .../graphicsitems/qdeclarativeimagebase_p.h | 9 ++ .../graphicsitems/qdeclarativeimagebase_p_p.h | 2 + src/declarative/graphicsitems/qdeclarativeitem.cpp | 38 ++++- .../graphicsitems/qdeclarativeitemsmodule.cpp | 2 + .../graphicsitems/qdeclarativetranslate.cpp | 159 +++++++++++++++++++ .../graphicsitems/qdeclarativetranslate_p.h | 92 +++++++++++ src/declarative/util/qdeclarativepixmapcache.cpp | 172 ++++++++++++++------- src/declarative/util/qdeclarativepixmapcache_p.h | 9 +- .../declarative/qdeclarativeimage/data/big.jpeg | Bin 0 -> 1700081 bytes .../declarative/qdeclarativeimage/data/big256.png | Bin 0 -> 3566 bytes .../declarative/qdeclarativeimage/data/heart.png | Bin 0 -> 12577 bytes .../declarative/qdeclarativeimage/data/heart.svg | 55 +++++++ .../qdeclarativeimage/data/heart200.png | Bin 0 -> 8063 bytes .../qdeclarativeimage/tst_qdeclarativeimage.cpp | 65 +++++++- 20 files changed, 696 insertions(+), 86 deletions(-) create mode 100644 examples/declarative/images/content/lemonade.jpg create mode 100644 examples/declarative/images/images.qml create mode 100644 src/declarative/graphicsitems/qdeclarativetranslate.cpp create mode 100644 src/declarative/graphicsitems/qdeclarativetranslate_p.h create mode 100644 tests/auto/declarative/qdeclarativeimage/data/big.jpeg create mode 100644 tests/auto/declarative/qdeclarativeimage/data/big256.png create mode 100644 tests/auto/declarative/qdeclarativeimage/data/heart.png create mode 100644 tests/auto/declarative/qdeclarativeimage/data/heart.svg create mode 100644 tests/auto/declarative/qdeclarativeimage/data/heart200.png diff --git a/examples/declarative/images/content/lemonade.jpg b/examples/declarative/images/content/lemonade.jpg new file mode 100644 index 0000000..db445c9 Binary files /dev/null and b/examples/declarative/images/content/lemonade.jpg differ diff --git a/examples/declarative/images/images.qml b/examples/declarative/images/images.qml new file mode 100644 index 0000000..82848df --- /dev/null +++ b/examples/declarative/images/images.qml @@ -0,0 +1,70 @@ +import Qt 4.6 + +Rectangle { + color: "white" + width: grid.width + 50 + height: grid.height + 50 + + Grid { + x: 25; y: 25 + id: grid + columns: 3 + + Image { + source: "content/lemonade.jpg" + } + + Image { + sourceWidth: 50 + sourceHeight: 50 + source: "content/lemonade.jpg" + } + + Image { + sourceWidth: 50 + sourceHeight: 50 + smooth: true + source: "content/lemonade.jpg" + } + + Image { + scale: 1/3 + source: "content/lemonade.jpg" + } + + Image { + scale: 1/3 + sourceWidth: 50 + sourceHeight: 50 + source: "content/lemonade.jpg" + } + + Image { + scale: 1/3 + sourceWidth: 50 + sourceHeight: 50 + smooth: true + source: "content/lemonade.jpg" + } + + Image { + width: 50; height: 50; transform: Translate { x: 50 } + source: "content/lemonade.jpg" + } + + Image { + width: 50; height: 50; transform: Translate { x: 50 } + sourceWidth: 50 + sourceHeight: 50 + source: "content/lemonade.jpg" + } + + Image { + width: 50; height: 50; transform: Translate { x: 50 } + sourceWidth: 50 + sourceHeight: 50 + smooth: true + source: "content/lemonade.jpg" + } + } +} diff --git a/src/declarative/graphicsitems/graphicsitems.pri b/src/declarative/graphicsitems/graphicsitems.pri index d30651b..af76a67 100644 --- a/src/declarative/graphicsitems/graphicsitems.pri +++ b/src/declarative/graphicsitems/graphicsitems.pri @@ -39,6 +39,7 @@ HEADERS += \ $$PWD/qdeclarativerepeater_p.h \ $$PWD/qdeclarativerepeater_p_p.h \ $$PWD/qdeclarativescalegrid_p_p.h \ + $$PWD/qdeclarativetranslate_p.h \ $$PWD/qdeclarativetextinput_p.h \ $$PWD/qdeclarativetextinput_p_p.h \ $$PWD/qdeclarativetextedit_p.h \ @@ -75,6 +76,7 @@ SOURCES += \ $$PWD/qdeclarativerectangle.cpp \ $$PWD/qdeclarativerepeater.cpp \ $$PWD/qdeclarativescalegrid.cpp \ + $$PWD/qdeclarativetranslate.cpp \ $$PWD/qdeclarativetextinput.cpp \ $$PWD/qdeclarativetext.cpp \ $$PWD/qdeclarativetextedit.cpp \ diff --git a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp index f92c207..96f95f2 100644 --- a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp @@ -217,7 +217,8 @@ void QDeclarativeBorderImage::load() thisSciRequestFinished, Qt::DirectConnection); } } else { - QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(d->url, &d->pix, d->async); + QSize impsize; + QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(d->url, &d->pix, &impsize, d->async); if (status != QDeclarativePixmapReply::Ready && status != QDeclarativePixmapReply::Error) { QDeclarativePixmapReply *reply = QDeclarativePixmapCache::request(qmlEngine(this), d->url); d->pendingPixmapCache = true; @@ -226,8 +227,8 @@ void QDeclarativeBorderImage::load() this, SLOT(requestProgress(qint64,qint64))); } else { //### should be unified with requestFinished - setImplicitWidth(d->pix.width()); - setImplicitHeight(d->pix.height()); + setImplicitWidth(impsize.width()); + setImplicitHeight(impsize.height()); if (d->pix.isNull()) d->status = Error; @@ -336,7 +337,8 @@ void QDeclarativeBorderImage::setGridScaledImage(const QDeclarativeGridScaledIma d->verticalTileMode = sci.verticalTileRule(); d->sciurl = d->url.resolved(QUrl(sci.pixmapUrl())); - QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(d->sciurl, &d->pix, d->async); + QSize impsize; + QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(d->sciurl, &d->pix, &impsize, d->async); if (status != QDeclarativePixmapReply::Ready && status != QDeclarativePixmapReply::Error) { QDeclarativePixmapReply *reply = QDeclarativePixmapCache::request(qmlEngine(this), d->sciurl); d->sciPendingPixmapCache = true; @@ -362,8 +364,8 @@ void QDeclarativeBorderImage::setGridScaledImage(const QDeclarativeGridScaledIma thisRequestProgress, Qt::DirectConnection); } else { //### should be unified with requestFinished - setImplicitWidth(d->pix.width()); - setImplicitHeight(d->pix.height()); + setImplicitWidth(impsize.width()); + setImplicitHeight(impsize.height()); if (d->pix.isNull()) d->status = Error; @@ -381,16 +383,17 @@ void QDeclarativeBorderImage::requestFinished() { Q_D(QDeclarativeBorderImage); + QSize impsize; if (d->url.path().endsWith(QLatin1String(".sci"))) { d->sciPendingPixmapCache = false; - QDeclarativePixmapCache::get(d->sciurl, &d->pix, d->async); + QDeclarativePixmapCache::get(d->sciurl, &d->pix, &impsize, d->async); } else { d->pendingPixmapCache = false; - if (QDeclarativePixmapCache::get(d->url, &d->pix, d->async) != QDeclarativePixmapReply::Ready) + if (QDeclarativePixmapCache::get(d->url, &d->pix, &impsize, d->async) != QDeclarativePixmapReply::Ready) d->status = Error; } - setImplicitWidth(d->pix.width()); - setImplicitHeight(d->pix.height()); + setImplicitWidth(impsize.width()); + setImplicitHeight(impsize.height()); if (d->status == Loading) d->status = Ready; diff --git a/src/declarative/graphicsitems/qdeclarativeimage.cpp b/src/declarative/graphicsitems/qdeclarativeimage.cpp index 425976f..8b93063 100644 --- a/src/declarative/graphicsitems/qdeclarativeimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeimage.cpp @@ -266,6 +266,32 @@ qreal QDeclarativeImage::paintedHeight() const filtering at the beginning of the animation and reenable it at the conclusion. */ +/*! + \qmlproperty int Image::sourceWidth + \qmlproperty int Image::sourceHeight + + These properties are the size of the loaded image, in pixels. + + If you set these properties explicitly, you can to control the storage + used by a loaded image. The image will be scaled down if its intrinsic size + is greater than these values. + + Unlike setting the width and height properties, which merely scale the painting + of the image, these properties affect the number of pixels stored. + + \e{Changing these properties dynamically will lead to the image source being reloaded, + potentially even from the network if it is not in the disk cache.} + + If the source is an instrinsically scalable image (eg. SVG), these properties + determine the size of the loaded image regardless of intrinsic size. You should + avoid changing these properties dynamically - rendering an SVG is \e slow compared + to an image. + + If the source is a non-scalable image (eg. JPEG), the loaded image will + be no greater than these properties specify. For some formats (currently only JPEG), + the whole image will never actually be loaded into memory. +*/ + void QDeclarativeImage::updatePaintedGeometry() { Q_D(QDeclarativeImage); diff --git a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp index e65c9d1..3b75a85 100644 --- a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp +++ b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp @@ -116,6 +116,41 @@ void QDeclarativeImageBase::setSource(const QUrl &url) load(); } +void QDeclarativeImageBase::setSourceWidth(int w) +{ + Q_D(QDeclarativeImageBase); + if (d->sourcewidth == w) + return; + d->sourcewidth = w; + emit sourceSizeChanged(); + if (isComponentComplete()) + load(); +} + +int QDeclarativeImageBase::sourceWidth() const +{ + Q_D(const QDeclarativeImageBase); + return d->sourcewidth <= 0 ? implicitWidth() : d->sourcewidth; +} + +void QDeclarativeImageBase::setSourceHeight(int h) +{ + Q_D(QDeclarativeImageBase); + if (d->sourceheight == h) + return; + d->sourceheight = h; + emit sourceSizeChanged(); + if (isComponentComplete()) + load(); +} + +int QDeclarativeImageBase::sourceHeight() const +{ + Q_D(const QDeclarativeImageBase); + return d->sourceheight <= 0 ? implicitHeight() : d->sourceheight; +} + + void QDeclarativeImageBase::load() { Q_D(QDeclarativeImageBase); @@ -134,9 +169,12 @@ void QDeclarativeImageBase::load() update(); } else { d->status = Loading; - QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(d->url, &d->pix, d->async); + int reqwidth = d->sourcewidth; + int reqheight = d->sourceheight; + QSize impsize; + QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(d->url, &d->pix, &impsize, d->async, reqwidth, reqheight); if (status != QDeclarativePixmapReply::Ready && status != QDeclarativePixmapReply::Error) { - QDeclarativePixmapReply *reply = QDeclarativePixmapCache::request(qmlEngine(this), d->url); + QDeclarativePixmapReply *reply = QDeclarativePixmapCache::request(qmlEngine(this), d->url, reqwidth, reqheight); d->pendingPixmapCache = true; static int replyDownloadProgress = -1; @@ -161,11 +199,14 @@ void QDeclarativeImageBase::load() } else { //### should be unified with requestFinished if (status == QDeclarativePixmapReply::Ready) { - setImplicitWidth(d->pix.width()); - setImplicitHeight(d->pix.height()); + setImplicitWidth(impsize.width()); + setImplicitHeight(impsize.height()); if (d->status == Loading) d->status = Ready; + + if (d->sourcewidth <= 0 || d->sourceheight <= 0) + emit sourceSizeChanged(); } else { d->status = Error; } @@ -186,16 +227,19 @@ void QDeclarativeImageBase::requestFinished() d->pendingPixmapCache = false; - if (QDeclarativePixmapCache::get(d->url, &d->pix, d->async) != QDeclarativePixmapReply::Ready) + QSize impsize; + if (QDeclarativePixmapCache::get(d->url, &d->pix, &impsize, d->async, d->sourcewidth, d->sourceheight) != QDeclarativePixmapReply::Ready) d->status = Error; - setImplicitWidth(d->pix.width()); - setImplicitHeight(d->pix.height()); + setImplicitWidth(impsize.width()); + setImplicitHeight(impsize.height()); if (d->status == Loading) d->status = Ready; d->progress = 1.0; emit statusChanged(d->status); emit progressChanged(1.0); + if (d->sourcewidth <= 0 || d->sourceheight <= 0) + emit sourceSizeChanged(); pixmapChange(); update(); } diff --git a/src/declarative/graphicsitems/qdeclarativeimagebase_p.h b/src/declarative/graphicsitems/qdeclarativeimagebase_p.h index b215193..2653d0a 100644 --- a/src/declarative/graphicsitems/qdeclarativeimagebase_p.h +++ b/src/declarative/graphicsitems/qdeclarativeimagebase_p.h @@ -59,6 +59,9 @@ class Q_DECLARATIVE_EXPORT QDeclarativeImageBase : public QDeclarativeItem Q_PROPERTY(qreal progress READ progress NOTIFY progressChanged) Q_PROPERTY(bool asynchronous READ asynchronous WRITE setAsynchronous NOTIFY asynchronousChanged) + Q_PROPERTY(int sourceWidth READ sourceWidth WRITE setSourceWidth NOTIFY sourceSizeChanged) + Q_PROPERTY(int sourceHeight READ sourceHeight WRITE setSourceHeight NOTIFY sourceSizeChanged) + public: ~QDeclarativeImageBase(); enum Status { Null, Ready, Loading, Error }; @@ -71,8 +74,14 @@ public: bool asynchronous() const; void setAsynchronous(bool); + void setSourceWidth(int); + int sourceWidth() const; + void setSourceHeight(int); + int sourceHeight() const; + Q_SIGNALS: void sourceChanged(const QUrl &); + void sourceSizeChanged(); void statusChanged(Status); void progressChanged(qreal progress); void asynchronousChanged(); diff --git a/src/declarative/graphicsitems/qdeclarativeimagebase_p_p.h b/src/declarative/graphicsitems/qdeclarativeimagebase_p_p.h index c4a61f3..cced228 100644 --- a/src/declarative/graphicsitems/qdeclarativeimagebase_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativeimagebase_p_p.h @@ -68,6 +68,7 @@ public: QDeclarativeImageBasePrivate() : status(QDeclarativeImageBase::Null), progress(0.0), + sourcewidth(0), sourceheight(0), pendingPixmapCache(false), async(false) { @@ -78,6 +79,7 @@ public: QDeclarativeImageBase::Status status; QUrl url; qreal progress; + int sourcewidth, sourceheight; bool pendingPixmapCache : 1; bool async : 1; }; diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index dd6056e..c331af7 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -83,7 +83,43 @@ QT_BEGIN_NAMESPACE You can assign any number of Transform elements to an Item. Each Transform is applied in order, one at a time, to the Item it's assigned to. - \sa Rotation, Scale + \sa Rotation, Scale, Translate +*/ + +/*! + \qmlclass Translate QGraphicsTranslate + \since 4.7 + \brief The Translate object provides a way to move an Item without changing its x or y. + + The Translate object independent control over position in addition to the Item's x and y properties. + + The following example moves the X axis of the Rectangle, relative to its interior point 25, 25: + \qml + Row { + Rectangle { + width: 100; height: 100 + color: "blue" + transform: Translate { y: 20 } + } + Rectangle { + width: 100; height: 100 + color: "red" + transform: Translate { y: -20 } + } + } + \endqml +*/ + +/*! + \qmlproperty real Translate::x + + The translation along the X axis. +*/ + +/*! + \qmlproperty real Translate::yTranslate + + The translation along the Y axis. */ /*! diff --git a/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp b/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp index 07d7f4d..1c458b1d4 100644 --- a/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp @@ -69,6 +69,7 @@ #include "qdeclarativepathview_p.h" #include "qdeclarativerectangle_p.h" #include "qdeclarativerepeater_p.h" +#include "qdeclarativetranslate_p.h" #include "qdeclarativetext_p.h" #include "qdeclarativetextedit_p.h" #include "qdeclarativetextinput_p.h" @@ -123,6 +124,7 @@ void QDeclarativeItemModule::defineModule() qmlRegisterType("Qt",4,6,"Repeater"); qmlRegisterType("Qt",4,6,"Rotation"); qmlRegisterType("Qt",4,6,"Row"); + qmlRegisterType("Qt",4,6,"Translate"); qmlRegisterType("Qt",4,6,"Scale"); qmlRegisterType("Qt",4,6,"Text"); qmlRegisterType("Qt",4,6,"TextEdit"); diff --git a/src/declarative/graphicsitems/qdeclarativetranslate.cpp b/src/declarative/graphicsitems/qdeclarativetranslate.cpp new file mode 100644 index 0000000..57c47f0 --- /dev/null +++ b/src/declarative/graphicsitems/qdeclarativetranslate.cpp @@ -0,0 +1,159 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qdeclarativetranslate_p.h" +#include +#include +#include + +class QDeclarativeTranslatePrivate : public QGraphicsTransformPrivate +{ +public: + QDeclarativeTranslatePrivate() + : x(0), y(0), z(0) {} + qreal x; + qreal y; + qreal z; +}; + +/*! + Constructs an empty QDeclarativeTranslate object with the given \a parent. +*/ +QDeclarativeTranslate::QDeclarativeTranslate(QObject *parent) + : QGraphicsTransform(*new QDeclarativeTranslatePrivate, parent) +{ +} + +/*! + Destroys the graphics scale. +*/ +QDeclarativeTranslate::~QDeclarativeTranslate() +{ +} + +/*! + \property QDeclarativeTranslate::x + \brief the horizontal translation. + + The translation can be any real number; the default value is 0.0. + + \sa y, z +*/ +qreal QDeclarativeTranslate::x() const +{ + Q_D(const QDeclarativeTranslate); + return d->x; +} +void QDeclarativeTranslate::setX(qreal x) +{ + Q_D(QDeclarativeTranslate); + if (d->x == x) + return; + d->x = x; + update(); + emit positionChanged(); +} + +/*! + \property QDeclarativeTranslate::y + \brief the vertical translation. + + The translation can be any real number; the default value is 0.0. + + \sa x, z +*/ +qreal QDeclarativeTranslate::y() const +{ + Q_D(const QDeclarativeTranslate); + return d->y; +} +void QDeclarativeTranslate::setY(qreal y) +{ + Q_D(QDeclarativeTranslate); + if (d->y == y) + return; + d->y = y; + update(); + emit positionChanged(); +} + +/*! + \property QDeclarativeTranslate::z + \brief the depth translation. + + The translation can be any real number; the default value is 0.0. + + \sa x, y +*/ +qreal QDeclarativeTranslate::z() const +{ + Q_D(const QDeclarativeTranslate); + return d->z; +} +void QDeclarativeTranslate::setZ(qreal z) +{ + Q_D(QDeclarativeTranslate); + if (d->z == z) + return; + d->z = z; + update(); + emit positionChanged(); +} + +/*! + \reimp +*/ +void QDeclarativeTranslate::applyTo(QMatrix4x4 *matrix) const +{ + Q_D(const QDeclarativeTranslate); + matrix->translate(d->x, d->y, d->z); +} + +/*! + \fn QDeclarativeTranslate::positionChanged() + + QDeclarativeTranslate emits this signal when its position changes. + + \sa QDeclarativeTranslate::x, QDeclarativeTranslate::y + \sa QDeclarativeTranslate::z +*/ + +//#include "moc_qdeclarativetranslate.cpp" diff --git a/src/declarative/graphicsitems/qdeclarativetranslate_p.h b/src/declarative/graphicsitems/qdeclarativetranslate_p.h new file mode 100644 index 0000000..54bfc3d --- /dev/null +++ b/src/declarative/graphicsitems/qdeclarativetranslate_p.h @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QDECLARATIVETRANSLATE_H +#define QDECLARATIVETRANSLATE_H + +#include "qdeclarativeitem.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Declarative) + +class QDeclarativeTranslatePrivate; + +class Q_GUI_EXPORT QDeclarativeTranslate : public QGraphicsTransform +{ + Q_OBJECT + + Q_PROPERTY(qreal x READ x WRITE setX NOTIFY positionChanged) + Q_PROPERTY(qreal y READ y WRITE setY NOTIFY positionChanged) + Q_PROPERTY(qreal z READ z WRITE setZ NOTIFY positionChanged) + +public: + QDeclarativeTranslate(QObject *parent = 0); + ~QDeclarativeTranslate(); + + qreal x() const; + void setX(qreal); + + qreal y() const; + void setY(qreal); + + qreal z() const; + void setZ(qreal); + + void applyTo(QMatrix4x4 *matrix) const; + +Q_SIGNALS: + void positionChanged(); + +private: + Q_DECLARE_PRIVATE(QDeclarativeTranslate) + Q_DISABLE_COPY(QDeclarativeTranslate) +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QDeclarativeTranslate) + +QT_END_HEADER + +#endif diff --git a/src/declarative/util/qdeclarativepixmapcache.cpp b/src/declarative/util/qdeclarativepixmapcache.cpp index e78fdf1..bbe86e7 100644 --- a/src/declarative/util/qdeclarativepixmapcache.cpp +++ b/src/declarative/util/qdeclarativepixmapcache.cpp @@ -106,7 +106,7 @@ public: QDeclarativeImageReader(QDeclarativeEngine *eng); ~QDeclarativeImageReader(); - QDeclarativePixmapReply *getImage(const QUrl &url); + QDeclarativePixmapReply *getImage(const QUrl &url, int req_width, int req_height); void cancel(QDeclarativePixmapReply *rep); static QDeclarativeImageReader *instance(QDeclarativeEngine *engine); @@ -140,7 +140,7 @@ public: QCoreApplication::postEvent(this, new QEvent(QEvent::User)); } - QDeclarativePixmapReply *getImage(const QUrl &url); + QDeclarativePixmapReply *getImage(const QUrl &url, int req_width, int req_height); void cancel(QDeclarativePixmapReply *reply); protected: @@ -170,11 +170,50 @@ private: //=========================================================================== +static bool readImage(const QUrl& url, QIODevice *dev, QImage *image, QString *errorString, QSize *impsize, int req_width, int req_height) +{ + QImageReader imgio(dev); + + bool force_scale = false; + if (url.path().endsWith(QLatin1String(".svg"),Qt::CaseInsensitive)) { + imgio.setFormat("svg"); // QSvgPlugin::capabilities bug QTBUG-9053 + force_scale = true; + } + + bool scaled = false; + if (req_width > 0 || req_height > 0) { + QSize s = imgio.size(); + if (req_width && (force_scale || req_width < s.width())) { s.setWidth(req_width); scaled = true; } + if (req_height && (force_scale || req_height < s.height())) { s.setHeight(req_height); scaled = true; } + if (scaled) { imgio.setScaledSize(s); } + } + + if (impsize) + *impsize = imgio.size(); + + if (imgio.read(image)) { + if (impsize && impsize->width() < 0) + *impsize = image->size(); + return true; + } else { + if (errorString) + *errorString = QLatin1String("Error decoding: ") + url.toString() + + QLatin1String(" \"") + imgio.errorString() + QLatin1String("\""); + return false; + } +} + + +//=========================================================================== + int QDeclarativeImageRequestHandler::replyDownloadProgress = -1; int QDeclarativeImageRequestHandler::replyFinished = -1; int QDeclarativeImageRequestHandler::downloadProgress = -1; int QDeclarativeImageRequestHandler::thisNetworkRequestDone = -1; +typedef QHash QDeclarativePixmapSizeHash; +Q_GLOBAL_STATIC(QDeclarativePixmapSizeHash, qmlOriginalSizes); + bool QDeclarativeImageRequestHandler::event(QEvent *event) { if (event->type() == QEvent::User) { @@ -238,10 +277,10 @@ bool QDeclarativeImageRequestHandler::event(QEvent *event) QString errorStr; QFile f(lf); if (f.open(QIODevice::ReadOnly)) { - QImageReader imgio(&f); - if (!imgio.read(&image)) { - errorStr = QLatin1String("Error decoding: ") + url.toString() - + QLatin1String(" \"") + imgio.errorString() + QLatin1String("\""); + QSize read_impsize; + if (readImage(url, &f, &image, &errorStr, &read_impsize, runningJob->forcedWidth(),runningJob->forcedHeight())) { + qmlOriginalSizes()->insert(url, read_impsize); + } else { errorCode = QDeclarativeImageReaderEvent::Loading; } } else { @@ -303,12 +342,11 @@ void QDeclarativeImageRequestHandler::networkRequestDone() error = QDeclarativeImageReaderEvent::Loading; errorString = reply->errorString(); } else { - QImageReader imgio(reply); - if (imgio.read(&image)) { + QSize read_impsize; + if (readImage(reply->url(), reply, &image, &errorString, &read_impsize, job->forcedWidth(), job->forcedHeight())) { + qmlOriginalSizes()->insert(reply->url(), read_impsize); error = QDeclarativeImageReaderEvent::NoError; } else { - errorString = QLatin1String("Error decoding: ") + reply->url().toString() - + QLatin1String(" \"") + imgio.errorString() + QLatin1String("\""); error = QDeclarativeImageReaderEvent::Decoding; } } @@ -352,10 +390,10 @@ QDeclarativeImageReader *QDeclarativeImageReader::instance(QDeclarativeEngine *e return reader; } -QDeclarativePixmapReply *QDeclarativeImageReader::getImage(const QUrl &url) +QDeclarativePixmapReply *QDeclarativeImageReader::getImage(const QUrl &url, int req_width, int req_height) { mutex.lock(); - QDeclarativePixmapReply *reply = new QDeclarativePixmapReply(this, url); + QDeclarativePixmapReply *reply = new QDeclarativePixmapReply(this, url, req_width, req_height); reply->addRef(); reply->setLoading(); jobs.append(reply); @@ -397,40 +435,6 @@ void QDeclarativeImageReader::run() //=========================================================================== -static bool readImage(QIODevice *dev, QPixmap *pixmap, QString &errorString) -{ - QImageReader imgio(dev); - -//#define QT_TEST_SCALED_SIZE -#ifdef QT_TEST_SCALED_SIZE - /* - Some mechanism is needed for loading images at a limited size, especially - for remote images. Loading only thumbnails of remote progressive JPEG - images can be efficient. (Qt jpeg handler does not do so currently) - */ - - QSize limit(60,60); - QSize sz = imgio.size(); - if (sz.width() > limit.width() || sz.height() > limit.height()) { - sz.scale(limit,Qt::KeepAspectRatio); - imgio.setScaledSize(sz); - } -#endif - - QImage img; - if (imgio.read(&img)) { -#ifdef QT_TEST_SCALED_SIZE - if (!sz.isValid()) - img = img.scaled(limit,Qt::KeepAspectRatio); -#endif - *pixmap = QPixmap::fromImage(img); - return true; - } else { - errorString = imgio.errorString(); - return false; - } -} - /*! \internal \class QDeclarativePixmapCache @@ -447,8 +451,10 @@ class QDeclarativePixmapReplyPrivate : public QObjectPrivate Q_DECLARE_PUBLIC(QDeclarativePixmapReply) public: - QDeclarativePixmapReplyPrivate(QDeclarativeImageReader *r, const QUrl &u) - : QObjectPrivate(), refCount(1), url(u), status(QDeclarativePixmapReply::Loading), loading(false), reader(r) { + QDeclarativePixmapReplyPrivate(QDeclarativeImageReader *r, const QUrl &u, int req_width, int req_height) + : QObjectPrivate(), refCount(1), url(u), status(QDeclarativePixmapReply::Loading), loading(false), reader(r), + forced_width(req_width), forced_height(req_height) + { } int refCount; @@ -457,11 +463,12 @@ public: QDeclarativePixmapReply::Status status; bool loading; QDeclarativeImageReader *reader; + int forced_width, forced_height; }; -QDeclarativePixmapReply::QDeclarativePixmapReply(QDeclarativeImageReader *reader, const QUrl &url) - : QObject(*new QDeclarativePixmapReplyPrivate(reader, url), 0) +QDeclarativePixmapReply::QDeclarativePixmapReply(QDeclarativeImageReader *reader, const QUrl &url, int req_width, int req_height) + : QObject(*new QDeclarativePixmapReplyPrivate(reader, url, req_width, req_height), 0) { } @@ -475,6 +482,28 @@ const QUrl &QDeclarativePixmapReply::url() const return d->url; } +int QDeclarativePixmapReply::forcedWidth() const +{ + Q_D(const QDeclarativePixmapReply); + return d->forced_width; +} + +int QDeclarativePixmapReply::forcedHeight() const +{ + Q_D(const QDeclarativePixmapReply); + return d->forced_height; +} + +QSize QDeclarativePixmapReply::implicitSize() const +{ + Q_D(const QDeclarativePixmapReply); + QDeclarativePixmapSizeHash::Iterator iter = qmlOriginalSizes()->find(d->url); + if (iter != qmlOriginalSizes()->end()) + return *iter; + else + return QSize(); +} + bool QDeclarativePixmapReply::event(QEvent *event) { Q_D(QDeclarativePixmapReply); @@ -554,13 +583,25 @@ bool QDeclarativePixmapReply::release(bool defer) If \a async is false the image will be loaded and decoded immediately; otherwise the image will be loaded and decoded in a separate thread. + If \a req_width and \a req_height are non-zero, they are used for + the size of the rendered pixmap rather than the intrinsic size of the image. + Different request sizes add different cache items. + Note that images sourced from the network will always be loaded and decoded asynchonously. */ -QDeclarativePixmapReply::Status QDeclarativePixmapCache::get(const QUrl& url, QPixmap *pixmap, bool async) +QDeclarativePixmapReply::Status QDeclarativePixmapCache::get(const QUrl& url, QPixmap *pixmap, QSize *impsize, bool async, int req_width, int req_height) { QDeclarativePixmapReply::Status status = QDeclarativePixmapReply::Unrequested; QByteArray key = url.toEncoded(QUrl::FormattingOption(0x100)); + + if (req_width > 0 && req_height > 0) { + key += ':'; + key += QByteArray::number(req_width); + key += 'x'; + key += QByteArray::number(req_height); + } + QString strKey = QString::fromLatin1(key.constData(), key.count()); #ifndef QT_NO_LOCALFILE_OPTIMIZED_QML @@ -570,11 +611,13 @@ QDeclarativePixmapReply::Status QDeclarativePixmapCache::get(const QUrl& url, QP status = QDeclarativePixmapReply::Ready; if (!QPixmapCache::find(strKey,pixmap)) { QFile f(lf); + QSize read_impsize; if (f.open(QIODevice::ReadOnly)) { QString errorString; - if (!readImage(&f, pixmap, errorString)) { - errorString = QLatin1String("Error decoding: ") + url.toString() - + QLatin1String(" \"") + errorString + QLatin1String("\""); + QImage image; + if (readImage(url, &f, &image, &errorString, &read_impsize, req_width, req_height)) { + *pixmap = QPixmap::fromImage(image); + } else { qWarning() << errorString; *pixmap = QPixmap(); status = QDeclarativePixmapReply::Error; @@ -584,8 +627,18 @@ QDeclarativePixmapReply::Status QDeclarativePixmapCache::get(const QUrl& url, QP *pixmap = QPixmap(); status = QDeclarativePixmapReply::Error; } - if (status == QDeclarativePixmapReply::Ready) + if (status == QDeclarativePixmapReply::Ready) { QPixmapCache::insert(strKey, *pixmap); + qmlOriginalSizes()->insert(url, read_impsize); + } + if (impsize) + *impsize = read_impsize; + } else { + if (impsize) { + QDeclarativePixmapSizeHash::Iterator iter = qmlOriginalSizes()->find(url); + if (iter != qmlOriginalSizes()->end()) + *impsize = *iter; + } } return status; } @@ -608,6 +661,11 @@ QDeclarativePixmapReply::Status QDeclarativePixmapCache::get(const QUrl& url, QP } else if (iter != qmlActivePixmapReplies()->end()) { status = QDeclarativePixmapReply::Loading; } + if (impsize) { + QDeclarativePixmapSizeHash::Iterator iter = qmlOriginalSizes()->find(url); + if (iter != qmlOriginalSizes()->end()) + *impsize = *iter; + } return status; } @@ -621,12 +679,12 @@ QDeclarativePixmapReply::Status QDeclarativePixmapCache::get(const QUrl& url, QP The returned QDeclarativePixmapReply will be deleted when all request() calls are matched by a corresponding get() call. */ -QDeclarativePixmapReply *QDeclarativePixmapCache::request(QDeclarativeEngine *engine, const QUrl &url) +QDeclarativePixmapReply *QDeclarativePixmapCache::request(QDeclarativeEngine *engine, const QUrl &url, int req_width, int req_height) { QDeclarativePixmapReplyHash::Iterator iter = qmlActivePixmapReplies()->find(url); if (iter == qmlActivePixmapReplies()->end()) { QDeclarativeImageReader *reader = QDeclarativeImageReader::instance(engine); - QDeclarativePixmapReply *item = reader->getImage(url); + QDeclarativePixmapReply *item = reader->getImage(url, req_width, req_height); iter = qmlActivePixmapReplies()->insert(url, item); } else { (*iter)->addRef(); diff --git a/src/declarative/util/qdeclarativepixmapcache_p.h b/src/declarative/util/qdeclarativepixmapcache_p.h index b8949db..0ccf469 100644 --- a/src/declarative/util/qdeclarativepixmapcache_p.h +++ b/src/declarative/util/qdeclarativepixmapcache_p.h @@ -66,6 +66,9 @@ public: Status status() const; const QUrl &url() const; + int forcedWidth() const; + int forcedHeight() const; + QSize implicitSize() const; Q_SIGNALS: void finished(); @@ -81,7 +84,7 @@ private: void setLoading(); private: - QDeclarativePixmapReply(QDeclarativeImageReader *reader, const QUrl &url); + QDeclarativePixmapReply(QDeclarativeImageReader *reader, const QUrl &url, int req_width, int req_height); Q_DISABLE_COPY(QDeclarativePixmapReply) Q_DECLARE_PRIVATE(QDeclarativePixmapReply) friend class QDeclarativeImageRequestHandler; @@ -92,8 +95,8 @@ private: class Q_DECLARATIVE_EXPORT QDeclarativePixmapCache { public: - static QDeclarativePixmapReply::Status get(const QUrl& url, QPixmap *pixmap, bool async=false); - static QDeclarativePixmapReply *request(QDeclarativeEngine *, const QUrl& url); + static QDeclarativePixmapReply::Status get(const QUrl& url, QPixmap *pixmap, QSize *impsize, bool async=false, int req_width=0, int req_height=0); + static QDeclarativePixmapReply *request(QDeclarativeEngine *, const QUrl& url, int req_width=0, int req_height=0); static void cancel(const QUrl& url, QObject *obj); static int pendingRequests(); }; diff --git a/tests/auto/declarative/qdeclarativeimage/data/big.jpeg b/tests/auto/declarative/qdeclarativeimage/data/big.jpeg new file mode 100644 index 0000000..bed7bd6 Binary files /dev/null and b/tests/auto/declarative/qdeclarativeimage/data/big.jpeg differ diff --git a/tests/auto/declarative/qdeclarativeimage/data/big256.png b/tests/auto/declarative/qdeclarativeimage/data/big256.png new file mode 100644 index 0000000..1dc1596 Binary files /dev/null and b/tests/auto/declarative/qdeclarativeimage/data/big256.png differ diff --git a/tests/auto/declarative/qdeclarativeimage/data/heart.png b/tests/auto/declarative/qdeclarativeimage/data/heart.png new file mode 100644 index 0000000..372b224 Binary files /dev/null and b/tests/auto/declarative/qdeclarativeimage/data/heart.png differ diff --git a/tests/auto/declarative/qdeclarativeimage/data/heart.svg b/tests/auto/declarative/qdeclarativeimage/data/heart.svg new file mode 100644 index 0000000..8c982cd --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimage/data/heart.svg @@ -0,0 +1,55 @@ + + + + + +Heart Left-Highlight +This is a normal valentines day heart. + + +holiday +valentines + +valentine +hash(0x8a091c0) +hash(0x8a0916c) +signs_and_symbols +hash(0x8a091f0) +day + + + + +Jon Phillips + + + + +Jon Phillips + + + + +Jon Phillips + + + +image/svg+xml + + +en + + + + + + + + + + + + + + + diff --git a/tests/auto/declarative/qdeclarativeimage/data/heart200.png b/tests/auto/declarative/qdeclarativeimage/data/heart200.png new file mode 100644 index 0000000..786e75d Binary files /dev/null and b/tests/auto/declarative/qdeclarativeimage/data/heart200.png differ diff --git a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp index ed2095b..c7dcbea 100644 --- a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp +++ b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp @@ -82,6 +82,8 @@ private slots: void resized(); void smooth(); void pixmap(); + void svg(); + void big(); private: QDeclarativeEngine engine; @@ -111,24 +113,29 @@ void tst_qdeclarativeimage::noSource() void tst_qdeclarativeimage::imageSource_data() { QTest::addColumn("source"); + QTest::addColumn("width"); + QTest::addColumn("height"); QTest::addColumn("remote"); QTest::addColumn("async"); QTest::addColumn("error"); - QTest::newRow("local") << QUrl::fromLocalFile(SRCDIR "/data/colors.png").toString() << false << false << ""; - QTest::newRow("local async") << QUrl::fromLocalFile(SRCDIR "/data/colors1.png").toString() << false << true << ""; - QTest::newRow("local not found") << QUrl::fromLocalFile(SRCDIR "/data/no-such-file.png").toString() << false + QTest::newRow("local") << QUrl::fromLocalFile(SRCDIR "/data/colors.png").toString() << 120.0 << 120.0 << false << false << ""; + QTest::newRow("local async") << QUrl::fromLocalFile(SRCDIR "/data/colors1.png").toString() << 120.0 << 120.0 << false << true << ""; + QTest::newRow("local not found") << QUrl::fromLocalFile(SRCDIR "/data/no-such-file.png").toString() << 0.0 << 0.0 << false << false << "Cannot open QUrl( \"" + QUrl::fromLocalFile(SRCDIR "/data/no-such-file.png").toString() + "\" ) "; - QTest::newRow("local async not found") << QUrl::fromLocalFile(SRCDIR "/data/no-such-file-1.png").toString() << false + QTest::newRow("local async not found") << QUrl::fromLocalFile(SRCDIR "/data/no-such-file-1.png").toString() << 0.0 << 0.0 << false << true << "\"Cannot open: " + QUrl::fromLocalFile(SRCDIR "/data/no-such-file-1.png").toString() + "\" "; - QTest::newRow("remote") << SERVER_ADDR "/colors.png" << true << false << ""; - QTest::newRow("remote not found") << SERVER_ADDR "/no-such-file.png" << true << false + QTest::newRow("remote") << SERVER_ADDR "/colors.png" << 120.0 << 120.0 << true << false << ""; + QTest::newRow("remote svg") << SERVER_ADDR "/heart.svg" << 550.0 << 500.0 << true << false << ""; + QTest::newRow("remote not found") << SERVER_ADDR "/no-such-file.png" << 0.0 << 0.0 << true << false << "\"Error downloading " SERVER_ADDR "/no-such-file.png - server replied: Not found\" "; } void tst_qdeclarativeimage::imageSource() { QFETCH(QString, source); + QFETCH(qreal, width); + QFETCH(qreal, height); QFETCH(bool, remote); QFETCH(bool, async); QFETCH(QString, error); @@ -156,8 +163,8 @@ void tst_qdeclarativeimage::imageSource() if (error.isEmpty()) { TRY_WAIT(obj->status() == QDeclarativeImage::Ready); - QCOMPARE(obj->width(), 120.); - QCOMPARE(obj->height(), 120.); + QCOMPARE(obj->width(), width); + QCOMPARE(obj->height(), height); QCOMPARE(obj->fillMode(), QDeclarativeImage::Stretch); QCOMPARE(obj->progress(), 1.0); } else { @@ -248,6 +255,48 @@ void tst_qdeclarativeimage::pixmap() delete obj; } +void tst_qdeclarativeimage::svg() +{ + QString componentStr = "import Qt 4.6\nImage { source: \"" SRCDIR "/data/heart.svg\"; sourceWidth: 300; sourceHeight: 300 }"; + QDeclarativeComponent component(&engine); + component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QDeclarativeImage *obj = qobject_cast(component.create()); + QVERIFY(obj != 0); + QCOMPARE(obj->pixmap().width(), 300); + QCOMPARE(obj->pixmap().height(), 300); + QCOMPARE(obj->width(), 550.0); + QCOMPARE(obj->height(), 500.0); + QCOMPARE(obj->pixmap(), QPixmap(SRCDIR "/data/heart.png")); + + obj->setSourceWidth(200); + obj->setSourceHeight(200); + + QCOMPARE(obj->pixmap().width(), 200); + QCOMPARE(obj->pixmap().height(), 200); + QCOMPARE(obj->width(), 550.0); + QCOMPARE(obj->height(), 500.0); + QCOMPARE(obj->pixmap(), QPixmap(SRCDIR "/data/heart200.png")); + + delete obj; +} + +void tst_qdeclarativeimage::big() +{ + QString componentStr = "import Qt 4.6\nImage { source: \"" SRCDIR "/data/big.jpeg\"; sourceWidth: 256; sourceHeight: 256 }"; + QDeclarativeComponent component(&engine); + component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QDeclarativeImage *obj = qobject_cast(component.create()); + QVERIFY(obj != 0); + QCOMPARE(obj->pixmap().width(), 256); + QCOMPARE(obj->pixmap().height(), 256); + QCOMPARE(obj->width(), 10240.0); + QCOMPARE(obj->height(), 10240.0); + QCOMPARE(obj->pixmap(), QPixmap(SRCDIR "/data/big256.png")); + + delete obj; +} + + QTEST_MAIN(tst_qdeclarativeimage) #include "tst_qdeclarativeimage.moc" -- cgit v0.12 From 7687d4cd76a9e22098be84126e01a6c94a91d9ce Mon Sep 17 00:00:00 2001 From: Alexis Menard Date: Fri, 26 Mar 2010 06:14:50 +0100 Subject: QDeclarativeItem don't need to emit childrenChanged anymore. It's done by QGraphicsItemPrivate::addChild and removeChild. Reviewed-by:akennedy --- src/declarative/graphicsitems/qdeclarativeitem.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index c331af7..048e1a8 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -2587,10 +2587,6 @@ QVariant QDeclarativeItem::itemChange(GraphicsItemChange change, emit parentChanged(parentItem()); d->parentNotifier.notify(); break; - case ItemChildAddedChange: - case ItemChildRemovedChange: - emit childrenChanged(); - break; case ItemVisibleHasChanged: { for(int ii = 0; ii < d->changeListeners.count(); ++ii) { const QDeclarativeItemPrivate::ChangeListener &change = d->changeListeners.at(ii); -- cgit v0.12 From f16d60399b996b09b779d2a719b5e6e6b9a80903 Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Fri, 26 Mar 2010 15:18:54 +1000 Subject: sourceWidth/sourceHeight -> sourceSize --- examples/declarative/images/images.qml | 23 +++++++------ .../graphicsitems/qdeclarativeimage.cpp | 21 ++++++------ .../graphicsitems/qdeclarativeimagebase.cpp | 38 ++++++---------------- .../graphicsitems/qdeclarativeimagebase_p.h | 9 ++--- .../graphicsitems/qdeclarativeimagebase_p_p.h | 3 +- .../qdeclarativeimage/tst_qdeclarativeimage.cpp | 7 ++-- 6 files changed, 38 insertions(+), 63 deletions(-) diff --git a/examples/declarative/images/images.qml b/examples/declarative/images/images.qml index 82848df..35ce1ab 100644 --- a/examples/declarative/images/images.qml +++ b/examples/declarative/images/images.qml @@ -15,14 +15,14 @@ Rectangle { } Image { - sourceWidth: 50 - sourceHeight: 50 + sourceSize.width: 50 + sourceSize.height: 50 source: "content/lemonade.jpg" } Image { - sourceWidth: 50 - sourceHeight: 50 + sourceSize.width: 50 + sourceSize.height: 50 smooth: true source: "content/lemonade.jpg" } @@ -34,15 +34,15 @@ Rectangle { Image { scale: 1/3 - sourceWidth: 50 - sourceHeight: 50 + sourceSize.width: 50 + sourceSize.height: 50 source: "content/lemonade.jpg" } Image { scale: 1/3 - sourceWidth: 50 - sourceHeight: 50 + sourceSize.width: 50 + sourceSize.height: 50 smooth: true source: "content/lemonade.jpg" } @@ -54,15 +54,14 @@ Rectangle { Image { width: 50; height: 50; transform: Translate { x: 50 } - sourceWidth: 50 - sourceHeight: 50 + sourceSize.width: 50 + sourceSize.height: 50 source: "content/lemonade.jpg" } Image { width: 50; height: 50; transform: Translate { x: 50 } - sourceWidth: 50 - sourceHeight: 50 + sourceSize: "50x50" // syntactic sugar smooth: true source: "content/lemonade.jpg" } diff --git a/src/declarative/graphicsitems/qdeclarativeimage.cpp b/src/declarative/graphicsitems/qdeclarativeimage.cpp index 8b93063..23a2350 100644 --- a/src/declarative/graphicsitems/qdeclarativeimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeimage.cpp @@ -267,28 +267,27 @@ qreal QDeclarativeImage::paintedHeight() const */ /*! - \qmlproperty int Image::sourceWidth - \qmlproperty int Image::sourceHeight + \qmlproperty QSize Image::sourceSize - These properties are the size of the loaded image, in pixels. + This properties is the size of the loaded image, in pixels. - If you set these properties explicitly, you can to control the storage + If you set this property explicitly, you can to control the storage used by a loaded image. The image will be scaled down if its intrinsic size - is greater than these values. + is greater than this value. Unlike setting the width and height properties, which merely scale the painting - of the image, these properties affect the number of pixels stored. + of the image, this property affects the number of pixels stored. - \e{Changing these properties dynamically will lead to the image source being reloaded, + \e{Changing this property dynamically will lead to the image source being reloaded, potentially even from the network if it is not in the disk cache.} - If the source is an instrinsically scalable image (eg. SVG), these properties - determine the size of the loaded image regardless of intrinsic size. You should - avoid changing these properties dynamically - rendering an SVG is \e slow compared + If the source is an instrinsically scalable image (eg. SVG), this property + determines the size of the loaded image regardless of intrinsic size. You should + avoid changing this property dynamically - rendering an SVG is \e slow compared to an image. If the source is a non-scalable image (eg. JPEG), the loaded image will - be no greater than these properties specify. For some formats (currently only JPEG), + be no greater than this property specifies. For some formats (currently only JPEG), the whole image will never actually be loaded into memory. */ diff --git a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp index 3b75a85..b8d67ff 100644 --- a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp +++ b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp @@ -116,41 +116,23 @@ void QDeclarativeImageBase::setSource(const QUrl &url) load(); } -void QDeclarativeImageBase::setSourceWidth(int w) +void QDeclarativeImageBase::setSourceSize(const QSize& size) { Q_D(QDeclarativeImageBase); - if (d->sourcewidth == w) + if (d->sourcesize == size) return; - d->sourcewidth = w; + d->sourcesize = size; emit sourceSizeChanged(); if (isComponentComplete()) load(); } -int QDeclarativeImageBase::sourceWidth() const +QSize QDeclarativeImageBase::sourceSize() const { Q_D(const QDeclarativeImageBase); - return d->sourcewidth <= 0 ? implicitWidth() : d->sourcewidth; + return d->sourcesize.isValid() ? d->sourcesize : QSize(implicitWidth(),implicitHeight()); } -void QDeclarativeImageBase::setSourceHeight(int h) -{ - Q_D(QDeclarativeImageBase); - if (d->sourceheight == h) - return; - d->sourceheight = h; - emit sourceSizeChanged(); - if (isComponentComplete()) - load(); -} - -int QDeclarativeImageBase::sourceHeight() const -{ - Q_D(const QDeclarativeImageBase); - return d->sourceheight <= 0 ? implicitHeight() : d->sourceheight; -} - - void QDeclarativeImageBase::load() { Q_D(QDeclarativeImageBase); @@ -169,8 +151,8 @@ void QDeclarativeImageBase::load() update(); } else { d->status = Loading; - int reqwidth = d->sourcewidth; - int reqheight = d->sourceheight; + int reqwidth = d->sourcesize.width(); + int reqheight = d->sourcesize.width(); QSize impsize; QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(d->url, &d->pix, &impsize, d->async, reqwidth, reqheight); if (status != QDeclarativePixmapReply::Ready && status != QDeclarativePixmapReply::Error) { @@ -205,7 +187,7 @@ void QDeclarativeImageBase::load() if (d->status == Loading) d->status = Ready; - if (d->sourcewidth <= 0 || d->sourceheight <= 0) + if (!d->sourcesize.isValid()) emit sourceSizeChanged(); } else { d->status = Error; @@ -228,7 +210,7 @@ void QDeclarativeImageBase::requestFinished() d->pendingPixmapCache = false; QSize impsize; - if (QDeclarativePixmapCache::get(d->url, &d->pix, &impsize, d->async, d->sourcewidth, d->sourceheight) != QDeclarativePixmapReply::Ready) + if (QDeclarativePixmapCache::get(d->url, &d->pix, &impsize, d->async, d->sourcesize.width(), d->sourcesize.height()) != QDeclarativePixmapReply::Ready) d->status = Error; setImplicitWidth(impsize.width()); setImplicitHeight(impsize.height()); @@ -238,7 +220,7 @@ void QDeclarativeImageBase::requestFinished() d->progress = 1.0; emit statusChanged(d->status); emit progressChanged(1.0); - if (d->sourcewidth <= 0 || d->sourceheight <= 0) + if (!d->sourcesize.isValid()) emit sourceSizeChanged(); pixmapChange(); update(); diff --git a/src/declarative/graphicsitems/qdeclarativeimagebase_p.h b/src/declarative/graphicsitems/qdeclarativeimagebase_p.h index 2653d0a..6c84456 100644 --- a/src/declarative/graphicsitems/qdeclarativeimagebase_p.h +++ b/src/declarative/graphicsitems/qdeclarativeimagebase_p.h @@ -59,8 +59,7 @@ class Q_DECLARATIVE_EXPORT QDeclarativeImageBase : public QDeclarativeItem Q_PROPERTY(qreal progress READ progress NOTIFY progressChanged) Q_PROPERTY(bool asynchronous READ asynchronous WRITE setAsynchronous NOTIFY asynchronousChanged) - Q_PROPERTY(int sourceWidth READ sourceWidth WRITE setSourceWidth NOTIFY sourceSizeChanged) - Q_PROPERTY(int sourceHeight READ sourceHeight WRITE setSourceHeight NOTIFY sourceSizeChanged) + Q_PROPERTY(QSize sourceSize READ sourceSize WRITE setSourceSize NOTIFY sourceSizeChanged) public: ~QDeclarativeImageBase(); @@ -74,10 +73,8 @@ public: bool asynchronous() const; void setAsynchronous(bool); - void setSourceWidth(int); - int sourceWidth() const; - void setSourceHeight(int); - int sourceHeight() const; + void setSourceSize(const QSize&); + QSize sourceSize() const; Q_SIGNALS: void sourceChanged(const QUrl &); diff --git a/src/declarative/graphicsitems/qdeclarativeimagebase_p_p.h b/src/declarative/graphicsitems/qdeclarativeimagebase_p_p.h index cced228..de8c93a 100644 --- a/src/declarative/graphicsitems/qdeclarativeimagebase_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativeimagebase_p_p.h @@ -68,7 +68,6 @@ public: QDeclarativeImageBasePrivate() : status(QDeclarativeImageBase::Null), progress(0.0), - sourcewidth(0), sourceheight(0), pendingPixmapCache(false), async(false) { @@ -79,7 +78,7 @@ public: QDeclarativeImageBase::Status status; QUrl url; qreal progress; - int sourcewidth, sourceheight; + QSize sourcesize; bool pendingPixmapCache : 1; bool async : 1; }; diff --git a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp index c7dcbea..9073750 100644 --- a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp +++ b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp @@ -257,7 +257,7 @@ void tst_qdeclarativeimage::pixmap() void tst_qdeclarativeimage::svg() { - QString componentStr = "import Qt 4.6\nImage { source: \"" SRCDIR "/data/heart.svg\"; sourceWidth: 300; sourceHeight: 300 }"; + QString componentStr = "import Qt 4.6\nImage { source: \"" SRCDIR "/data/heart.svg\"; sourceSize.width: 300; sourceSize.height: 300 }"; QDeclarativeComponent component(&engine); component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); QDeclarativeImage *obj = qobject_cast(component.create()); @@ -268,8 +268,7 @@ void tst_qdeclarativeimage::svg() QCOMPARE(obj->height(), 500.0); QCOMPARE(obj->pixmap(), QPixmap(SRCDIR "/data/heart.png")); - obj->setSourceWidth(200); - obj->setSourceHeight(200); + obj->setSourceSize(QSize(200,200)); QCOMPARE(obj->pixmap().width(), 200); QCOMPARE(obj->pixmap().height(), 200); @@ -282,7 +281,7 @@ void tst_qdeclarativeimage::svg() void tst_qdeclarativeimage::big() { - QString componentStr = "import Qt 4.6\nImage { source: \"" SRCDIR "/data/big.jpeg\"; sourceWidth: 256; sourceHeight: 256 }"; + QString componentStr = "import Qt 4.6\nImage { source: \"" SRCDIR "/data/big.jpeg\"; sourceSize.width: 256; sourceSize.height: 256 }"; QDeclarativeComponent component(&engine); component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); QDeclarativeImage *obj = qobject_cast(component.create()); -- cgit v0.12 From 70e50ecc276e063da2ebb26faa3d7c4152bbdea6 Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Fri, 26 Mar 2010 15:54:23 +1000 Subject: Simple case, no size returned. Fixes Particles plugin. --- src/declarative/util/qdeclarativepixmapcache_p.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/util/qdeclarativepixmapcache_p.h b/src/declarative/util/qdeclarativepixmapcache_p.h index 0ccf469..df71d65 100644 --- a/src/declarative/util/qdeclarativepixmapcache_p.h +++ b/src/declarative/util/qdeclarativepixmapcache_p.h @@ -95,7 +95,7 @@ private: class Q_DECLARATIVE_EXPORT QDeclarativePixmapCache { public: - static QDeclarativePixmapReply::Status get(const QUrl& url, QPixmap *pixmap, QSize *impsize, bool async=false, int req_width=0, int req_height=0); + static QDeclarativePixmapReply::Status get(const QUrl& url, QPixmap *pixmap, QSize *impsize=0, bool async=false, int req_width=0, int req_height=0); static QDeclarativePixmapReply *request(QDeclarativeEngine *, const QUrl& url, int req_width=0, int req_height=0); static void cancel(const QUrl& url, QObject *obj); static int pendingRequests(); -- cgit v0.12 From a9f11eea6b4985c9ff2ebcbe1b52acc7a5c64250 Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Fri, 26 Mar 2010 15:59:18 +1000 Subject: Fix namespace. --- src/declarative/graphicsitems/qdeclarativetranslate.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativetranslate.cpp b/src/declarative/graphicsitems/qdeclarativetranslate.cpp index 57c47f0..dd6ca92 100644 --- a/src/declarative/graphicsitems/qdeclarativetranslate.cpp +++ b/src/declarative/graphicsitems/qdeclarativetranslate.cpp @@ -44,6 +44,8 @@ #include #include +QT_BEGIN_NAMESPACE + class QDeclarativeTranslatePrivate : public QGraphicsTransformPrivate { public: @@ -156,4 +158,4 @@ void QDeclarativeTranslate::applyTo(QMatrix4x4 *matrix) const \sa QDeclarativeTranslate::z */ -//#include "moc_qdeclarativetranslate.cpp" +QT_END_NAMESPACE -- cgit v0.12 From 56309fe1461c4ea3ca654e535a525165c28a0f12 Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Fri, 26 Mar 2010 15:59:43 +1000 Subject: Test transforms. --- .../qdeclarativeitem/tst_qdeclarativeitem.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp index 7665e18..d800411 100644 --- a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp +++ b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp @@ -61,6 +61,8 @@ private slots: void mapCoordinates(); void mapCoordinates_data(); void propertyChanges(); + void transforms(); + void transforms_data(); private: template @@ -402,6 +404,25 @@ void tst_QDeclarativeItem::mapCoordinates_data() QTest::newRow(QTest::toString(i)) << i << i; } +void tst_QDeclarativeItem::transforms_data() +{ + QTest::addColumn("qml"); + QTest::addColumn("matrix"); + QTest::newRow("translate") << QByteArray("import Qt 4.6\nItem { transform: Translate { x: 10; y: 20 } }") << QMatrix(1,0,0,1,10,20); + QTest::newRow("rotation") << QByteArray("import Qt 4.6\nItem { transform: Rotation { angle: 90 } }") << QMatrix(0,1,-1,0,0,0); + QTest::newRow("scale") << QByteArray("import Qt 4.6\nItem { transform: Scale { xScale: 1.5; yScale: -2 } }") << QMatrix(1.5,0,0,-2,0,0); +} + +void tst_QDeclarativeItem::transforms() +{ + QFETCH(QByteArray, qml); + QFETCH(QMatrix, matrix); + QDeclarativeComponent component(&engine); + component.setData(qml, QUrl::fromLocalFile("")); + QDeclarativeItem *item = qobject_cast(component.create()); + QCOMPARE(item->sceneMatrix(), matrix); +} + void tst_QDeclarativeItem::propertyChanges() { QDeclarativeView *canvas = new QDeclarativeView(0); -- cgit v0.12 From b8952aef84c78949959728674db39eafb19efee7 Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Fri, 26 Mar 2010 17:02:53 +1000 Subject: Test and fix order of transform application. Remove Translate.z since Qt cannot sensibly support it yet. --- src/declarative/graphicsitems/qdeclarativeitem.cpp | 9 +++--- .../graphicsitems/qdeclarativetranslate.cpp | 33 +++------------------- .../graphicsitems/qdeclarativetranslate_p.h | 4 --- src/gui/graphicsview/qgraphicsitem.cpp | 16 +++++++++++ src/gui/graphicsview/qgraphicsitem_p.h | 1 + .../qdeclarativeitem/tst_qdeclarativeitem.cpp | 14 ++++++--- 6 files changed, 36 insertions(+), 41 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index 048e1a8..611535c 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -89,11 +89,12 @@ QT_BEGIN_NAMESPACE /*! \qmlclass Translate QGraphicsTranslate \since 4.7 - \brief The Translate object provides a way to move an Item without changing its x or y. + \brief The Translate object provides a way to move an Item without changing its x or y properties. The Translate object independent control over position in addition to the Item's x and y properties. - The following example moves the X axis of the Rectangle, relative to its interior point 25, 25: + The following example moves the Y axis of the Rectangles while still allowing the Row element + to lay the items out as if they had not been transformed: \qml Row { Rectangle { @@ -1562,8 +1563,8 @@ int QDeclarativeItemPrivate::transform_count(QDeclarativeListProperty *list, QGraphicsTransform *item) { QGraphicsObject *object = qobject_cast(list->object); - if (object) - QGraphicsItemPrivate::get(object)->appendGraphicsTransform(item); + if (object) // QGraphicsItem applies the list in the wrong order, so we prepend. + QGraphicsItemPrivate::get(object)->prependGraphicsTransform(item); } QGraphicsTransform *QDeclarativeItemPrivate::transform_at(QDeclarativeListProperty *list, int idx) diff --git a/src/declarative/graphicsitems/qdeclarativetranslate.cpp b/src/declarative/graphicsitems/qdeclarativetranslate.cpp index dd6ca92..1c96fa4 100644 --- a/src/declarative/graphicsitems/qdeclarativetranslate.cpp +++ b/src/declarative/graphicsitems/qdeclarativetranslate.cpp @@ -50,10 +50,9 @@ class QDeclarativeTranslatePrivate : public QGraphicsTransformPrivate { public: QDeclarativeTranslatePrivate() - : x(0), y(0), z(0) {} + : x(0), y(0) {} qreal x; qreal y; - qreal z; }; /*! @@ -77,7 +76,7 @@ QDeclarativeTranslate::~QDeclarativeTranslate() The translation can be any real number; the default value is 0.0. - \sa y, z + \sa y */ qreal QDeclarativeTranslate::x() const { @@ -100,7 +99,7 @@ void QDeclarativeTranslate::setX(qreal x) The translation can be any real number; the default value is 0.0. - \sa x, z + \sa x */ qreal QDeclarativeTranslate::y() const { @@ -118,35 +117,12 @@ void QDeclarativeTranslate::setY(qreal y) } /*! - \property QDeclarativeTranslate::z - \brief the depth translation. - - The translation can be any real number; the default value is 0.0. - - \sa x, y -*/ -qreal QDeclarativeTranslate::z() const -{ - Q_D(const QDeclarativeTranslate); - return d->z; -} -void QDeclarativeTranslate::setZ(qreal z) -{ - Q_D(QDeclarativeTranslate); - if (d->z == z) - return; - d->z = z; - update(); - emit positionChanged(); -} - -/*! \reimp */ void QDeclarativeTranslate::applyTo(QMatrix4x4 *matrix) const { Q_D(const QDeclarativeTranslate); - matrix->translate(d->x, d->y, d->z); + matrix->translate(d->x, d->y, 0); } /*! @@ -155,7 +131,6 @@ void QDeclarativeTranslate::applyTo(QMatrix4x4 *matrix) const QDeclarativeTranslate emits this signal when its position changes. \sa QDeclarativeTranslate::x, QDeclarativeTranslate::y - \sa QDeclarativeTranslate::z */ QT_END_NAMESPACE diff --git a/src/declarative/graphicsitems/qdeclarativetranslate_p.h b/src/declarative/graphicsitems/qdeclarativetranslate_p.h index 54bfc3d..1371f71 100644 --- a/src/declarative/graphicsitems/qdeclarativetranslate_p.h +++ b/src/declarative/graphicsitems/qdeclarativetranslate_p.h @@ -58,7 +58,6 @@ class Q_GUI_EXPORT QDeclarativeTranslate : public QGraphicsTransform Q_PROPERTY(qreal x READ x WRITE setX NOTIFY positionChanged) Q_PROPERTY(qreal y READ y WRITE setY NOTIFY positionChanged) - Q_PROPERTY(qreal z READ z WRITE setZ NOTIFY positionChanged) public: QDeclarativeTranslate(QObject *parent = 0); @@ -70,9 +69,6 @@ public: qreal y() const; void setY(qreal); - qreal z() const; - void setZ(qreal); - void applyTo(QMatrix4x4 *matrix) const; Q_SIGNALS: diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index b407eef..36203de 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -3843,6 +3843,22 @@ void QGraphicsItem::setTransformations(const QList &transf /*! \internal */ +void QGraphicsItemPrivate::prependGraphicsTransform(QGraphicsTransform *t) +{ + if (!transformData) + transformData = new QGraphicsItemPrivate::TransformData; + if (!transformData->graphicsTransforms.contains(t)) + transformData->graphicsTransforms.prepend(t); + + Q_Q(QGraphicsItem); + t->d_func()->setItem(q); + transformData->onlyTransform = false; + dirtySceneTransform = 1; +} + +/*! + \internal +*/ void QGraphicsItemPrivate::appendGraphicsTransform(QGraphicsTransform *t) { if (!transformData) diff --git a/src/gui/graphicsview/qgraphicsitem_p.h b/src/gui/graphicsview/qgraphicsitem_p.h index b53c545..b6be79d 100644 --- a/src/gui/graphicsview/qgraphicsitem_p.h +++ b/src/gui/graphicsview/qgraphicsitem_p.h @@ -276,6 +276,7 @@ public: virtual void setPosHelper(const QPointF &pos); void setTransformHelper(const QTransform &transform); + void prependGraphicsTransform(QGraphicsTransform *t); void appendGraphicsTransform(QGraphicsTransform *t); void setVisibleHelper(bool newVisible, bool explicitly, bool update = true); void setEnabledHelper(bool newEnabled, bool explicitly, bool update = true); diff --git a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp index d800411..46f3517 100644 --- a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp +++ b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp @@ -408,9 +408,14 @@ void tst_QDeclarativeItem::transforms_data() { QTest::addColumn("qml"); QTest::addColumn("matrix"); - QTest::newRow("translate") << QByteArray("import Qt 4.6\nItem { transform: Translate { x: 10; y: 20 } }") << QMatrix(1,0,0,1,10,20); - QTest::newRow("rotation") << QByteArray("import Qt 4.6\nItem { transform: Rotation { angle: 90 } }") << QMatrix(0,1,-1,0,0,0); - QTest::newRow("scale") << QByteArray("import Qt 4.6\nItem { transform: Scale { xScale: 1.5; yScale: -2 } }") << QMatrix(1.5,0,0,-2,0,0); + QTest::newRow("translate") << QByteArray("Translate { x: 10; y: 20 }") + << QMatrix(1,0,0,1,10,20); + QTest::newRow("rotation") << QByteArray("Rotation { angle: 90 }") + << QMatrix(0,1,-1,0,0,0); + QTest::newRow("scale") << QByteArray("Scale { xScale: 1.5; yScale: -2 }") + << QMatrix(1.5,0,0,-2,0,0); + QTest::newRow("sequence") << QByteArray("[ Translate { x: 10; y: 20 }, Scale { xScale: 1.5; yScale: -2 } ]") + << QMatrix(1,0,0,1,10,20) * QMatrix(1.5,0,0,-2,0,0); } void tst_QDeclarativeItem::transforms() @@ -418,8 +423,9 @@ void tst_QDeclarativeItem::transforms() QFETCH(QByteArray, qml); QFETCH(QMatrix, matrix); QDeclarativeComponent component(&engine); - component.setData(qml, QUrl::fromLocalFile("")); + component.setData("import Qt 4.6\nItem { transform: "+qml+"}", QUrl::fromLocalFile("")); QDeclarativeItem *item = qobject_cast(component.create()); + QVERIFY(item); QCOMPARE(item->sceneMatrix(), matrix); } -- cgit v0.12 From d432123cec9ac927ec9162fa8b3d16684483f994 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Fri, 26 Mar 2010 17:17:37 +1000 Subject: Use QThread IdlePriority rather than linux platform code. Task-number: QTBUG-9032 --- src/declarative/util/qdeclarativepixmapcache.cpp | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/src/declarative/util/qdeclarativepixmapcache.cpp b/src/declarative/util/qdeclarativepixmapcache.cpp index bbe86e7..54dccce 100644 --- a/src/declarative/util/qdeclarativepixmapcache.cpp +++ b/src/declarative/util/qdeclarativepixmapcache.cpp @@ -60,11 +60,6 @@ #include #include -#ifdef Q_OS_LINUX -#include -#include -#endif - // Maximum number of simultaneous image requests to send. static const int maxImageRequestCount = 8; @@ -364,7 +359,7 @@ void QDeclarativeImageRequestHandler::networkRequestDone() QDeclarativeImageReader::QDeclarativeImageReader(QDeclarativeEngine *eng) : QThread(eng), engine(eng), handler(0) { - start(QThread::LowPriority); + start(QThread::IdlePriority); } QDeclarativeImageReader::~QDeclarativeImageReader() @@ -417,14 +412,6 @@ void QDeclarativeImageReader::cancel(QDeclarativePixmapReply *reply) void QDeclarativeImageReader::run() { -#if defined(Q_OS_LINUX) && defined(SCHED_IDLE) - struct sched_param param; - int policy; - - pthread_getschedparam(pthread_self(), &policy, ¶m); - pthread_setschedparam(pthread_self(), SCHED_IDLE, ¶m); -#endif - handler = new QDeclarativeImageRequestHandler(this, engine); exec(); -- cgit v0.12 From c4448162a00b6a069b562756d5608d821f700546 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Fri, 26 Mar 2010 18:13:29 +1000 Subject: Added highlight ranges/modes to PathView Task-number: QT-319 --- src/declarative/QmlChanges.txt | 1 + .../graphicsitems/qdeclarativepathview.cpp | 286 +++++++++++++++++---- .../graphicsitems/qdeclarativepathview_p.h | 23 +- .../graphicsitems/qdeclarativepathview_p_p.h | 28 +- .../qdeclarativepathview/data/displaypath.qml | 1 - .../qdeclarativepathview/data/pathview0.qml | 1 - .../qdeclarativepathview/data/pathview3.qml | 4 +- .../qdeclarativepathview/data/propertychanges.qml | 3 +- .../tst_qdeclarativepathview.cpp | 19 +- 9 files changed, 297 insertions(+), 69 deletions(-) diff --git a/src/declarative/QmlChanges.txt b/src/declarative/QmlChanges.txt index d35a4c2..6ab77a7 100644 --- a/src/declarative/QmlChanges.txt +++ b/src/declarative/QmlChanges.txt @@ -16,6 +16,7 @@ ScriptAction: renamed stateChangeScriptName -> scriptName Animation: replace repeat with loops (loops: Animation.Infinite gives the old repeat behavior) AnchorChanges: use natural form to specify anchors (anchors.left instead of left) AnchorChanges: removed reset property. (reset: "left" should now be anchors.left: undefined) +PathView: snapPosition replaced by preferredHighlightBegin, preferredHighlightEnd C++ API ------- diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp index 783387c..9b548d4 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview.cpp +++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp @@ -44,6 +44,7 @@ #include #include +#include #include #include #include @@ -146,20 +147,23 @@ void QDeclarativePathViewPrivate::updateMappedRange() mappedRange = 1.0; } -qreal QDeclarativePathViewPrivate::positionOfIndex(int index) const +qreal QDeclarativePathViewPrivate::positionOfIndex(qreal index) const { qreal pos = -1.0; if (model && index >= 0 && index < model->count()) { - qreal globalPos = qreal(index) + offset; + qreal start = 0.0; + if (haveHighlightRange && highlightRangeMode != QDeclarativePathView::NoHighlightRange) + start = highlightRangeStart; + qreal globalPos = index + offset; globalPos = qmlMod(globalPos, qreal(model->count())) / model->count(); if (pathItems != -1 && pathItems < model->count()) { - globalPos += snapPos * mappedRange; + globalPos += start * mappedRange; globalPos = qmlMod(globalPos, 1.0); if (globalPos < mappedRange) pos = globalPos / mappedRange; } else { - pos = qmlMod(globalPos + snapPos, 1.0); + pos = qmlMod(globalPos + start, 1.0); } } @@ -169,6 +173,9 @@ qreal QDeclarativePathViewPrivate::positionOfIndex(int index) const void QDeclarativePathViewPrivate::createHighlight() { Q_Q(QDeclarativePathView); + if (!q->isComponentComplete()) + return; + bool changed = false; if (highlightItem) { delete highlightItem; @@ -203,10 +210,67 @@ void QDeclarativePathViewPrivate::createHighlight() void QDeclarativePathViewPrivate::updateHighlight() { Q_Q(QDeclarativePathView); - if (!q->isComponentComplete()) + if (!q->isComponentComplete() || !isValid()) return; - if (highlightItem) - updateItem(highlightItem, snapPos); + if (highlightItem) { + if (haveHighlightRange && highlightRangeMode == QDeclarativePathView::StrictlyEnforceRange) { + updateItem(highlightItem, highlightRangeStart); + } else { + qreal target = currentIndex; + + tl.reset(moveHighlight); + moveHighlight.setValue(highlightPosition); + + const int duration = 300; + + if (target - highlightPosition > model->count()/2) { + highlightUp = false; + qreal distance = model->count() - target + highlightPosition; + tl.move(moveHighlight, 0.0, QEasingCurve(QEasingCurve::InQuad), int(duration * highlightPosition / distance)); + tl.set(moveHighlight, model->count()-0.01); + tl.move(moveHighlight, target, QEasingCurve(QEasingCurve::OutQuad), int(duration * (model->count()-target) / distance)); + } else if (target - highlightPosition <= -model->count()/2) { + highlightUp = true; + qreal distance = model->count() - highlightPosition + target; + tl.move(moveHighlight, model->count()-0.01, QEasingCurve(QEasingCurve::InQuad), int(duration * (model->count()-highlightPosition) / distance)); + tl.set(moveHighlight, 0.0); + tl.move(moveHighlight, target, QEasingCurve(QEasingCurve::OutQuad), int(duration * target / distance)); + } else { + highlightUp = highlightPosition - target < 0; + tl.move(moveHighlight, target, QEasingCurve(QEasingCurve::InOutQuad), duration); + } + } + } +} + +void QDeclarativePathViewPrivate::setHighlightPosition(qreal pos) +{ + if (pos != highlightPosition) { + qreal start = 0.0; + qreal end = 1.0; + if (haveHighlightRange && highlightRangeMode != QDeclarativePathView::NoHighlightRange) { + start = highlightRangeStart; + end = highlightRangeEnd; + } + + qreal range = qreal(model->count()); + // calc normalized position of highlight relative to offset + qreal relativeHighlight = qmlMod(pos + offset, range) / range; + + if (!highlightUp && relativeHighlight > end * mappedRange) { + qreal diff = 1.0 - relativeHighlight; + setOffset(offset + diff * range); + } else if (highlightUp && relativeHighlight >= (end - start) * mappedRange) { + qreal diff = relativeHighlight - (end - start) * mappedRange; + setOffset(offset - diff * range - 0.00001); + } + + highlightPosition = pos; + qreal pathPos = positionOfIndex(pos); + updateItem(highlightItem, pathPos); + if (QDeclarativePathViewAttached *att = attached(highlightItem)) + att->setOnPath(pathPos != -1.0); + } } void QDeclarativePathViewPrivate::updateItem(QDeclarativeItem *item, qreal percent) @@ -437,9 +501,11 @@ void QDeclarativePathView::setCurrentIndex(int idx) } } } + d->moveReason = QDeclarativePathViewPrivate::SetIndex; d->currentIndex = idx; if (d->model->count()) { - d->snapToCurrent(); + if (d->haveHighlightRange && d->highlightRangeMode == QDeclarativePathView::StrictlyEnforceRange) + d->snapToCurrent(); int itemIndex = (idx - d->firstIndex + d->model->count()) % d->model->count(); if (itemIndex < d->items.count()) { QDeclarativeItem *item = d->items.at(itemIndex); @@ -447,6 +513,8 @@ void QDeclarativePathView::setCurrentIndex(int idx) if (QDeclarativePathViewAttached *att = d->attached(item)) att->setIsCurrentItem(true); } + d->currentItemOffset = d->positionOfIndex(d->currentIndex); + d->updateHighlight(); } emit currentIndexChanged(); } @@ -478,7 +546,7 @@ void QDeclarativePathViewPrivate::setOffset(qreal o) if (isValid() && q->isComponentComplete()) { offset = qmlMod(o, qreal(model->count())); if (offset < 0) - offset = model->count() + offset; + offset += qreal(model->count()); q->refill(); } else { offset = o; @@ -488,29 +556,28 @@ void QDeclarativePathViewPrivate::setOffset(qreal o) } /*! - \qmlproperty real PathView::snapPosition + \qmlproperty component PathView::highlight + This property holds the component to use as the highlight. - This property determines the position on the path (0.0-1.0) the nearest item will snap to. - The item nearest this position will set currentIndex, for example when offset is 0.0 the - first item will be placed at this position and currentIndex will be 0. -*/ -qreal QDeclarativePathView::snapPosition() const -{ - Q_D(const QDeclarativePathView); - return d->snapPos; -} + An instance of the highlight component will be created for each view. + The geometry of the resultant component instance will be managed by the view + so as to stay with the current item. -void QDeclarativePathView::setSnapPosition(qreal pos) -{ - Q_D(QDeclarativePathView); - qreal normalizedPos = pos - int(pos); - if (qFuzzyCompare(normalizedPos, d->snapPos)) - return; - d->snapPos = normalizedPos; - d->updateHighlight(); - d->fixOffset(); - emit snapPositionChanged(); -} + The below example demonstrates how to make a simple highlight. Note the use + of the PathView.onPath property to ensure that the highlight is hidden + when flicked off of the path. + + \code + Component { + Rectangle { + visible: PathView.onPath + ... + } + } + \endcode + + \sa highlightItem, highlightRangeMode +*/ QDeclarativeComponent *QDeclarativePathView::highlight() const { @@ -529,11 +596,99 @@ void QDeclarativePathView::setHighlight(QDeclarativeComponent *highlight) } } +/*! + \qmlproperty Item PathView::highlightItem + + \c highlightItem holds the highlight item, which was created + from the \l highlight component. + + \sa highlight +*/ QDeclarativeItem *QDeclarativePathView::highlightItem() { Q_D(const QDeclarativePathView); return d->highlightItem; } +/*! + \qmlproperty real PathView::preferredHighlightBegin + \qmlproperty real PathView::preferredHighlightEnd + \qmlproperty enumeration PathView::highlightRangeMode + + These properties set the preferred range of the highlight (current item) + within the view. The preferred values must be in the range 0.0-1.0. + + If highlightRangeMode is set to \e ApplyRange the view will + attempt to maintain the highlight within the range, however + the highlight can move outside of the range at the ends of the path + or due to a mouse interaction. + + If highlightRangeMode is set to \e StrictlyEnforceRange the highlight will never + move outside of the range. This means that the current item will change + if a keyboard or mouse action would cause the highlight to move + outside of the range. + + Note that this is the correct way to influence where the + current item ends up when the view moves. For example, if you want the + currently selected item to be in the middle of the path, then set the + highlight range to be 0.5,0.5 and highlightRangeMode to StrictlyEnforceRange. + Then, when the path scrolls, + the currently selected item will be the item at that position. This also applies to + when the currently selected item changes - it will scroll to within the preferred + highlight range. Furthermore, the behaviour of the current item index will occur + whether or not a highlight exists. + + The default value is \e StrictlyEnforceRange. + + Note that a valid range requires preferredHighlightEnd to be greater + than or equal to preferredHighlightBegin. +*/ +qreal QDeclarativePathView::preferredHighlightBegin() const +{ + Q_D(const QDeclarativePathView); + return d->highlightRangeStart; +} + +void QDeclarativePathView::setPreferredHighlightBegin(qreal start) +{ + Q_D(QDeclarativePathView); + if (d->highlightRangeStart == start || start < 0 || start > 1.0) + return; + d->highlightRangeStart = start; + d->haveHighlightRange = d->highlightRangeMode != NoHighlightRange && d->highlightRangeStart <= d->highlightRangeEnd; + emit preferredHighlightBeginChanged(); +} + +qreal QDeclarativePathView::preferredHighlightEnd() const +{ + Q_D(const QDeclarativePathView); + return d->highlightRangeEnd; +} + +void QDeclarativePathView::setPreferredHighlightEnd(qreal end) +{ + Q_D(QDeclarativePathView); + if (d->highlightRangeEnd == end || end < 0 || end > 1.0) + return; + d->highlightRangeEnd = end; + d->haveHighlightRange = d->highlightRangeMode != NoHighlightRange && d->highlightRangeStart <= d->highlightRangeEnd; + emit preferredHighlightEndChanged(); +} + +QDeclarativePathView::HighlightRangeMode QDeclarativePathView::highlightRangeMode() const +{ + Q_D(const QDeclarativePathView); + return d->highlightRangeMode; +} + +void QDeclarativePathView::setHighlightRangeMode(HighlightRangeMode mode) +{ + Q_D(QDeclarativePathView); + if (d->highlightRangeMode == mode) + return; + d->highlightRangeMode = mode; + d->haveHighlightRange = d->highlightRangeMode != NoHighlightRange && d->highlightRangeStart <= d->highlightRangeEnd; + emit highlightRangeModeChanged(); +} /*! \qmlproperty real PathView::dragMargin @@ -770,16 +925,18 @@ void QDeclarativePathView::mouseReleaseEvent(QGraphicsSceneMouseEvent *) velocity = (velocity > 0 ? count : -count) * 2; // Calculate the distance to be travelled qreal v2 = velocity*velocity; - qreal accel = d->deceleration; + qreal accel = d->deceleration/10; // + 0.25 to encourage moving at least one item in the flick direction - qreal dist = qMin(qreal(d->model->count()-1), qreal(qreal(d->model->count()) * v2 / (accel * 2.0) + 0.25)); - // round to nearest item. - if (velocity > 0.) - dist = qRound(dist + d->offset) - d->offset; - else - dist = qRound(dist - d->offset) + d->offset; - // Calculate accel required to stop on item boundary - accel = v2 / (2.0f * qAbs(dist)); + qreal dist = qMin(qreal(d->model->count()-1), qreal(v2 / (accel * 2.0) + 0.25)); + if (d->haveHighlightRange && d->highlightRangeMode == QDeclarativePathView::StrictlyEnforceRange) { + // round to nearest item. + if (velocity > 0.) + dist = qRound(dist + d->offset) - d->offset; + else + dist = qRound(dist - d->offset) + d->offset; + // Calculate accel required to stop on item boundary + accel = v2 / (2.0f * qAbs(dist)); + } d->moveOffset.setValue(d->offset); d->tl.accel(d->moveOffset, velocity, accel, dist); d->tl.callback(QDeclarativeTimeLineCallback(&d->moveOffset, d->fixOffsetCallback, d)); @@ -862,6 +1019,7 @@ void QDeclarativePathView::componentComplete() { Q_D(QDeclarativePathView); QDeclarativeItem::componentComplete(); + d->createHighlight(); d->regenerate(); d->updateHighlight(); } @@ -872,7 +1030,7 @@ void QDeclarativePathView::refill() if (!d->isValid() || !isComponentComplete()) return; -// qDebug() << "offset" << d->_offset; + bool currentVisible = false; // first move existing items and remove items off path int idx = d->firstIndex; @@ -882,6 +1040,10 @@ void QDeclarativePathView::refill() QDeclarativeItem *item = *it; if (pos >= 0.0) { d->updateItem(item, pos); + if (idx == d->currentIndex) { + currentVisible = true; + d->currentItemOffset = pos; + } ++it; } else { // qDebug() << "release"; @@ -902,7 +1064,9 @@ void QDeclarativePathView::refill() int count = d->pathItems == -1 ? d->model->count() : qMin(d->pathItems, d->model->count()); if (d->items.count() < count) { int idx = qRound(d->model->count() - d->offset) % d->model->count(); - qreal startPos = d->snapPos; + qreal startPos = 0.0; + if (d->haveHighlightRange && d->highlightRangeMode != QDeclarativePathView::NoHighlightRange) + startPos = d->highlightRangeStart; if (d->firstIndex >= 0) { startPos = d->positionOfIndex(d->firstIndex); idx = (d->firstIndex + d->items.count()) % d->model->count(); @@ -917,6 +1081,8 @@ void QDeclarativePathView::refill() item->setFocus(true); if (QDeclarativePathViewAttached *att = d->attached(item)) att->setIsCurrentItem(true); + currentVisible = true; + d->currentItemOffset = pos; } if (d->items.count() == 0) d->firstIndex = idx; @@ -941,6 +1107,8 @@ void QDeclarativePathView::refill() item->setFocus(true); if (QDeclarativePathViewAttached *att = d->attached(item)) att->setIsCurrentItem(true); + currentVisible = true; + d->currentItemOffset = pos; } d->items.prepend(item); d->updateItem(item, pos); @@ -951,6 +1119,19 @@ void QDeclarativePathView::refill() pos = d->positionOfIndex(idx); } } + + if (!currentVisible) + d->currentItemOffset = 1.0; + + if (d->highlightItem && d->haveHighlightRange && d->highlightRangeMode == QDeclarativePathView::StrictlyEnforceRange) { + d->updateItem(d->highlightItem, d->highlightRangeStart); + if (QDeclarativePathViewAttached *att = d->attached(d->highlightItem)) + att->setOnPath(true); + } else if (d->moveReason != QDeclarativePathViewPrivate::SetIndex) { + d->updateItem(d->highlightItem, d->currentItemOffset); + if (QDeclarativePathViewAttached *att = d->attached(d->highlightItem)) + att->setOnPath(currentVisible); + } } void QDeclarativePathView::itemsInserted(int modelIndex, int count) @@ -962,6 +1143,10 @@ void QDeclarativePathView::itemsInserted(int modelIndex, int count) QList removedItems = d->items; d->items.clear(); + if (modelIndex <= d->currentIndex) { + d->currentIndex += count; + emit currentIndexChanged(); + } d->regenerate(); while (removedItems.count()) d->releaseItem(removedItems.takeLast()); @@ -980,6 +1165,7 @@ void QDeclarativePathView::itemsRemoved(int modelIndex, int count) d->items.clear(); if (d->offset >= d->model->count()) d->offset = d->model->count() - 1; + //XXX update currentIndex d->regenerate(); while (removedItems.count()) d->releaseItem(removedItems.takeLast()); @@ -995,6 +1181,7 @@ void QDeclarativePathView::itemsMoved(int from, int to, int count) QList removedItems = d->items; d->items.clear(); + //XXX update currentIndex d->regenerate(); while (removedItems.count()) d->releaseItem(removedItems.takeLast()); @@ -1047,6 +1234,9 @@ void QDeclarativePathViewPrivate::updateCurrent() Q_Q(QDeclarativePathView); if (moveReason != Mouse) return; + if (!haveHighlightRange || highlightRangeMode != QDeclarativePathView::StrictlyEnforceRange) + return; + int idx = calcCurrentIndex(); if (model && idx != currentIndex) { int itemIndex = (currentIndex - firstIndex + model->count()) % model->count(); @@ -1077,11 +1267,13 @@ void QDeclarativePathViewPrivate::fixOffset() { Q_Q(QDeclarativePathView); if (model && items.count()) { - int curr = calcCurrentIndex(); - if (curr != currentIndex) - q->setCurrentIndex(curr); - else - snapToCurrent(); + if (haveHighlightRange && highlightRangeMode == QDeclarativePathView::StrictlyEnforceRange) { + int curr = calcCurrentIndex(); + if (curr != currentIndex) + q->setCurrentIndex(curr); + else + snapToCurrent(); + } } } @@ -1093,7 +1285,7 @@ void QDeclarativePathViewPrivate::snapToCurrent() qreal targetOffset = model->count() - currentIndex; moveReason = Other; - tl.clear(); + tl.reset(moveOffset); moveOffset.setValue(offset); const int duration = 300; diff --git a/src/declarative/graphicsitems/qdeclarativepathview_p.h b/src/declarative/graphicsitems/qdeclarativepathview_p.h index 07b8f6f..0079891 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview_p.h +++ b/src/declarative/graphicsitems/qdeclarativepathview_p.h @@ -61,11 +61,14 @@ class Q_DECLARATIVE_EXPORT QDeclarativePathView : public QDeclarativeItem Q_PROPERTY(QDeclarativePath *path READ path WRITE setPath NOTIFY pathChanged) Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged) Q_PROPERTY(qreal offset READ offset WRITE setOffset NOTIFY offsetChanged) - Q_PROPERTY(qreal snapPosition READ snapPosition WRITE setSnapPosition NOTIFY snapPositionChanged) Q_PROPERTY(QDeclarativeComponent *highlight READ highlight WRITE setHighlight NOTIFY highlightChanged) Q_PROPERTY(QDeclarativeItem *highlightItem READ highlightItem NOTIFY highlightItemChanged) + Q_PROPERTY(qreal preferredHighlightBegin READ preferredHighlightBegin WRITE setPreferredHighlightBegin NOTIFY preferredHighlightBeginChanged) + Q_PROPERTY(qreal preferredHighlightEnd READ preferredHighlightEnd WRITE setPreferredHighlightEnd NOTIFY preferredHighlightEndChanged) + Q_PROPERTY(HighlightRangeMode highlightRangeMode READ highlightRangeMode WRITE setHighlightRangeMode NOTIFY highlightRangeModeChanged) + Q_PROPERTY(qreal dragMargin READ dragMargin WRITE setDragMargin NOTIFY dragMarginChanged) Q_PROPERTY(qreal flickDeceleration READ flickDeceleration WRITE setFlickDeceleration NOTIFY flickDecelerationChanged) Q_PROPERTY(bool interactive READ isInteractive WRITE setInteractive NOTIFY interactiveChanged) @@ -74,6 +77,8 @@ class Q_DECLARATIVE_EXPORT QDeclarativePathView : public QDeclarativeItem Q_PROPERTY(QDeclarativeComponent *delegate READ delegate WRITE setDelegate NOTIFY delegateChanged) Q_PROPERTY(int pathItemCount READ pathItemCount WRITE setPathItemCount NOTIFY pathItemCountChanged) + Q_ENUMS(HighlightRangeMode); + public: QDeclarativePathView(QDeclarativeItem *parent=0); virtual ~QDeclarativePathView(); @@ -90,13 +95,20 @@ public: qreal offset() const; void setOffset(qreal offset); - qreal snapPosition() const; - void setSnapPosition(qreal pos); - QDeclarativeComponent *highlight() const; void setHighlight(QDeclarativeComponent *highlight); QDeclarativeItem *highlightItem(); + enum HighlightRangeMode { NoHighlightRange, ApplyRange, StrictlyEnforceRange }; + HighlightRangeMode highlightRangeMode() const; + void setHighlightRangeMode(HighlightRangeMode mode); + + qreal preferredHighlightBegin() const; + void setPreferredHighlightBegin(qreal); + + qreal preferredHighlightEnd() const; + void setPreferredHighlightEnd(qreal); + qreal dragMargin() const; void setDragMargin(qreal margin); @@ -122,6 +134,9 @@ Q_SIGNALS: void modelChanged(); void countChanged(); void pathChanged(); + void preferredHighlightBeginChanged(); + void preferredHighlightEndChanged(); + void highlightRangeModeChanged(); void dragMarginChanged(); void snapPositionChanged(); void delegateChanged(); diff --git a/src/declarative/graphicsitems/qdeclarativepathview_p_p.h b/src/declarative/graphicsitems/qdeclarativepathview_p_p.h index 1780869..90216c0 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativepathview_p_p.h @@ -74,12 +74,18 @@ class QDeclarativePathViewPrivate : public QDeclarativeItemPrivate public: QDeclarativePathViewPrivate() - : path(0), currentIndex(0), startPc(0), lastDist(0) - , lastElapsed(0), mappedRange(1.0), stealMouse(false), ownModel(false), interactive(true) - , snapPos(0), dragMargin(0), deceleration(100) + : path(0), currentIndex(0), currentItemOffset(0.0), startPc(0), lastDist(0) + , lastElapsed(0), mappedRange(1.0) + , stealMouse(false), ownModel(false), interactive(true), haveHighlightRange(true) + , autoHighlight(true), highlightUp(false), dragMargin(0), deceleration(100) , moveOffset(this, &QDeclarativePathViewPrivate::setOffset) + , moveHighlight(this, &QDeclarativePathViewPrivate::setHighlightPosition) , firstIndex(-1), pathItems(-1), requestedIndex(-1) , moveReason(Other), attType(0), highlightComponent(0), highlightItem(0) + , highlightPosition(0) + , highlightRangeStart(0), highlightRangeEnd(0) + , highlightRangeMode(QDeclarativePathView::StrictlyEnforceRange) + , highlightMoveSpeed(1.0) { } @@ -98,9 +104,10 @@ public: QDeclarativePathViewAttached *attached(QDeclarativeItem *item); void clear(); void updateMappedRange(); - qreal positionOfIndex(int index) const; + qreal positionOfIndex(qreal index) const; void createHighlight(); void updateHighlight(); + void setHighlightPosition(qreal pos); bool isValid() const { return model && model->count() > 0 && model->isValid() && path; } @@ -117,6 +124,7 @@ public: QDeclarativePath *path; int currentIndex; + qreal currentItemOffset; qreal startPc; QPointF startPoint; qreal lastDist; @@ -126,9 +134,11 @@ public: bool stealMouse : 1; bool ownModel : 1; bool interactive : 1; + bool haveHighlightRange : 1; + bool autoHighlight : 1; + bool highlightUp : 1; QTime lastPosTime; QPointF lastPos; - qreal snapPos; qreal dragMargin; qreal deceleration; QDeclarativeTimeLine tl; @@ -139,11 +149,17 @@ public: QList items; QDeclarativeGuard model; QVariant modelVariant; - enum MovementReason { Other, Key, Mouse }; + enum MovementReason { Other, SetIndex, Mouse }; MovementReason moveReason; QDeclarativeOpenMetaObjectType *attType; QDeclarativeComponent *highlightComponent; QDeclarativeItem *highlightItem; + QDeclarativeTimeLineValueProxy moveHighlight; + qreal highlightPosition; + qreal highlightRangeStart; + qreal highlightRangeEnd; + QDeclarativePathView::HighlightRangeMode highlightRangeMode; + qreal highlightMoveSpeed; }; QT_END_NAMESPACE diff --git a/tests/auto/declarative/qdeclarativepathview/data/displaypath.qml b/tests/auto/declarative/qdeclarativepathview/data/displaypath.qml index ab1538b..eded122 100644 --- a/tests/auto/declarative/qdeclarativepathview/data/displaypath.qml +++ b/tests/auto/declarative/qdeclarativepathview/data/displaypath.qml @@ -33,7 +33,6 @@ Rectangle { height: 320 model: testModel delegate: delegate - snapPosition: 0.0001 path: Path { startY: 120 startX: 160 diff --git a/tests/auto/declarative/qdeclarativepathview/data/pathview0.qml b/tests/auto/declarative/qdeclarativepathview/data/pathview0.qml index 8e2c251..1866875 100644 --- a/tests/auto/declarative/qdeclarativepathview/data/pathview0.qml +++ b/tests/auto/declarative/qdeclarativepathview/data/pathview0.qml @@ -48,7 +48,6 @@ Rectangle { height: 320 model: testModel delegate: delegate - snapPosition: 0.0001 highlight: Rectangle { width: 60 height: 20 diff --git a/tests/auto/declarative/qdeclarativepathview/data/pathview3.qml b/tests/auto/declarative/qdeclarativepathview/data/pathview3.qml index f1bc66e..b143294 100644 --- a/tests/auto/declarative/qdeclarativepathview/data/pathview3.qml +++ b/tests/auto/declarative/qdeclarativepathview/data/pathview3.qml @@ -3,7 +3,9 @@ import Qt 4.6 PathView { id: photoPathView y: 100; width: 800; height: 330; pathItemCount: 4; offset: 1 - dragMargin: 24; snapPosition: 0.50 + dragMargin: 24 + preferredHighlightBegin: 0.50 + preferredHighlightEnd: 0.50 path: Path { startX: -50; startY: 40; diff --git a/tests/auto/declarative/qdeclarativepathview/data/propertychanges.qml b/tests/auto/declarative/qdeclarativepathview/data/propertychanges.qml index db70b7b..1ae1ad2 100644 --- a/tests/auto/declarative/qdeclarativepathview/data/propertychanges.qml +++ b/tests/auto/declarative/qdeclarativepathview/data/propertychanges.qml @@ -17,7 +17,8 @@ Rectangle { } PathView { - snapPosition: 0.1 + preferredHighlightBegin: 0.1 + preferredHighlightEnd: 0.1 dragMargin: 5.0 id: pathView objectName: "pathView" diff --git a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp index 6d7cc0d..4d43c68 100644 --- a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp +++ b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp @@ -194,7 +194,7 @@ void tst_QDeclarativePathView::initValues() QCOMPARE(obj->model(), QVariant()); QCOMPARE(obj->currentIndex(), 0); QCOMPARE(obj->offset(), 0.); - QCOMPARE(obj->snapPosition(), 0.); + QCOMPARE(obj->preferredHighlightBegin(), 0.); QCOMPARE(obj->dragMargin(), 0.); QCOMPARE(obj->count(), 0); QCOMPARE(obj->pathItemCount(), -1); @@ -255,7 +255,7 @@ void tst_QDeclarativePathView::pathview2() QVERIFY(obj->model() != QVariant()); QCOMPARE(obj->currentIndex(), 0); QCOMPARE(obj->offset(), 0.); - QCOMPARE(obj->snapPosition(), 0.); + QCOMPARE(obj->preferredHighlightBegin(), 0.); QCOMPARE(obj->dragMargin(), 0.); QCOMPARE(obj->count(), 8); QCOMPARE(obj->pathItemCount(), 10); @@ -273,7 +273,7 @@ void tst_QDeclarativePathView::pathview3() QVERIFY(obj->model() != QVariant()); QCOMPARE(obj->currentIndex(), 0); QCOMPARE(obj->offset(), 1.0); - QCOMPARE(obj->snapPosition(), 0.5); + QCOMPARE(obj->preferredHighlightBegin(), 0.5); QCOMPARE(obj->dragMargin(), 24.); QCOMPARE(obj->count(), 8); QCOMPARE(obj->pathItemCount(), 4); @@ -534,22 +534,25 @@ void tst_QDeclarativePathView::propertyChanges() QDeclarativePathView *pathView = canvas->rootObject()->findChild("pathView"); QVERIFY(pathView); - QSignalSpy snapPositionSpy(pathView, SIGNAL(snapPositionChanged())); + QSignalSpy snapPositionSpy(pathView, SIGNAL(preferredHighlightBeginChanged())); QSignalSpy dragMarginSpy(pathView, SIGNAL(dragMarginChanged())); - QCOMPARE(pathView->snapPosition(), 0.1); + QCOMPARE(pathView->preferredHighlightBegin(), 0.1); QCOMPARE(pathView->dragMargin(), 5.0); - pathView->setSnapPosition(0.4); + pathView->setPreferredHighlightBegin(0.4); + pathView->setPreferredHighlightEnd(0.4); pathView->setDragMargin(20.0); - QCOMPARE(pathView->snapPosition(), 0.4); + QCOMPARE(pathView->preferredHighlightBegin(), 0.4); + QCOMPARE(pathView->preferredHighlightEnd(), 0.4); QCOMPARE(pathView->dragMargin(), 20.0); QCOMPARE(snapPositionSpy.count(), 1); QCOMPARE(dragMarginSpy.count(), 1); - pathView->setSnapPosition(0.4); + pathView->setPreferredHighlightBegin(0.4); + pathView->setPreferredHighlightEnd(0.4); pathView->setDragMargin(20.0); QCOMPARE(snapPositionSpy.count(), 1); -- cgit v0.12 From 8217da65cbe44261a83418017be311bb1a62725d Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 26 Mar 2010 09:37:14 +0100 Subject: Doc Augmentation Task-number: QTBUG-9396 --- doc/src/declarative/extending.qdoc | 13 +++++++++++++ src/declarative/graphicsitems/qdeclarativepositioners.cpp | 4 +++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/doc/src/declarative/extending.qdoc b/doc/src/declarative/extending.qdoc index 8c096da..3dce8c3 100644 --- a/doc/src/declarative/extending.qdoc +++ b/doc/src/declarative/extending.qdoc @@ -693,6 +693,19 @@ it in two steps, like this: myProperty: 10 \endcode +If a default value is not supplied or set later in the file, each type has a +default value for when none is explictly set. Below are the default values +of some of the types. For the remaining types the default values are undefined. + +\table +\header \o QML Type \o Default Value +\row \o bool \o false +\row \o int \o 0 +\row \o double, real \o 0.0 +\row \o string, url \o "" (an empty string) +\row \o color \o #000000 (black) +\endtable + If specified, the optional "default" attribute marks the new property as the types default property, overriding any existing default property. Using the default attribute twice in the same type block is an error. diff --git a/src/declarative/graphicsitems/qdeclarativepositioners.cpp b/src/declarative/graphicsitems/qdeclarativepositioners.cpp index 7a0d33a..5e91224 100644 --- a/src/declarative/graphicsitems/qdeclarativepositioners.cpp +++ b/src/declarative/graphicsitems/qdeclarativepositioners.cpp @@ -602,7 +602,9 @@ Grid { \qmlproperty Transition Grid::add This property holds the transition to apply when adding an item to the positioner. The transition is only applied to the added item(s). - Positioner transitions will only affect the position (x,y) of items. + Positioner transitions will only affect the position (x,y) of items, + as that is all the positioners affect. To animate other property change + you will have to do so based on how you have changed those properties. Added can mean that either the object has been created or reparented, and thus is now a child or the positioner, or that the -- cgit v0.12 From 15d9ab9a041ea9e81e444a8777e32e4f909320c1 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 26 Mar 2010 09:40:08 +0100 Subject: I've been told this fixes compilation on windows. --- src/declarative/graphicsitems/qdeclarativetranslate_p.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativetranslate_p.h b/src/declarative/graphicsitems/qdeclarativetranslate_p.h index 1371f71..939692b 100644 --- a/src/declarative/graphicsitems/qdeclarativetranslate_p.h +++ b/src/declarative/graphicsitems/qdeclarativetranslate_p.h @@ -52,7 +52,7 @@ QT_MODULE(Declarative) class QDeclarativeTranslatePrivate; -class Q_GUI_EXPORT QDeclarativeTranslate : public QGraphicsTransform +class Q_DECLARATIVE_EXPORT QDeclarativeTranslate : public QGraphicsTransform { Q_OBJECT -- cgit v0.12 From a034773ce0e9d3fe3e7768da248d8c2e99cf132d Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Fri, 26 Mar 2010 08:38:43 +0100 Subject: Adds a way to clear the state list property in QDeclarativeStateGroup Needed by QmlDesigner, which needs to be able to remove states at runtime. Done my Marco Bubke Reviewed-by: Michael Brasser --- src/declarative/util/qdeclarativestategroup.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/declarative/util/qdeclarativestategroup.cpp b/src/declarative/util/qdeclarativestategroup.cpp index bc4582c..258a9e9 100644 --- a/src/declarative/util/qdeclarativestategroup.cpp +++ b/src/declarative/util/qdeclarativestategroup.cpp @@ -69,6 +69,7 @@ public: static void append_state(QDeclarativeListProperty *list, QDeclarativeState *state); static int count_state(QDeclarativeListProperty *list); static QDeclarativeState *at_state(QDeclarativeListProperty *list, int index); + static void clear_states(QDeclarativeListProperty *list); QList states; QList transitions; @@ -150,7 +151,8 @@ QDeclarativeListProperty QDeclarativeStateGroup::statesProper Q_D(QDeclarativeStateGroup); return QDeclarativeListProperty(this, &d->states, &QDeclarativeStateGroupPrivate::append_state, &QDeclarativeStateGroupPrivate::count_state, - &QDeclarativeStateGroupPrivate::at_state); + &QDeclarativeStateGroupPrivate::at_state, + &QDeclarativeStateGroupPrivate::clear_states); } void QDeclarativeStateGroupPrivate::append_state(QDeclarativeListProperty *list, QDeclarativeState *state) @@ -175,6 +177,16 @@ QDeclarativeState *QDeclarativeStateGroupPrivate::at_state(QDeclarativeListPrope return _this->d_func()->states.at(index); } +void QDeclarativeStateGroupPrivate::clear_states(QDeclarativeListProperty *list) +{ + QDeclarativeStateGroup *_this = static_cast(list->object); + _this->d_func()->setCurrentStateInternal(QString(), true); + for (int i = 0; i < _this->d_func()->states.count(); ++i) { + _this->d_func()->states.at(i)->setStateGroup(0); + } + _this->d_func()->states.clear(); +} + /*! \qmlproperty list StateGroup::transitions This property holds a list of transitions defined by the state group. -- cgit v0.12 From 31b972b12db4497f1c3ba1762d784c7315e75b62 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Fri, 26 Mar 2010 10:55:48 +0100 Subject: Recompute the source location of regexp literals. Task-number: QTBUG-9367 --- src/declarative/qml/parser/qdeclarativejs.g | 8 +++++++- src/declarative/qml/parser/qdeclarativejsparser.cpp | 8 +++++++- tests/auto/declarative/qdeclarativetextinput/data/validators.qml | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/declarative/qml/parser/qdeclarativejs.g b/src/declarative/qml/parser/qdeclarativejs.g index 0256c52..c7524a4 100644 --- a/src/declarative/qml/parser/qdeclarativejs.g +++ b/src/declarative/qml/parser/qdeclarativejs.g @@ -656,7 +656,7 @@ case $rule_number: { } else if (AST::UiQualifiedId *qualifiedId = reparseAsQualifiedId(sym(2).Expression)) { QString text; for (AST::UiQualifiedId *q = qualifiedId; q; q = q->next) { - text += q->name->asString(); + text += q->name->asString(); if (q->next) text += QLatin1String("."); } node = makeAstNode(driver->nodePool(), qualifiedId); @@ -1109,6 +1109,9 @@ case $rule_number: { diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, location(lexer), lexer->errorMessage())); return false; // ### remove me } + + loc(1).length = lexer->tokenLength(); + AST::RegExpLiteral *node = makeAstNode (driver->nodePool(), lexer->pattern, lexer->flags); node->literalToken = loc(1); sym(1).Node = node; @@ -1126,6 +1129,9 @@ case $rule_number: { diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, location(lexer), lexer->errorMessage())); return false; } + + loc(1).length = lexer->tokenLength(); + AST::RegExpLiteral *node = makeAstNode (driver->nodePool(), lexer->pattern, lexer->flags); node->literalToken = loc(1); sym(1).Node = node; diff --git a/src/declarative/qml/parser/qdeclarativejsparser.cpp b/src/declarative/qml/parser/qdeclarativejsparser.cpp index 9205ef4..2949e88 100644 --- a/src/declarative/qml/parser/qdeclarativejsparser.cpp +++ b/src/declarative/qml/parser/qdeclarativejsparser.cpp @@ -275,7 +275,7 @@ case 20: { } else if (AST::UiQualifiedId *qualifiedId = reparseAsQualifiedId(sym(2).Expression)) { QString text; for (AST::UiQualifiedId *q = qualifiedId; q; q = q->next) { - text += q->name->asString(); + text += q->name->asString(); if (q->next) text += QLatin1String("."); } node = makeAstNode(driver->nodePool(), qualifiedId); @@ -571,6 +571,9 @@ case 76: { diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, location(lexer), lexer->errorMessage())); return false; // ### remove me } + + loc(1).length = lexer->tokenLength(); + AST::RegExpLiteral *node = makeAstNode (driver->nodePool(), lexer->pattern, lexer->flags); node->literalToken = loc(1); sym(1).Node = node; @@ -582,6 +585,9 @@ case 77: { diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, location(lexer), lexer->errorMessage())); return false; } + + loc(1).length = lexer->tokenLength(); + AST::RegExpLiteral *node = makeAstNode (driver->nodePool(), lexer->pattern, lexer->flags); node->literalToken = loc(1); sym(1).Node = node; diff --git a/tests/auto/declarative/qdeclarativetextinput/data/validators.qml b/tests/auto/declarative/qdeclarativetextinput/data/validators.qml index efe7570..531a232 100644 --- a/tests/auto/declarative/qdeclarativetextinput/data/validators.qml +++ b/tests/auto/declarative/qdeclarativetextinput/data/validators.qml @@ -15,7 +15,7 @@ Item { validator: DoubleValidator{top: 12.12; bottom: 2.93; decimals: 2; notation: DoubleValidator.StandardNotation} } TextInput { id: strInput; - validator: RegExpValidator { regExp: RegExp(/[a-zA-z]{2,4}/) } + validator: RegExpValidator { regExp: /[a-zA-z]{2,4}/ } } } -- cgit v0.12 From ffdd3c40413ef933506c040f40e4fb7ecd1ee062 Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Mon, 29 Mar 2010 08:32:49 +1000 Subject: Installed imports are no longer searched relative to caller. (quoted URL is for that) --- tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp b/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp index adea384..16efba9 100644 --- a/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp +++ b/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp @@ -340,6 +340,7 @@ void tst_qdeclarativedom::loadImports() "Item {}"; QDeclarativeEngine engine; + engine.addImportPath(SRCDIR "/data"); QDeclarativeDomDocument document; QVERIFY(document.load(&engine, qml, QUrl::fromLocalFile(SRCDIR "/data/dummy.qml"))); -- cgit v0.12 From 6b619af035a995cf16d977439995cf7c1c0d366e Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Mon, 29 Mar 2010 08:56:09 +1000 Subject: tyop --- src/declarative/graphicsitems/qdeclarativeimagebase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp index b8d67ff..5a234b7 100644 --- a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp +++ b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp @@ -152,7 +152,7 @@ void QDeclarativeImageBase::load() } else { d->status = Loading; int reqwidth = d->sourcesize.width(); - int reqheight = d->sourcesize.width(); + int reqheight = d->sourcesize.height(); QSize impsize; QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(d->url, &d->pix, &impsize, d->async, reqwidth, reqheight); if (status != QDeclarativePixmapReply::Ready && status != QDeclarativePixmapReply::Error) { -- cgit v0.12 From a3868307c0e1584a1f694efc4a7b980b54c6e2b1 Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Mon, 29 Mar 2010 08:57:03 +1000 Subject: Source resizing for QDeclarativeImageProvider too. (fixes test too) --- src/declarative/qml/qdeclarativeengine.cpp | 4 +-- src/declarative/qml/qdeclarativeengine_p.h | 2 +- src/declarative/qml/qdeclarativeimageprovider.cpp | 6 ++++- src/declarative/qml/qdeclarativeimageprovider.h | 2 +- src/declarative/util/qdeclarativepixmapcache.cpp | 4 ++- .../tst_qdeclarativeimageprovider.cpp | 30 ++++++++++++++-------- 6 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index ad26650..dea5a40 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -580,13 +580,13 @@ void QDeclarativeEngine::removeImageProvider(const QString &providerId) delete d->imageProviders.take(providerId); } -QImage QDeclarativeEnginePrivate::getImageFromProvider(const QUrl &url) +QImage QDeclarativeEnginePrivate::getImageFromProvider(const QUrl &url, QSize *size, const QSize& req_size) { QMutexLocker locker(&mutex); QImage image; QDeclarativeImageProvider *provider = imageProviders.value(url.host()); if (provider) - image = provider->request(url.path().mid(1)); + image = provider->request(url.path().mid(1), size, req_size); return image; } diff --git a/src/declarative/qml/qdeclarativeengine_p.h b/src/declarative/qml/qdeclarativeengine_p.h index 06b5027..84bf061 100644 --- a/src/declarative/qml/qdeclarativeengine_p.h +++ b/src/declarative/qml/qdeclarativeengine_p.h @@ -225,7 +225,7 @@ public: mutable QDeclarativeNetworkAccessManagerFactory *networkAccessManagerFactory; QHash imageProviders; - QImage getImageFromProvider(const QUrl &url); + QImage getImageFromProvider(const QUrl &url, QSize *size, const QSize& req_size); mutable QMutex mutex; diff --git a/src/declarative/qml/qdeclarativeimageprovider.cpp b/src/declarative/qml/qdeclarativeimageprovider.cpp index 9ef8545..b992b9f 100644 --- a/src/declarative/qml/qdeclarativeimageprovider.cpp +++ b/src/declarative/qml/qdeclarativeimageprovider.cpp @@ -61,10 +61,14 @@ QDeclarativeImageProvider::~QDeclarativeImageProvider() } /*! - \fn QImage QDeclarativeImageProvider::request(const QString &id) + \fn QImage QDeclarativeImageProvider::request(const QString &id, QSize *size, const QSize& requested_size) Implement this method to return the image with \a id. + If \a requested_size is a valid size, resize the image to that size before returning. + + In any case, \a size must be set to the (original) size of the image. + Note: this method may be called by multiple threads, so ensure the implementation of this method is reentrant. */ diff --git a/src/declarative/qml/qdeclarativeimageprovider.h b/src/declarative/qml/qdeclarativeimageprovider.h index 6ee7bcf..50b73fe 100644 --- a/src/declarative/qml/qdeclarativeimageprovider.h +++ b/src/declarative/qml/qdeclarativeimageprovider.h @@ -54,7 +54,7 @@ class Q_DECLARATIVE_EXPORT QDeclarativeImageProvider { public: virtual ~QDeclarativeImageProvider(); - virtual QImage request(const QString &id) = 0; + virtual QImage request(const QString &id, QSize *size, const QSize& requested_size) = 0; }; QT_END_NAMESPACE diff --git a/src/declarative/util/qdeclarativepixmapcache.cpp b/src/declarative/util/qdeclarativepixmapcache.cpp index 54dccce..1d90bf8 100644 --- a/src/declarative/util/qdeclarativepixmapcache.cpp +++ b/src/declarative/util/qdeclarativepixmapcache.cpp @@ -255,7 +255,9 @@ bool QDeclarativeImageRequestHandler::event(QEvent *event) // fetch if (url.scheme() == QLatin1String("image")) { // Use QmlImageProvider - QImage image = QDeclarativeEnginePrivate::get(engine)->getImageFromProvider(url); + QSize read_impsize; + QImage image = QDeclarativeEnginePrivate::get(engine)->getImageFromProvider(url, &read_impsize, QSize(runningJob->forcedWidth(),runningJob->forcedHeight())); + qmlOriginalSizes()->insert(url, read_impsize); QDeclarativeImageReaderEvent::ReadError errorCode = QDeclarativeImageReaderEvent::NoError; QString errorStr; if (image.isNull()) { diff --git a/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp b/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp index c5bdfc8..fe5f5a2 100644 --- a/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp +++ b/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp @@ -43,6 +43,7 @@ #include #include #include +#include // QDeclarativeImageProvider::request() is run in an idle thread where possible // Be generous in our timeout. @@ -76,28 +77,35 @@ private: class TestProvider : public QDeclarativeImageProvider { public: - QImage request(const QString &id) { - QImage image; - image.load(SRCDIR "/data/" + id); - return image; + QImage request(const QString &id, QSize *size, const QSize& requested_size) { + QImageReader io(SRCDIR "/data/" + id); + if (size) *size = io.size(); + if (requested_size.isValid()) + io.setScaledSize(requested_size); + return io.read(); } }; void tst_qdeclarativeimageprovider::imageSource_data() { QTest::addColumn("source"); + QTest::addColumn("properties"); + QTest::addColumn("size"); QTest::addColumn("error"); - QTest::newRow("exists") << "image://test/exists.png" << ""; - QTest::newRow("missing") << "image://test/no-such-file.png" + QTest::newRow("exists") << "image://test/exists.png" << "" << QSize(100,100) << ""; + QTest::newRow("scaled") << "image://test/exists.png" << "sourceSize: \"80x30\"" << QSize(80,30) << ""; + QTest::newRow("missing") << "image://test/no-such-file.png" << "" << QSize() << "\"Failed to get image from provider: image://test/no-such-file.png\" "; - QTest::newRow("unknown provider") << "image://bogus/exists.png" + QTest::newRow("unknown provider") << "image://bogus/exists.png" << "" << QSize() << "\"Failed to get image from provider: image://bogus/exists.png\" "; } void tst_qdeclarativeimageprovider::imageSource() { QFETCH(QString, source); + QFETCH(QString, properties); + QFETCH(QSize, size); QFETCH(QString, error); if (!error.isEmpty()) @@ -106,7 +114,7 @@ void tst_qdeclarativeimageprovider::imageSource() engine.addImageProvider("test", new TestProvider); QVERIFY(engine.imageProvider("test") != 0); - QString componentStr = "import Qt 4.6\nImage { source: \"" + source + "\" }"; + QString componentStr = "import Qt 4.6\nImage { source: \"" + source + "\"; " + properties + " }"; QDeclarativeComponent component(&engine); component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); QDeclarativeImage *obj = qobject_cast(component.create()); @@ -118,8 +126,10 @@ void tst_qdeclarativeimageprovider::imageSource() if (error.isEmpty()) { TRY_WAIT(obj->status() == QDeclarativeImage::Ready); - QCOMPARE(obj->width(), 100.); - QCOMPARE(obj->height(), 100.); + QCOMPARE(obj->width(), 100.0); + QCOMPARE(obj->height(), 100.0); + QCOMPARE(obj->pixmap().width(), size.width()); + QCOMPARE(obj->pixmap().height(), size.height()); QCOMPARE(obj->fillMode(), QDeclarativeImage::Stretch); QCOMPARE(obj->progress(), 1.0); } else { -- cgit v0.12 From f87e175eb03a6b455f70e12bb24f75c26eacb4c2 Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Mon, 29 Mar 2010 08:59:28 +1000 Subject: QTBUG-9367 has been fixed. Expect pass. --- .../declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp index 041fd4d..2791722c 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp +++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp @@ -1248,7 +1248,6 @@ void tst_qdeclarativeecmascript::regExpBug() QDeclarativeComponent component(&engine, TEST_FILE("regExp.qml")); MyQmlObject *object = qobject_cast(component.create()); QVERIFY(object != 0); - QEXPECT_FAIL("", "QTBUG-9367", Continue); QCOMPARE(object->regExp().pattern(), QLatin1String("[a-zA-z]")); } -- cgit v0.12 From fbd4378fa12ba8f310a3ca9f6e7c1b393f596410 Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Mon, 29 Mar 2010 09:09:16 +1000 Subject: doc --- tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp index 9073750..c42a315 100644 --- a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp +++ b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp @@ -281,6 +281,9 @@ void tst_qdeclarativeimage::svg() void tst_qdeclarativeimage::big() { + // If the JPEG loader does not implement scaling efficiently, it would + // have to build a 400 MB image. That would be a bug in the JPEG loader. + QString componentStr = "import Qt 4.6\nImage { source: \"" SRCDIR "/data/big.jpeg\"; sourceSize.width: 256; sourceSize.height: 256 }"; QDeclarativeComponent component(&engine); component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); -- cgit v0.12 From 0a114cf91058e215f4b6f8bbea09aa9e9ad57069 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Mon, 29 Mar 2010 09:16:45 +1000 Subject: Fix change description: Import -> import --- src/declarative/QmlChanges.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/QmlChanges.txt b/src/declarative/QmlChanges.txt index 6ab77a7..847f1f5 100644 --- a/src/declarative/QmlChanges.txt +++ b/src/declarative/QmlChanges.txt @@ -62,7 +62,7 @@ MouseArea { becomes -Import “foo.js” as Foo +import “foo.js” as Foo MouseArea { onClicked: Foo.foo() } -- cgit v0.12 From 6cce231a2d8da6fb232908a8c815ba3a433cfad7 Mon Sep 17 00:00:00 2001 From: Yann Bodson Date: Mon, 29 Mar 2010 09:19:07 +1000 Subject: Fix qdeclarativeimage autotest on the mac. --- .../declarative/qdeclarativeimage/data/heart-mac.png | Bin 0 -> 12621 bytes .../declarative/qdeclarativeimage/data/heart200-mac.png | Bin 0 -> 8062 bytes .../qdeclarativeimage/tst_qdeclarativeimage.cpp | 11 +++++++++-- 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativeimage/data/heart-mac.png create mode 100644 tests/auto/declarative/qdeclarativeimage/data/heart200-mac.png diff --git a/tests/auto/declarative/qdeclarativeimage/data/heart-mac.png b/tests/auto/declarative/qdeclarativeimage/data/heart-mac.png new file mode 100644 index 0000000..d7df0e4 Binary files /dev/null and b/tests/auto/declarative/qdeclarativeimage/data/heart-mac.png differ diff --git a/tests/auto/declarative/qdeclarativeimage/data/heart200-mac.png b/tests/auto/declarative/qdeclarativeimage/data/heart200-mac.png new file mode 100644 index 0000000..df22325 Binary files /dev/null and b/tests/auto/declarative/qdeclarativeimage/data/heart200-mac.png differ diff --git a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp index 9073750..bbf7421 100644 --- a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp +++ b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp @@ -155,7 +155,7 @@ void tst_qdeclarativeimage::imageSource() component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); QDeclarativeImage *obj = qobject_cast(component.create()); QVERIFY(obj != 0); - + if (remote || async) TRY_WAIT(obj->status() == QDeclarativeImage::Loading); @@ -266,7 +266,11 @@ void tst_qdeclarativeimage::svg() QCOMPARE(obj->pixmap().height(), 300); QCOMPARE(obj->width(), 550.0); QCOMPARE(obj->height(), 500.0); +#if defined(Q_OS_MAC) + QCOMPARE(obj->pixmap(), QPixmap(SRCDIR "/data/heart-mac.png")); +#else QCOMPARE(obj->pixmap(), QPixmap(SRCDIR "/data/heart.png")); +#endif obj->setSourceSize(QSize(200,200)); @@ -274,8 +278,11 @@ void tst_qdeclarativeimage::svg() QCOMPARE(obj->pixmap().height(), 200); QCOMPARE(obj->width(), 550.0); QCOMPARE(obj->height(), 500.0); +#if defined(Q_OS_MAC) + QCOMPARE(obj->pixmap(), QPixmap(SRCDIR "/data/heart200-mac.png")); +#else QCOMPARE(obj->pixmap(), QPixmap(SRCDIR "/data/heart200.png")); - +#endif delete obj; } -- cgit v0.12 From 2776592d1e8dc8059f3a1c05237294b4a45543d9 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Mon, 29 Mar 2010 09:35:55 +1000 Subject: Don't set status to Ready until model has been created (currently this is set as soon as XML data is downloaded, so there is no notification when model is actually ready to be used). This also fixes data() to not crash if it is called before the model is ready. Task-number: QTBUG-7835 --- src/declarative/util/qdeclarativexmllistmodel.cpp | 147 +++++++++++++-------- src/declarative/util/qdeclarativexmllistmodel_p.h | 3 +- .../tst_qdeclarativexmllistmodel.cpp | 97 ++++++++++++-- 3 files changed, 183 insertions(+), 64 deletions(-) diff --git a/src/declarative/util/qdeclarativexmllistmodel.cpp b/src/declarative/util/qdeclarativexmllistmodel.cpp index 3e08854..efc614b 100644 --- a/src/declarative/util/qdeclarativexmllistmodel.cpp +++ b/src/declarative/util/qdeclarativexmllistmodel.cpp @@ -57,6 +57,7 @@ #include #include #include +#include #include @@ -67,6 +68,8 @@ QT_BEGIN_NAMESPACE typedef QPair QDeclarativeXmlListRange; +#define XMLLISTMODEL_CLEAR_ID 0 + /*! \qmlclass XmlRole QDeclarativeXmlListModelRole \since 4.7 @@ -127,9 +130,10 @@ class QDeclarativeXmlQuery : public QThread Q_OBJECT public: QDeclarativeXmlQuery(QObject *parent=0) - : QThread(parent), m_quit(false), m_abortQueryId(-1), m_queryIds(0) { + : QThread(parent), m_quit(false), m_abortQueryId(-1), m_queryIds(XMLLISTMODEL_CLEAR_ID + 1) { qRegisterMetaType("QDeclarativeXmlQueryResult"); } + ~QDeclarativeXmlQuery() { m_mutex.lock(); m_quit = true; @@ -586,7 +590,8 @@ void QDeclarativeXmlListModel::setSource(const QUrl &src) Q_D(QDeclarativeXmlListModel); if (d->src != src) { d->src = src; - reload(); + if (d->xml.isEmpty()) // src is only used if d->xml is not set + reload(); emit sourceChanged(); } } @@ -663,23 +668,13 @@ void QDeclarativeXmlListModel::setNamespaceDeclarations(const QString &declarati /*! \qmlproperty enum XmlListModel::status + Specifies the model loading status, which can be one of the following: - This property holds the status of data source loading. It can be one of: \list - \o Null - no data source has been set - \o Ready - the data source has been loaded - \o Loading - the data source is currently being loaded - \o Error - an error occurred while loading the data source - \endlist - - Note that a change in the status property does not cause anything to happen - (although it reflects what has happened to the XmlListModel internally). If you wish - to react to the change in status you need to do it yourself, for example in one - of the following ways: - \list - \o Create a state, so that a state change occurs, e.g. State{name: 'loaded'; when: xmlListModel.status = XmlListModel.Ready;} - \o Do something inside the onStatusChanged signal handler, e.g. XmlListModel{id: xmlListModel; onStatusChanged: if(xmlListModel.status == XmlListModel.Ready) console.log('Loaded');} - \o Bind to the status variable somewhere, e.g. Text{text: if(xmlListModel.status!=XmlListModel.Ready){'Not Loaded';}else{'Loaded';}} + \o Null - No XML data has been set for this model. + \o Ready - The XML data has been loaded into the model. + \o Loading - The model is in the process of reading and loading XML data. + \o Error - An error occurred while the model was loading. \endlist \sa progress @@ -694,10 +689,17 @@ QDeclarativeXmlListModel::Status QDeclarativeXmlListModel::status() const /*! \qmlproperty real XmlListModel::progress - This property holds the progress of data source loading, from 0.0 (nothing loaded) - to 1.0 (finished). + This indicates the current progress of the downloading of the XML data + source. This value ranges from 0.0 (no data downloaded) to + 1.0 (all data downloaded). If the XML data is not from a remote source, + the progress becomes 1.0 as soon as the data is read. + + Note that when the progress is 1.0, the XML data has been downloaded, but + it is yet to be loaded into the model at this point. Use the status + property to find out when the XML data has been read and loaded into + the model. - \sa status + \sa status, source */ qreal QDeclarativeXmlListModel::progress() const { @@ -741,27 +743,8 @@ void QDeclarativeXmlListModel::reload() globalXmlQuery()->abort(d->queryId); d->queryId = -1; - int count = d->size; - if (count < 0) - d->size = 0; - bool hasKeys = false; - for (int i=0; iroleObjects.count(); i++) { - if (d->roleObjects[i]->isKey()) { - hasKeys = true; - break; - } - } - if (!hasKeys) { - d->data.clear(); + if (d->size < 0) d->size = 0; - if (count > 0) { - emit itemsRemoved(0, count); - emit countChanged(); - } - } - - if (d->src.isEmpty() && d->xml.isEmpty()) - return; if (d->reply) { d->reply->abort(); @@ -772,12 +755,22 @@ void QDeclarativeXmlListModel::reload() if (!d->xml.isEmpty()) { d->queryId = globalXmlQuery()->doQuery(d->query, d->namespaces, d->xml.toUtf8(), &d->roleObjects, d->keyRoleResultsCache); d->progress = 1.0; - d->status = Ready; + d->status = Loading; emit progressChanged(d->progress); emit statusChanged(d->status); return; } + if (d->src.isEmpty()) { + d->queryId = XMLLISTMODEL_CLEAR_ID; + d->progress = 1.0; + d->status = Loading; + emit progressChanged(d->progress); + emit statusChanged(d->status); + QTimer::singleShot(0, this, SLOT(dataCleared())); + return; + } + d->progress = 0.0; d->status = Loading; emit progressChanged(d->progress); @@ -813,18 +806,33 @@ void QDeclarativeXmlListModel::requestFinished() disconnect(d->reply, 0, this, 0); d->reply->deleteLater(); d->reply = 0; + + int count = this->count(); + d->data.clear(); + d->size = 0; + if (count > 0) { + emit itemsRemoved(0, count); + emit countChanged(); + } + d->status = Error; + d->queryId = -1; + emit statusChanged(d->status); } else { - d->status = Ready; QByteArray data = d->reply->readAll(); - d->queryId = globalXmlQuery()->doQuery(d->query, d->namespaces, data, &d->roleObjects, d->keyRoleResultsCache); + if (data.isEmpty()) { + d->queryId = XMLLISTMODEL_CLEAR_ID; + QTimer::singleShot(0, this, SLOT(dataCleared())); + } else { + d->queryId = globalXmlQuery()->doQuery(d->query, d->namespaces, data, &d->roleObjects, d->keyRoleResultsCache); + } disconnect(d->reply, 0, this, 0); d->reply->deleteLater(); d->reply = 0; + + d->progress = 1.0; + emit progressChanged(d->progress); } - d->progress = 1.0; - emit progressChanged(d->progress); - emit statusChanged(d->status); } void QDeclarativeXmlListModel::requestProgress(qint64 received, qint64 total) @@ -836,23 +844,58 @@ void QDeclarativeXmlListModel::requestProgress(qint64 received, qint64 total) } } +void QDeclarativeXmlListModel::dataCleared() +{ + Q_D(QDeclarativeXmlListModel); + QDeclarativeXmlQueryResult r; + r.queryId = XMLLISTMODEL_CLEAR_ID; + r.size = 0; + r.removed << qMakePair(0, count()); + r.keyRoleResultsCache = d->keyRoleResultsCache; + queryCompleted(r); +} + void QDeclarativeXmlListModel::queryCompleted(const QDeclarativeXmlQueryResult &result) { Q_D(QDeclarativeXmlListModel); if (result.queryId != d->queryId) return; + + int origCount = d->size; bool sizeChanged = result.size != d->size; + d->size = result.size; d->data = result.data; d->keyRoleResultsCache = result.keyRoleResultsCache; + d->status = Ready; + d->queryId = -1; - for (int i=0; iroleObjects.count(); i++) { + if (d->roleObjects[i]->isKey()) { + hasKeys = true; + break; + } + } + if (!hasKeys) { + if (!(origCount == 0 && d->size == 0)) { + emit itemsRemoved(0, origCount); + emit itemsInserted(0, d->size); + emit countChanged(); + } + + } else { + + for (int i=0; istatus); } QT_END_NAMESPACE diff --git a/src/declarative/util/qdeclarativexmllistmodel_p.h b/src/declarative/util/qdeclarativexmllistmodel_p.h index 7bb0f0e..7b85476 100644 --- a/src/declarative/util/qdeclarativexmllistmodel_p.h +++ b/src/declarative/util/qdeclarativexmllistmodel_p.h @@ -117,7 +117,7 @@ public: virtual void componentComplete(); Q_SIGNALS: - void statusChanged(Status); + void statusChanged(QDeclarativeXmlListModel::Status); void progressChanged(qreal progress); void countChanged(); void sourceChanged(); @@ -135,6 +135,7 @@ public Q_SLOTS: private Q_SLOTS: void requestFinished(); void requestProgress(qint64,qint64); + void dataCleared(); void queryCompleted(const QDeclarativeXmlQueryResult &); private: diff --git a/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp b/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp index e3aa5cc..74da79e 100644 --- a/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp +++ b/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp @@ -41,6 +41,8 @@ #include #include #include +#include +#include #ifdef QTEST_XMLPATTERNS #include @@ -53,6 +55,7 @@ typedef QList QDeclarativeXmlModelData; Q_DECLARE_METATYPE(QList) Q_DECLARE_METATYPE(QDeclarativeXmlModelData) +Q_DECLARE_METATYPE(QDeclarativeXmlListModel::Status) class tst_qdeclarativexmllistmodel : public QObject @@ -62,6 +65,10 @@ public: tst_qdeclarativexmllistmodel() {} private slots: + void initTestCase() { + qRegisterMetaType("QDeclarativeXmlListModel::Status"); + } + void buildModel(); void missingFields(); void cdata(); @@ -69,7 +76,10 @@ private slots: void roles(); void roleErrors(); void uniqueRoleNames(); - void status(); + void xml(); + void xml_data(); + void source(); + void source_data(); void data(); void reload(); void useKeys(); @@ -183,7 +193,6 @@ void tst_qdeclarativexmllistmodel::attributes() QDeclarativeXmlListModel *model = qobject_cast(component.create()); QVERIFY(model != 0); QTRY_COMPARE(model->count(), 5); - QList roles; roles << Qt::UserRole; QHash data = model->data(2, roles); @@ -249,27 +258,93 @@ void tst_qdeclarativexmllistmodel::uniqueRoleNames() delete model; } -void tst_qdeclarativexmllistmodel::status() + +void tst_qdeclarativexmllistmodel::xml() { - QDeclarativeXmlListModel *model; - model = new QDeclarativeXmlListModel; - QCOMPARE(model->status(), QDeclarativeXmlListModel::Null); + QFETCH(QString, xml); + QFETCH(int, count); - model->setXml(""); + QDeclarativeComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/model.qml")); + QDeclarativeXmlListModel *model = qobject_cast(component.create()); + QSignalSpy spy(model, SIGNAL(statusChanged(QDeclarativeXmlListModel::Status))); + + QCOMPARE(model->progress(), qreal(0.0)); + QCOMPARE(model->status(), QDeclarativeXmlListModel::Loading); + QTRY_COMPARE(spy.count(), 1); spy.clear(); QCOMPARE(model->status(), QDeclarativeXmlListModel::Ready); + QCOMPARE(model->progress(), qreal(1.0)); + QCOMPARE(model->count(), 9); + + // if xml is empty (i.e. clearing) it won't have any effect if a source is set + if (xml.isEmpty()) + model->setSource(QUrl()); + model->setXml(xml); + QCOMPARE(model->progress(), qreal(1.0)); // immediately goes to 1.0 if using setXml() + QTRY_COMPARE(spy.count(), 1); spy.clear(); + QCOMPARE(model->status(), QDeclarativeXmlListModel::Loading); + QTRY_COMPARE(spy.count(), 1); spy.clear(); + QCOMPARE(model->status(), QDeclarativeXmlListModel::Ready); + QCOMPARE(model->count(), count); + delete model; +} + +void tst_qdeclarativexmllistmodel::xml_data() +{ + QTest::addColumn("xml"); + QTest::addColumn("count"); + + QTest::newRow("xml with no items") << "" << 0; + QTest::newRow("empty xml") << "" << 0; + QTest::newRow("one item") << "HobbesTiger7Large" << 1; +} + +void tst_qdeclarativexmllistmodel::source() +{ + QFETCH(QUrl, source); + QFETCH(int, count); + QFETCH(QDeclarativeXmlListModel::Status, status); QDeclarativeComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/model.qml")); - model = qobject_cast(component.create()); - QVERIFY(model != 0); - QCOMPARE(model->status(), QDeclarativeXmlListModel::Loading); + QDeclarativeXmlListModel *model = qobject_cast(component.create()); + QSignalSpy spy(model, SIGNAL(statusChanged(QDeclarativeXmlListModel::Status))); - QTRY_COMPARE(model->count(), 9); + QCOMPARE(model->progress(), qreal(0.0)); + QCOMPARE(model->status(), QDeclarativeXmlListModel::Loading); + QTRY_COMPARE(spy.count(), 1); spy.clear(); QCOMPARE(model->status(), QDeclarativeXmlListModel::Ready); + QCOMPARE(model->progress(), qreal(1.0)); + QCOMPARE(model->count(), 9); + + model->setSource(source); + QCOMPARE(model->progress(), qreal(0.0)); + QTRY_COMPARE(spy.count(), 1); spy.clear(); + QCOMPARE(model->status(), QDeclarativeXmlListModel::Loading); + QTRY_COMPARE(spy.count(), 1); spy.clear(); + QCOMPARE(model->status(), status); + QCOMPARE(model->count(), count); + if (status == QDeclarativeXmlListModel::Ready) + QCOMPARE(model->progress(), qreal(1.0)); delete model; } +void tst_qdeclarativexmllistmodel::source_data() +{ + QTest::addColumn("source"); + QTest::addColumn("count"); + QTest::addColumn("status"); + + QTest::newRow("valid") << QUrl::fromLocalFile(SRCDIR "/data/model2.xml") << 2 << QDeclarativeXmlListModel::Ready; + QTest::newRow("invalid") << QUrl("http://blah.blah/blah.xml") << 0 << QDeclarativeXmlListModel::Error; + + // empty file + QTemporaryFile *temp = new QTemporaryFile(this); + if (temp->open()) + QTest::newRow("empty file") << QUrl::fromLocalFile(temp->fileName()) << 0 << QDeclarativeXmlListModel::Ready; + temp->close(); +} + void tst_qdeclarativexmllistmodel::data() { QDeclarativeComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/model.qml")); -- cgit v0.12 From 921d6882caa4f4be78c747493295d3bdd3f1f673 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Fri, 26 Mar 2010 13:49:07 +1000 Subject: Cleanup. --- src/declarative/util/qdeclarativeanimation_p_p.h | 26 ++++-------------------- src/declarative/util/qdeclarativebehavior.cpp | 12 ++++------- 2 files changed, 8 insertions(+), 30 deletions(-) diff --git a/src/declarative/util/qdeclarativeanimation_p_p.h b/src/declarative/util/qdeclarativeanimation_p_p.h index 3908e50..2a66c8a 100644 --- a/src/declarative/util/qdeclarativeanimation_p_p.h +++ b/src/declarative/util/qdeclarativeanimation_p_p.h @@ -100,17 +100,11 @@ class QActionAnimation : public QAbstractAnimation { Q_OBJECT public: - QActionAnimation(QObject *parent = 0) : QAbstractAnimation(parent), animAction(0), policy(KeepWhenStopped), running(false) {} + QActionAnimation(QObject *parent = 0) : QAbstractAnimation(parent), animAction(0), policy(KeepWhenStopped) {} QActionAnimation(QAbstractAnimationAction *action, QObject *parent = 0) - : QAbstractAnimation(parent), animAction(action), policy(KeepWhenStopped), running(false) {} + : QAbstractAnimation(parent), animAction(action), policy(KeepWhenStopped) {} ~QActionAnimation() { if (policy == DeleteWhenStopped) { delete animAction; animAction = 0; } } virtual int duration() const { return 0; } - void clearAnimAction() - { - if (policy == DeleteWhenStopped) - delete animAction; - animAction = 0; - } void setAnimAction(QAbstractAnimationAction *action, DeletionPolicy p) { if (state() == Running) @@ -127,26 +121,18 @@ protected: { if (newState == Running) { if (animAction) { - running = true; animAction->doAction(); - running = false; if (state() == Stopped && policy == DeleteWhenStopped) { delete animAction; animAction = 0; } } - } /*else if (newState == Stopped && policy == DeleteWhenStopped) { - if (!running) { - delete animAction; - animAction = 0; - } - }*/ + } } private: QAbstractAnimationAction *animAction; DeletionPolicy policy; - bool running; }; class QDeclarativeBulkValueUpdater @@ -192,11 +178,7 @@ protected: //check for new from every loop if (fromSourced) *fromSourced = false; - } /*else if (newState == Stopped && policy == DeleteWhenStopped) { - delete animValue; - animValue = 0; - }*/ //### we get a stop each loop if we are in a group - //### top-level animation is the only reliable one for this + } } private: diff --git a/src/declarative/util/qdeclarativebehavior.cpp b/src/declarative/util/qdeclarativebehavior.cpp index 1e000df..7181777 100644 --- a/src/declarative/util/qdeclarativebehavior.cpp +++ b/src/declarative/util/qdeclarativebehavior.cpp @@ -47,15 +47,12 @@ #include #include #include - -#include +#include #include QT_BEGIN_NAMESPACE - - class QDeclarativeBehaviorPrivate : public QObjectPrivate { Q_DECLARE_PUBLIC(QDeclarativeBehavior) @@ -64,7 +61,7 @@ public: QDeclarativeProperty property; QVariant currentValue; - QDeclarativeAbstractAnimation *animation; + QDeclarativeGuard animation; bool enabled; }; @@ -176,11 +173,10 @@ void QDeclarativeBehavior::write(const QVariant &value) actions << action; QList after; - if (d->animation) - d->animation->transition(actions, after, QDeclarativeAbstractAnimation::Forward); + d->animation->transition(actions, after, QDeclarativeAbstractAnimation::Forward); d->animation->qtAnimation()->start(); if (!after.contains(d->property)) - QDeclarativePropertyPrivate::write(d->property, value, QDeclarativePropertyPrivate::BypassInterceptor | QDeclarativePropertyPrivate::DontRemoveBinding); + QDeclarativePropertyPrivate::write(d->property, value, QDeclarativePropertyPrivate::BypassInterceptor | QDeclarativePropertyPrivate::DontRemoveBinding); } void QDeclarativeBehavior::setTarget(const QDeclarativeProperty &property) -- cgit v0.12 From 078ff776e37aebe5b7e88e4b4f21da1158fac3c7 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Fri, 26 Mar 2010 14:29:19 +1000 Subject: Autotest tweaks. --- .../tst_qdeclarativebehaviors.cpp | 30 ++++++++++++++++++++++ .../qdeclarativebinding/data/test-binding.qml | 2 +- .../tst_qdeclarativebinding.cpp | 8 +++++- .../qdeclarativeimage/tst_qdeclarativeimage.cpp | 3 +++ .../qdeclarativeloader/tst_qdeclarativeloader.cpp | 4 +++ 5 files changed, 45 insertions(+), 2 deletions(-) diff --git a/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp b/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp index 0bf0b81..26c8231 100644 --- a/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp +++ b/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp @@ -82,6 +82,8 @@ void tst_qdeclarativebehaviors::simpleBehavior() QTest::qWait(200); qreal x = qobject_cast(rect->findChild("MyRect"))->x(); QVERIFY(x > 0 && x < 200); //i.e. the behavior has been triggered + + delete rect; } void tst_qdeclarativebehaviors::scriptTriggered() @@ -95,6 +97,8 @@ void tst_qdeclarativebehaviors::scriptTriggered() QTest::qWait(200); qreal x = qobject_cast(rect->findChild("MyRect"))->x(); QVERIFY(x > 0 && x < 200); //i.e. the behavior has been triggered + + delete rect; } void tst_qdeclarativebehaviors::cppTriggered() @@ -111,6 +115,8 @@ void tst_qdeclarativebehaviors::cppTriggered() QTest::qWait(200); qreal x = innerRect->x(); QVERIFY(x > 0 && x < 200); //i.e. the behavior has been triggered + + delete rect; } void tst_qdeclarativebehaviors::loop() @@ -122,6 +128,8 @@ void tst_qdeclarativebehaviors::loop() //don't crash rect->setState("moved"); + + delete rect; } void tst_qdeclarativebehaviors::colorBehavior() @@ -135,6 +143,8 @@ void tst_qdeclarativebehaviors::colorBehavior() QTest::qWait(200); QColor color = qobject_cast(rect->findChild("MyRect"))->color(); QVERIFY(color != QColor("red") && color != QColor("green")); //i.e. the behavior has been triggered + + delete rect; } void tst_qdeclarativebehaviors::parentBehavior() @@ -152,6 +162,8 @@ void tst_qdeclarativebehaviors::parentBehavior() QTest::qWait(600); parent = rect->findChild("MyRect")->parentItem(); QVERIFY(parent == newParent); + + delete rect; } void tst_qdeclarativebehaviors::replaceBinding() @@ -186,6 +198,8 @@ void tst_qdeclarativebehaviors::replaceBinding() rect->setProperty("basex", 20); QTest::qWait(600); QCOMPARE(innerRect->x(), (qreal)20); + + delete rect; } void tst_qdeclarativebehaviors::group() @@ -200,6 +214,8 @@ void tst_qdeclarativebehaviors::group() QTest::qWait(200); qreal x = qobject_cast(rect->findChild("MyRect"))->x(); QVERIFY(x > 0 && x < 200); //i.e. the behavior has been triggered + + delete rect; } { @@ -212,6 +228,8 @@ void tst_qdeclarativebehaviors::group() QTest::qWait(200); qreal x = qobject_cast(rect->findChild("MyRect"))->x(); QVERIFY(x > 0 && x < 200); //i.e. the behavior has been triggered + + delete rect; } } @@ -225,6 +243,8 @@ void tst_qdeclarativebehaviors::emptyBehavior() rect->setState("moved"); qreal x = qobject_cast(rect->findChild("MyRect"))->x(); QCOMPARE(x, qreal(200)); //should change immediately + + delete rect; } void tst_qdeclarativebehaviors::explicitSelection() @@ -239,6 +259,8 @@ void tst_qdeclarativebehaviors::explicitSelection() QTest::qWait(200); qreal x = qobject_cast(rect->findChild("MyRect"))->x(); QVERIFY(x > 0 && x < 200); //i.e. the behavior has been triggered + + delete rect; } } @@ -253,6 +275,8 @@ void tst_qdeclarativebehaviors::nonSelectingBehavior() rect->setState("moved"); qreal x = qobject_cast(rect->findChild("MyRect"))->x(); QCOMPARE(x, qreal(200)); //should change immediately + + delete rect; } } @@ -266,6 +290,8 @@ void tst_qdeclarativebehaviors::reassignedAnimation() QCOMPARE(qobject_cast( qobject_cast( rect->findChild("MyBehavior"))->animation())->duration(), 200); + + delete rect; } void tst_qdeclarativebehaviors::disabled() @@ -279,6 +305,8 @@ void tst_qdeclarativebehaviors::disabled() rect->setState("moved"); qreal x = qobject_cast(rect->findChild("MyRect"))->x(); QCOMPARE(x, qreal(200)); //should change immediately + + delete rect; } void tst_qdeclarativebehaviors::dontStart() @@ -294,6 +322,8 @@ void tst_qdeclarativebehaviors::dontStart() QDeclarativeAbstractAnimation *myAnim = rect->findChild("MyAnim"); QVERIFY(myAnim && myAnim->qtAnimation()); QVERIFY(myAnim->qtAnimation()->state() == QAbstractAnimation::Stopped); + + delete rect; } QTEST_MAIN(tst_qdeclarativebehaviors) diff --git a/tests/auto/declarative/qdeclarativebinding/data/test-binding.qml b/tests/auto/declarative/qdeclarativebinding/data/test-binding.qml index e9101e4..8f5b39e 100644 --- a/tests/auto/declarative/qdeclarativebinding/data/test-binding.qml +++ b/tests/auto/declarative/qdeclarativebinding/data/test-binding.qml @@ -12,5 +12,5 @@ Rectangle { Binding { target: screen; property: "text"; value: s1.text; objectName: "binding1" } Binding { target: screen; property: "color"; value: r1.color } - Binding { target: screen; property: "color"; when: screen.changeColor == true; value: r2.color } + Binding { target: screen; property: "color"; when: screen.changeColor == true; value: r2.color; objectName: "binding3" } } diff --git a/tests/auto/declarative/qdeclarativebinding/tst_qdeclarativebinding.cpp b/tests/auto/declarative/qdeclarativebinding/tst_qdeclarativebinding.cpp index 483d588..8ab7b0b 100644 --- a/tests/auto/declarative/qdeclarativebinding/tst_qdeclarativebinding.cpp +++ b/tests/auto/declarative/qdeclarativebinding/tst_qdeclarativebinding.cpp @@ -69,14 +69,20 @@ void tst_qdeclarativebinding::binding() QDeclarativeEngine engine; QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/test-binding.qml")); QDeclarativeRectangle *rect = qobject_cast(c.create()); - QVERIFY(rect != 0); + + QDeclarativeBind *binding3 = qobject_cast(rect->findChild("binding3")); + QVERIFY(binding3 != 0); + QCOMPARE(rect->color(), QColor("yellow")); QCOMPARE(rect->property("text").toString(), QString("Hello")); + QCOMPARE(binding3->when(), false); rect->setProperty("changeColor", true); QCOMPARE(rect->color(), QColor("red")); + QCOMPARE(binding3->when(), true); + QDeclarativeBind *binding = qobject_cast(rect->findChild("binding1")); QVERIFY(binding != 0); QCOMPARE(binding->object(), qobject_cast(rect)); diff --git a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp index bbf7421..c1bf2b8 100644 --- a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp +++ b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp @@ -156,6 +156,9 @@ void tst_qdeclarativeimage::imageSource() QDeclarativeImage *obj = qobject_cast(component.create()); QVERIFY(obj != 0); + if (async) + QVERIFY(obj->asynchronous() == true); + if (remote || async) TRY_WAIT(obj->status() == QDeclarativeImage::Loading); diff --git a/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp b/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp index a745a24..05d968c 100644 --- a/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp +++ b/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp @@ -129,6 +129,10 @@ void tst_QDeclarativeLoader::component() QCOMPARE(loader->status(), QDeclarativeLoader::Ready); QCOMPARE(static_cast(loader)->children().count(), 1); + QDeclarativeComponent *c = qobject_cast(item->QGraphicsObject::children().at(0)); + QVERIFY(c); + QCOMPARE(loader->sourceComponent(), c); + delete loader; } -- cgit v0.12 From fbcf257f0988f1ffef442195acc9f4b4c1527870 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Fri, 26 Mar 2010 15:57:19 +1000 Subject: Syntax and other small fixes for the visual tests. --- tests/auto/declarative/visual/ListView/basic3.qml | 2 +- tests/auto/declarative/visual/ListView/basic4.qml | 2 +- .../visual/Package_Views/packageviews.qml | 4 +- .../colorAnimation/data/colorAnimation.0.png | Bin 610 -> 627 bytes .../colorAnimation/data/colorAnimation.1.png | Bin 610 -> 626 bytes .../colorAnimation/data/colorAnimation.2.png | Bin 610 -> 625 bytes .../colorAnimation/data/colorAnimation.qml | 248 ++++++++++----------- .../declarative/visual/animation/loop/loop.qml | 2 +- .../animation/parentAnimation/parentAnimation.qml | 10 + .../animation/pauseAnimation/pauseAnimation.qml | 13 +- tests/auto/declarative/visual/focusscope/test3.qml | 2 +- .../content/MyBorderImage.qml | 4 +- .../visual/qdeclarativeeasefollow/easefollow.qml | 12 +- .../visual/qdeclarativegridview/gridview2.qml | 4 +- .../visual/qdeclarativespringfollow/clock.qml | 6 +- .../visual/qdeclarativespringfollow/follow.qml | 12 +- .../qdeclarativetextinput/cursorDelegate.qml | 14 +- .../visual/webview/zooming/renderControl.qml | 2 +- .../visual/webview/zooming/resolution.qml | 15 +- .../visual/webview/zooming/zoomTextOnly.qml | 11 +- .../declarative/visual/webview/zooming/zooming.qml | 6 +- 21 files changed, 192 insertions(+), 177 deletions(-) diff --git a/tests/auto/declarative/visual/ListView/basic3.qml b/tests/auto/declarative/visual/ListView/basic3.qml index 05ac358..2d68c0a 100644 --- a/tests/auto/declarative/visual/ListView/basic3.qml +++ b/tests/auto/declarative/visual/ListView/basic3.qml @@ -5,7 +5,7 @@ Rectangle { width: 200 height: 300 id: page - Listmodel { + ListModel { id: model ListElement { name: "January" diff --git a/tests/auto/declarative/visual/ListView/basic4.qml b/tests/auto/declarative/visual/ListView/basic4.qml index 3628bd3..7c68df1 100644 --- a/tests/auto/declarative/visual/ListView/basic4.qml +++ b/tests/auto/declarative/visual/ListView/basic4.qml @@ -5,7 +5,7 @@ Rectangle { width: 200 height: 300 id: page - Listmodel { + ListModel { id: model ListElement { name: "January" diff --git a/tests/auto/declarative/visual/Package_Views/packageviews.qml b/tests/auto/declarative/visual/Package_Views/packageviews.qml index cf3f9f7..f6c033f 100644 --- a/tests/auto/declarative/visual/Package_Views/packageviews.qml +++ b/tests/auto/declarative/visual/Package_Views/packageviews.qml @@ -6,9 +6,9 @@ Rectangle { height: 200 color: "black" - VisualDatamodel { + VisualDataModel { id: model - model: Listmodel { + model: ListModel { ListElement { itemColor: "red" } ListElement { itemColor: "green" } ListElement { itemColor: "blue" } diff --git a/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.0.png b/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.0.png index f4a6cfd..e6ea16d 100644 Binary files a/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.0.png and b/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.0.png differ diff --git a/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.1.png b/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.1.png index f4a6cfd..b75ba61 100644 Binary files a/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.1.png and b/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.1.png differ diff --git a/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.2.png b/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.2.png index f4a6cfd..4320f6f 100644 Binary files a/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.2.png and b/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.2.png differ diff --git a/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.qml b/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.qml index 900bf5c..4d0959a 100644 --- a/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.qml +++ b/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.qml @@ -170,91 +170,91 @@ VisualTest { } Frame { msec: 608 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "acc736435c9f84aa82941ba561bc5dbc" } Frame { msec: 624 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "e5bda0daf98288ce18db6ce06eda3ba0" } Frame { msec: 640 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "d35008f75b8c992f80fb16ba7203649d" } Frame { msec: 656 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "14f43e0784ddf42ea8550db88c501bf1" } Frame { msec: 672 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "02276e158b5391480b1bdeaadf1fb903" } Frame { msec: 688 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "35d9513eb97a2c482b7cd197de910934" } Frame { msec: 704 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "faf0fd681e60bb2489099f5df772b6cd" } Frame { msec: 720 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "a863d3e346f94785a3a392fdc91526eb" } Frame { msec: 736 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "fdf328d3f6eb8410da59a91345e41a44" } Frame { msec: 752 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "83514a3b10d5be8f6c3b128d0f3e0b1c" } Frame { msec: 768 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "ead0eae76cd00189075964671effbaea" } Frame { msec: 784 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "24d2457fcd51490fda23071bf9929d12" } Frame { msec: 800 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "1478683446cf543dacbe31d0b76a98a6" } Frame { msec: 816 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "99f7da1f31fe920f6c02add4042ae925" } Frame { msec: 832 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "22def892006cf66667770b0f17baf6c0" } Frame { msec: 848 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "6a36d5a77099bfd58baf285478ff04e4" } Frame { msec: 864 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "6258150666b59b20ab476724c07fc20c" } Frame { msec: 880 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "f1636315bc950a6dd400d9c7ed263b88" } Frame { msec: 896 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "18447ea8dc2e8da956788e5b3cf3790a" } Frame { msec: 912 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "1d2a6e65997a73e9e670356c8e8b63b2" } Frame { msec: 928 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "bed0242c0f9ef229d1392835286d5782" } Frame { msec: 944 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "88923c190e9e5beadef8a409c06df9d6" } Frame { msec: 960 @@ -262,239 +262,239 @@ VisualTest { } Frame { msec: 976 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "85b1821cc50f2a9f3ed6944f792b7a2f" } Frame { msec: 992 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "395195716d76bc0be7b2033ed37a7a1c" } Frame { msec: 1008 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "243dbffcf416926242bbcb7348974c4c" } Frame { msec: 1024 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "a755068679616d8ac65c2aa7431f2a19" } Frame { msec: 1040 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "e8249b35a47eb492cbdf2d91cc8426f0" } Frame { msec: 1056 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "15f3da1c0e6f0779b96859d51171dd27" } Frame { msec: 1072 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "258c0c756aac3de743b43051f2aace6b" } Frame { msec: 1088 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "a58b9fdf301d72b2cc5c93934cc8927b" } Frame { msec: 1104 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "a9181d30870d472521f8904818ce520f" } Frame { msec: 1120 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "7f9e94069ccf3897c26a71bd7becd903" } Frame { msec: 1136 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "bdf305c2f46cdb86dbf57b1e0cc5a65b" } Frame { msec: 1152 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "fe5b6865d7e4fc7d1d42c1e74f8666f7" } Frame { msec: 1168 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "734f0de45a6e34c9eab7ef606196f96a" } Frame { msec: 1184 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "02a361c4534fdf7f286dc3e6dc23275c" } Frame { msec: 1200 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "e649155ad69999c14b92f6561e4d1185" } Frame { msec: 1216 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "01af177084fab755d622973f64b92018" } Frame { msec: 1232 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "097cc4a082dfab995d213a3a73883c97" } Frame { msec: 1248 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "d7b4239a3280b1eb8e885e3f422df8e9" } Frame { msec: 1264 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "59893977994e34e83f91e7ce3ad65d6d" } Frame { msec: 1280 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "b68e3fbb5cdcd6bd96df7dec558db42b" } Frame { msec: 1296 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "94ad0580648f36a1e18a9ea7e249b04d" } Frame { msec: 1312 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "750a4c01d2f5806a89a1c6cc6a9b9a68" } Frame { msec: 1328 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "4f109f50f388f1bfa4bc6b03b3e6e514" } Frame { msec: 1344 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "c6168d5cf27a533e8ee636637667be47" } Frame { msec: 1360 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "f8120547bed987aa34c00da5a01a4d1e" } Frame { msec: 1376 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "cbff526136fa2c128c8b898fbbef9e5c" } Frame { msec: 1392 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "f29e52398fab1a239a63df4c32f2fc69" } Frame { msec: 1408 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "7178bfe86fd2fd513218b33760460f8d" } Frame { msec: 1424 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "ca83285bc8ac633403896fe976896eb0" } Frame { msec: 1440 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "96ba486c09cc69d5aa38c46c00df1181" } Frame { msec: 1456 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "b88eab335842787869f4a14824c19dd8" } Frame { msec: 1472 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "065aa59012729e1e1a246a2083142690" } Frame { msec: 1488 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "dd0e98c8398861002c5f178c5f9f612d" } Frame { msec: 1504 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "04192c2b545948048eccf4d81bbde198" } Frame { msec: 1520 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "bb7502c7208281ef9fd41714ab88a1a8" } Frame { msec: 1536 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "5397195471890d08b703dca101e5bc7c" } Frame { msec: 1552 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "4c678cdbebb2ffd2cbf012ca77800cde" } Frame { msec: 1568 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "0d7a34ecd0c7f52b2c015037bf1902c6" } Frame { msec: 1584 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "fd9d5048be749ac4369fda2d018b43ae" } Frame { msec: 1600 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "93ee03795cd57ae6f7fe3a020b039ad4" } Frame { msec: 1616 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "5e1118963f219c39761ca7fbf564a9ca" } Frame { msec: 1632 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "8f40038741903150136170503649d941" } Frame { msec: 1648 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "b087b7d0aa6224821f8e18718ff5e77d" } Frame { msec: 1664 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "aa46b04a3c67dc772265ed2901955565" } Frame { msec: 1680 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "ac024bf2aeb4becdf31a09fe0a6db8f3" } Frame { msec: 1696 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "13745a174e4d06e2108a5bf125ba50cc" } Frame { msec: 1712 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "bd972f0d8e230eca0b3fea1b8c960c08" } Frame { msec: 1728 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "cbdbec802a58e7ced0cf45b3ab0bc0ba" } Frame { msec: 1744 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "5128584c50305c7d218b81b8367fa3d5" } Frame { msec: 1760 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "a71461d3593f3685620668916de870bd" } Frame { msec: 1776 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "74ebac8f32cf044b58d9883dbcd9a722" } Frame { msec: 1792 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "fedc5b638f339b90fe59b478721e65b7" } Frame { msec: 1808 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "8593a81be812edf54ec94da8ae9c1314" } Frame { msec: 1824 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "4e9b083075bc5e9287a8abc982778b56" } Frame { msec: 1840 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "1d6f02aa99afa47d77fc49ab894b365a" } Frame { msec: 1856 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "a204feec783b3b05de4c209c21745826" } Frame { msec: 1872 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "665a2a8ff00b9663157802767f504754" } Frame { msec: 1888 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "624fb09ebe60cb87d767faf8d2420b1e" } Frame { msec: 1904 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "e5af0cdc33f3275a25abb09e9165f310" } Frame { msec: 1920 @@ -502,171 +502,171 @@ VisualTest { } Frame { msec: 1936 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "e7aa6374c73832e57ceb2427a1e258aa" } Frame { msec: 1952 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "b5abd0dff1ab076faac7cc226e83f5d0" } Frame { msec: 1968 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "b759acc35bccff8efc2e6fe276ddc0f7" } Frame { msec: 1984 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "ce52e18c1f7732768779863b45314ff5" } Frame { msec: 2000 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "99d30652559dd6931e0c95543eeaa149" } Frame { msec: 2016 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "ffbd9a00e05e085b89296d19d5caec57" } Frame { msec: 2032 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "9c9d658b9c25602816b8066bf19105db" } Frame { msec: 2048 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "2b7fd058e6601e22a30bb7106b1c683b" } Frame { msec: 2064 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "f4c7e26b19ee0a3e7c9688685eb7bd05" } Frame { msec: 2080 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "0dc6d593bceff56b7f81f2a49d37fefb" } Frame { msec: 2096 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "9bfd7ad5091ccbdde43c593e133a7b10" } Frame { msec: 2112 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "2703b617937914a90ea42ebf249d79ee" } Frame { msec: 2128 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "b77e2983138254016c4cca53100f46fa" } Frame { msec: 2144 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "60c4dd24187d1281081479e586f02b37" } Frame { msec: 2160 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "62f2511abd99ef1231c9fa4b91d4abfe" } Frame { msec: 2176 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "e309b3353fd174e883d309571caddc98" } Frame { msec: 2192 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "1e2d6a134c7b12dde551b148ef4f088c" } Frame { msec: 2208 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "e5dc5450604a491cc24a0dcf5c278b58" } Frame { msec: 2224 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "c8dae97c10e1962c1e6a51ab3ab8579e" } Frame { msec: 2240 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "4e1b7e06f55fb084080689b474f1fe1d" } Frame { msec: 2256 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "b4639c907fa937bf15fac62421170cd8" } Frame { msec: 2272 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "c250208a0caeb5f6cb4d3aac3d7d350b" } Frame { msec: 2288 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "a73351eabecf0d71149efe31f197413e" } Frame { msec: 2304 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "479425f1b7aff79e4dfb7fca534af018" } Frame { msec: 2320 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "046d0f0040a52d1f26ba9f7c5de06ef4" } Frame { msec: 2336 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "655778bf13c6080903150b0eb43a7edc" } Frame { msec: 2352 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "72da0bbe81514870655fdd3354adac60" } Frame { msec: 2368 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "defe0bdf675c65fff55aaaced1e4dae7" } Frame { msec: 2384 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "c988628b6c3d3780e9a865c7694926cd" } Frame { msec: 2400 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "5ab17563655231089edd986ff13d6012" } Frame { msec: 2416 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "c1adff1d2e5800ed466d1691d3b17382" } Frame { msec: 2432 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "70129ba01fbb19592b9dc0d0a3b3e7df" } Frame { msec: 2448 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "0000829ef7ed908bf430d42904d59cc2" } Frame { msec: 2464 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "843d2927f50ab87b4a86b7a6aaeed91f" } Frame { msec: 2480 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "da86d21756025e7de8050586d5e2a1f8" } Frame { msec: 2496 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "48dd1bd6580133b0793fee327ea4f1e6" } Frame { msec: 2512 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "f0618193dcd0ba2837249515a1898b1c" } Frame { msec: 2528 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "a530184e57251065286c0cbba7301e9c" } Frame { msec: 2544 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "64a1d7203973d65dd342793007a61c58" } Frame { msec: 2560 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "5b830dfc6ba442772de87d75d5a578de" } Frame { msec: 2576 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "5563b056b0409b65f60dd16dd0dd890e" } Frame { msec: 2592 - hash: "8c0fcda4f8956394c53fc4ba18caa850" + hash: "b8bcf9ad2ca8720c11563a23d8280804" } Frame { msec: 2608 @@ -931,7 +931,7 @@ VisualTest { Key { type: 6 key: 16777249 - modifiers: 0 + modifiers: 67108864 text: "" autorep: false count: 1 diff --git a/tests/auto/declarative/visual/animation/loop/loop.qml b/tests/auto/declarative/visual/animation/loop/loop.qml index 927e103..5389b26 100644 --- a/tests/auto/declarative/visual/animation/loop/loop.qml +++ b/tests/auto/declarative/visual/animation/loop/loop.qml @@ -13,7 +13,7 @@ Rectangle { to 100, jumps to 200, animates smoothly to 400, animates smoothly back to 100, jumps to 200, and so on. */ - x: SequentialAnimation { + SequentialAnimation on x { loops: Animation.Infinite NumberAnimation { to: 100; duration: 1000 } NumberAnimation { from: 200; to: 400; duration: 1000 } diff --git a/tests/auto/declarative/visual/animation/parentAnimation/parentAnimation.qml b/tests/auto/declarative/visual/animation/parentAnimation/parentAnimation.qml index 5db2cc6..8d0b375 100644 --- a/tests/auto/declarative/visual/animation/parentAnimation/parentAnimation.qml +++ b/tests/auto/declarative/visual/animation/parentAnimation/parentAnimation.qml @@ -1,4 +1,14 @@ import Qt 4.6 + +/* +This test shows a green rectangle moving and growing from the upper-left corner +of the black rectangle to the same position as the red rectangle (it should end up +the same height as the red rect and twice as wide). There should be no odd jumps or clipping seen. + +The test shows one full transition (to the red and back), then several partial transitions, and +then a final full transition. +*/ + Rectangle { width: 800; height: 480; diff --git a/tests/auto/declarative/visual/animation/pauseAnimation/pauseAnimation.qml b/tests/auto/declarative/visual/animation/pauseAnimation/pauseAnimation.qml index 4562aa7..8830170 100644 --- a/tests/auto/declarative/visual/animation/pauseAnimation/pauseAnimation.qml +++ b/tests/auto/declarative/visual/animation/pauseAnimation/pauseAnimation.qml @@ -1,5 +1,12 @@ import Qt 4.6 +/* +This test shows a bouncing logo. +When the test starts the logo should be resting at the bottom. It should immediately move +to the top, and then fall down to bounce at the bottom. There should be a pause, and then +one repeat of the sequence. +*/ + Rectangle { id: rect width: 120 @@ -9,15 +16,15 @@ Rectangle { id: img source: "pics/qtlogo.png" x: 60-width/2 - y: 200-height - y: SequentialAnimation { + y: 100 + SequentialAnimation on y { loops: Animation.Infinite NumberAnimation { to: 0; duration: 500 easing.type: "InOutQuad" } NumberAnimation { - to: 200-img.height + to: 100 easing.type: "OutBounce" duration: 2000 } diff --git a/tests/auto/declarative/visual/focusscope/test3.qml b/tests/auto/declarative/visual/focusscope/test3.qml index 855bdc5..a8bb523 100644 --- a/tests/auto/declarative/visual/focusscope/test3.qml +++ b/tests/auto/declarative/visual/focusscope/test3.qml @@ -5,7 +5,7 @@ Rectangle { width: 800 height: 600 - Listmodel { + ListModel { id: model ListElement { name: "1" } ListElement { name: "2" } diff --git a/tests/auto/declarative/visual/qdeclarativeborderimage/content/MyBorderImage.qml b/tests/auto/declarative/visual/qdeclarativeborderimage/content/MyBorderImage.qml index c3006d5..58d03a6 100644 --- a/tests/auto/declarative/visual/qdeclarativeborderimage/content/MyBorderImage.qml +++ b/tests/auto/declarative/visual/qdeclarativeborderimage/content/MyBorderImage.qml @@ -18,13 +18,13 @@ Item { BorderImage { id: image; x: container.width / 2 - width / 2; y: container.height / 2 - height / 2 - width: SequentialAnimation { + SequentialAnimation on width { loops: Animation.Infinite NumberAnimation { from: container.minWidth; to: container.maxWidth; duration: 2000; easing.type: "InOutQuad"} NumberAnimation { from: container.maxWidth; to: container.minWidth; duration: 2000; easing.type: "InOutQuad" } } - height: SequentialAnimation { + SequentialAnimation on height { loops: Animation.Infinite NumberAnimation { from: container.minHeight; to: container.maxHeight; duration: 2000; easing.type: "InOutQuad"} NumberAnimation { from: container.maxHeight; to: container.minHeight; duration: 2000; easing.type: "InOutQuad" } diff --git a/tests/auto/declarative/visual/qdeclarativeeasefollow/easefollow.qml b/tests/auto/declarative/visual/qdeclarativeeasefollow/easefollow.qml index 99a9973..121328b 100644 --- a/tests/auto/declarative/visual/qdeclarativeeasefollow/easefollow.qml +++ b/tests/auto/declarative/visual/qdeclarativeeasefollow/easefollow.qml @@ -6,7 +6,7 @@ Rectangle { Rectangle { id: rect width: 50; height: 20; y: 30; color: "black" - x: SequentialAnimation { + SequentialAnimation on x { loops: Animation.Infinite NumberAnimation { from: 50; to: 700; duration: 2000 } NumberAnimation { from: 700; to: 50; duration: 2000 } @@ -15,26 +15,26 @@ Rectangle { Rectangle { width: 50; height: 20; y: 60; color: "red" - x: EaseFollow { source: rect.x; velocity: 400 } + EaseFollow on x { source: rect.x; velocity: 400 } } Rectangle { width: 50; height: 20; y: 90; color: "yellow" - x: EaseFollow { source: rect.x; velocity: 300; reversingMode: EaseFollow.Immediate } + EaseFollow on x { source: rect.x; velocity: 300; reversingMode: EaseFollow.Immediate } } Rectangle { width: 50; height: 20; y: 120; color: "green" - x: EaseFollow { source: rect.x; reversingMode: EaseFollow.Sync } + EaseFollow on x { source: rect.x; reversingMode: EaseFollow.Sync } } Rectangle { width: 50; height: 20; y: 150; color: "purple" - x: EaseFollow { source: rect.x; maximumEasingTime: 200 } + EaseFollow on x { source: rect.x; maximumEasingTime: 200 } } Rectangle { width: 50; height: 20; y: 180; color: "blue" - x: EaseFollow { source: rect.x; duration: 300 } + EaseFollow on x { source: rect.x; duration: 300 } } } diff --git a/tests/auto/declarative/visual/qdeclarativegridview/gridview2.qml b/tests/auto/declarative/visual/qdeclarativegridview/gridview2.qml index 81d06cf..f4fb863 100644 --- a/tests/auto/declarative/visual/qdeclarativegridview/gridview2.qml +++ b/tests/auto/declarative/visual/qdeclarativegridview/gridview2.qml @@ -49,8 +49,8 @@ Rectangle { Rectangle { color: "transparent"; border.color: "white"; border.width: 8; z: 3000 height: 100; width: 100; x: 4; y: 4 - x: EaseFollow { source: gridView.currentItem.x; velocity: 500 } - y: EaseFollow { source: gridView.currentItem.y; velocity: 500 } + EaseFollow on x { source: gridView.currentItem.x; velocity: 500 } + EaseFollow on y { source: gridView.currentItem.y; velocity: 500 } } ] } diff --git a/tests/auto/declarative/visual/qdeclarativespringfollow/clock.qml b/tests/auto/declarative/visual/qdeclarativespringfollow/clock.qml index 04bbabc..21bbc7f 100644 --- a/tests/auto/declarative/visual/qdeclarativespringfollow/clock.qml +++ b/tests/auto/declarative/visual/qdeclarativespringfollow/clock.qml @@ -23,7 +23,7 @@ Rectangle { transform: Rotation { id: hourRotation origin.x: 7.5; origin.y: 73; angle: 0 - angle: SpringFollow { + SpringFollow on angle { spring: 2; damping: 0.2; modulus: 360 source: (clock.hours * 30) + (clock.minutes * 0.5) } @@ -37,7 +37,7 @@ Rectangle { transform: Rotation { id: minuteRotation origin.x: 6.5; origin.y: 83; angle: 0 - angle: SpringFollow { + SpringFollow on angle { spring: 2; damping: 0.2; modulus: 360 source: clock.minutes * 6 } @@ -51,7 +51,7 @@ Rectangle { transform: Rotation { id: secondRotation origin.x: 2.5; origin.y: 80; angle: 0 - angle: SpringFollow { + SpringFollow on angle { spring: 5; damping: 0.25; modulus: 360 source: clock.seconds * 6 } diff --git a/tests/auto/declarative/visual/qdeclarativespringfollow/follow.qml b/tests/auto/declarative/visual/qdeclarativespringfollow/follow.qml index e9c94c7..1659bb7 100644 --- a/tests/auto/declarative/visual/qdeclarativespringfollow/follow.qml +++ b/tests/auto/declarative/visual/qdeclarativespringfollow/follow.qml @@ -7,7 +7,7 @@ Rectangle { id: rect color: "#00ff00" y: 200; width: 60; height: 20 - y: SequentialAnimation { + SequentialAnimation on y { loops: Animation.Infinite NumberAnimation { to: 20; duration: 500 @@ -26,7 +26,7 @@ Rectangle { color: "#ff0000" x: rect.width; width: rect.width; height: 20 y: 200 - y: SpringFollow { source: rect.y; velocity: 200 } + SpringFollow on y { source: rect.y; velocity: 200 } } // Spring @@ -34,13 +34,13 @@ Rectangle { color: "#ff0000" x: rect.width * 2; width: rect.width/2; height: 20 y: 200 - y: SpringFollow { source: rect.y; spring: 1.0; damping: 0.2 } + SpringFollow on y { source: rect.y; spring: 1.0; damping: 0.2 } } Rectangle { color: "#880000" x: rect.width * 2.5; width: rect.width/2; height: 20 y: 200 - y: SpringFollow { source: rect.y; spring: 1.0; damping: 0.2; mass: 3.0 } // "heavier" object + SpringFollow on y { source: rect.y; spring: 1.0; damping: 0.2; mass: 3.0 } // "heavier" object } // Follow mouse @@ -52,8 +52,8 @@ Rectangle { width: 20; height: 20 radius: 10 color: "#0000ff" - x: SpringFollow { id: f1; source: mouseRegion.mouseX-10; spring: 1.0; damping: 0.05; epsilon: 0.25 } - y: SpringFollow { id: f2; source: mouseRegion.mouseY-10; spring: 1.0; damping: 0.05; epsilon: 0.25 } + SpringFollow on x { id: f1; source: mouseRegion.mouseX-10; spring: 1.0; damping: 0.05; epsilon: 0.25 } + SpringFollow on y { id: f2; source: mouseRegion.mouseY-10; spring: 1.0; damping: 0.05; epsilon: 0.25 } states: [ State { name: "following" diff --git a/tests/auto/declarative/visual/qdeclarativetextinput/cursorDelegate.qml b/tests/auto/declarative/visual/qdeclarativetextinput/cursorDelegate.qml index 199f71f..09f16ab 100644 --- a/tests/auto/declarative/visual/qdeclarativetextinput/cursorDelegate.qml +++ b/tests/auto/declarative/visual/qdeclarativetextinput/cursorDelegate.qml @@ -3,17 +3,17 @@ import Qt 4.6 resources: [ Component { id: cursorA Item { id: cPage; - x: Behavior { NumberAnimation { } } - y: Behavior { NumberAnimation { } } - height: Behavior { NumberAnimation { duration: 200 } } + Behavior on x { NumberAnimation { } } + Behavior on y { NumberAnimation { } } + Behavior on height { NumberAnimation { duration: 200 } } Rectangle { id: cRectangle; color: "black"; y: 1; width: 1; height: parent.height-2; Rectangle { id:top; color: "black"; width: 3; height: 1; x: -1; y:0} Rectangle { id:bottom; color: "black"; width: 3; height: 1; x: -1; anchors.bottom: parent.bottom;} opacity: 1 - opacity: SequentialAnimation { running: cPage.parent.focus == true; loops: Animation.Infinite; - NumberAnimation { properties: "opacity"; to: 1; duration: 500; easing.type: "InQuad"} - NumberAnimation { properties: "opacity"; to: 0; duration: 500; easing.type: "OutQuad"} - } + SequentialAnimation on opacity { running: cPage.parent.focus == true; loops: Animation.Infinite; + NumberAnimation { properties: "opacity"; to: 1; duration: 500; easing.type: "InQuad"} + NumberAnimation { properties: "opacity"; to: 0; duration: 500; easing.type: "OutQuad"} + } } width: 1; } diff --git a/tests/auto/declarative/visual/webview/zooming/renderControl.qml b/tests/auto/declarative/visual/webview/zooming/renderControl.qml index bcbcf5c..52a569e 100644 --- a/tests/auto/declarative/visual/webview/zooming/renderControl.qml +++ b/tests/auto/declarative/visual/webview/zooming/renderControl.qml @@ -9,7 +9,7 @@ Rectangle { id: webview width: 400 url: "renderControl.html" - x: SequentialAnimation { + SequentialAnimation on x { loops: Animation.Infinite NumberAnimation { from: 100; to: 0; duration: 200 } PropertyAction { target: webview; property: "renderingEnabled"; value: false } diff --git a/tests/auto/declarative/visual/webview/zooming/resolution.qml b/tests/auto/declarative/visual/webview/zooming/resolution.qml index bce6744..d6c35d4 100644 --- a/tests/auto/declarative/visual/webview/zooming/resolution.qml +++ b/tests/auto/declarative/visual/webview/zooming/resolution.qml @@ -6,12 +6,11 @@ WebView { height: 250 * zoomFactor scale: 1/zoomFactor url: "resolution.html" - zoomFactor: - SequentialAnimation { - loops: Animation.Infinite - NumberAnimation { from: 1; to: 0.25; duration: 2000 } - NumberAnimation { from: 0.25; to: 1; duration: 2000 } - NumberAnimation { from: 1; to: 5; duration: 2000 } - NumberAnimation { from: 5; to: 1; duration: 2000 } - } + SequentialAnimation on zoomFactor { + loops: Animation.Infinite + NumberAnimation { from: 1; to: 0.25; duration: 2000 } + NumberAnimation { from: 0.25; to: 1; duration: 2000 } + NumberAnimation { from: 1; to: 5; duration: 2000 } + NumberAnimation { from: 5; to: 1; duration: 2000 } + } } diff --git a/tests/auto/declarative/visual/webview/zooming/zoomTextOnly.qml b/tests/auto/declarative/visual/webview/zooming/zoomTextOnly.qml index 6d51c8a..741450f 100644 --- a/tests/auto/declarative/visual/webview/zooming/zoomTextOnly.qml +++ b/tests/auto/declarative/visual/webview/zooming/zoomTextOnly.qml @@ -6,10 +6,9 @@ WebView { height: 250 url: "zoomTextOnly.html" settings.zoomTextOnly: true - zoomFactor: - SequentialAnimation { - loops: Animation.Infinite - NumberAnimation { from: 2; to: 0.25; duration: 1000 } - NumberAnimation { from: 0.25; to: 2; duration: 1000 } - } + SequentialAnimation on zoomFactor { + loops: Animation.Infinite + NumberAnimation { from: 2; to: 0.25; duration: 1000 } + NumberAnimation { from: 0.25; to: 2; duration: 1000 } + } } diff --git a/tests/auto/declarative/visual/webview/zooming/zooming.qml b/tests/auto/declarative/visual/webview/zooming/zooming.qml index 9f0b865..adbd7a5 100644 --- a/tests/auto/declarative/visual/webview/zooming/zooming.qml +++ b/tests/auto/declarative/visual/webview/zooming/zooming.qml @@ -7,9 +7,9 @@ import org.webkit 1.0 WebView { width: 200 height: 250 - x: Behavior { NumberAnimation { } } - y: Behavior { NumberAnimation { } } - scale: Behavior { NumberAnimation { } } + Behavior on x { NumberAnimation { } } + Behavior on y { NumberAnimation { } } + Behavior on scale { NumberAnimation { } } url: "zooming.html" preferredWidth: width preferredHeight: height -- cgit v0.12 From d81e74a5d40202ce17d31f71ae953a19ed7191dd Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Fri, 26 Mar 2010 16:03:37 +1000 Subject: Rename visual test to qmlvisual. --- .../auto/declarative/qmlvisual/ListView/basic1.qml | 27 + .../auto/declarative/qmlvisual/ListView/basic2.qml | 31 + .../auto/declarative/qmlvisual/ListView/basic3.qml | 29 + .../auto/declarative/qmlvisual/ListView/basic4.qml | 33 + .../qmlvisual/ListView/data-MAC/basic1.qml | 159 + .../qmlvisual/ListView/data-MAC/basic2.qml | 187 + .../qmlvisual/ListView/data-MAC/basic3.qml | 147 + .../qmlvisual/ListView/data-MAC/basic4.qml | 171 + .../qmlvisual/ListView/data-MAC/itemlist.0.png | Bin 0 -> 961 bytes .../qmlvisual/ListView/data-MAC/itemlist.1.png | Bin 0 -> 972 bytes .../qmlvisual/ListView/data-MAC/itemlist.2.png | Bin 0 -> 962 bytes .../qmlvisual/ListView/data-MAC/itemlist.3.png | Bin 0 -> 962 bytes .../qmlvisual/ListView/data-MAC/itemlist.4.png | Bin 0 -> 962 bytes .../qmlvisual/ListView/data-MAC/itemlist.5.png | Bin 0 -> 970 bytes .../qmlvisual/ListView/data-MAC/itemlist.6.png | Bin 0 -> 961 bytes .../qmlvisual/ListView/data-MAC/itemlist.qml | 2203 ++++++ .../qmlvisual/ListView/data-MAC/listview.0.png | Bin 0 -> 1510 bytes .../qmlvisual/ListView/data-MAC/listview.1.png | Bin 0 -> 1510 bytes .../qmlvisual/ListView/data-MAC/listview.10.png | Bin 0 -> 1588 bytes .../qmlvisual/ListView/data-MAC/listview.11.png | Bin 0 -> 1575 bytes .../qmlvisual/ListView/data-MAC/listview.12.png | Bin 0 -> 1502 bytes .../qmlvisual/ListView/data-MAC/listview.13.png | Bin 0 -> 1583 bytes .../qmlvisual/ListView/data-MAC/listview.14.png | Bin 0 -> 1681 bytes .../qmlvisual/ListView/data-MAC/listview.15.png | Bin 0 -> 1524 bytes .../qmlvisual/ListView/data-MAC/listview.16.png | Bin 0 -> 1510 bytes .../qmlvisual/ListView/data-MAC/listview.17.png | Bin 0 -> 1510 bytes .../qmlvisual/ListView/data-MAC/listview.18.png | Bin 0 -> 1510 bytes .../qmlvisual/ListView/data-MAC/listview.19.png | Bin 0 -> 1510 bytes .../qmlvisual/ListView/data-MAC/listview.2.png | Bin 0 -> 1627 bytes .../qmlvisual/ListView/data-MAC/listview.3.png | Bin 0 -> 1524 bytes .../qmlvisual/ListView/data-MAC/listview.4.png | Bin 0 -> 1678 bytes .../qmlvisual/ListView/data-MAC/listview.5.png | Bin 0 -> 1510 bytes .../qmlvisual/ListView/data-MAC/listview.6.png | Bin 0 -> 1573 bytes .../qmlvisual/ListView/data-MAC/listview.7.png | Bin 0 -> 1670 bytes .../qmlvisual/ListView/data-MAC/listview.8.png | Bin 0 -> 1658 bytes .../qmlvisual/ListView/data-MAC/listview.9.png | Bin 0 -> 1510 bytes .../qmlvisual/ListView/data-MAC/listview.qml | 3079 +++++++++ .../qmlvisual/ListView/data-X11/basic1.qml | 159 + .../qmlvisual/ListView/data-X11/basic2.qml | 187 + .../qmlvisual/ListView/data-X11/basic3.qml | 147 + .../qmlvisual/ListView/data-X11/basic4.qml | 171 + .../declarative/qmlvisual/ListView/data/basic1.qml | 159 + .../declarative/qmlvisual/ListView/data/basic2.qml | 187 + .../declarative/qmlvisual/ListView/data/basic3.qml | 147 + .../declarative/qmlvisual/ListView/data/basic4.qml | 171 + .../qmlvisual/ListView/data/itemlist.0.png | Bin 0 -> 961 bytes .../qmlvisual/ListView/data/itemlist.1.png | Bin 0 -> 972 bytes .../qmlvisual/ListView/data/itemlist.2.png | Bin 0 -> 962 bytes .../qmlvisual/ListView/data/itemlist.3.png | Bin 0 -> 962 bytes .../qmlvisual/ListView/data/itemlist.4.png | Bin 0 -> 962 bytes .../qmlvisual/ListView/data/itemlist.5.png | Bin 0 -> 970 bytes .../qmlvisual/ListView/data/itemlist.6.png | Bin 0 -> 961 bytes .../qmlvisual/ListView/data/itemlist.qml | 2203 ++++++ .../qmlvisual/ListView/data/listview.0.png | Bin 0 -> 1510 bytes .../qmlvisual/ListView/data/listview.1.png | Bin 0 -> 1510 bytes .../qmlvisual/ListView/data/listview.10.png | Bin 0 -> 1588 bytes .../qmlvisual/ListView/data/listview.11.png | Bin 0 -> 1575 bytes .../qmlvisual/ListView/data/listview.12.png | Bin 0 -> 1502 bytes .../qmlvisual/ListView/data/listview.13.png | Bin 0 -> 1583 bytes .../qmlvisual/ListView/data/listview.14.png | Bin 0 -> 1681 bytes .../qmlvisual/ListView/data/listview.15.png | Bin 0 -> 1524 bytes .../qmlvisual/ListView/data/listview.16.png | Bin 0 -> 1510 bytes .../qmlvisual/ListView/data/listview.17.png | Bin 0 -> 1510 bytes .../qmlvisual/ListView/data/listview.18.png | Bin 0 -> 1510 bytes .../qmlvisual/ListView/data/listview.19.png | Bin 0 -> 1510 bytes .../qmlvisual/ListView/data/listview.2.png | Bin 0 -> 1656 bytes .../qmlvisual/ListView/data/listview.3.png | Bin 0 -> 1524 bytes .../qmlvisual/ListView/data/listview.4.png | Bin 0 -> 1678 bytes .../qmlvisual/ListView/data/listview.5.png | Bin 0 -> 1510 bytes .../qmlvisual/ListView/data/listview.6.png | Bin 0 -> 1573 bytes .../qmlvisual/ListView/data/listview.7.png | Bin 0 -> 1669 bytes .../qmlvisual/ListView/data/listview.8.png | Bin 0 -> 1658 bytes .../qmlvisual/ListView/data/listview.9.png | Bin 0 -> 1510 bytes .../qmlvisual/ListView/data/listview.qml | 3079 +++++++++ .../declarative/qmlvisual/ListView/itemlist.qml | 40 + .../declarative/qmlvisual/ListView/listview.qml | 81 + .../Package_Views/data/packageviews.0.png | Bin 0 -> 714 bytes .../Package_Views/data/packageviews.1.png | Bin 0 -> 798 bytes .../Package_Views/data/packageviews.10.png | Bin 0 -> 773 bytes .../Package_Views/data/packageviews.11.png | Bin 0 -> 773 bytes .../Package_Views/data/packageviews.12.png | Bin 0 -> 754 bytes .../Package_Views/data/packageviews.13.png | Bin 0 -> 742 bytes .../Package_Views/data/packageviews.14.png | Bin 0 -> 733 bytes .../Package_Views/data/packageviews.15.png | Bin 0 -> 712 bytes .../Package_Views/data/packageviews.16.png | Bin 0 -> 730 bytes .../Package_Views/data/packageviews.17.png | Bin 0 -> 730 bytes .../Package_Views/data/packageviews.18.png | Bin 0 -> 730 bytes .../Package_Views/data/packageviews.19.png | Bin 0 -> 744 bytes .../Package_Views/data/packageviews.2.png | Bin 0 -> 757 bytes .../Package_Views/data/packageviews.20.png | Bin 0 -> 754 bytes .../Package_Views/data/packageviews.21.png | Bin 0 -> 721 bytes .../Package_Views/data/packageviews.22.png | Bin 0 -> 732 bytes .../Package_Views/data/packageviews.3.png | Bin 0 -> 813 bytes .../Package_Views/data/packageviews.4.png | Bin 0 -> 756 bytes .../Package_Views/data/packageviews.5.png | Bin 0 -> 752 bytes .../Package_Views/data/packageviews.6.png | Bin 0 -> 752 bytes .../Package_Views/data/packageviews.7.png | Bin 0 -> 774 bytes .../Package_Views/data/packageviews.8.png | Bin 0 -> 774 bytes .../Package_Views/data/packageviews.9.png | Bin 0 -> 754 bytes .../qmlvisual/Package_Views/data/packageviews.qml | 3751 +++++++++++ .../qmlvisual/Package_Views/packageviews.qml | 89 + .../bindinganimation/bindinganimation.qml | 40 + .../bindinganimation/data/bindinganimation.0.png | Bin 0 -> 817 bytes .../bindinganimation/data/bindinganimation.1.png | Bin 0 -> 815 bytes .../bindinganimation/data/bindinganimation.2.png | Bin 0 -> 817 bytes .../bindinganimation/data/bindinganimation.3.png | Bin 0 -> 815 bytes .../bindinganimation/data/bindinganimation.4.png | Bin 0 -> 813 bytes .../bindinganimation/data/bindinganimation.5.png | Bin 0 -> 815 bytes .../bindinganimation/data/bindinganimation.6.png | Bin 0 -> 817 bytes .../bindinganimation/data/bindinganimation.qml | 1655 +++++ .../animation/colorAnimation/colorAnimation.qml | 41 + .../colorAnimation/data/colorAnimation.0.png | Bin 0 -> 627 bytes .../colorAnimation/data/colorAnimation.1.png | Bin 0 -> 626 bytes .../colorAnimation/data/colorAnimation.2.png | Bin 0 -> 625 bytes .../colorAnimation/data/colorAnimation.qml | 951 +++ .../qmlvisual/animation/easing/data/easing.0.png | Bin 0 -> 3393 bytes .../qmlvisual/animation/easing/data/easing.1.png | Bin 0 -> 3381 bytes .../qmlvisual/animation/easing/data/easing.2.png | Bin 0 -> 3101 bytes .../qmlvisual/animation/easing/data/easing.3.png | Bin 0 -> 16542 bytes .../qmlvisual/animation/easing/data/easing.qml | 779 +++ .../qmlvisual/animation/easing/easing.qml | 193 + .../qmlvisual/animation/easing/pics/qtlogo.png | Bin 0 -> 2738 bytes .../qmlvisual/animation/loop/data/loop.0.png | Bin 0 -> 508 bytes .../qmlvisual/animation/loop/data/loop.1.png | Bin 0 -> 507 bytes .../qmlvisual/animation/loop/data/loop.2.png | Bin 0 -> 508 bytes .../qmlvisual/animation/loop/data/loop.3.png | Bin 0 -> 508 bytes .../qmlvisual/animation/loop/data/loop.4.png | Bin 0 -> 505 bytes .../qmlvisual/animation/loop/data/loop.5.png | Bin 0 -> 508 bytes .../qmlvisual/animation/loop/data/loop.qml | 1471 ++++ .../declarative/qmlvisual/animation/loop/loop.qml | 24 + .../parallelAnimation/data/parallelAnimation.0.png | Bin 0 -> 774 bytes .../parallelAnimation/data/parallelAnimation.1.png | Bin 0 -> 762 bytes .../parallelAnimation/data/parallelAnimation.2.png | Bin 0 -> 773 bytes .../parallelAnimation/data/parallelAnimation.qml | 463 ++ .../parallelAnimation/parallelAnimation.qml | 43 + .../parentAnimation/data/parentAnimation.0.png | Bin 0 -> 3742 bytes .../parentAnimation/data/parentAnimation.1.png | Bin 0 -> 3727 bytes .../parentAnimation/data/parentAnimation.2.png | Bin 0 -> 3742 bytes .../parentAnimation/data/parentAnimation.3.png | Bin 0 -> 3628 bytes .../parentAnimation/data/parentAnimation.4.png | Bin 0 -> 3610 bytes .../parentAnimation/data/parentAnimation.5.png | Bin 0 -> 3742 bytes .../parentAnimation/data/parentAnimation.qml | 1663 +++++ .../animation/parentAnimation/parentAnimation.qml | 68 + .../pauseAnimation/data/pauseAnimation.0.png | Bin 0 -> 3211 bytes .../pauseAnimation/data/pauseAnimation.1.png | Bin 0 -> 3214 bytes .../pauseAnimation/data/pauseAnimation.2.png | Bin 0 -> 3209 bytes .../pauseAnimation/data/pauseAnimation.3.png | Bin 0 -> 3211 bytes .../pauseAnimation/data/pauseAnimation.4.png | Bin 0 -> 3214 bytes .../pauseAnimation/data/pauseAnimation.5.png | Bin 0 -> 3214 bytes .../pauseAnimation/data/pauseAnimation.qml | 1619 +++++ .../animation/pauseAnimation/pauseAnimation.qml | 36 + .../animation/pauseAnimation/pics/qtlogo.png | Bin 0 -> 2738 bytes .../propertyAction/data/propertyAction.0.png | Bin 0 -> 1418 bytes .../propertyAction/data/propertyAction.1.png | Bin 0 -> 1430 bytes .../propertyAction/data/propertyAction.2.png | Bin 0 -> 1431 bytes .../propertyAction/data/propertyAction.qml | 939 +++ .../animation/propertyAction/propertyAction.qml | 34 + .../animation/reanchor/data/reanchor.0.png | Bin 0 -> 637 bytes .../animation/reanchor/data/reanchor.1.png | Bin 0 -> 642 bytes .../animation/reanchor/data/reanchor.2.png | Bin 0 -> 637 bytes .../animation/reanchor/data/reanchor.3.png | Bin 0 -> 637 bytes .../animation/reanchor/data/reanchor.4.png | Bin 0 -> 647 bytes .../animation/reanchor/data/reanchor.5.png | Bin 0 -> 637 bytes .../animation/reanchor/data/reanchor.6.png | Bin 0 -> 637 bytes .../animation/reanchor/data/reanchor.7.png | Bin 0 -> 637 bytes .../animation/reanchor/data/reanchor.8.png | Bin 0 -> 642 bytes .../qmlvisual/animation/reanchor/data/reanchor.qml | 2471 +++++++ .../qmlvisual/animation/reanchor/reanchor.qml | 69 + .../animation/scriptAction/data/scriptAction.0.png | Bin 0 -> 1418 bytes .../animation/scriptAction/data/scriptAction.1.png | Bin 0 -> 1431 bytes .../animation/scriptAction/data/scriptAction.qml | 535 ++ .../animation/scriptAction/scriptAction.qml | 35 + .../qmlvisual/fillmode/data/fillmode.0.png | Bin 0 -> 26099 bytes .../qmlvisual/fillmode/data/fillmode.qml | 279 + tests/auto/declarative/qmlvisual/fillmode/face.png | Bin 0 -> 905 bytes .../declarative/qmlvisual/fillmode/fillmode.qml | 16 + .../qmlvisual/focusscope/data-MAC/test.0.png | Bin 0 -> 14875 bytes .../qmlvisual/focusscope/data-MAC/test.1.png | Bin 0 -> 14875 bytes .../qmlvisual/focusscope/data-MAC/test.2.png | Bin 0 -> 14863 bytes .../qmlvisual/focusscope/data-MAC/test.3.png | Bin 0 -> 14877 bytes .../qmlvisual/focusscope/data-MAC/test.4.png | Bin 0 -> 14877 bytes .../qmlvisual/focusscope/data-MAC/test.5.png | Bin 0 -> 14877 bytes .../qmlvisual/focusscope/data-MAC/test.qml | 1599 +++++ .../qmlvisual/focusscope/data-MAC/test2.0.png | Bin 0 -> 5375 bytes .../qmlvisual/focusscope/data-MAC/test2.1.png | Bin 0 -> 5375 bytes .../qmlvisual/focusscope/data-MAC/test2.qml | 607 ++ .../qmlvisual/focusscope/data-MAC/test3.0.png | Bin 0 -> 12749 bytes .../qmlvisual/focusscope/data-MAC/test3.1.png | Bin 0 -> 12667 bytes .../qmlvisual/focusscope/data-MAC/test3.2.png | Bin 0 -> 12373 bytes .../qmlvisual/focusscope/data-MAC/test3.3.png | Bin 0 -> 12150 bytes .../qmlvisual/focusscope/data-MAC/test3.4.png | Bin 0 -> 11944 bytes .../qmlvisual/focusscope/data-MAC/test3.5.png | Bin 0 -> 12150 bytes .../qmlvisual/focusscope/data-MAC/test3.6.png | Bin 0 -> 12373 bytes .../qmlvisual/focusscope/data-MAC/test3.7.png | Bin 0 -> 12667 bytes .../qmlvisual/focusscope/data-MAC/test3.8.png | Bin 0 -> 12749 bytes .../qmlvisual/focusscope/data-MAC/test3.9.png | Bin 0 -> 12710 bytes .../qmlvisual/focusscope/data-MAC/test3.qml | 2879 ++++++++ .../qmlvisual/focusscope/data-X11/test.0.png | Bin 0 -> 11501 bytes .../qmlvisual/focusscope/data-X11/test.1.png | Bin 0 -> 11501 bytes .../qmlvisual/focusscope/data-X11/test.2.png | Bin 0 -> 11486 bytes .../qmlvisual/focusscope/data-X11/test.3.png | Bin 0 -> 11500 bytes .../qmlvisual/focusscope/data-X11/test.4.png | Bin 0 -> 11500 bytes .../qmlvisual/focusscope/data-X11/test.5.png | Bin 0 -> 11500 bytes .../qmlvisual/focusscope/data-X11/test.qml | 1599 +++++ .../qmlvisual/focusscope/data-X11/test2.0.png | Bin 0 -> 4656 bytes .../qmlvisual/focusscope/data-X11/test2.1.png | Bin 0 -> 4656 bytes .../qmlvisual/focusscope/data-X11/test2.qml | 607 ++ .../qmlvisual/focusscope/data-X11/test3.0.png | Bin 0 -> 10093 bytes .../qmlvisual/focusscope/data-X11/test3.1.png | Bin 0 -> 10051 bytes .../qmlvisual/focusscope/data-X11/test3.2.png | Bin 0 -> 9812 bytes .../qmlvisual/focusscope/data-X11/test3.3.png | Bin 0 -> 9625 bytes .../qmlvisual/focusscope/data-X11/test3.4.png | Bin 0 -> 9458 bytes .../qmlvisual/focusscope/data-X11/test3.5.png | Bin 0 -> 9645 bytes .../qmlvisual/focusscope/data-X11/test3.6.png | Bin 0 -> 9812 bytes .../qmlvisual/focusscope/data-X11/test3.7.png | Bin 0 -> 10051 bytes .../qmlvisual/focusscope/data-X11/test3.8.png | Bin 0 -> 10087 bytes .../qmlvisual/focusscope/data-X11/test3.9.png | Bin 0 -> 10072 bytes .../qmlvisual/focusscope/data-X11/test3.qml | 2879 ++++++++ .../qmlvisual/focusscope/data/test.0.png | Bin 0 -> 14836 bytes .../qmlvisual/focusscope/data/test.1.png | Bin 0 -> 14836 bytes .../qmlvisual/focusscope/data/test.2.png | Bin 0 -> 14821 bytes .../qmlvisual/focusscope/data/test.3.png | Bin 0 -> 14833 bytes .../qmlvisual/focusscope/data/test.4.png | Bin 0 -> 14833 bytes .../qmlvisual/focusscope/data/test.5.png | Bin 0 -> 14833 bytes .../declarative/qmlvisual/focusscope/data/test.qml | 1599 +++++ .../qmlvisual/focusscope/data/test2.0.png | Bin 0 -> 5359 bytes .../qmlvisual/focusscope/data/test2.1.png | Bin 0 -> 5359 bytes .../qmlvisual/focusscope/data/test2.qml | 607 ++ .../qmlvisual/focusscope/data/test3.0.png | Bin 0 -> 12616 bytes .../qmlvisual/focusscope/data/test3.1.png | Bin 0 -> 12538 bytes .../qmlvisual/focusscope/data/test3.2.png | Bin 0 -> 12257 bytes .../qmlvisual/focusscope/data/test3.3.png | Bin 0 -> 12035 bytes .../qmlvisual/focusscope/data/test3.4.png | Bin 0 -> 11877 bytes .../qmlvisual/focusscope/data/test3.5.png | Bin 0 -> 12046 bytes .../qmlvisual/focusscope/data/test3.6.png | Bin 0 -> 12257 bytes .../qmlvisual/focusscope/data/test3.7.png | Bin 0 -> 12538 bytes .../qmlvisual/focusscope/data/test3.8.png | Bin 0 -> 12616 bytes .../qmlvisual/focusscope/data/test3.9.png | Bin 0 -> 12581 bytes .../qmlvisual/focusscope/data/test3.qml | 2879 ++++++++ .../auto/declarative/qmlvisual/focusscope/test.qml | 76 + .../declarative/qmlvisual/focusscope/test2.qml | 40 + .../declarative/qmlvisual/focusscope/test3.qml | 52 + .../qdeclarativeborderimage/animated-smooth.qml | 55 + .../qmlvisual/qdeclarativeborderimage/animated.qml | 55 + .../qmlvisual/qdeclarativeborderimage/borders.qml | 18 + .../content/MyBorderImage.qml | 38 + .../qdeclarativeborderimage/content/bw.png | Bin 0 -> 1357 bytes .../content/colors-round.sci | 7 + .../content/colors-stretch.sci | 5 + .../qdeclarativeborderimage/content/colors.png | Bin 0 -> 1655 bytes .../data/animated-smooth.0.png | Bin 0 -> 61731 bytes .../data/animated-smooth.1.png | Bin 0 -> 98912 bytes .../data/animated-smooth.2.png | Bin 0 -> 48780 bytes .../data/animated-smooth.3.png | Bin 0 -> 32431 bytes .../data/animated-smooth.4.png | Bin 0 -> 35835 bytes .../data/animated-smooth.5.png | Bin 0 -> 79428 bytes .../data/animated-smooth.6.png | Bin 0 -> 45928 bytes .../data/animated-smooth.qml | 1823 +++++ .../qdeclarativeborderimage/data/animated.0.png | Bin 0 -> 23684 bytes .../qdeclarativeborderimage/data/animated.1.png | Bin 0 -> 29115 bytes .../qdeclarativeborderimage/data/animated.2.png | Bin 0 -> 27580 bytes .../qdeclarativeborderimage/data/animated.3.png | Bin 0 -> 14822 bytes .../qdeclarativeborderimage/data/animated.4.png | Bin 0 -> 21356 bytes .../qdeclarativeborderimage/data/animated.5.png | Bin 0 -> 31143 bytes .../qdeclarativeborderimage/data/animated.6.png | Bin 0 -> 26468 bytes .../qdeclarativeborderimage/data/animated.7.png | Bin 0 -> 16225 bytes .../qdeclarativeborderimage/data/animated.qml | 2091 ++++++ .../qdeclarativeborderimage/data/borders.0.png | Bin 0 -> 23029 bytes .../qdeclarativeborderimage/data/borders.1.png | Bin 0 -> 23029 bytes .../qdeclarativeborderimage/data/borders.2.png | Bin 0 -> 23029 bytes .../qdeclarativeborderimage/data/borders.3.png | Bin 0 -> 23029 bytes .../qdeclarativeborderimage/data/borders.4.png | Bin 0 -> 23029 bytes .../qdeclarativeborderimage/data/borders.qml | 1359 ++++ .../qdeclarativeeasefollow/data/easefollow.0.png | Bin 0 -> 1305 bytes .../qdeclarativeeasefollow/data/easefollow.1.png | Bin 0 -> 1306 bytes .../qdeclarativeeasefollow/data/easefollow.2.png | Bin 0 -> 1305 bytes .../qdeclarativeeasefollow/data/easefollow.3.png | Bin 0 -> 1303 bytes .../qdeclarativeeasefollow/data/easefollow.4.png | Bin 0 -> 1303 bytes .../qdeclarativeeasefollow/data/easefollow.5.png | Bin 0 -> 1305 bytes .../qdeclarativeeasefollow/data/easefollow.6.png | Bin 0 -> 1306 bytes .../qdeclarativeeasefollow/data/easefollow.qml | 1807 +++++ .../qdeclarativeeasefollow/easefollow.qml | 40 + .../data/flickable-horizontal.0.png | Bin 0 -> 1427 bytes .../data/flickable-horizontal.1.png | Bin 0 -> 1357 bytes .../data/flickable-horizontal.2.png | Bin 0 -> 1405 bytes .../data/flickable-horizontal.3.png | Bin 0 -> 1427 bytes .../data/flickable-horizontal.qml | 1199 ++++ .../data/flickable-vertical.0.png | Bin 0 -> 1951 bytes .../data/flickable-vertical.1.png | Bin 0 -> 1951 bytes .../data/flickable-vertical.10.png | Bin 0 -> 1952 bytes .../data/flickable-vertical.11.png | Bin 0 -> 1930 bytes .../data/flickable-vertical.12.png | Bin 0 -> 1974 bytes .../data/flickable-vertical.13.png | Bin 0 -> 1961 bytes .../data/flickable-vertical.14.png | Bin 0 -> 1959 bytes .../data/flickable-vertical.15.png | Bin 0 -> 1937 bytes .../data/flickable-vertical.16.png | Bin 0 -> 1618 bytes .../data/flickable-vertical.17.png | Bin 0 -> 1952 bytes .../data/flickable-vertical.18.png | Bin 0 -> 1952 bytes .../data/flickable-vertical.19.png | Bin 0 -> 1930 bytes .../data/flickable-vertical.2.png | Bin 0 -> 1976 bytes .../data/flickable-vertical.20.png | Bin 0 -> 1930 bytes .../data/flickable-vertical.21.png | Bin 0 -> 1947 bytes .../data/flickable-vertical.22.png | Bin 0 -> 1941 bytes .../data/flickable-vertical.23.png | Bin 0 -> 1951 bytes .../data/flickable-vertical.24.png | 0 .../data/flickable-vertical.3.png | Bin 0 -> 1987 bytes .../data/flickable-vertical.4.png | Bin 0 -> 1947 bytes .../data/flickable-vertical.5.png | Bin 0 -> 1975 bytes .../data/flickable-vertical.6.png | Bin 0 -> 1928 bytes .../data/flickable-vertical.7.png | Bin 0 -> 1928 bytes .../data/flickable-vertical.8.png | Bin 0 -> 1928 bytes .../data/flickable-vertical.9.png | Bin 0 -> 1928 bytes .../data/flickable-vertical.qml | 7037 ++++++++++++++++++++ .../qdeclarativeflickable/flickable-horizontal.qml | 37 + .../qdeclarativeflickable/flickable-vertical.qml | 91 + .../qdeclarativeflipable/data/test-flipable.0.png | Bin 0 -> 1090 bytes .../qdeclarativeflipable/data/test-flipable.1.png | Bin 0 -> 1134 bytes .../qdeclarativeflipable/data/test-flipable.2.png | Bin 0 -> 961 bytes .../qdeclarativeflipable/data/test-flipable.3.png | Bin 0 -> 1076 bytes .../qdeclarativeflipable/data/test-flipable.4.png | Bin 0 -> 1134 bytes .../qdeclarativeflipable/data/test-flipable.5.png | Bin 0 -> 969 bytes .../qdeclarativeflipable/data/test-flipable.qml | 1623 +++++ .../qdeclarativeflipable/test-flipable.qml | 79 + .../qdeclarativegridview/data/gridview.0.png | Bin 0 -> 1303 bytes .../qdeclarativegridview/data/gridview.1.png | Bin 0 -> 1317 bytes .../qdeclarativegridview/data/gridview.2.png | Bin 0 -> 1318 bytes .../qdeclarativegridview/data/gridview.3.png | Bin 0 -> 1306 bytes .../qdeclarativegridview/data/gridview.4.png | Bin 0 -> 1308 bytes .../qdeclarativegridview/data/gridview.5.png | Bin 0 -> 1303 bytes .../qdeclarativegridview/data/gridview.6.png | Bin 0 -> 1323 bytes .../qdeclarativegridview/data/gridview.7.png | Bin 0 -> 1325 bytes .../qdeclarativegridview/data/gridview.8.png | Bin 0 -> 1346 bytes .../qdeclarativegridview/data/gridview.9.png | Bin 0 -> 1303 bytes .../qdeclarativegridview/data/gridview.qml | 2859 ++++++++ .../qdeclarativegridview/data/gridview2.0.png | Bin 0 -> 1310 bytes .../qdeclarativegridview/data/gridview2.1.png | Bin 0 -> 1322 bytes .../qdeclarativegridview/data/gridview2.10.png | Bin 0 -> 1313 bytes .../qdeclarativegridview/data/gridview2.2.png | Bin 0 -> 1341 bytes .../qdeclarativegridview/data/gridview2.3.png | Bin 0 -> 1368 bytes .../qdeclarativegridview/data/gridview2.4.png | Bin 0 -> 1319 bytes .../qdeclarativegridview/data/gridview2.5.png | Bin 0 -> 1352 bytes .../qdeclarativegridview/data/gridview2.6.png | Bin 0 -> 1309 bytes .../qdeclarativegridview/data/gridview2.7.png | Bin 0 -> 1347 bytes .../qdeclarativegridview/data/gridview2.8.png | Bin 0 -> 1310 bytes .../qdeclarativegridview/data/gridview2.9.png | Bin 0 -> 1354 bytes .../qdeclarativegridview/data/gridview2.qml | 2479 +++++++ .../qmlvisual/qdeclarativegridview/gridview.qml | 51 + .../qmlvisual/qdeclarativegridview/gridview2.qml | 58 + .../qdeclarativemouseregion/data/drag.0.png | Bin 0 -> 1563 bytes .../qdeclarativemouseregion/data/drag.1.png | Bin 0 -> 1570 bytes .../qdeclarativemouseregion/data/drag.2.png | Bin 0 -> 1553 bytes .../qdeclarativemouseregion/data/drag.3.png | Bin 0 -> 1563 bytes .../qdeclarativemouseregion/data/drag.4.png | Bin 0 -> 1569 bytes .../qdeclarativemouseregion/data/drag.5.png | Bin 0 -> 1569 bytes .../qdeclarativemouseregion/data/drag.6.png | Bin 0 -> 1566 bytes .../qdeclarativemouseregion/data/drag.7.png | Bin 0 -> 1566 bytes .../qdeclarativemouseregion/data/drag.8.png | Bin 0 -> 1567 bytes .../qdeclarativemouseregion/data/drag.qml | 5207 +++++++++++++++ .../qdeclarativemouseregion/data/mouseregion.0.png | Bin 0 -> 471 bytes .../qdeclarativemouseregion/data/mouseregion.1.png | Bin 0 -> 474 bytes .../data/mouseregion.10.png | Bin 0 -> 479 bytes .../data/mouseregion.11.png | Bin 0 -> 479 bytes .../data/mouseregion.12.png | Bin 0 -> 479 bytes .../data/mouseregion.13.png | Bin 0 -> 479 bytes .../data/mouseregion.14.png | Bin 0 -> 479 bytes .../data/mouseregion.15.png | Bin 0 -> 479 bytes .../data/mouseregion.16.png | Bin 0 -> 1454 bytes .../data/mouseregion.17.png | Bin 0 -> 1454 bytes .../data/mouseregion.18.png | Bin 0 -> 1454 bytes .../data/mouseregion.19.png | Bin 0 -> 1454 bytes .../qdeclarativemouseregion/data/mouseregion.2.png | Bin 0 -> 474 bytes .../data/mouseregion.20.png | Bin 0 -> 1454 bytes .../data/mouseregion.21.png | Bin 0 -> 1454 bytes .../data/mouseregion.22.png | Bin 0 -> 1454 bytes .../qdeclarativemouseregion/data/mouseregion.3.png | Bin 0 -> 474 bytes .../qdeclarativemouseregion/data/mouseregion.4.png | Bin 0 -> 481 bytes .../qdeclarativemouseregion/data/mouseregion.5.png | Bin 0 -> 481 bytes .../qdeclarativemouseregion/data/mouseregion.6.png | Bin 0 -> 481 bytes .../qdeclarativemouseregion/data/mouseregion.7.png | Bin 0 -> 481 bytes .../qdeclarativemouseregion/data/mouseregion.8.png | Bin 0 -> 479 bytes .../qdeclarativemouseregion/data/mouseregion.9.png | Bin 0 -> 479 bytes .../qdeclarativemouseregion/data/mouseregion.qml | 5867 ++++++++++++++++ .../qmlvisual/qdeclarativemouseregion/drag.qml | 21 + .../qdeclarativemouseregion/mouseregion.qml | 124 + .../qdeclarativeparticles/data/particles.0.png | Bin 0 -> 10219 bytes .../qdeclarativeparticles/data/particles.1.png | Bin 0 -> 13469 bytes .../qdeclarativeparticles/data/particles.2.png | Bin 0 -> 14051 bytes .../qdeclarativeparticles/data/particles.qml | 775 +++ .../qmlvisual/qdeclarativeparticles/particles.qml | 54 + .../qmlvisual/qdeclarativeparticles/star.png | Bin 0 -> 262 bytes .../data/test-pathview-2.0.png | Bin 0 -> 2263 bytes .../data/test-pathview-2.1.png | Bin 0 -> 2329 bytes .../data/test-pathview-2.2.png | Bin 0 -> 2279 bytes .../data/test-pathview-2.3.png | Bin 0 -> 2263 bytes .../data/test-pathview-2.4.png | Bin 0 -> 2263 bytes .../data/test-pathview-2.5.png | Bin 0 -> 2308 bytes .../data/test-pathview-2.6.png | Bin 0 -> 2280 bytes .../qdeclarativepathview/data/test-pathview-2.qml | 2303 +++++++ .../qdeclarativepathview/data/test-pathview.0.png | Bin 0 -> 2321 bytes .../qdeclarativepathview/data/test-pathview.1.png | Bin 0 -> 2380 bytes .../qdeclarativepathview/data/test-pathview.2.png | Bin 0 -> 2315 bytes .../qdeclarativepathview/data/test-pathview.3.png | Bin 0 -> 2372 bytes .../qdeclarativepathview/data/test-pathview.4.png | Bin 0 -> 2327 bytes .../qdeclarativepathview/data/test-pathview.qml | 1495 +++++ .../qdeclarativepathview/test-pathview-2.qml | 62 + .../qdeclarativepathview/test-pathview.qml | 62 + .../qdeclarativepositioners/data/dynamic.0.png | Bin 0 -> 1429 bytes .../qdeclarativepositioners/data/dynamic.1.png | Bin 0 -> 1433 bytes .../qdeclarativepositioners/data/dynamic.2.png | Bin 0 -> 1431 bytes .../qdeclarativepositioners/data/dynamic.3.png | Bin 0 -> 1428 bytes .../qdeclarativepositioners/data/dynamic.4.png | Bin 0 -> 1432 bytes .../qdeclarativepositioners/data/dynamic.5.png | Bin 0 -> 1434 bytes .../qdeclarativepositioners/data/dynamic.qml | 1603 +++++ .../qdeclarativepositioners/data/repeater.0.png | Bin 0 -> 2790 bytes .../qdeclarativepositioners/data/repeater.qml | 339 + .../qmlvisual/qdeclarativepositioners/dynamic.qml | 65 + .../qmlvisual/qdeclarativepositioners/repeater.qml | 15 + .../qmlvisual/qdeclarativespringfollow/clock.qml | 64 + .../content/background.png | Bin 0 -> 46895 bytes .../qdeclarativespringfollow/content/center.png | Bin 0 -> 765 bytes .../qdeclarativespringfollow/content/clock.png | Bin 0 -> 20653 bytes .../qdeclarativespringfollow/content/hour.png | Bin 0 -> 625 bytes .../qdeclarativespringfollow/content/minute.png | Bin 0 -> 625 bytes .../qdeclarativespringfollow/content/second.png | Bin 0 -> 303 bytes .../qdeclarativespringfollow/data/clock.0.png | Bin 0 -> 17294 bytes .../qdeclarativespringfollow/data/clock.1.png | Bin 0 -> 17394 bytes .../qdeclarativespringfollow/data/clock.2.png | Bin 0 -> 17524 bytes .../qdeclarativespringfollow/data/clock.3.png | Bin 0 -> 17572 bytes .../qdeclarativespringfollow/data/clock.qml | 1135 ++++ .../qdeclarativespringfollow/data/follow.0.png | Bin 0 -> 959 bytes .../qdeclarativespringfollow/data/follow.1.png | Bin 0 -> 1244 bytes .../qdeclarativespringfollow/data/follow.10.png | Bin 0 -> 1299 bytes .../qdeclarativespringfollow/data/follow.2.png | Bin 0 -> 1224 bytes .../qdeclarativespringfollow/data/follow.3.png | Bin 0 -> 1243 bytes .../qdeclarativespringfollow/data/follow.4.png | Bin 0 -> 1230 bytes .../qdeclarativespringfollow/data/follow.5.png | Bin 0 -> 1231 bytes .../qdeclarativespringfollow/data/follow.6.png | Bin 0 -> 1239 bytes .../qdeclarativespringfollow/data/follow.7.png | Bin 0 -> 1241 bytes .../qdeclarativespringfollow/data/follow.8.png | Bin 0 -> 1237 bytes .../qdeclarativespringfollow/data/follow.9.png | Bin 0 -> 1229 bytes .../qdeclarativespringfollow/data/follow.qml | 1763 +++++ .../qmlvisual/qdeclarativespringfollow/follow.qml | 71 + .../baseline/data-X11/parentanchor.qml | 131 + .../baseline/data/parentanchor.qml | 131 + .../qdeclarativetext/baseline/parentanchor.qml | 14 + .../qdeclarativetext/elide/data-MAC/elide.0.png | Bin 0 -> 2276 bytes .../qdeclarativetext/elide/data-MAC/elide.qml | 279 + .../qdeclarativetext/elide/data-MAC/elide2.0.png | Bin 0 -> 4818 bytes .../qdeclarativetext/elide/data-MAC/elide2.1.png | Bin 0 -> 4089 bytes .../qdeclarativetext/elide/data-MAC/elide2.2.png | Bin 0 -> 3128 bytes .../qdeclarativetext/elide/data-MAC/elide2.3.png | Bin 0 -> 1963 bytes .../qdeclarativetext/elide/data-MAC/elide2.qml | 991 +++ .../elide/data-MAC/multilength.0.png | Bin 0 -> 736 bytes .../elide/data-MAC/multilength.qml | 303 + .../qdeclarativetext/elide/data-X11/elide.0.png | Bin 0 -> 1002 bytes .../qdeclarativetext/elide/data-X11/elide.qml | 279 + .../elide/data-X11/multilength.0.png | Bin 0 -> 596 bytes .../elide/data-X11/multilength.qml | 303 + .../qdeclarativetext/elide/data/elide.0.png | Bin 0 -> 1604 bytes .../qdeclarativetext/elide/data/elide.qml | 279 + .../qdeclarativetext/elide/data/elide2.0.png | Bin 0 -> 4818 bytes .../qdeclarativetext/elide/data/elide2.1.png | Bin 0 -> 4089 bytes .../qdeclarativetext/elide/data/elide2.2.png | Bin 0 -> 3128 bytes .../qdeclarativetext/elide/data/elide2.3.png | Bin 0 -> 1963 bytes .../qdeclarativetext/elide/data/elide2.qml | 991 +++ .../qmlvisual/qdeclarativetext/elide/elide.qml | 31 + .../qmlvisual/qdeclarativetext/elide/elide2.qml | 12 + .../qdeclarativetext/elide/multilength.qml | 19 + .../qdeclarativetext/font/data-MAC/plaintext.0.png | Bin 0 -> 103018 bytes .../qdeclarativetext/font/data-MAC/plaintext.qml | 351 + .../qdeclarativetext/font/data-MAC/richtext.0.png | Bin 0 -> 136492 bytes .../qdeclarativetext/font/data-MAC/richtext.qml | 359 + .../qdeclarativetext/font/data/plaintext.0.png | Bin 0 -> 94120 bytes .../qdeclarativetext/font/data/plaintext.qml | 351 + .../qdeclarativetext/font/data/richtext.0.png | Bin 0 -> 121122 bytes .../qdeclarativetext/font/data/richtext.qml | 359 + .../qmlvisual/qdeclarativetext/font/plaintext.qml | 85 + .../qmlvisual/qdeclarativetext/font/richtext.qml | 85 + .../qdeclarativetextedit/cursorDelegate.qml | 35 + .../data-MAC/cursorDelegate.0.png | Bin 0 -> 793 bytes .../data-MAC/cursorDelegate.1.png | Bin 0 -> 795 bytes .../data-MAC/cursorDelegate.2.png | Bin 0 -> 803 bytes .../data-MAC/cursorDelegate.3.png | Bin 0 -> 805 bytes .../data-MAC/cursorDelegate.4.png | Bin 0 -> 805 bytes .../data-MAC/cursorDelegate.5.png | Bin 0 -> 805 bytes .../data-MAC/cursorDelegate.6.png | Bin 0 -> 799 bytes .../data-MAC/cursorDelegate.7.png | Bin 0 -> 799 bytes .../data-MAC/cursorDelegate.8.png | Bin 0 -> 803 bytes .../data-MAC/cursorDelegate.qml | 3555 ++++++++++ .../qdeclarativetextedit/data-MAC/qt-669.0.png | Bin 0 -> 365 bytes .../qdeclarativetextedit/data-MAC/qt-669.1.png | Bin 0 -> 365 bytes .../qdeclarativetextedit/data-MAC/qt-669.2.png | Bin 0 -> 366 bytes .../qdeclarativetextedit/data-MAC/qt-669.3.png | Bin 0 -> 362 bytes .../qdeclarativetextedit/data-MAC/qt-669.qml | 1371 ++++ .../qdeclarativetextedit/data-X11/wrap.0.png | Bin 0 -> 1110 bytes .../qdeclarativetextedit/data-X11/wrap.1.png | Bin 0 -> 1110 bytes .../qdeclarativetextedit/data-X11/wrap.2.png | Bin 0 -> 1110 bytes .../qdeclarativetextedit/data-X11/wrap.3.png | Bin 0 -> 1110 bytes .../qdeclarativetextedit/data-X11/wrap.4.png | Bin 0 -> 1110 bytes .../qdeclarativetextedit/data-X11/wrap.5.png | Bin 0 -> 1110 bytes .../qdeclarativetextedit/data-X11/wrap.6.png | Bin 0 -> 1110 bytes .../qdeclarativetextedit/data-X11/wrap.qml | 2467 +++++++ .../qdeclarativetextedit/data/cursorDelegate.0.png | Bin 0 -> 3322 bytes .../qdeclarativetextedit/data/cursorDelegate.1.png | Bin 0 -> 3323 bytes .../qdeclarativetextedit/data/cursorDelegate.2.png | Bin 0 -> 3325 bytes .../qdeclarativetextedit/data/cursorDelegate.3.png | Bin 0 -> 3332 bytes .../qdeclarativetextedit/data/cursorDelegate.4.png | Bin 0 -> 3329 bytes .../qdeclarativetextedit/data/cursorDelegate.5.png | Bin 0 -> 3818 bytes .../qdeclarativetextedit/data/cursorDelegate.6.png | Bin 0 -> 3333 bytes .../qdeclarativetextedit/data/cursorDelegate.7.png | Bin 0 -> 3332 bytes .../qdeclarativetextedit/data/cursorDelegate.8.png | Bin 0 -> 3347 bytes .../qdeclarativetextedit/data/cursorDelegate.qml | 3555 ++++++++++ .../qdeclarativetextedit/data/qt-669.0.png | Bin 0 -> 4802 bytes .../qdeclarativetextedit/data/qt-669.1.png | Bin 0 -> 4804 bytes .../qdeclarativetextedit/data/qt-669.2.png | Bin 0 -> 4801 bytes .../qdeclarativetextedit/data/qt-669.3.png | Bin 0 -> 4791 bytes .../qmlvisual/qdeclarativetextedit/data/qt-669.qml | 1371 ++++ .../qmlvisual/qdeclarativetextedit/data/wrap.0.png | Bin 0 -> 1110 bytes .../qmlvisual/qdeclarativetextedit/data/wrap.1.png | Bin 0 -> 1110 bytes .../qmlvisual/qdeclarativetextedit/data/wrap.2.png | Bin 0 -> 1110 bytes .../qmlvisual/qdeclarativetextedit/data/wrap.3.png | Bin 0 -> 1110 bytes .../qmlvisual/qdeclarativetextedit/data/wrap.4.png | Bin 0 -> 1110 bytes .../qmlvisual/qdeclarativetextedit/data/wrap.5.png | Bin 0 -> 1110 bytes .../qmlvisual/qdeclarativetextedit/data/wrap.6.png | Bin 0 -> 1110 bytes .../qmlvisual/qdeclarativetextedit/data/wrap.qml | 2467 +++++++ .../qmlvisual/qdeclarativetextedit/qt-669.qml | 19 + .../qmlvisual/qdeclarativetextedit/wrap.qml | 21 + .../qdeclarativetextinput/cursorDelegate.qml | 35 + .../data-MAC/cursorDelegate.0.png | Bin 0 -> 793 bytes .../data-MAC/cursorDelegate.1.png | Bin 0 -> 796 bytes .../data-MAC/cursorDelegate.2.png | Bin 0 -> 804 bytes .../data-MAC/cursorDelegate.3.png | Bin 0 -> 805 bytes .../data-MAC/cursorDelegate.4.png | Bin 0 -> 805 bytes .../data-MAC/cursorDelegate.5.png | Bin 0 -> 805 bytes .../data-MAC/cursorDelegate.6.png | Bin 0 -> 801 bytes .../data-MAC/cursorDelegate.7.png | Bin 0 -> 802 bytes .../data-MAC/cursorDelegate.8.png | Bin 0 -> 802 bytes .../data-MAC/cursorDelegate.qml | 3379 ++++++++++ .../qdeclarativetextinput/data-X11/echoMode.0.png | Bin 0 -> 999 bytes .../qdeclarativetextinput/data-X11/echoMode.1.png | Bin 0 -> 1880 bytes .../qdeclarativetextinput/data-X11/echoMode.2.png | Bin 0 -> 2962 bytes .../qdeclarativetextinput/data-X11/echoMode.3.png | Bin 0 -> 2827 bytes .../qdeclarativetextinput/data-X11/echoMode.4.png | Bin 0 -> 2827 bytes .../qdeclarativetextinput/data-X11/echoMode.qml | 1043 +++ .../qdeclarativetextinput/data-X11/hAlign.0.png | Bin 0 -> 1245 bytes .../qdeclarativetextinput/data-X11/hAlign.qml | 107 + .../data/cursorDelegate.0.png | Bin 0 -> 3314 bytes .../data/cursorDelegate.1.png | Bin 0 -> 3377 bytes .../data/cursorDelegate.2.png | Bin 0 -> 3323 bytes .../data/cursorDelegate.3.png | Bin 0 -> 3325 bytes .../data/cursorDelegate.4.png | Bin 0 -> 3322 bytes .../data/cursorDelegate.5.png | Bin 0 -> 3322 bytes .../data/cursorDelegate.6.png | Bin 0 -> 3326 bytes .../data/cursorDelegate.7.png | Bin 0 -> 3814 bytes .../data/cursorDelegate.8.png | Bin 0 -> 3324 bytes .../qdeclarativetextinput/data/cursorDelegate.qml | 3379 ++++++++++ .../qdeclarativetextinput/data/echoMode.0.png | Bin 0 -> 999 bytes .../qdeclarativetextinput/data/echoMode.1.png | Bin 0 -> 1880 bytes .../qdeclarativetextinput/data/echoMode.2.png | Bin 0 -> 2962 bytes .../qdeclarativetextinput/data/echoMode.3.png | Bin 0 -> 2827 bytes .../qdeclarativetextinput/data/echoMode.4.png | Bin 0 -> 2827 bytes .../qdeclarativetextinput/data/echoMode.qml | 1043 +++ .../qdeclarativetextinput/data/hAlign.0.png | Bin 0 -> 1245 bytes .../qdeclarativetextinput/data/hAlign.qml | 107 + .../qmlvisual/qdeclarativetextinput/echoMode.qml | 10 + .../qmlvisual/qdeclarativetextinput/hAlign.qml | 39 + .../qmlvisual/qfxwebview/autosize/autosize.qml | 61 + .../qfxwebview/autosize/data-X11/autosize.0.png | Bin 0 -> 6886 bytes .../qfxwebview/autosize/data-X11/autosize.qml | 83 + .../qfxwebview/autosize/data/autosize.0.png | Bin 0 -> 6886 bytes .../qfxwebview/autosize/data/autosize.qml | 83 + .../declarative/qmlvisual/rect/GradientRect.qml | 25 + tests/auto/declarative/qmlvisual/rect/MyRect.qml | 21 + .../qmlvisual/rect/data/rect-painting.0.png | Bin 0 -> 29725 bytes .../qmlvisual/rect/data/rect-painting.qml | 287 + .../declarative/qmlvisual/rect/rect-painting.qml | 55 + .../auto/declarative/qmlvisual/repeater/basic1.qml | 27 + .../auto/declarative/qmlvisual/repeater/basic2.qml | 31 + .../auto/declarative/qmlvisual/repeater/basic3.qml | 29 + .../auto/declarative/qmlvisual/repeater/basic4.qml | 33 + .../qmlvisual/repeater/data-MAC/basic1.0.png | Bin 0 -> 1550 bytes .../qmlvisual/repeater/data-MAC/basic1.qml | 323 + .../qmlvisual/repeater/data-MAC/basic2.0.png | Bin 0 -> 1550 bytes .../qmlvisual/repeater/data-MAC/basic2.qml | 331 + .../qmlvisual/repeater/data-MAC/basic3.0.png | Bin 0 -> 1550 bytes .../qmlvisual/repeater/data-MAC/basic3.qml | 347 + .../qmlvisual/repeater/data-MAC/basic4.0.png | Bin 0 -> 1550 bytes .../qmlvisual/repeater/data-MAC/basic4.qml | 419 ++ .../qmlvisual/repeater/data-X11/basic1.0.png | Bin 0 -> 1354 bytes .../qmlvisual/repeater/data-X11/basic1.qml | 323 + .../qmlvisual/repeater/data-X11/basic2.0.png | Bin 0 -> 1354 bytes .../qmlvisual/repeater/data-X11/basic2.qml | 331 + .../qmlvisual/repeater/data-X11/basic3.0.png | Bin 0 -> 1354 bytes .../qmlvisual/repeater/data-X11/basic3.qml | 347 + .../qmlvisual/repeater/data-X11/basic4.0.png | Bin 0 -> 1354 bytes .../qmlvisual/repeater/data-X11/basic4.qml | 419 ++ .../qmlvisual/repeater/data/basic1.0.png | Bin 0 -> 1513 bytes .../declarative/qmlvisual/repeater/data/basic1.qml | 323 + .../qmlvisual/repeater/data/basic2.0.png | Bin 0 -> 1513 bytes .../declarative/qmlvisual/repeater/data/basic2.qml | 331 + .../qmlvisual/repeater/data/basic3.0.png | Bin 0 -> 1513 bytes .../declarative/qmlvisual/repeater/data/basic3.qml | 347 + .../qmlvisual/repeater/data/basic4.0.png | Bin 0 -> 1513 bytes .../declarative/qmlvisual/repeater/data/basic4.qml | 419 ++ .../selftest_noimages/data/selftest_noimages.qml | 470 ++ .../selftest_noimages/selftest_noimages.qml | 9 + tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp | 370 + .../qmlvisual/webview/embedding/data/nesting.0.png | Bin 0 -> 5659 bytes .../qmlvisual/webview/embedding/data/nesting.qml | 363 + .../qmlvisual/webview/embedding/egg.qml | 26 + .../qmlvisual/webview/embedding/nesting.html | 9 + .../qmlvisual/webview/embedding/nesting.qml | 9 + .../javascript/data/evaluateJavaScript.0.png | Bin 0 -> 7999 bytes .../javascript/data/evaluateJavaScript.1.png | Bin 0 -> 8020 bytes .../javascript/data/evaluateJavaScript.2.png | Bin 0 -> 8143 bytes .../javascript/data/evaluateJavaScript.3.png | Bin 0 -> 8158 bytes .../javascript/data/evaluateJavaScript.4.png | Bin 0 -> 8284 bytes .../javascript/data/evaluateJavaScript.5.png | Bin 0 -> 8284 bytes .../javascript/data/evaluateJavaScript.6.png | Bin 0 -> 8284 bytes .../javascript/data/evaluateJavaScript.7.png | Bin 0 -> 8284 bytes .../javascript/data/evaluateJavaScript.8.png | Bin 0 -> 8284 bytes .../webview/javascript/data/evaluateJavaScript.qml | 3759 +++++++++++ .../webview/javascript/data/windowObjects.0.png | Bin 0 -> 7991 bytes .../webview/javascript/data/windowObjects.1.png | Bin 0 -> 7991 bytes .../webview/javascript/data/windowObjects.2.png | Bin 0 -> 7643 bytes .../webview/javascript/data/windowObjects.3.png | Bin 0 -> 7733 bytes .../webview/javascript/data/windowObjects.4.png | Bin 0 -> 8116 bytes .../webview/javascript/data/windowObjects.qml | 2643 ++++++++ .../webview/javascript/evaluateJavaScript.qml | 32 + .../qmlvisual/webview/javascript/test-objects.html | 12 + .../qmlvisual/webview/javascript/windowObjects.qml | 27 + .../webview/settings/data/fontFamily.0.png | Bin 0 -> 3774 bytes .../qmlvisual/webview/settings/data/fontFamily.qml | 395 ++ .../qmlvisual/webview/settings/data/fontSize.0.png | Bin 0 -> 32180 bytes .../qmlvisual/webview/settings/data/fontSize.qml | 339 + .../webview/settings/data/noAutoLoadImages.0.png | Bin 0 -> 6609 bytes .../webview/settings/data/noAutoLoadImages.1.png | Bin 0 -> 6609 bytes .../webview/settings/data/noAutoLoadImages.qml | 595 ++ .../webview/settings/data/setFontFamily.0.png | Bin 0 -> 12132 bytes .../webview/settings/data/setFontFamily.qml | 351 + .../qmlvisual/webview/settings/fontFamily.qml | 17 + .../qmlvisual/webview/settings/fontSize.qml | 71 + .../webview/settings/noAutoLoadImages.qml | 21 + .../qmlvisual/webview/settings/qtlogo.png | Bin 0 -> 2738 bytes .../qmlvisual/webview/settings/setFontFamily.qml | 11 + .../qmlvisual/webview/settings/tarzeau_ocr_a.ttf | Bin 0 -> 24544 bytes .../qmlvisual/webview/settings/test-img.html | 6 + .../qmlvisual/webview/settings/test.html | 9 + .../qmlvisual/webview/zooming/data/pageWidth.qml | 227 + .../webview/zooming/data/renderControl.0.png | Bin 0 -> 7589 bytes .../webview/zooming/data/renderControl.qml | 415 ++ .../webview/zooming/data/resolution.0.png | Bin 0 -> 6275 bytes .../webview/zooming/data/resolution.1.png | Bin 0 -> 3553 bytes .../webview/zooming/data/resolution.2.png | Bin 0 -> 5838 bytes .../webview/zooming/data/resolution.3.png | Bin 0 -> 8005 bytes .../webview/zooming/data/resolution.4.png | Bin 0 -> 6087 bytes .../qmlvisual/webview/zooming/data/resolution.qml | 1319 ++++ .../webview/zooming/data/zoomTextOnly.0.png | Bin 0 -> 5589 bytes .../webview/zooming/data/zoomTextOnly.1.png | Bin 0 -> 6848 bytes .../webview/zooming/data/zoomTextOnly.qml | 655 ++ .../qmlvisual/webview/zooming/data/zooming.0.png | Bin 0 -> 735 bytes .../qmlvisual/webview/zooming/data/zooming.1.png | Bin 0 -> 735 bytes .../qmlvisual/webview/zooming/data/zooming.2.png | Bin 0 -> 735 bytes .../qmlvisual/webview/zooming/data/zooming.3.png | Bin 0 -> 735 bytes .../qmlvisual/webview/zooming/data/zooming.qml | 2115 ++++++ .../qmlvisual/webview/zooming/pageWidth.qml | 10 + .../qmlvisual/webview/zooming/qtlogo.png | Bin 0 -> 2738 bytes .../qmlvisual/webview/zooming/renderControl.html | 7 + .../qmlvisual/webview/zooming/renderControl.qml | 21 + .../qmlvisual/webview/zooming/resolution.html | 6 + .../qmlvisual/webview/zooming/resolution.qml | 16 + .../qmlvisual/webview/zooming/zoomTextOnly.html | 7 + .../qmlvisual/webview/zooming/zoomTextOnly.qml | 14 + .../qmlvisual/webview/zooming/zooming.html | 6 + .../qmlvisual/webview/zooming/zooming.qml | 18 + tests/auto/declarative/visual/ListView/basic1.qml | 27 - tests/auto/declarative/visual/ListView/basic2.qml | 31 - tests/auto/declarative/visual/ListView/basic3.qml | 29 - tests/auto/declarative/visual/ListView/basic4.qml | 33 - .../visual/ListView/data-MAC/basic1.qml | 159 - .../visual/ListView/data-MAC/basic2.qml | 187 - .../visual/ListView/data-MAC/basic3.qml | 147 - .../visual/ListView/data-MAC/basic4.qml | 171 - .../visual/ListView/data-MAC/itemlist.0.png | Bin 961 -> 0 bytes .../visual/ListView/data-MAC/itemlist.1.png | Bin 972 -> 0 bytes .../visual/ListView/data-MAC/itemlist.2.png | Bin 962 -> 0 bytes .../visual/ListView/data-MAC/itemlist.3.png | Bin 962 -> 0 bytes .../visual/ListView/data-MAC/itemlist.4.png | Bin 962 -> 0 bytes .../visual/ListView/data-MAC/itemlist.5.png | Bin 970 -> 0 bytes .../visual/ListView/data-MAC/itemlist.6.png | Bin 961 -> 0 bytes .../visual/ListView/data-MAC/itemlist.qml | 2203 ------ .../visual/ListView/data-MAC/listview.0.png | Bin 1510 -> 0 bytes .../visual/ListView/data-MAC/listview.1.png | Bin 1510 -> 0 bytes .../visual/ListView/data-MAC/listview.10.png | Bin 1588 -> 0 bytes .../visual/ListView/data-MAC/listview.11.png | Bin 1575 -> 0 bytes .../visual/ListView/data-MAC/listview.12.png | Bin 1502 -> 0 bytes .../visual/ListView/data-MAC/listview.13.png | Bin 1583 -> 0 bytes .../visual/ListView/data-MAC/listview.14.png | Bin 1681 -> 0 bytes .../visual/ListView/data-MAC/listview.15.png | Bin 1524 -> 0 bytes .../visual/ListView/data-MAC/listview.16.png | Bin 1510 -> 0 bytes .../visual/ListView/data-MAC/listview.17.png | Bin 1510 -> 0 bytes .../visual/ListView/data-MAC/listview.18.png | Bin 1510 -> 0 bytes .../visual/ListView/data-MAC/listview.19.png | Bin 1510 -> 0 bytes .../visual/ListView/data-MAC/listview.2.png | Bin 1627 -> 0 bytes .../visual/ListView/data-MAC/listview.3.png | Bin 1524 -> 0 bytes .../visual/ListView/data-MAC/listview.4.png | Bin 1678 -> 0 bytes .../visual/ListView/data-MAC/listview.5.png | Bin 1510 -> 0 bytes .../visual/ListView/data-MAC/listview.6.png | Bin 1573 -> 0 bytes .../visual/ListView/data-MAC/listview.7.png | Bin 1670 -> 0 bytes .../visual/ListView/data-MAC/listview.8.png | Bin 1658 -> 0 bytes .../visual/ListView/data-MAC/listview.9.png | Bin 1510 -> 0 bytes .../visual/ListView/data-MAC/listview.qml | 3079 --------- .../visual/ListView/data-X11/basic1.qml | 159 - .../visual/ListView/data-X11/basic2.qml | 187 - .../visual/ListView/data-X11/basic3.qml | 147 - .../visual/ListView/data-X11/basic4.qml | 171 - .../declarative/visual/ListView/data/basic1.qml | 159 - .../declarative/visual/ListView/data/basic2.qml | 187 - .../declarative/visual/ListView/data/basic3.qml | 147 - .../declarative/visual/ListView/data/basic4.qml | 171 - .../visual/ListView/data/itemlist.0.png | Bin 961 -> 0 bytes .../visual/ListView/data/itemlist.1.png | Bin 972 -> 0 bytes .../visual/ListView/data/itemlist.2.png | Bin 962 -> 0 bytes .../visual/ListView/data/itemlist.3.png | Bin 962 -> 0 bytes .../visual/ListView/data/itemlist.4.png | Bin 962 -> 0 bytes .../visual/ListView/data/itemlist.5.png | Bin 970 -> 0 bytes .../visual/ListView/data/itemlist.6.png | Bin 961 -> 0 bytes .../declarative/visual/ListView/data/itemlist.qml | 2203 ------ .../visual/ListView/data/listview.0.png | Bin 1510 -> 0 bytes .../visual/ListView/data/listview.1.png | Bin 1510 -> 0 bytes .../visual/ListView/data/listview.10.png | Bin 1588 -> 0 bytes .../visual/ListView/data/listview.11.png | Bin 1575 -> 0 bytes .../visual/ListView/data/listview.12.png | Bin 1502 -> 0 bytes .../visual/ListView/data/listview.13.png | Bin 1583 -> 0 bytes .../visual/ListView/data/listview.14.png | Bin 1681 -> 0 bytes .../visual/ListView/data/listview.15.png | Bin 1524 -> 0 bytes .../visual/ListView/data/listview.16.png | Bin 1510 -> 0 bytes .../visual/ListView/data/listview.17.png | Bin 1510 -> 0 bytes .../visual/ListView/data/listview.18.png | Bin 1510 -> 0 bytes .../visual/ListView/data/listview.19.png | Bin 1510 -> 0 bytes .../visual/ListView/data/listview.2.png | Bin 1656 -> 0 bytes .../visual/ListView/data/listview.3.png | Bin 1524 -> 0 bytes .../visual/ListView/data/listview.4.png | Bin 1678 -> 0 bytes .../visual/ListView/data/listview.5.png | Bin 1510 -> 0 bytes .../visual/ListView/data/listview.6.png | Bin 1573 -> 0 bytes .../visual/ListView/data/listview.7.png | Bin 1669 -> 0 bytes .../visual/ListView/data/listview.8.png | Bin 1658 -> 0 bytes .../visual/ListView/data/listview.9.png | Bin 1510 -> 0 bytes .../declarative/visual/ListView/data/listview.qml | 3079 --------- .../auto/declarative/visual/ListView/itemlist.qml | 40 - .../auto/declarative/visual/ListView/listview.qml | 81 - .../visual/Package_Views/data/packageviews.0.png | Bin 714 -> 0 bytes .../visual/Package_Views/data/packageviews.1.png | Bin 798 -> 0 bytes .../visual/Package_Views/data/packageviews.10.png | Bin 773 -> 0 bytes .../visual/Package_Views/data/packageviews.11.png | Bin 773 -> 0 bytes .../visual/Package_Views/data/packageviews.12.png | Bin 754 -> 0 bytes .../visual/Package_Views/data/packageviews.13.png | Bin 742 -> 0 bytes .../visual/Package_Views/data/packageviews.14.png | Bin 733 -> 0 bytes .../visual/Package_Views/data/packageviews.15.png | Bin 712 -> 0 bytes .../visual/Package_Views/data/packageviews.16.png | Bin 730 -> 0 bytes .../visual/Package_Views/data/packageviews.17.png | Bin 730 -> 0 bytes .../visual/Package_Views/data/packageviews.18.png | Bin 730 -> 0 bytes .../visual/Package_Views/data/packageviews.19.png | Bin 744 -> 0 bytes .../visual/Package_Views/data/packageviews.2.png | Bin 757 -> 0 bytes .../visual/Package_Views/data/packageviews.20.png | Bin 754 -> 0 bytes .../visual/Package_Views/data/packageviews.21.png | Bin 721 -> 0 bytes .../visual/Package_Views/data/packageviews.22.png | Bin 732 -> 0 bytes .../visual/Package_Views/data/packageviews.3.png | Bin 813 -> 0 bytes .../visual/Package_Views/data/packageviews.4.png | Bin 756 -> 0 bytes .../visual/Package_Views/data/packageviews.5.png | Bin 752 -> 0 bytes .../visual/Package_Views/data/packageviews.6.png | Bin 752 -> 0 bytes .../visual/Package_Views/data/packageviews.7.png | Bin 774 -> 0 bytes .../visual/Package_Views/data/packageviews.8.png | Bin 774 -> 0 bytes .../visual/Package_Views/data/packageviews.9.png | Bin 754 -> 0 bytes .../visual/Package_Views/data/packageviews.qml | 3751 ----------- .../visual/Package_Views/packageviews.qml | 89 - .../bindinganimation/bindinganimation.qml | 40 - .../bindinganimation/data/bindinganimation.0.png | Bin 817 -> 0 bytes .../bindinganimation/data/bindinganimation.1.png | Bin 815 -> 0 bytes .../bindinganimation/data/bindinganimation.2.png | Bin 817 -> 0 bytes .../bindinganimation/data/bindinganimation.3.png | Bin 815 -> 0 bytes .../bindinganimation/data/bindinganimation.4.png | Bin 813 -> 0 bytes .../bindinganimation/data/bindinganimation.5.png | Bin 815 -> 0 bytes .../bindinganimation/data/bindinganimation.6.png | Bin 817 -> 0 bytes .../bindinganimation/data/bindinganimation.qml | 1655 ----- .../animation/colorAnimation/colorAnimation.qml | 41 - .../colorAnimation/data/colorAnimation.0.png | Bin 627 -> 0 bytes .../colorAnimation/data/colorAnimation.1.png | Bin 626 -> 0 bytes .../colorAnimation/data/colorAnimation.2.png | Bin 625 -> 0 bytes .../colorAnimation/data/colorAnimation.qml | 951 --- .../visual/animation/easing/data/easing.0.png | Bin 3393 -> 0 bytes .../visual/animation/easing/data/easing.1.png | Bin 3381 -> 0 bytes .../visual/animation/easing/data/easing.2.png | Bin 3101 -> 0 bytes .../visual/animation/easing/data/easing.3.png | Bin 16542 -> 0 bytes .../visual/animation/easing/data/easing.qml | 779 --- .../declarative/visual/animation/easing/easing.qml | 193 - .../visual/animation/easing/pics/qtlogo.png | Bin 2738 -> 0 bytes .../visual/animation/loop/data/loop.0.png | Bin 508 -> 0 bytes .../visual/animation/loop/data/loop.1.png | Bin 507 -> 0 bytes .../visual/animation/loop/data/loop.2.png | Bin 508 -> 0 bytes .../visual/animation/loop/data/loop.3.png | Bin 508 -> 0 bytes .../visual/animation/loop/data/loop.4.png | Bin 505 -> 0 bytes .../visual/animation/loop/data/loop.5.png | Bin 508 -> 0 bytes .../visual/animation/loop/data/loop.qml | 1471 ---- .../declarative/visual/animation/loop/loop.qml | 24 - .../parallelAnimation/data/parallelAnimation.0.png | Bin 774 -> 0 bytes .../parallelAnimation/data/parallelAnimation.1.png | Bin 762 -> 0 bytes .../parallelAnimation/data/parallelAnimation.2.png | Bin 773 -> 0 bytes .../parallelAnimation/data/parallelAnimation.qml | 463 -- .../parallelAnimation/parallelAnimation.qml | 43 - .../parentAnimation/data/parentAnimation.0.png | Bin 3742 -> 0 bytes .../parentAnimation/data/parentAnimation.1.png | Bin 3727 -> 0 bytes .../parentAnimation/data/parentAnimation.2.png | Bin 3742 -> 0 bytes .../parentAnimation/data/parentAnimation.3.png | Bin 3628 -> 0 bytes .../parentAnimation/data/parentAnimation.4.png | Bin 3610 -> 0 bytes .../parentAnimation/data/parentAnimation.5.png | Bin 3742 -> 0 bytes .../parentAnimation/data/parentAnimation.qml | 1663 ----- .../animation/parentAnimation/parentAnimation.qml | 68 - .../pauseAnimation/data/pauseAnimation.0.png | Bin 3211 -> 0 bytes .../pauseAnimation/data/pauseAnimation.1.png | Bin 3214 -> 0 bytes .../pauseAnimation/data/pauseAnimation.2.png | Bin 3209 -> 0 bytes .../pauseAnimation/data/pauseAnimation.3.png | Bin 3211 -> 0 bytes .../pauseAnimation/data/pauseAnimation.4.png | Bin 3214 -> 0 bytes .../pauseAnimation/data/pauseAnimation.5.png | Bin 3214 -> 0 bytes .../pauseAnimation/data/pauseAnimation.qml | 1619 ----- .../animation/pauseAnimation/pauseAnimation.qml | 36 - .../animation/pauseAnimation/pics/qtlogo.png | Bin 2738 -> 0 bytes .../propertyAction/data/propertyAction.0.png | Bin 1418 -> 0 bytes .../propertyAction/data/propertyAction.1.png | Bin 1430 -> 0 bytes .../propertyAction/data/propertyAction.2.png | Bin 1431 -> 0 bytes .../propertyAction/data/propertyAction.qml | 939 --- .../animation/propertyAction/propertyAction.qml | 34 - .../visual/animation/reanchor/data/reanchor.0.png | Bin 637 -> 0 bytes .../visual/animation/reanchor/data/reanchor.1.png | Bin 642 -> 0 bytes .../visual/animation/reanchor/data/reanchor.2.png | Bin 637 -> 0 bytes .../visual/animation/reanchor/data/reanchor.3.png | Bin 637 -> 0 bytes .../visual/animation/reanchor/data/reanchor.4.png | Bin 647 -> 0 bytes .../visual/animation/reanchor/data/reanchor.5.png | Bin 637 -> 0 bytes .../visual/animation/reanchor/data/reanchor.6.png | Bin 637 -> 0 bytes .../visual/animation/reanchor/data/reanchor.7.png | Bin 637 -> 0 bytes .../visual/animation/reanchor/data/reanchor.8.png | Bin 642 -> 0 bytes .../visual/animation/reanchor/data/reanchor.qml | 2471 ------- .../visual/animation/reanchor/reanchor.qml | 69 - .../animation/scriptAction/data/scriptAction.0.png | Bin 1418 -> 0 bytes .../animation/scriptAction/data/scriptAction.1.png | Bin 1431 -> 0 bytes .../animation/scriptAction/data/scriptAction.qml | 535 -- .../visual/animation/scriptAction/scriptAction.qml | 35 - .../visual/fillmode/data/fillmode.0.png | Bin 26099 -> 0 bytes .../declarative/visual/fillmode/data/fillmode.qml | 279 - tests/auto/declarative/visual/fillmode/face.png | Bin 905 -> 0 bytes .../auto/declarative/visual/fillmode/fillmode.qml | 16 - .../visual/focusscope/data-MAC/test.0.png | Bin 14875 -> 0 bytes .../visual/focusscope/data-MAC/test.1.png | Bin 14875 -> 0 bytes .../visual/focusscope/data-MAC/test.2.png | Bin 14863 -> 0 bytes .../visual/focusscope/data-MAC/test.3.png | Bin 14877 -> 0 bytes .../visual/focusscope/data-MAC/test.4.png | Bin 14877 -> 0 bytes .../visual/focusscope/data-MAC/test.5.png | Bin 14877 -> 0 bytes .../visual/focusscope/data-MAC/test.qml | 1599 ----- .../visual/focusscope/data-MAC/test2.0.png | Bin 5375 -> 0 bytes .../visual/focusscope/data-MAC/test2.1.png | Bin 5375 -> 0 bytes .../visual/focusscope/data-MAC/test2.qml | 607 -- .../visual/focusscope/data-MAC/test3.0.png | Bin 12749 -> 0 bytes .../visual/focusscope/data-MAC/test3.1.png | Bin 12667 -> 0 bytes .../visual/focusscope/data-MAC/test3.2.png | Bin 12373 -> 0 bytes .../visual/focusscope/data-MAC/test3.3.png | Bin 12150 -> 0 bytes .../visual/focusscope/data-MAC/test3.4.png | Bin 11944 -> 0 bytes .../visual/focusscope/data-MAC/test3.5.png | Bin 12150 -> 0 bytes .../visual/focusscope/data-MAC/test3.6.png | Bin 12373 -> 0 bytes .../visual/focusscope/data-MAC/test3.7.png | Bin 12667 -> 0 bytes .../visual/focusscope/data-MAC/test3.8.png | Bin 12749 -> 0 bytes .../visual/focusscope/data-MAC/test3.9.png | Bin 12710 -> 0 bytes .../visual/focusscope/data-MAC/test3.qml | 2879 -------- .../visual/focusscope/data-X11/test.0.png | Bin 11501 -> 0 bytes .../visual/focusscope/data-X11/test.1.png | Bin 11501 -> 0 bytes .../visual/focusscope/data-X11/test.2.png | Bin 11486 -> 0 bytes .../visual/focusscope/data-X11/test.3.png | Bin 11500 -> 0 bytes .../visual/focusscope/data-X11/test.4.png | Bin 11500 -> 0 bytes .../visual/focusscope/data-X11/test.5.png | Bin 11500 -> 0 bytes .../visual/focusscope/data-X11/test.qml | 1599 ----- .../visual/focusscope/data-X11/test2.0.png | Bin 4656 -> 0 bytes .../visual/focusscope/data-X11/test2.1.png | Bin 4656 -> 0 bytes .../visual/focusscope/data-X11/test2.qml | 607 -- .../visual/focusscope/data-X11/test3.0.png | Bin 10093 -> 0 bytes .../visual/focusscope/data-X11/test3.1.png | Bin 10051 -> 0 bytes .../visual/focusscope/data-X11/test3.2.png | Bin 9812 -> 0 bytes .../visual/focusscope/data-X11/test3.3.png | Bin 9625 -> 0 bytes .../visual/focusscope/data-X11/test3.4.png | Bin 9458 -> 0 bytes .../visual/focusscope/data-X11/test3.5.png | Bin 9645 -> 0 bytes .../visual/focusscope/data-X11/test3.6.png | Bin 9812 -> 0 bytes .../visual/focusscope/data-X11/test3.7.png | Bin 10051 -> 0 bytes .../visual/focusscope/data-X11/test3.8.png | Bin 10087 -> 0 bytes .../visual/focusscope/data-X11/test3.9.png | Bin 10072 -> 0 bytes .../visual/focusscope/data-X11/test3.qml | 2879 -------- .../declarative/visual/focusscope/data/test.0.png | Bin 14836 -> 0 bytes .../declarative/visual/focusscope/data/test.1.png | Bin 14836 -> 0 bytes .../declarative/visual/focusscope/data/test.2.png | Bin 14821 -> 0 bytes .../declarative/visual/focusscope/data/test.3.png | Bin 14833 -> 0 bytes .../declarative/visual/focusscope/data/test.4.png | Bin 14833 -> 0 bytes .../declarative/visual/focusscope/data/test.5.png | Bin 14833 -> 0 bytes .../declarative/visual/focusscope/data/test.qml | 1599 ----- .../declarative/visual/focusscope/data/test2.0.png | Bin 5359 -> 0 bytes .../declarative/visual/focusscope/data/test2.1.png | Bin 5359 -> 0 bytes .../declarative/visual/focusscope/data/test2.qml | 607 -- .../declarative/visual/focusscope/data/test3.0.png | Bin 12616 -> 0 bytes .../declarative/visual/focusscope/data/test3.1.png | Bin 12538 -> 0 bytes .../declarative/visual/focusscope/data/test3.2.png | Bin 12257 -> 0 bytes .../declarative/visual/focusscope/data/test3.3.png | Bin 12035 -> 0 bytes .../declarative/visual/focusscope/data/test3.4.png | Bin 11877 -> 0 bytes .../declarative/visual/focusscope/data/test3.5.png | Bin 12046 -> 0 bytes .../declarative/visual/focusscope/data/test3.6.png | Bin 12257 -> 0 bytes .../declarative/visual/focusscope/data/test3.7.png | Bin 12538 -> 0 bytes .../declarative/visual/focusscope/data/test3.8.png | Bin 12616 -> 0 bytes .../declarative/visual/focusscope/data/test3.9.png | Bin 12581 -> 0 bytes .../declarative/visual/focusscope/data/test3.qml | 2879 -------- tests/auto/declarative/visual/focusscope/test.qml | 76 - tests/auto/declarative/visual/focusscope/test2.qml | 40 - tests/auto/declarative/visual/focusscope/test3.qml | 52 - .../qdeclarativeborderimage/animated-smooth.qml | 55 - .../visual/qdeclarativeborderimage/animated.qml | 55 - .../visual/qdeclarativeborderimage/borders.qml | 18 - .../content/MyBorderImage.qml | 38 - .../visual/qdeclarativeborderimage/content/bw.png | Bin 1357 -> 0 bytes .../content/colors-round.sci | 7 - .../content/colors-stretch.sci | 5 - .../qdeclarativeborderimage/content/colors.png | Bin 1655 -> 0 bytes .../data/animated-smooth.0.png | Bin 61731 -> 0 bytes .../data/animated-smooth.1.png | Bin 98912 -> 0 bytes .../data/animated-smooth.2.png | Bin 48780 -> 0 bytes .../data/animated-smooth.3.png | Bin 32431 -> 0 bytes .../data/animated-smooth.4.png | Bin 35835 -> 0 bytes .../data/animated-smooth.5.png | Bin 79428 -> 0 bytes .../data/animated-smooth.6.png | Bin 45928 -> 0 bytes .../data/animated-smooth.qml | 1823 ----- .../qdeclarativeborderimage/data/animated.0.png | Bin 23684 -> 0 bytes .../qdeclarativeborderimage/data/animated.1.png | Bin 29115 -> 0 bytes .../qdeclarativeborderimage/data/animated.2.png | Bin 27580 -> 0 bytes .../qdeclarativeborderimage/data/animated.3.png | Bin 14822 -> 0 bytes .../qdeclarativeborderimage/data/animated.4.png | Bin 21356 -> 0 bytes .../qdeclarativeborderimage/data/animated.5.png | Bin 31143 -> 0 bytes .../qdeclarativeborderimage/data/animated.6.png | Bin 26468 -> 0 bytes .../qdeclarativeborderimage/data/animated.7.png | Bin 16225 -> 0 bytes .../qdeclarativeborderimage/data/animated.qml | 2091 ------ .../qdeclarativeborderimage/data/borders.0.png | Bin 23029 -> 0 bytes .../qdeclarativeborderimage/data/borders.1.png | Bin 23029 -> 0 bytes .../qdeclarativeborderimage/data/borders.2.png | Bin 23029 -> 0 bytes .../qdeclarativeborderimage/data/borders.3.png | Bin 23029 -> 0 bytes .../qdeclarativeborderimage/data/borders.4.png | Bin 23029 -> 0 bytes .../qdeclarativeborderimage/data/borders.qml | 1359 ---- .../qdeclarativeeasefollow/data/easefollow.0.png | Bin 1305 -> 0 bytes .../qdeclarativeeasefollow/data/easefollow.1.png | Bin 1306 -> 0 bytes .../qdeclarativeeasefollow/data/easefollow.2.png | Bin 1305 -> 0 bytes .../qdeclarativeeasefollow/data/easefollow.3.png | Bin 1303 -> 0 bytes .../qdeclarativeeasefollow/data/easefollow.4.png | Bin 1303 -> 0 bytes .../qdeclarativeeasefollow/data/easefollow.5.png | Bin 1305 -> 0 bytes .../qdeclarativeeasefollow/data/easefollow.6.png | Bin 1306 -> 0 bytes .../qdeclarativeeasefollow/data/easefollow.qml | 1807 ----- .../visual/qdeclarativeeasefollow/easefollow.qml | 40 - .../data/flickable-horizontal.0.png | Bin 1427 -> 0 bytes .../data/flickable-horizontal.1.png | Bin 1357 -> 0 bytes .../data/flickable-horizontal.2.png | Bin 1405 -> 0 bytes .../data/flickable-horizontal.3.png | Bin 1427 -> 0 bytes .../data/flickable-horizontal.qml | 1199 ---- .../data/flickable-vertical.0.png | Bin 1951 -> 0 bytes .../data/flickable-vertical.1.png | Bin 1951 -> 0 bytes .../data/flickable-vertical.10.png | Bin 1952 -> 0 bytes .../data/flickable-vertical.11.png | Bin 1930 -> 0 bytes .../data/flickable-vertical.12.png | Bin 1974 -> 0 bytes .../data/flickable-vertical.13.png | Bin 1961 -> 0 bytes .../data/flickable-vertical.14.png | Bin 1959 -> 0 bytes .../data/flickable-vertical.15.png | Bin 1937 -> 0 bytes .../data/flickable-vertical.16.png | Bin 1618 -> 0 bytes .../data/flickable-vertical.17.png | Bin 1952 -> 0 bytes .../data/flickable-vertical.18.png | Bin 1952 -> 0 bytes .../data/flickable-vertical.19.png | Bin 1930 -> 0 bytes .../data/flickable-vertical.2.png | Bin 1976 -> 0 bytes .../data/flickable-vertical.20.png | Bin 1930 -> 0 bytes .../data/flickable-vertical.21.png | Bin 1947 -> 0 bytes .../data/flickable-vertical.22.png | Bin 1941 -> 0 bytes .../data/flickable-vertical.23.png | Bin 1951 -> 0 bytes .../data/flickable-vertical.24.png | 0 .../data/flickable-vertical.3.png | Bin 1987 -> 0 bytes .../data/flickable-vertical.4.png | Bin 1947 -> 0 bytes .../data/flickable-vertical.5.png | Bin 1975 -> 0 bytes .../data/flickable-vertical.6.png | Bin 1928 -> 0 bytes .../data/flickable-vertical.7.png | Bin 1928 -> 0 bytes .../data/flickable-vertical.8.png | Bin 1928 -> 0 bytes .../data/flickable-vertical.9.png | Bin 1928 -> 0 bytes .../data/flickable-vertical.qml | 7037 -------------------- .../qdeclarativeflickable/flickable-horizontal.qml | 37 - .../qdeclarativeflickable/flickable-vertical.qml | 91 - .../qdeclarativeflipable/data/test-flipable.0.png | Bin 1090 -> 0 bytes .../qdeclarativeflipable/data/test-flipable.1.png | Bin 1134 -> 0 bytes .../qdeclarativeflipable/data/test-flipable.2.png | Bin 961 -> 0 bytes .../qdeclarativeflipable/data/test-flipable.3.png | Bin 1076 -> 0 bytes .../qdeclarativeflipable/data/test-flipable.4.png | Bin 1134 -> 0 bytes .../qdeclarativeflipable/data/test-flipable.5.png | Bin 969 -> 0 bytes .../qdeclarativeflipable/data/test-flipable.qml | 1623 ----- .../visual/qdeclarativeflipable/test-flipable.qml | 79 - .../qdeclarativegridview/data/gridview.0.png | Bin 1303 -> 0 bytes .../qdeclarativegridview/data/gridview.1.png | Bin 1317 -> 0 bytes .../qdeclarativegridview/data/gridview.2.png | Bin 1318 -> 0 bytes .../qdeclarativegridview/data/gridview.3.png | Bin 1306 -> 0 bytes .../qdeclarativegridview/data/gridview.4.png | Bin 1308 -> 0 bytes .../qdeclarativegridview/data/gridview.5.png | Bin 1303 -> 0 bytes .../qdeclarativegridview/data/gridview.6.png | Bin 1323 -> 0 bytes .../qdeclarativegridview/data/gridview.7.png | Bin 1325 -> 0 bytes .../qdeclarativegridview/data/gridview.8.png | Bin 1346 -> 0 bytes .../qdeclarativegridview/data/gridview.9.png | Bin 1303 -> 0 bytes .../visual/qdeclarativegridview/data/gridview.qml | 2859 -------- .../qdeclarativegridview/data/gridview2.0.png | Bin 1310 -> 0 bytes .../qdeclarativegridview/data/gridview2.1.png | Bin 1322 -> 0 bytes .../qdeclarativegridview/data/gridview2.10.png | Bin 1313 -> 0 bytes .../qdeclarativegridview/data/gridview2.2.png | Bin 1341 -> 0 bytes .../qdeclarativegridview/data/gridview2.3.png | Bin 1368 -> 0 bytes .../qdeclarativegridview/data/gridview2.4.png | Bin 1319 -> 0 bytes .../qdeclarativegridview/data/gridview2.5.png | Bin 1352 -> 0 bytes .../qdeclarativegridview/data/gridview2.6.png | Bin 1309 -> 0 bytes .../qdeclarativegridview/data/gridview2.7.png | Bin 1347 -> 0 bytes .../qdeclarativegridview/data/gridview2.8.png | Bin 1310 -> 0 bytes .../qdeclarativegridview/data/gridview2.9.png | Bin 1354 -> 0 bytes .../visual/qdeclarativegridview/data/gridview2.qml | 2479 ------- .../visual/qdeclarativegridview/gridview.qml | 51 - .../visual/qdeclarativegridview/gridview2.qml | 58 - .../visual/qdeclarativemouseregion/data/drag.0.png | Bin 1563 -> 0 bytes .../visual/qdeclarativemouseregion/data/drag.1.png | Bin 1570 -> 0 bytes .../visual/qdeclarativemouseregion/data/drag.2.png | Bin 1553 -> 0 bytes .../visual/qdeclarativemouseregion/data/drag.3.png | Bin 1563 -> 0 bytes .../visual/qdeclarativemouseregion/data/drag.4.png | Bin 1569 -> 0 bytes .../visual/qdeclarativemouseregion/data/drag.5.png | Bin 1569 -> 0 bytes .../visual/qdeclarativemouseregion/data/drag.6.png | Bin 1566 -> 0 bytes .../visual/qdeclarativemouseregion/data/drag.7.png | Bin 1566 -> 0 bytes .../visual/qdeclarativemouseregion/data/drag.8.png | Bin 1567 -> 0 bytes .../visual/qdeclarativemouseregion/data/drag.qml | 5207 --------------- .../qdeclarativemouseregion/data/mouseregion.0.png | Bin 471 -> 0 bytes .../qdeclarativemouseregion/data/mouseregion.1.png | Bin 474 -> 0 bytes .../data/mouseregion.10.png | Bin 479 -> 0 bytes .../data/mouseregion.11.png | Bin 479 -> 0 bytes .../data/mouseregion.12.png | Bin 479 -> 0 bytes .../data/mouseregion.13.png | Bin 479 -> 0 bytes .../data/mouseregion.14.png | Bin 479 -> 0 bytes .../data/mouseregion.15.png | Bin 479 -> 0 bytes .../data/mouseregion.16.png | Bin 1454 -> 0 bytes .../data/mouseregion.17.png | Bin 1454 -> 0 bytes .../data/mouseregion.18.png | Bin 1454 -> 0 bytes .../data/mouseregion.19.png | Bin 1454 -> 0 bytes .../qdeclarativemouseregion/data/mouseregion.2.png | Bin 474 -> 0 bytes .../data/mouseregion.20.png | Bin 1454 -> 0 bytes .../data/mouseregion.21.png | Bin 1454 -> 0 bytes .../data/mouseregion.22.png | Bin 1454 -> 0 bytes .../qdeclarativemouseregion/data/mouseregion.3.png | Bin 474 -> 0 bytes .../qdeclarativemouseregion/data/mouseregion.4.png | Bin 481 -> 0 bytes .../qdeclarativemouseregion/data/mouseregion.5.png | Bin 481 -> 0 bytes .../qdeclarativemouseregion/data/mouseregion.6.png | Bin 481 -> 0 bytes .../qdeclarativemouseregion/data/mouseregion.7.png | Bin 481 -> 0 bytes .../qdeclarativemouseregion/data/mouseregion.8.png | Bin 479 -> 0 bytes .../qdeclarativemouseregion/data/mouseregion.9.png | Bin 479 -> 0 bytes .../qdeclarativemouseregion/data/mouseregion.qml | 5867 ---------------- .../visual/qdeclarativemouseregion/drag.qml | 21 - .../visual/qdeclarativemouseregion/mouseregion.qml | 124 - .../qdeclarativeparticles/data/particles.0.png | Bin 10219 -> 0 bytes .../qdeclarativeparticles/data/particles.1.png | Bin 13469 -> 0 bytes .../qdeclarativeparticles/data/particles.2.png | Bin 14051 -> 0 bytes .../qdeclarativeparticles/data/particles.qml | 775 --- .../visual/qdeclarativeparticles/particles.qml | 54 - .../visual/qdeclarativeparticles/star.png | Bin 262 -> 0 bytes .../data/test-pathview-2.0.png | Bin 2263 -> 0 bytes .../data/test-pathview-2.1.png | Bin 2329 -> 0 bytes .../data/test-pathview-2.2.png | Bin 2279 -> 0 bytes .../data/test-pathview-2.3.png | Bin 2263 -> 0 bytes .../data/test-pathview-2.4.png | Bin 2263 -> 0 bytes .../data/test-pathview-2.5.png | Bin 2308 -> 0 bytes .../data/test-pathview-2.6.png | Bin 2280 -> 0 bytes .../qdeclarativepathview/data/test-pathview-2.qml | 2303 ------- .../qdeclarativepathview/data/test-pathview.0.png | Bin 2321 -> 0 bytes .../qdeclarativepathview/data/test-pathview.1.png | Bin 2380 -> 0 bytes .../qdeclarativepathview/data/test-pathview.2.png | Bin 2315 -> 0 bytes .../qdeclarativepathview/data/test-pathview.3.png | Bin 2372 -> 0 bytes .../qdeclarativepathview/data/test-pathview.4.png | Bin 2327 -> 0 bytes .../qdeclarativepathview/data/test-pathview.qml | 1495 ----- .../qdeclarativepathview/test-pathview-2.qml | 62 - .../visual/qdeclarativepathview/test-pathview.qml | 62 - .../qdeclarativepositioners/data/dynamic.0.png | Bin 1429 -> 0 bytes .../qdeclarativepositioners/data/dynamic.1.png | Bin 1433 -> 0 bytes .../qdeclarativepositioners/data/dynamic.2.png | Bin 1431 -> 0 bytes .../qdeclarativepositioners/data/dynamic.3.png | Bin 1428 -> 0 bytes .../qdeclarativepositioners/data/dynamic.4.png | Bin 1432 -> 0 bytes .../qdeclarativepositioners/data/dynamic.5.png | Bin 1434 -> 0 bytes .../qdeclarativepositioners/data/dynamic.qml | 1603 ----- .../qdeclarativepositioners/data/repeater.0.png | Bin 2790 -> 0 bytes .../qdeclarativepositioners/data/repeater.qml | 339 - .../visual/qdeclarativepositioners/dynamic.qml | 65 - .../visual/qdeclarativepositioners/repeater.qml | 15 - .../visual/qdeclarativespringfollow/clock.qml | 64 - .../content/background.png | Bin 46895 -> 0 bytes .../qdeclarativespringfollow/content/center.png | Bin 765 -> 0 bytes .../qdeclarativespringfollow/content/clock.png | Bin 20653 -> 0 bytes .../qdeclarativespringfollow/content/hour.png | Bin 625 -> 0 bytes .../qdeclarativespringfollow/content/minute.png | Bin 625 -> 0 bytes .../qdeclarativespringfollow/content/second.png | Bin 303 -> 0 bytes .../qdeclarativespringfollow/data/clock.0.png | Bin 17294 -> 0 bytes .../qdeclarativespringfollow/data/clock.1.png | Bin 17394 -> 0 bytes .../qdeclarativespringfollow/data/clock.2.png | Bin 17524 -> 0 bytes .../qdeclarativespringfollow/data/clock.3.png | Bin 17572 -> 0 bytes .../visual/qdeclarativespringfollow/data/clock.qml | 1135 ---- .../qdeclarativespringfollow/data/follow.0.png | Bin 959 -> 0 bytes .../qdeclarativespringfollow/data/follow.1.png | Bin 1244 -> 0 bytes .../qdeclarativespringfollow/data/follow.10.png | Bin 1299 -> 0 bytes .../qdeclarativespringfollow/data/follow.2.png | Bin 1224 -> 0 bytes .../qdeclarativespringfollow/data/follow.3.png | Bin 1243 -> 0 bytes .../qdeclarativespringfollow/data/follow.4.png | Bin 1230 -> 0 bytes .../qdeclarativespringfollow/data/follow.5.png | Bin 1231 -> 0 bytes .../qdeclarativespringfollow/data/follow.6.png | Bin 1239 -> 0 bytes .../qdeclarativespringfollow/data/follow.7.png | Bin 1241 -> 0 bytes .../qdeclarativespringfollow/data/follow.8.png | Bin 1237 -> 0 bytes .../qdeclarativespringfollow/data/follow.9.png | Bin 1229 -> 0 bytes .../qdeclarativespringfollow/data/follow.qml | 1763 ----- .../visual/qdeclarativespringfollow/follow.qml | 71 - .../baseline/data-X11/parentanchor.qml | 131 - .../baseline/data/parentanchor.qml | 131 - .../qdeclarativetext/baseline/parentanchor.qml | 14 - .../qdeclarativetext/elide/data-MAC/elide.0.png | Bin 2276 -> 0 bytes .../qdeclarativetext/elide/data-MAC/elide.qml | 279 - .../qdeclarativetext/elide/data-MAC/elide2.0.png | Bin 4818 -> 0 bytes .../qdeclarativetext/elide/data-MAC/elide2.1.png | Bin 4089 -> 0 bytes .../qdeclarativetext/elide/data-MAC/elide2.2.png | Bin 3128 -> 0 bytes .../qdeclarativetext/elide/data-MAC/elide2.3.png | Bin 1963 -> 0 bytes .../qdeclarativetext/elide/data-MAC/elide2.qml | 991 --- .../elide/data-MAC/multilength.0.png | Bin 736 -> 0 bytes .../elide/data-MAC/multilength.qml | 303 - .../qdeclarativetext/elide/data-X11/elide.0.png | Bin 1002 -> 0 bytes .../qdeclarativetext/elide/data-X11/elide.qml | 279 - .../elide/data-X11/multilength.0.png | Bin 596 -> 0 bytes .../elide/data-X11/multilength.qml | 303 - .../visual/qdeclarativetext/elide/data/elide.0.png | Bin 1604 -> 0 bytes .../visual/qdeclarativetext/elide/data/elide.qml | 279 - .../qdeclarativetext/elide/data/elide2.0.png | Bin 4818 -> 0 bytes .../qdeclarativetext/elide/data/elide2.1.png | Bin 4089 -> 0 bytes .../qdeclarativetext/elide/data/elide2.2.png | Bin 3128 -> 0 bytes .../qdeclarativetext/elide/data/elide2.3.png | Bin 1963 -> 0 bytes .../visual/qdeclarativetext/elide/data/elide2.qml | 991 --- .../visual/qdeclarativetext/elide/elide.qml | 31 - .../visual/qdeclarativetext/elide/elide2.qml | 12 - .../visual/qdeclarativetext/elide/multilength.qml | 19 - .../qdeclarativetext/font/data-MAC/plaintext.0.png | Bin 103018 -> 0 bytes .../qdeclarativetext/font/data-MAC/plaintext.qml | 351 - .../qdeclarativetext/font/data-MAC/richtext.0.png | Bin 136492 -> 0 bytes .../qdeclarativetext/font/data-MAC/richtext.qml | 359 - .../qdeclarativetext/font/data/plaintext.0.png | Bin 94120 -> 0 bytes .../qdeclarativetext/font/data/plaintext.qml | 351 - .../qdeclarativetext/font/data/richtext.0.png | Bin 121122 -> 0 bytes .../visual/qdeclarativetext/font/data/richtext.qml | 359 - .../visual/qdeclarativetext/font/plaintext.qml | 85 - .../visual/qdeclarativetext/font/richtext.qml | 85 - .../visual/qdeclarativetextedit/cursorDelegate.qml | 35 - .../data-MAC/cursorDelegate.0.png | Bin 793 -> 0 bytes .../data-MAC/cursorDelegate.1.png | Bin 795 -> 0 bytes .../data-MAC/cursorDelegate.2.png | Bin 803 -> 0 bytes .../data-MAC/cursorDelegate.3.png | Bin 805 -> 0 bytes .../data-MAC/cursorDelegate.4.png | Bin 805 -> 0 bytes .../data-MAC/cursorDelegate.5.png | Bin 805 -> 0 bytes .../data-MAC/cursorDelegate.6.png | Bin 799 -> 0 bytes .../data-MAC/cursorDelegate.7.png | Bin 799 -> 0 bytes .../data-MAC/cursorDelegate.8.png | Bin 803 -> 0 bytes .../data-MAC/cursorDelegate.qml | 3555 ---------- .../qdeclarativetextedit/data-MAC/qt-669.0.png | Bin 365 -> 0 bytes .../qdeclarativetextedit/data-MAC/qt-669.1.png | Bin 365 -> 0 bytes .../qdeclarativetextedit/data-MAC/qt-669.2.png | Bin 366 -> 0 bytes .../qdeclarativetextedit/data-MAC/qt-669.3.png | Bin 362 -> 0 bytes .../qdeclarativetextedit/data-MAC/qt-669.qml | 1371 ---- .../qdeclarativetextedit/data-X11/wrap.0.png | Bin 1110 -> 0 bytes .../qdeclarativetextedit/data-X11/wrap.1.png | Bin 1110 -> 0 bytes .../qdeclarativetextedit/data-X11/wrap.2.png | Bin 1110 -> 0 bytes .../qdeclarativetextedit/data-X11/wrap.3.png | Bin 1110 -> 0 bytes .../qdeclarativetextedit/data-X11/wrap.4.png | Bin 1110 -> 0 bytes .../qdeclarativetextedit/data-X11/wrap.5.png | Bin 1110 -> 0 bytes .../qdeclarativetextedit/data-X11/wrap.6.png | Bin 1110 -> 0 bytes .../visual/qdeclarativetextedit/data-X11/wrap.qml | 2467 ------- .../qdeclarativetextedit/data/cursorDelegate.0.png | Bin 3322 -> 0 bytes .../qdeclarativetextedit/data/cursorDelegate.1.png | Bin 3323 -> 0 bytes .../qdeclarativetextedit/data/cursorDelegate.2.png | Bin 3325 -> 0 bytes .../qdeclarativetextedit/data/cursorDelegate.3.png | Bin 3332 -> 0 bytes .../qdeclarativetextedit/data/cursorDelegate.4.png | Bin 3329 -> 0 bytes .../qdeclarativetextedit/data/cursorDelegate.5.png | Bin 3818 -> 0 bytes .../qdeclarativetextedit/data/cursorDelegate.6.png | Bin 3333 -> 0 bytes .../qdeclarativetextedit/data/cursorDelegate.7.png | Bin 3332 -> 0 bytes .../qdeclarativetextedit/data/cursorDelegate.8.png | Bin 3347 -> 0 bytes .../qdeclarativetextedit/data/cursorDelegate.qml | 3555 ---------- .../visual/qdeclarativetextedit/data/qt-669.0.png | Bin 4802 -> 0 bytes .../visual/qdeclarativetextedit/data/qt-669.1.png | Bin 4804 -> 0 bytes .../visual/qdeclarativetextedit/data/qt-669.2.png | Bin 4801 -> 0 bytes .../visual/qdeclarativetextedit/data/qt-669.3.png | Bin 4791 -> 0 bytes .../visual/qdeclarativetextedit/data/qt-669.qml | 1371 ---- .../visual/qdeclarativetextedit/data/wrap.0.png | Bin 1110 -> 0 bytes .../visual/qdeclarativetextedit/data/wrap.1.png | Bin 1110 -> 0 bytes .../visual/qdeclarativetextedit/data/wrap.2.png | Bin 1110 -> 0 bytes .../visual/qdeclarativetextedit/data/wrap.3.png | Bin 1110 -> 0 bytes .../visual/qdeclarativetextedit/data/wrap.4.png | Bin 1110 -> 0 bytes .../visual/qdeclarativetextedit/data/wrap.5.png | Bin 1110 -> 0 bytes .../visual/qdeclarativetextedit/data/wrap.6.png | Bin 1110 -> 0 bytes .../visual/qdeclarativetextedit/data/wrap.qml | 2467 ------- .../visual/qdeclarativetextedit/qt-669.qml | 19 - .../visual/qdeclarativetextedit/wrap.qml | 21 - .../qdeclarativetextinput/cursorDelegate.qml | 35 - .../data-MAC/cursorDelegate.0.png | Bin 793 -> 0 bytes .../data-MAC/cursorDelegate.1.png | Bin 796 -> 0 bytes .../data-MAC/cursorDelegate.2.png | Bin 804 -> 0 bytes .../data-MAC/cursorDelegate.3.png | Bin 805 -> 0 bytes .../data-MAC/cursorDelegate.4.png | Bin 805 -> 0 bytes .../data-MAC/cursorDelegate.5.png | Bin 805 -> 0 bytes .../data-MAC/cursorDelegate.6.png | Bin 801 -> 0 bytes .../data-MAC/cursorDelegate.7.png | Bin 802 -> 0 bytes .../data-MAC/cursorDelegate.8.png | Bin 802 -> 0 bytes .../data-MAC/cursorDelegate.qml | 3379 ---------- .../qdeclarativetextinput/data-X11/echoMode.0.png | Bin 999 -> 0 bytes .../qdeclarativetextinput/data-X11/echoMode.1.png | Bin 1880 -> 0 bytes .../qdeclarativetextinput/data-X11/echoMode.2.png | Bin 2962 -> 0 bytes .../qdeclarativetextinput/data-X11/echoMode.3.png | Bin 2827 -> 0 bytes .../qdeclarativetextinput/data-X11/echoMode.4.png | Bin 2827 -> 0 bytes .../qdeclarativetextinput/data-X11/echoMode.qml | 1043 --- .../qdeclarativetextinput/data-X11/hAlign.0.png | Bin 1245 -> 0 bytes .../qdeclarativetextinput/data-X11/hAlign.qml | 107 - .../data/cursorDelegate.0.png | Bin 3314 -> 0 bytes .../data/cursorDelegate.1.png | Bin 3377 -> 0 bytes .../data/cursorDelegate.2.png | Bin 3323 -> 0 bytes .../data/cursorDelegate.3.png | Bin 3325 -> 0 bytes .../data/cursorDelegate.4.png | Bin 3322 -> 0 bytes .../data/cursorDelegate.5.png | Bin 3322 -> 0 bytes .../data/cursorDelegate.6.png | Bin 3326 -> 0 bytes .../data/cursorDelegate.7.png | Bin 3814 -> 0 bytes .../data/cursorDelegate.8.png | Bin 3324 -> 0 bytes .../qdeclarativetextinput/data/cursorDelegate.qml | 3379 ---------- .../qdeclarativetextinput/data/echoMode.0.png | Bin 999 -> 0 bytes .../qdeclarativetextinput/data/echoMode.1.png | Bin 1880 -> 0 bytes .../qdeclarativetextinput/data/echoMode.2.png | Bin 2962 -> 0 bytes .../qdeclarativetextinput/data/echoMode.3.png | Bin 2827 -> 0 bytes .../qdeclarativetextinput/data/echoMode.4.png | Bin 2827 -> 0 bytes .../visual/qdeclarativetextinput/data/echoMode.qml | 1043 --- .../visual/qdeclarativetextinput/data/hAlign.0.png | Bin 1245 -> 0 bytes .../visual/qdeclarativetextinput/data/hAlign.qml | 107 - .../visual/qdeclarativetextinput/echoMode.qml | 10 - .../visual/qdeclarativetextinput/hAlign.qml | 39 - .../visual/qfxwebview/autosize/autosize.qml | 61 - .../qfxwebview/autosize/data-X11/autosize.0.png | Bin 6886 -> 0 bytes .../qfxwebview/autosize/data-X11/autosize.qml | 83 - .../visual/qfxwebview/autosize/data/autosize.0.png | Bin 6886 -> 0 bytes .../visual/qfxwebview/autosize/data/autosize.qml | 83 - .../auto/declarative/visual/rect/GradientRect.qml | 25 - tests/auto/declarative/visual/rect/MyRect.qml | 21 - .../visual/rect/data/rect-painting.0.png | Bin 29725 -> 0 bytes .../declarative/visual/rect/data/rect-painting.qml | 287 - .../auto/declarative/visual/rect/rect-painting.qml | 55 - tests/auto/declarative/visual/repeater/basic1.qml | 27 - tests/auto/declarative/visual/repeater/basic2.qml | 31 - tests/auto/declarative/visual/repeater/basic3.qml | 29 - tests/auto/declarative/visual/repeater/basic4.qml | 33 - .../visual/repeater/data-MAC/basic1.0.png | Bin 1550 -> 0 bytes .../visual/repeater/data-MAC/basic1.qml | 323 - .../visual/repeater/data-MAC/basic2.0.png | Bin 1550 -> 0 bytes .../visual/repeater/data-MAC/basic2.qml | 331 - .../visual/repeater/data-MAC/basic3.0.png | Bin 1550 -> 0 bytes .../visual/repeater/data-MAC/basic3.qml | 347 - .../visual/repeater/data-MAC/basic4.0.png | Bin 1550 -> 0 bytes .../visual/repeater/data-MAC/basic4.qml | 419 -- .../visual/repeater/data-X11/basic1.0.png | Bin 1354 -> 0 bytes .../visual/repeater/data-X11/basic1.qml | 323 - .../visual/repeater/data-X11/basic2.0.png | Bin 1354 -> 0 bytes .../visual/repeater/data-X11/basic2.qml | 331 - .../visual/repeater/data-X11/basic3.0.png | Bin 1354 -> 0 bytes .../visual/repeater/data-X11/basic3.qml | 347 - .../visual/repeater/data-X11/basic4.0.png | Bin 1354 -> 0 bytes .../visual/repeater/data-X11/basic4.qml | 419 -- .../declarative/visual/repeater/data/basic1.0.png | Bin 1513 -> 0 bytes .../declarative/visual/repeater/data/basic1.qml | 323 - .../declarative/visual/repeater/data/basic2.0.png | Bin 1513 -> 0 bytes .../declarative/visual/repeater/data/basic2.qml | 331 - .../declarative/visual/repeater/data/basic3.0.png | Bin 1513 -> 0 bytes .../declarative/visual/repeater/data/basic3.qml | 347 - .../declarative/visual/repeater/data/basic4.0.png | Bin 1513 -> 0 bytes .../declarative/visual/repeater/data/basic4.qml | 419 -- .../selftest_noimages/data/selftest_noimages.qml | 470 -- .../visual/selftest_noimages/selftest_noimages.qml | 9 - tests/auto/declarative/visual/tst_visual.cpp | 370 - tests/auto/declarative/visual/visual.pro | 7 - .../visual/webview/embedding/data/nesting.0.png | Bin 5659 -> 0 bytes .../visual/webview/embedding/data/nesting.qml | 363 - .../declarative/visual/webview/embedding/egg.qml | 26 - .../visual/webview/embedding/nesting.html | 9 - .../visual/webview/embedding/nesting.qml | 9 - .../javascript/data/evaluateJavaScript.0.png | Bin 7999 -> 0 bytes .../javascript/data/evaluateJavaScript.1.png | Bin 8020 -> 0 bytes .../javascript/data/evaluateJavaScript.2.png | Bin 8143 -> 0 bytes .../javascript/data/evaluateJavaScript.3.png | Bin 8158 -> 0 bytes .../javascript/data/evaluateJavaScript.4.png | Bin 8284 -> 0 bytes .../javascript/data/evaluateJavaScript.5.png | Bin 8284 -> 0 bytes .../javascript/data/evaluateJavaScript.6.png | Bin 8284 -> 0 bytes .../javascript/data/evaluateJavaScript.7.png | Bin 8284 -> 0 bytes .../javascript/data/evaluateJavaScript.8.png | Bin 8284 -> 0 bytes .../webview/javascript/data/evaluateJavaScript.qml | 3759 ----------- .../webview/javascript/data/windowObjects.0.png | Bin 7991 -> 0 bytes .../webview/javascript/data/windowObjects.1.png | Bin 7991 -> 0 bytes .../webview/javascript/data/windowObjects.2.png | Bin 7643 -> 0 bytes .../webview/javascript/data/windowObjects.3.png | Bin 7733 -> 0 bytes .../webview/javascript/data/windowObjects.4.png | Bin 8116 -> 0 bytes .../webview/javascript/data/windowObjects.qml | 2643 -------- .../webview/javascript/evaluateJavaScript.qml | 32 - .../visual/webview/javascript/test-objects.html | 12 - .../visual/webview/javascript/windowObjects.qml | 27 - .../visual/webview/settings/data/fontFamily.0.png | Bin 3774 -> 0 bytes .../visual/webview/settings/data/fontFamily.qml | 395 -- .../visual/webview/settings/data/fontSize.0.png | Bin 32180 -> 0 bytes .../visual/webview/settings/data/fontSize.qml | 339 - .../webview/settings/data/noAutoLoadImages.0.png | Bin 6609 -> 0 bytes .../webview/settings/data/noAutoLoadImages.1.png | Bin 6609 -> 0 bytes .../webview/settings/data/noAutoLoadImages.qml | 595 -- .../webview/settings/data/setFontFamily.0.png | Bin 12132 -> 0 bytes .../visual/webview/settings/data/setFontFamily.qml | 351 - .../visual/webview/settings/fontFamily.qml | 17 - .../visual/webview/settings/fontSize.qml | 71 - .../visual/webview/settings/noAutoLoadImages.qml | 21 - .../declarative/visual/webview/settings/qtlogo.png | Bin 2738 -> 0 bytes .../visual/webview/settings/setFontFamily.qml | 11 - .../visual/webview/settings/tarzeau_ocr_a.ttf | Bin 24544 -> 0 bytes .../visual/webview/settings/test-img.html | 6 - .../declarative/visual/webview/settings/test.html | 9 - .../visual/webview/zooming/data/pageWidth.qml | 227 - .../webview/zooming/data/renderControl.0.png | Bin 7589 -> 0 bytes .../visual/webview/zooming/data/renderControl.qml | 415 -- .../visual/webview/zooming/data/resolution.0.png | Bin 6275 -> 0 bytes .../visual/webview/zooming/data/resolution.1.png | Bin 3553 -> 0 bytes .../visual/webview/zooming/data/resolution.2.png | Bin 5838 -> 0 bytes .../visual/webview/zooming/data/resolution.3.png | Bin 8005 -> 0 bytes .../visual/webview/zooming/data/resolution.4.png | Bin 6087 -> 0 bytes .../visual/webview/zooming/data/resolution.qml | 1319 ---- .../visual/webview/zooming/data/zoomTextOnly.0.png | Bin 5589 -> 0 bytes .../visual/webview/zooming/data/zoomTextOnly.1.png | Bin 6848 -> 0 bytes .../visual/webview/zooming/data/zoomTextOnly.qml | 655 -- .../visual/webview/zooming/data/zooming.0.png | Bin 735 -> 0 bytes .../visual/webview/zooming/data/zooming.1.png | Bin 735 -> 0 bytes .../visual/webview/zooming/data/zooming.2.png | Bin 735 -> 0 bytes .../visual/webview/zooming/data/zooming.3.png | Bin 735 -> 0 bytes .../visual/webview/zooming/data/zooming.qml | 2115 ------ .../visual/webview/zooming/pageWidth.qml | 10 - .../declarative/visual/webview/zooming/qtlogo.png | Bin 2738 -> 0 bytes .../visual/webview/zooming/renderControl.html | 7 - .../visual/webview/zooming/renderControl.qml | 21 - .../visual/webview/zooming/resolution.html | 6 - .../visual/webview/zooming/resolution.qml | 16 - .../visual/webview/zooming/zoomTextOnly.html | 7 - .../visual/webview/zooming/zoomTextOnly.qml | 14 - .../visual/webview/zooming/zooming.html | 6 - .../declarative/visual/webview/zooming/zooming.qml | 18 - 1351 files changed, 138051 insertions(+), 138058 deletions(-) create mode 100644 tests/auto/declarative/qmlvisual/ListView/basic1.qml create mode 100644 tests/auto/declarative/qmlvisual/ListView/basic2.qml create mode 100644 tests/auto/declarative/qmlvisual/ListView/basic3.qml create mode 100644 tests/auto/declarative/qmlvisual/ListView/basic4.qml create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/basic1.qml create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/basic2.qml create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/basic3.qml create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/basic4.qml create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.0.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.1.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.2.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.3.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.4.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.5.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.6.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.qml create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.0.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.1.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.10.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.11.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.12.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.13.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.14.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.15.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.16.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.17.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.18.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.19.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.2.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.3.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.4.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.5.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.6.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.7.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.8.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.9.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.qml create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-X11/basic1.qml create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-X11/basic2.qml create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-X11/basic3.qml create mode 100644 tests/auto/declarative/qmlvisual/ListView/data-X11/basic4.qml create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/basic1.qml create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/basic2.qml create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/basic3.qml create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/basic4.qml create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/itemlist.0.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/itemlist.1.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/itemlist.2.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/itemlist.3.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/itemlist.4.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/itemlist.5.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/itemlist.6.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/itemlist.qml create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.0.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.1.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.10.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.11.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.12.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.13.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.14.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.15.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.16.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.17.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.18.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.19.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.2.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.3.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.4.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.5.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.6.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.7.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.8.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.9.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.qml create mode 100644 tests/auto/declarative/qmlvisual/ListView/itemlist.qml create mode 100644 tests/auto/declarative/qmlvisual/ListView/listview.qml create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.0.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.1.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.10.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.11.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.12.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.13.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.14.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.15.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.16.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.17.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.18.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.19.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.2.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.20.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.21.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.22.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.3.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.4.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.5.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.6.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.7.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.8.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.9.png create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.qml create mode 100644 tests/auto/declarative/qmlvisual/Package_Views/packageviews.qml create mode 100644 tests/auto/declarative/qmlvisual/animation/bindinganimation/bindinganimation.qml create mode 100644 tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.0.png create mode 100644 tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.1.png create mode 100644 tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.2.png create mode 100644 tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.3.png create mode 100644 tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.4.png create mode 100644 tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.5.png create mode 100644 tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.6.png create mode 100644 tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.qml create mode 100644 tests/auto/declarative/qmlvisual/animation/colorAnimation/colorAnimation.qml create mode 100644 tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation.0.png create mode 100644 tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation.1.png create mode 100644 tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation.2.png create mode 100644 tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation.qml create mode 100644 tests/auto/declarative/qmlvisual/animation/easing/data/easing.0.png create mode 100644 tests/auto/declarative/qmlvisual/animation/easing/data/easing.1.png create mode 100644 tests/auto/declarative/qmlvisual/animation/easing/data/easing.2.png create mode 100644 tests/auto/declarative/qmlvisual/animation/easing/data/easing.3.png create mode 100644 tests/auto/declarative/qmlvisual/animation/easing/data/easing.qml create mode 100644 tests/auto/declarative/qmlvisual/animation/easing/easing.qml create mode 100644 tests/auto/declarative/qmlvisual/animation/easing/pics/qtlogo.png create mode 100644 tests/auto/declarative/qmlvisual/animation/loop/data/loop.0.png create mode 100644 tests/auto/declarative/qmlvisual/animation/loop/data/loop.1.png create mode 100644 tests/auto/declarative/qmlvisual/animation/loop/data/loop.2.png create mode 100644 tests/auto/declarative/qmlvisual/animation/loop/data/loop.3.png create mode 100644 tests/auto/declarative/qmlvisual/animation/loop/data/loop.4.png create mode 100644 tests/auto/declarative/qmlvisual/animation/loop/data/loop.5.png create mode 100644 tests/auto/declarative/qmlvisual/animation/loop/data/loop.qml create mode 100644 tests/auto/declarative/qmlvisual/animation/loop/loop.qml create mode 100644 tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation.0.png create mode 100644 tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation.1.png create mode 100644 tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation.2.png create mode 100644 tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation.qml create mode 100644 tests/auto/declarative/qmlvisual/animation/parallelAnimation/parallelAnimation.qml create mode 100644 tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.0.png create mode 100644 tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.1.png create mode 100644 tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.2.png create mode 100644 tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.3.png create mode 100644 tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.4.png create mode 100644 tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.5.png create mode 100644 tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.qml create mode 100644 tests/auto/declarative/qmlvisual/animation/parentAnimation/parentAnimation.qml create mode 100644 tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation.0.png create mode 100644 tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation.1.png create mode 100644 tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation.2.png create mode 100644 tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation.3.png create mode 100644 tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation.4.png create mode 100644 tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation.5.png create mode 100644 tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation.qml create mode 100644 tests/auto/declarative/qmlvisual/animation/pauseAnimation/pauseAnimation.qml create mode 100644 tests/auto/declarative/qmlvisual/animation/pauseAnimation/pics/qtlogo.png create mode 100644 tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction.0.png create mode 100644 tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction.1.png create mode 100644 tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction.2.png create mode 100644 tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction.qml create mode 100644 tests/auto/declarative/qmlvisual/animation/propertyAction/propertyAction.qml create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.0.png create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.1.png create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.2.png create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.3.png create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.4.png create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.5.png create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.6.png create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.7.png create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.8.png create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.qml create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchor/reanchor.qml create mode 100644 tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction.0.png create mode 100644 tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction.1.png create mode 100644 tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction.qml create mode 100644 tests/auto/declarative/qmlvisual/animation/scriptAction/scriptAction.qml create mode 100644 tests/auto/declarative/qmlvisual/fillmode/data/fillmode.0.png create mode 100644 tests/auto/declarative/qmlvisual/fillmode/data/fillmode.qml create mode 100644 tests/auto/declarative/qmlvisual/fillmode/face.png create mode 100644 tests/auto/declarative/qmlvisual/fillmode/fillmode.qml create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.0.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.1.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.2.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.3.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.4.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.5.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.qml create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.0.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.1.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.qml create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.0.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.1.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.2.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.3.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.4.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.5.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.6.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.7.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.8.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.9.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.qml create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test.0.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test.1.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test.2.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test.3.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test.4.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test.5.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test.qml create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.0.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.1.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.qml create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.0.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.1.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.2.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.3.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.4.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.5.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.6.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.7.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.8.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.9.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.qml create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test.0.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test.1.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test.2.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test.3.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test.4.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test.5.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test.qml create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test2.0.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test2.1.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test2.qml create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test3.0.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test3.1.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test3.2.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test3.3.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test3.4.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test3.5.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test3.6.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test3.7.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test3.8.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test3.9.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test3.qml create mode 100644 tests/auto/declarative/qmlvisual/focusscope/test.qml create mode 100644 tests/auto/declarative/qmlvisual/focusscope/test2.qml create mode 100644 tests/auto/declarative/qmlvisual/focusscope/test3.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/animated-smooth.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/animated.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/borders.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/MyBorderImage.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/bw.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/colors-round.sci create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/colors-stretch.sci create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/colors.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.7.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeeasefollow/data/easefollow.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeeasefollow/data/easefollow.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeeasefollow/data/easefollow.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeeasefollow/data/easefollow.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeeasefollow/data/easefollow.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeeasefollow/data/easefollow.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeeasefollow/data/easefollow.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeeasefollow/data/easefollow.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeeasefollow/easefollow.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.10.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.11.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.12.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.13.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.14.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.15.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.16.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.17.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.18.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.19.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.20.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.21.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.22.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.23.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.24.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.7.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.8.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.9.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/flickable-horizontal.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/flickable-vertical.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflipable/test-flipable.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.7.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.8.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.9.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.10.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.7.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.8.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.9.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview2.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/drag.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/drag.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/drag.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/drag.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/drag.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/drag.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/drag.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/drag.7.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/drag.8.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/drag.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.10.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.11.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.12.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.13.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.14.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.15.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.16.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.17.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.18.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.19.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.20.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.21.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.22.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.7.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.8.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.9.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/data/mouseregion.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/drag.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativemouseregion/mouseregion.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeparticles/particles.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeparticles/star.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview-2.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/repeater.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/repeater.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/dynamic.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/repeater.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/clock.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/background.png create mode 100755 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/center.png create mode 100755 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/clock.png create mode 100755 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/hour.png create mode 100755 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/minute.png create mode 100755 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/second.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.10.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.7.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.8.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.9.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/follow.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-X11/parentanchor.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data/parentanchor.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/parentanchor.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/elide.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/elide2.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/multilength.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/richtext.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/richtext.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/plaintext.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/richtext.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/cursorDelegate.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.7.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.8.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.7.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.8.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/qt-669.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/qt-669.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/qt-669.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/qt-669.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/qt-669.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/wrap.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/wrap.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/wrap.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/wrap.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/wrap.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/wrap.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/wrap.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/wrap.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/qt-669.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/wrap.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/cursorDelegate.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.7.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.8.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/hAlign.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/hAlign.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.7.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.8.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/hAlign.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/hAlign.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/echoMode.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/hAlign.qml create mode 100644 tests/auto/declarative/qmlvisual/qfxwebview/autosize/autosize.qml create mode 100644 tests/auto/declarative/qmlvisual/qfxwebview/autosize/data-X11/autosize.0.png create mode 100644 tests/auto/declarative/qmlvisual/qfxwebview/autosize/data-X11/autosize.qml create mode 100644 tests/auto/declarative/qmlvisual/qfxwebview/autosize/data/autosize.0.png create mode 100644 tests/auto/declarative/qmlvisual/qfxwebview/autosize/data/autosize.qml create mode 100644 tests/auto/declarative/qmlvisual/rect/GradientRect.qml create mode 100644 tests/auto/declarative/qmlvisual/rect/MyRect.qml create mode 100644 tests/auto/declarative/qmlvisual/rect/data/rect-painting.0.png create mode 100644 tests/auto/declarative/qmlvisual/rect/data/rect-painting.qml create mode 100644 tests/auto/declarative/qmlvisual/rect/rect-painting.qml create mode 100644 tests/auto/declarative/qmlvisual/repeater/basic1.qml create mode 100644 tests/auto/declarative/qmlvisual/repeater/basic2.qml create mode 100644 tests/auto/declarative/qmlvisual/repeater/basic3.qml create mode 100644 tests/auto/declarative/qmlvisual/repeater/basic4.qml create mode 100644 tests/auto/declarative/qmlvisual/repeater/data-MAC/basic1.0.png create mode 100644 tests/auto/declarative/qmlvisual/repeater/data-MAC/basic1.qml create mode 100644 tests/auto/declarative/qmlvisual/repeater/data-MAC/basic2.0.png create mode 100644 tests/auto/declarative/qmlvisual/repeater/data-MAC/basic2.qml create mode 100644 tests/auto/declarative/qmlvisual/repeater/data-MAC/basic3.0.png create mode 100644 tests/auto/declarative/qmlvisual/repeater/data-MAC/basic3.qml create mode 100644 tests/auto/declarative/qmlvisual/repeater/data-MAC/basic4.0.png create mode 100644 tests/auto/declarative/qmlvisual/repeater/data-MAC/basic4.qml create mode 100644 tests/auto/declarative/qmlvisual/repeater/data-X11/basic1.0.png create mode 100644 tests/auto/declarative/qmlvisual/repeater/data-X11/basic1.qml create mode 100644 tests/auto/declarative/qmlvisual/repeater/data-X11/basic2.0.png create mode 100644 tests/auto/declarative/qmlvisual/repeater/data-X11/basic2.qml create mode 100644 tests/auto/declarative/qmlvisual/repeater/data-X11/basic3.0.png create mode 100644 tests/auto/declarative/qmlvisual/repeater/data-X11/basic3.qml create mode 100644 tests/auto/declarative/qmlvisual/repeater/data-X11/basic4.0.png create mode 100644 tests/auto/declarative/qmlvisual/repeater/data-X11/basic4.qml create mode 100644 tests/auto/declarative/qmlvisual/repeater/data/basic1.0.png create mode 100644 tests/auto/declarative/qmlvisual/repeater/data/basic1.qml create mode 100644 tests/auto/declarative/qmlvisual/repeater/data/basic2.0.png create mode 100644 tests/auto/declarative/qmlvisual/repeater/data/basic2.qml create mode 100644 tests/auto/declarative/qmlvisual/repeater/data/basic3.0.png create mode 100644 tests/auto/declarative/qmlvisual/repeater/data/basic3.qml create mode 100644 tests/auto/declarative/qmlvisual/repeater/data/basic4.0.png create mode 100644 tests/auto/declarative/qmlvisual/repeater/data/basic4.qml create mode 100644 tests/auto/declarative/qmlvisual/selftest_noimages/data/selftest_noimages.qml create mode 100644 tests/auto/declarative/qmlvisual/selftest_noimages/selftest_noimages.qml create mode 100644 tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp create mode 100644 tests/auto/declarative/qmlvisual/webview/embedding/data/nesting.0.png create mode 100644 tests/auto/declarative/qmlvisual/webview/embedding/data/nesting.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/embedding/egg.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/embedding/nesting.html create mode 100644 tests/auto/declarative/qmlvisual/webview/embedding/nesting.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/data/evaluateJavaScript.0.png create mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/data/evaluateJavaScript.1.png create mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/data/evaluateJavaScript.2.png create mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/data/evaluateJavaScript.3.png create mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/data/evaluateJavaScript.4.png create mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/data/evaluateJavaScript.5.png create mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/data/evaluateJavaScript.6.png create mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/data/evaluateJavaScript.7.png create mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/data/evaluateJavaScript.8.png create mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/data/evaluateJavaScript.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/data/windowObjects.0.png create mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/data/windowObjects.1.png create mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/data/windowObjects.2.png create mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/data/windowObjects.3.png create mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/data/windowObjects.4.png create mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/data/windowObjects.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/evaluateJavaScript.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/test-objects.html create mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/windowObjects.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/settings/data/fontFamily.0.png create mode 100644 tests/auto/declarative/qmlvisual/webview/settings/data/fontFamily.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/settings/data/fontSize.0.png create mode 100644 tests/auto/declarative/qmlvisual/webview/settings/data/fontSize.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/settings/data/noAutoLoadImages.0.png create mode 100644 tests/auto/declarative/qmlvisual/webview/settings/data/noAutoLoadImages.1.png create mode 100644 tests/auto/declarative/qmlvisual/webview/settings/data/noAutoLoadImages.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/settings/data/setFontFamily.0.png create mode 100644 tests/auto/declarative/qmlvisual/webview/settings/data/setFontFamily.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/settings/fontFamily.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/settings/fontSize.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/settings/noAutoLoadImages.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/settings/qtlogo.png create mode 100644 tests/auto/declarative/qmlvisual/webview/settings/setFontFamily.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/settings/tarzeau_ocr_a.ttf create mode 100644 tests/auto/declarative/qmlvisual/webview/settings/test-img.html create mode 100644 tests/auto/declarative/qmlvisual/webview/settings/test.html create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/pageWidth.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/renderControl.0.png create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/renderControl.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/resolution.0.png create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/resolution.1.png create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/resolution.2.png create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/resolution.3.png create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/resolution.4.png create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/resolution.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/zoomTextOnly.0.png create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/zoomTextOnly.1.png create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/zoomTextOnly.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/zooming.0.png create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/zooming.1.png create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/zooming.2.png create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/zooming.3.png create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/zooming.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/pageWidth.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/qtlogo.png create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/renderControl.html create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/renderControl.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/resolution.html create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/resolution.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/zoomTextOnly.html create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/zoomTextOnly.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/zooming.html create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/zooming.qml delete mode 100644 tests/auto/declarative/visual/ListView/basic1.qml delete mode 100644 tests/auto/declarative/visual/ListView/basic2.qml delete mode 100644 tests/auto/declarative/visual/ListView/basic3.qml delete mode 100644 tests/auto/declarative/visual/ListView/basic4.qml delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/basic1.qml delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/basic2.qml delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/basic3.qml delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/basic4.qml delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/itemlist.0.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/itemlist.1.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/itemlist.2.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/itemlist.3.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/itemlist.4.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/itemlist.5.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/itemlist.6.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/itemlist.qml delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/listview.0.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/listview.1.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/listview.10.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/listview.11.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/listview.12.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/listview.13.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/listview.14.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/listview.15.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/listview.16.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/listview.17.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/listview.18.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/listview.19.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/listview.2.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/listview.3.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/listview.4.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/listview.5.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/listview.6.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/listview.7.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/listview.8.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/listview.9.png delete mode 100644 tests/auto/declarative/visual/ListView/data-MAC/listview.qml delete mode 100644 tests/auto/declarative/visual/ListView/data-X11/basic1.qml delete mode 100644 tests/auto/declarative/visual/ListView/data-X11/basic2.qml delete mode 100644 tests/auto/declarative/visual/ListView/data-X11/basic3.qml delete mode 100644 tests/auto/declarative/visual/ListView/data-X11/basic4.qml delete mode 100644 tests/auto/declarative/visual/ListView/data/basic1.qml delete mode 100644 tests/auto/declarative/visual/ListView/data/basic2.qml delete mode 100644 tests/auto/declarative/visual/ListView/data/basic3.qml delete mode 100644 tests/auto/declarative/visual/ListView/data/basic4.qml delete mode 100644 tests/auto/declarative/visual/ListView/data/itemlist.0.png delete mode 100644 tests/auto/declarative/visual/ListView/data/itemlist.1.png delete mode 100644 tests/auto/declarative/visual/ListView/data/itemlist.2.png delete mode 100644 tests/auto/declarative/visual/ListView/data/itemlist.3.png delete mode 100644 tests/auto/declarative/visual/ListView/data/itemlist.4.png delete mode 100644 tests/auto/declarative/visual/ListView/data/itemlist.5.png delete mode 100644 tests/auto/declarative/visual/ListView/data/itemlist.6.png delete mode 100644 tests/auto/declarative/visual/ListView/data/itemlist.qml delete mode 100644 tests/auto/declarative/visual/ListView/data/listview.0.png delete mode 100644 tests/auto/declarative/visual/ListView/data/listview.1.png delete mode 100644 tests/auto/declarative/visual/ListView/data/listview.10.png delete mode 100644 tests/auto/declarative/visual/ListView/data/listview.11.png delete mode 100644 tests/auto/declarative/visual/ListView/data/listview.12.png delete mode 100644 tests/auto/declarative/visual/ListView/data/listview.13.png delete mode 100644 tests/auto/declarative/visual/ListView/data/listview.14.png delete mode 100644 tests/auto/declarative/visual/ListView/data/listview.15.png delete mode 100644 tests/auto/declarative/visual/ListView/data/listview.16.png delete mode 100644 tests/auto/declarative/visual/ListView/data/listview.17.png delete mode 100644 tests/auto/declarative/visual/ListView/data/listview.18.png delete mode 100644 tests/auto/declarative/visual/ListView/data/listview.19.png delete mode 100644 tests/auto/declarative/visual/ListView/data/listview.2.png delete mode 100644 tests/auto/declarative/visual/ListView/data/listview.3.png delete mode 100644 tests/auto/declarative/visual/ListView/data/listview.4.png delete mode 100644 tests/auto/declarative/visual/ListView/data/listview.5.png delete mode 100644 tests/auto/declarative/visual/ListView/data/listview.6.png delete mode 100644 tests/auto/declarative/visual/ListView/data/listview.7.png delete mode 100644 tests/auto/declarative/visual/ListView/data/listview.8.png delete mode 100644 tests/auto/declarative/visual/ListView/data/listview.9.png delete mode 100644 tests/auto/declarative/visual/ListView/data/listview.qml delete mode 100644 tests/auto/declarative/visual/ListView/itemlist.qml delete mode 100644 tests/auto/declarative/visual/ListView/listview.qml delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.0.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.1.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.10.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.11.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.12.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.13.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.14.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.15.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.16.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.17.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.18.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.19.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.2.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.20.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.21.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.22.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.3.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.4.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.5.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.6.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.7.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.8.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.9.png delete mode 100644 tests/auto/declarative/visual/Package_Views/data/packageviews.qml delete mode 100644 tests/auto/declarative/visual/Package_Views/packageviews.qml delete mode 100644 tests/auto/declarative/visual/animation/bindinganimation/bindinganimation.qml delete mode 100644 tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.0.png delete mode 100644 tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.1.png delete mode 100644 tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.2.png delete mode 100644 tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.3.png delete mode 100644 tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.4.png delete mode 100644 tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.5.png delete mode 100644 tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.6.png delete mode 100644 tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.qml delete mode 100644 tests/auto/declarative/visual/animation/colorAnimation/colorAnimation.qml delete mode 100644 tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.0.png delete mode 100644 tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.1.png delete mode 100644 tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.2.png delete mode 100644 tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.qml delete mode 100644 tests/auto/declarative/visual/animation/easing/data/easing.0.png delete mode 100644 tests/auto/declarative/visual/animation/easing/data/easing.1.png delete mode 100644 tests/auto/declarative/visual/animation/easing/data/easing.2.png delete mode 100644 tests/auto/declarative/visual/animation/easing/data/easing.3.png delete mode 100644 tests/auto/declarative/visual/animation/easing/data/easing.qml delete mode 100644 tests/auto/declarative/visual/animation/easing/easing.qml delete mode 100644 tests/auto/declarative/visual/animation/easing/pics/qtlogo.png delete mode 100644 tests/auto/declarative/visual/animation/loop/data/loop.0.png delete mode 100644 tests/auto/declarative/visual/animation/loop/data/loop.1.png delete mode 100644 tests/auto/declarative/visual/animation/loop/data/loop.2.png delete mode 100644 tests/auto/declarative/visual/animation/loop/data/loop.3.png delete mode 100644 tests/auto/declarative/visual/animation/loop/data/loop.4.png delete mode 100644 tests/auto/declarative/visual/animation/loop/data/loop.5.png delete mode 100644 tests/auto/declarative/visual/animation/loop/data/loop.qml delete mode 100644 tests/auto/declarative/visual/animation/loop/loop.qml delete mode 100644 tests/auto/declarative/visual/animation/parallelAnimation/data/parallelAnimation.0.png delete mode 100644 tests/auto/declarative/visual/animation/parallelAnimation/data/parallelAnimation.1.png delete mode 100644 tests/auto/declarative/visual/animation/parallelAnimation/data/parallelAnimation.2.png delete mode 100644 tests/auto/declarative/visual/animation/parallelAnimation/data/parallelAnimation.qml delete mode 100644 tests/auto/declarative/visual/animation/parallelAnimation/parallelAnimation.qml delete mode 100644 tests/auto/declarative/visual/animation/parentAnimation/data/parentAnimation.0.png delete mode 100644 tests/auto/declarative/visual/animation/parentAnimation/data/parentAnimation.1.png delete mode 100644 tests/auto/declarative/visual/animation/parentAnimation/data/parentAnimation.2.png delete mode 100644 tests/auto/declarative/visual/animation/parentAnimation/data/parentAnimation.3.png delete mode 100644 tests/auto/declarative/visual/animation/parentAnimation/data/parentAnimation.4.png delete mode 100644 tests/auto/declarative/visual/animation/parentAnimation/data/parentAnimation.5.png delete mode 100644 tests/auto/declarative/visual/animation/parentAnimation/data/parentAnimation.qml delete mode 100644 tests/auto/declarative/visual/animation/parentAnimation/parentAnimation.qml delete mode 100644 tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.0.png delete mode 100644 tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.1.png delete mode 100644 tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.2.png delete mode 100644 tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.3.png delete mode 100644 tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.4.png delete mode 100644 tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.5.png delete mode 100644 tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.qml delete mode 100644 tests/auto/declarative/visual/animation/pauseAnimation/pauseAnimation.qml delete mode 100644 tests/auto/declarative/visual/animation/pauseAnimation/pics/qtlogo.png delete mode 100644 tests/auto/declarative/visual/animation/propertyAction/data/propertyAction.0.png delete mode 100644 tests/auto/declarative/visual/animation/propertyAction/data/propertyAction.1.png delete mode 100644 tests/auto/declarative/visual/animation/propertyAction/data/propertyAction.2.png delete mode 100644 tests/auto/declarative/visual/animation/propertyAction/data/propertyAction.qml delete mode 100644 tests/auto/declarative/visual/animation/propertyAction/propertyAction.qml delete mode 100644 tests/auto/declarative/visual/animation/reanchor/data/reanchor.0.png delete mode 100644 tests/auto/declarative/visual/animation/reanchor/data/reanchor.1.png delete mode 100644 tests/auto/declarative/visual/animation/reanchor/data/reanchor.2.png delete mode 100644 tests/auto/declarative/visual/animation/reanchor/data/reanchor.3.png delete mode 100644 tests/auto/declarative/visual/animation/reanchor/data/reanchor.4.png delete mode 100644 tests/auto/declarative/visual/animation/reanchor/data/reanchor.5.png delete mode 100644 tests/auto/declarative/visual/animation/reanchor/data/reanchor.6.png delete mode 100644 tests/auto/declarative/visual/animation/reanchor/data/reanchor.7.png delete mode 100644 tests/auto/declarative/visual/animation/reanchor/data/reanchor.8.png delete mode 100644 tests/auto/declarative/visual/animation/reanchor/data/reanchor.qml delete mode 100644 tests/auto/declarative/visual/animation/reanchor/reanchor.qml delete mode 100644 tests/auto/declarative/visual/animation/scriptAction/data/scriptAction.0.png delete mode 100644 tests/auto/declarative/visual/animation/scriptAction/data/scriptAction.1.png delete mode 100644 tests/auto/declarative/visual/animation/scriptAction/data/scriptAction.qml delete mode 100644 tests/auto/declarative/visual/animation/scriptAction/scriptAction.qml delete mode 100644 tests/auto/declarative/visual/fillmode/data/fillmode.0.png delete mode 100644 tests/auto/declarative/visual/fillmode/data/fillmode.qml delete mode 100644 tests/auto/declarative/visual/fillmode/face.png delete mode 100644 tests/auto/declarative/visual/fillmode/fillmode.qml delete mode 100644 tests/auto/declarative/visual/focusscope/data-MAC/test.0.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-MAC/test.1.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-MAC/test.2.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-MAC/test.3.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-MAC/test.4.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-MAC/test.5.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-MAC/test.qml delete mode 100644 tests/auto/declarative/visual/focusscope/data-MAC/test2.0.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-MAC/test2.1.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-MAC/test2.qml delete mode 100644 tests/auto/declarative/visual/focusscope/data-MAC/test3.0.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-MAC/test3.1.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-MAC/test3.2.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-MAC/test3.3.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-MAC/test3.4.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-MAC/test3.5.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-MAC/test3.6.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-MAC/test3.7.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-MAC/test3.8.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-MAC/test3.9.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-MAC/test3.qml delete mode 100644 tests/auto/declarative/visual/focusscope/data-X11/test.0.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-X11/test.1.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-X11/test.2.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-X11/test.3.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-X11/test.4.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-X11/test.5.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-X11/test.qml delete mode 100644 tests/auto/declarative/visual/focusscope/data-X11/test2.0.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-X11/test2.1.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-X11/test2.qml delete mode 100644 tests/auto/declarative/visual/focusscope/data-X11/test3.0.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-X11/test3.1.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-X11/test3.2.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-X11/test3.3.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-X11/test3.4.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-X11/test3.5.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-X11/test3.6.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-X11/test3.7.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-X11/test3.8.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-X11/test3.9.png delete mode 100644 tests/auto/declarative/visual/focusscope/data-X11/test3.qml delete mode 100644 tests/auto/declarative/visual/focusscope/data/test.0.png delete mode 100644 tests/auto/declarative/visual/focusscope/data/test.1.png delete mode 100644 tests/auto/declarative/visual/focusscope/data/test.2.png delete mode 100644 tests/auto/declarative/visual/focusscope/data/test.3.png delete mode 100644 tests/auto/declarative/visual/focusscope/data/test.4.png delete mode 100644 tests/auto/declarative/visual/focusscope/data/test.5.png delete mode 100644 tests/auto/declarative/visual/focusscope/data/test.qml delete mode 100644 tests/auto/declarative/visual/focusscope/data/test2.0.png delete mode 100644 tests/auto/declarative/visual/focusscope/data/test2.1.png delete mode 100644 tests/auto/declarative/visual/focusscope/data/test2.qml delete mode 100644 tests/auto/declarative/visual/focusscope/data/test3.0.png delete mode 100644 tests/auto/declarative/visual/focusscope/data/test3.1.png delete mode 100644 tests/auto/declarative/visual/focusscope/data/test3.2.png delete mode 100644 tests/auto/declarative/visual/focusscope/data/test3.3.png delete mode 100644 tests/auto/declarative/visual/focusscope/data/test3.4.png delete mode 100644 tests/auto/declarative/visual/focusscope/data/test3.5.png delete mode 100644 tests/auto/declarative/visual/focusscope/data/test3.6.png delete mode 100644 tests/auto/declarative/visual/focusscope/data/test3.7.png delete mode 100644 tests/auto/declarative/visual/focusscope/data/test3.8.png delete mode 100644 tests/auto/declarative/visual/focusscope/data/test3.9.png delete mode 100644 tests/auto/declarative/visual/focusscope/data/test3.qml delete mode 100644 tests/auto/declarative/visual/focusscope/test.qml delete mode 100644 tests/auto/declarative/visual/focusscope/test2.qml delete mode 100644 tests/auto/declarative/visual/focusscope/test3.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/animated-smooth.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/animated.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/borders.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/content/MyBorderImage.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/content/bw.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/content/colors-round.sci delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/content/colors-stretch.sci delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/content/colors.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/animated-smooth.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/animated-smooth.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/animated-smooth.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/animated-smooth.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/animated-smooth.4.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/animated-smooth.5.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/animated-smooth.6.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/animated-smooth.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/animated.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/animated.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/animated.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/animated.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/animated.4.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/animated.5.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/animated.6.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/animated.7.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/animated.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/borders.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/borders.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/borders.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/borders.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/borders.4.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeborderimage/data/borders.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativeeasefollow/data/easefollow.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeeasefollow/data/easefollow.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeeasefollow/data/easefollow.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeeasefollow/data/easefollow.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeeasefollow/data/easefollow.4.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeeasefollow/data/easefollow.5.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeeasefollow/data/easefollow.6.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeeasefollow/data/easefollow.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativeeasefollow/easefollow.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-horizontal.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-horizontal.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-horizontal.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-horizontal.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-horizontal.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.10.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.11.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.12.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.13.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.14.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.15.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.16.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.17.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.18.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.19.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.20.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.21.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.22.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.23.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.24.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.4.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.5.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.6.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.7.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.8.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.9.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/data/flickable-vertical.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/flickable-horizontal.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativeflickable/flickable-vertical.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativeflipable/data/test-flipable.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflipable/data/test-flipable.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflipable/data/test-flipable.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflipable/data/test-flipable.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflipable/data/test-flipable.4.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflipable/data/test-flipable.5.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeflipable/data/test-flipable.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativeflipable/test-flipable.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview.4.png delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview.5.png delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview.6.png delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview.7.png delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview.8.png delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview.9.png delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview2.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview2.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview2.10.png delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview2.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview2.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview2.4.png delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview2.5.png delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview2.6.png delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview2.7.png delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview2.8.png delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview2.9.png delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/data/gridview2.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/gridview.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativegridview/gridview2.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/drag.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/drag.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/drag.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/drag.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/drag.4.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/drag.5.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/drag.6.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/drag.7.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/drag.8.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/drag.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.10.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.11.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.12.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.13.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.14.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.15.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.16.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.17.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.18.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.19.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.20.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.21.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.22.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.4.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.5.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.6.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.7.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.8.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.9.png delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/data/mouseregion.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/drag.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativemouseregion/mouseregion.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativeparticles/data/particles.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeparticles/data/particles.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeparticles/data/particles.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativeparticles/data/particles.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativeparticles/particles.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativeparticles/star.png delete mode 100644 tests/auto/declarative/visual/qdeclarativepathview/data/test-pathview-2.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativepathview/data/test-pathview-2.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativepathview/data/test-pathview-2.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativepathview/data/test-pathview-2.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativepathview/data/test-pathview-2.4.png delete mode 100644 tests/auto/declarative/visual/qdeclarativepathview/data/test-pathview-2.5.png delete mode 100644 tests/auto/declarative/visual/qdeclarativepathview/data/test-pathview-2.6.png delete mode 100644 tests/auto/declarative/visual/qdeclarativepathview/data/test-pathview-2.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativepathview/data/test-pathview.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativepathview/data/test-pathview.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativepathview/data/test-pathview.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativepathview/data/test-pathview.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativepathview/data/test-pathview.4.png delete mode 100644 tests/auto/declarative/visual/qdeclarativepathview/data/test-pathview.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativepathview/test-pathview-2.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativepathview/test-pathview.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativepositioners/data/dynamic.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativepositioners/data/dynamic.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativepositioners/data/dynamic.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativepositioners/data/dynamic.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativepositioners/data/dynamic.4.png delete mode 100644 tests/auto/declarative/visual/qdeclarativepositioners/data/dynamic.5.png delete mode 100644 tests/auto/declarative/visual/qdeclarativepositioners/data/dynamic.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativepositioners/data/repeater.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativepositioners/data/repeater.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativepositioners/dynamic.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativepositioners/repeater.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativespringfollow/clock.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativespringfollow/content/background.png delete mode 100755 tests/auto/declarative/visual/qdeclarativespringfollow/content/center.png delete mode 100755 tests/auto/declarative/visual/qdeclarativespringfollow/content/clock.png delete mode 100755 tests/auto/declarative/visual/qdeclarativespringfollow/content/hour.png delete mode 100755 tests/auto/declarative/visual/qdeclarativespringfollow/content/minute.png delete mode 100755 tests/auto/declarative/visual/qdeclarativespringfollow/content/second.png delete mode 100644 tests/auto/declarative/visual/qdeclarativespringfollow/data/clock.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativespringfollow/data/clock.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativespringfollow/data/clock.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativespringfollow/data/clock.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativespringfollow/data/clock.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativespringfollow/data/follow.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativespringfollow/data/follow.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativespringfollow/data/follow.10.png delete mode 100644 tests/auto/declarative/visual/qdeclarativespringfollow/data/follow.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativespringfollow/data/follow.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativespringfollow/data/follow.4.png delete mode 100644 tests/auto/declarative/visual/qdeclarativespringfollow/data/follow.5.png delete mode 100644 tests/auto/declarative/visual/qdeclarativespringfollow/data/follow.6.png delete mode 100644 tests/auto/declarative/visual/qdeclarativespringfollow/data/follow.7.png delete mode 100644 tests/auto/declarative/visual/qdeclarativespringfollow/data/follow.8.png delete mode 100644 tests/auto/declarative/visual/qdeclarativespringfollow/data/follow.9.png delete mode 100644 tests/auto/declarative/visual/qdeclarativespringfollow/data/follow.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativespringfollow/follow.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/baseline/data-X11/parentanchor.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/baseline/data/parentanchor.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/baseline/parentanchor.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/data-MAC/elide.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/data-MAC/elide.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/data-MAC/elide2.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/data-MAC/elide2.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/data-MAC/elide2.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/data-MAC/elide2.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/data-MAC/elide2.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/data-MAC/multilength.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/data-MAC/multilength.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/data-X11/elide.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/data-X11/elide.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/data-X11/multilength.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/data-X11/multilength.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/data/elide.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/data/elide.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/data/elide2.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/data/elide2.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/data/elide2.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/data/elide2.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/data/elide2.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/elide.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/elide2.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/elide/multilength.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/font/data-MAC/plaintext.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/font/data-MAC/plaintext.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/font/data-MAC/richtext.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/font/data-MAC/richtext.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/font/data/plaintext.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/font/data/plaintext.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/font/data/richtext.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/font/data/richtext.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/font/plaintext.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetext/font/richtext.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/cursorDelegate.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-MAC/cursorDelegate.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-MAC/cursorDelegate.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-MAC/cursorDelegate.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-MAC/cursorDelegate.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-MAC/cursorDelegate.4.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-MAC/cursorDelegate.5.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-MAC/cursorDelegate.6.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-MAC/cursorDelegate.7.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-MAC/cursorDelegate.8.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-MAC/cursorDelegate.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-MAC/qt-669.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-MAC/qt-669.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-MAC/qt-669.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-MAC/qt-669.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-MAC/qt-669.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-X11/wrap.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-X11/wrap.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-X11/wrap.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-X11/wrap.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-X11/wrap.4.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-X11/wrap.5.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-X11/wrap.6.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data-X11/wrap.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/cursorDelegate.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/cursorDelegate.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/cursorDelegate.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/cursorDelegate.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/cursorDelegate.4.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/cursorDelegate.5.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/cursorDelegate.6.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/cursorDelegate.7.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/cursorDelegate.8.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/cursorDelegate.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/qt-669.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/qt-669.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/qt-669.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/qt-669.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/qt-669.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/wrap.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/wrap.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/wrap.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/wrap.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/wrap.4.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/wrap.5.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/wrap.6.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/data/wrap.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/qt-669.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetextedit/wrap.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/cursorDelegate.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data-MAC/cursorDelegate.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data-MAC/cursorDelegate.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data-MAC/cursorDelegate.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data-MAC/cursorDelegate.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data-MAC/cursorDelegate.4.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data-MAC/cursorDelegate.5.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data-MAC/cursorDelegate.6.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data-MAC/cursorDelegate.7.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data-MAC/cursorDelegate.8.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data-MAC/cursorDelegate.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data-X11/echoMode.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data-X11/echoMode.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data-X11/echoMode.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data-X11/echoMode.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data-X11/echoMode.4.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data-X11/echoMode.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data-X11/hAlign.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data-X11/hAlign.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data/cursorDelegate.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data/cursorDelegate.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data/cursorDelegate.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data/cursorDelegate.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data/cursorDelegate.4.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data/cursorDelegate.5.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data/cursorDelegate.6.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data/cursorDelegate.7.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data/cursorDelegate.8.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data/cursorDelegate.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data/echoMode.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data/echoMode.1.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data/echoMode.2.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data/echoMode.3.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data/echoMode.4.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data/echoMode.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data/hAlign.0.png delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/data/hAlign.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/echoMode.qml delete mode 100644 tests/auto/declarative/visual/qdeclarativetextinput/hAlign.qml delete mode 100644 tests/auto/declarative/visual/qfxwebview/autosize/autosize.qml delete mode 100644 tests/auto/declarative/visual/qfxwebview/autosize/data-X11/autosize.0.png delete mode 100644 tests/auto/declarative/visual/qfxwebview/autosize/data-X11/autosize.qml delete mode 100644 tests/auto/declarative/visual/qfxwebview/autosize/data/autosize.0.png delete mode 100644 tests/auto/declarative/visual/qfxwebview/autosize/data/autosize.qml delete mode 100644 tests/auto/declarative/visual/rect/GradientRect.qml delete mode 100644 tests/auto/declarative/visual/rect/MyRect.qml delete mode 100644 tests/auto/declarative/visual/rect/data/rect-painting.0.png delete mode 100644 tests/auto/declarative/visual/rect/data/rect-painting.qml delete mode 100644 tests/auto/declarative/visual/rect/rect-painting.qml delete mode 100644 tests/auto/declarative/visual/repeater/basic1.qml delete mode 100644 tests/auto/declarative/visual/repeater/basic2.qml delete mode 100644 tests/auto/declarative/visual/repeater/basic3.qml delete mode 100644 tests/auto/declarative/visual/repeater/basic4.qml delete mode 100644 tests/auto/declarative/visual/repeater/data-MAC/basic1.0.png delete mode 100644 tests/auto/declarative/visual/repeater/data-MAC/basic1.qml delete mode 100644 tests/auto/declarative/visual/repeater/data-MAC/basic2.0.png delete mode 100644 tests/auto/declarative/visual/repeater/data-MAC/basic2.qml delete mode 100644 tests/auto/declarative/visual/repeater/data-MAC/basic3.0.png delete mode 100644 tests/auto/declarative/visual/repeater/data-MAC/basic3.qml delete mode 100644 tests/auto/declarative/visual/repeater/data-MAC/basic4.0.png delete mode 100644 tests/auto/declarative/visual/repeater/data-MAC/basic4.qml delete mode 100644 tests/auto/declarative/visual/repeater/data-X11/basic1.0.png delete mode 100644 tests/auto/declarative/visual/repeater/data-X11/basic1.qml delete mode 100644 tests/auto/declarative/visual/repeater/data-X11/basic2.0.png delete mode 100644 tests/auto/declarative/visual/repeater/data-X11/basic2.qml delete mode 100644 tests/auto/declarative/visual/repeater/data-X11/basic3.0.png delete mode 100644 tests/auto/declarative/visual/repeater/data-X11/basic3.qml delete mode 100644 tests/auto/declarative/visual/repeater/data-X11/basic4.0.png delete mode 100644 tests/auto/declarative/visual/repeater/data-X11/basic4.qml delete mode 100644 tests/auto/declarative/visual/repeater/data/basic1.0.png delete mode 100644 tests/auto/declarative/visual/repeater/data/basic1.qml delete mode 100644 tests/auto/declarative/visual/repeater/data/basic2.0.png delete mode 100644 tests/auto/declarative/visual/repeater/data/basic2.qml delete mode 100644 tests/auto/declarative/visual/repeater/data/basic3.0.png delete mode 100644 tests/auto/declarative/visual/repeater/data/basic3.qml delete mode 100644 tests/auto/declarative/visual/repeater/data/basic4.0.png delete mode 100644 tests/auto/declarative/visual/repeater/data/basic4.qml delete mode 100644 tests/auto/declarative/visual/selftest_noimages/data/selftest_noimages.qml delete mode 100644 tests/auto/declarative/visual/selftest_noimages/selftest_noimages.qml delete mode 100644 tests/auto/declarative/visual/tst_visual.cpp delete mode 100644 tests/auto/declarative/visual/visual.pro delete mode 100644 tests/auto/declarative/visual/webview/embedding/data/nesting.0.png delete mode 100644 tests/auto/declarative/visual/webview/embedding/data/nesting.qml delete mode 100644 tests/auto/declarative/visual/webview/embedding/egg.qml delete mode 100644 tests/auto/declarative/visual/webview/embedding/nesting.html delete mode 100644 tests/auto/declarative/visual/webview/embedding/nesting.qml delete mode 100644 tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.0.png delete mode 100644 tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.1.png delete mode 100644 tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.2.png delete mode 100644 tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.3.png delete mode 100644 tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.4.png delete mode 100644 tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.5.png delete mode 100644 tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.6.png delete mode 100644 tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.7.png delete mode 100644 tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.8.png delete mode 100644 tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.qml delete mode 100644 tests/auto/declarative/visual/webview/javascript/data/windowObjects.0.png delete mode 100644 tests/auto/declarative/visual/webview/javascript/data/windowObjects.1.png delete mode 100644 tests/auto/declarative/visual/webview/javascript/data/windowObjects.2.png delete mode 100644 tests/auto/declarative/visual/webview/javascript/data/windowObjects.3.png delete mode 100644 tests/auto/declarative/visual/webview/javascript/data/windowObjects.4.png delete mode 100644 tests/auto/declarative/visual/webview/javascript/data/windowObjects.qml delete mode 100644 tests/auto/declarative/visual/webview/javascript/evaluateJavaScript.qml delete mode 100644 tests/auto/declarative/visual/webview/javascript/test-objects.html delete mode 100644 tests/auto/declarative/visual/webview/javascript/windowObjects.qml delete mode 100644 tests/auto/declarative/visual/webview/settings/data/fontFamily.0.png delete mode 100644 tests/auto/declarative/visual/webview/settings/data/fontFamily.qml delete mode 100644 tests/auto/declarative/visual/webview/settings/data/fontSize.0.png delete mode 100644 tests/auto/declarative/visual/webview/settings/data/fontSize.qml delete mode 100644 tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.0.png delete mode 100644 tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.1.png delete mode 100644 tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.qml delete mode 100644 tests/auto/declarative/visual/webview/settings/data/setFontFamily.0.png delete mode 100644 tests/auto/declarative/visual/webview/settings/data/setFontFamily.qml delete mode 100644 tests/auto/declarative/visual/webview/settings/fontFamily.qml delete mode 100644 tests/auto/declarative/visual/webview/settings/fontSize.qml delete mode 100644 tests/auto/declarative/visual/webview/settings/noAutoLoadImages.qml delete mode 100644 tests/auto/declarative/visual/webview/settings/qtlogo.png delete mode 100644 tests/auto/declarative/visual/webview/settings/setFontFamily.qml delete mode 100644 tests/auto/declarative/visual/webview/settings/tarzeau_ocr_a.ttf delete mode 100644 tests/auto/declarative/visual/webview/settings/test-img.html delete mode 100644 tests/auto/declarative/visual/webview/settings/test.html delete mode 100644 tests/auto/declarative/visual/webview/zooming/data/pageWidth.qml delete mode 100644 tests/auto/declarative/visual/webview/zooming/data/renderControl.0.png delete mode 100644 tests/auto/declarative/visual/webview/zooming/data/renderControl.qml delete mode 100644 tests/auto/declarative/visual/webview/zooming/data/resolution.0.png delete mode 100644 tests/auto/declarative/visual/webview/zooming/data/resolution.1.png delete mode 100644 tests/auto/declarative/visual/webview/zooming/data/resolution.2.png delete mode 100644 tests/auto/declarative/visual/webview/zooming/data/resolution.3.png delete mode 100644 tests/auto/declarative/visual/webview/zooming/data/resolution.4.png delete mode 100644 tests/auto/declarative/visual/webview/zooming/data/resolution.qml delete mode 100644 tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.0.png delete mode 100644 tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.1.png delete mode 100644 tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.qml delete mode 100644 tests/auto/declarative/visual/webview/zooming/data/zooming.0.png delete mode 100644 tests/auto/declarative/visual/webview/zooming/data/zooming.1.png delete mode 100644 tests/auto/declarative/visual/webview/zooming/data/zooming.2.png delete mode 100644 tests/auto/declarative/visual/webview/zooming/data/zooming.3.png delete mode 100644 tests/auto/declarative/visual/webview/zooming/data/zooming.qml delete mode 100644 tests/auto/declarative/visual/webview/zooming/pageWidth.qml delete mode 100644 tests/auto/declarative/visual/webview/zooming/qtlogo.png delete mode 100644 tests/auto/declarative/visual/webview/zooming/renderControl.html delete mode 100644 tests/auto/declarative/visual/webview/zooming/renderControl.qml delete mode 100644 tests/auto/declarative/visual/webview/zooming/resolution.html delete mode 100644 tests/auto/declarative/visual/webview/zooming/resolution.qml delete mode 100644 tests/auto/declarative/visual/webview/zooming/zoomTextOnly.html delete mode 100644 tests/auto/declarative/visual/webview/zooming/zoomTextOnly.qml delete mode 100644 tests/auto/declarative/visual/webview/zooming/zooming.html delete mode 100644 tests/auto/declarative/visual/webview/zooming/zooming.qml diff --git a/tests/auto/declarative/qmlvisual/ListView/basic1.qml b/tests/auto/declarative/qmlvisual/ListView/basic1.qml new file mode 100644 index 0000000..3c371a6 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/basic1.qml @@ -0,0 +1,27 @@ +import Qt 4.6 + +Rectangle { + color: "blue" + width: 200 + height: 300 + id: page + ListView { + anchors.fill: parent + delegate: Rectangle { + color: "red" + width: 100 + height: 100 + Text { + text: name + } + } + model: ListModel { + ListElement { + name: "January" + } + ListElement { + name: "February" + } + } + } +} diff --git a/tests/auto/declarative/qmlvisual/ListView/basic2.qml b/tests/auto/declarative/qmlvisual/ListView/basic2.qml new file mode 100644 index 0000000..bdba65e --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/basic2.qml @@ -0,0 +1,31 @@ +import Qt 4.6 + +Rectangle { + color: "blue" + width: 200 + height: 300 + id: page + Component { + id: delegate + Rectangle { + color: "red" + width: 100 + height: 100 + Text { + text: name + } + } + } + ListView { + anchors.fill: parent + delegate: delegate + model: ListModel { + ListElement { + name: "January" + } + ListElement { + name: "February" + } + } + } +} diff --git a/tests/auto/declarative/qmlvisual/ListView/basic3.qml b/tests/auto/declarative/qmlvisual/ListView/basic3.qml new file mode 100644 index 0000000..2d68c0a --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/basic3.qml @@ -0,0 +1,29 @@ +import Qt 4.6 + +Rectangle { + color: "blue" + width: 200 + height: 300 + id: page + ListModel { + id: model + ListElement { + name: "January" + } + ListElement { + name: "February" + } + } + ListView { + anchors.fill: parent + model: model + delegate: Rectangle { + color: "red" + width: 100 + height: 100 + Text { + text: name + } + } + } +} diff --git a/tests/auto/declarative/qmlvisual/ListView/basic4.qml b/tests/auto/declarative/qmlvisual/ListView/basic4.qml new file mode 100644 index 0000000..7c68df1 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/basic4.qml @@ -0,0 +1,33 @@ +import Qt 4.6 + +Rectangle { + color: "blue" + width: 200 + height: 300 + id: page + ListModel { + id: model + ListElement { + name: "January" + } + ListElement { + name: "February" + } + } + Component { + id: delegate + Rectangle { + color: "red" + width: 100 + height: 100 + Text { + text: name + } + } + } + ListView { + anchors.fill: parent + model: model + delegate: delegate + } +} diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic1.qml b/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic1.qml new file mode 100644 index 0000000..83b700d --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic1.qml @@ -0,0 +1,159 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 32 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 48 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 64 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 80 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 96 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 112 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 128 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 144 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 160 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 176 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 192 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 208 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 224 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 240 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 256 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 272 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 288 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 304 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 320 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 336 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 352 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 368 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 384 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 400 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 416 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 432 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 448 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 464 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 480 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 496 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 512 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 528 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 544 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 560 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 576 + hash: "895c70434a24da42144e60e6d8dcf323" + } +} diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic2.qml b/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic2.qml new file mode 100644 index 0000000..1483512 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic2.qml @@ -0,0 +1,187 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 32 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 48 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 64 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 80 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 96 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 112 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 128 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 144 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 160 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 176 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 192 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 208 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 224 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 240 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 256 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 272 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 288 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 304 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 320 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 336 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 352 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 368 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 384 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 400 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 416 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 432 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 448 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 464 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 480 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 496 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 512 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 528 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 544 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 560 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 576 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 592 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 608 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 624 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 640 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 656 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 672 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 688 + hash: "895c70434a24da42144e60e6d8dcf323" + } +} diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic3.qml b/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic3.qml new file mode 100644 index 0000000..bf68998 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic3.qml @@ -0,0 +1,147 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 32 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 48 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 64 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 80 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 96 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 112 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 128 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 144 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 160 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 176 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 192 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 208 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 224 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 240 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 256 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 272 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 288 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 304 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 320 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 336 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 352 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 368 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 384 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 400 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 416 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 432 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 448 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 464 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 480 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 496 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 512 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 528 + hash: "895c70434a24da42144e60e6d8dcf323" + } +} diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic4.qml b/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic4.qml new file mode 100644 index 0000000..4aa9ab6 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic4.qml @@ -0,0 +1,171 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 32 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 48 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 64 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 80 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 96 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 112 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 128 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 144 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 160 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 176 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 192 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 208 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 224 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 240 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 256 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 272 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 288 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 304 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 320 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 336 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 352 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 368 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 384 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 400 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 416 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 432 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 448 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 464 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 480 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 496 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 512 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 528 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 544 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 560 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 576 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 592 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 608 + hash: "895c70434a24da42144e60e6d8dcf323" + } + Frame { + msec: 624 + hash: "895c70434a24da42144e60e6d8dcf323" + } +} diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.0.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.0.png new file mode 100644 index 0000000..13b280c Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.0.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.1.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.1.png new file mode 100644 index 0000000..402872b Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.1.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.2.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.2.png new file mode 100644 index 0000000..afd0830 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.2.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.3.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.3.png new file mode 100644 index 0000000..7c15f61 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.3.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.4.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.4.png new file mode 100644 index 0000000..afd0830 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.4.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.5.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.5.png new file mode 100644 index 0000000..fddf1cb Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.5.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.6.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.6.png new file mode 100644 index 0000000..13b280c Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.6.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.qml b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.qml new file mode 100644 index 0000000..073749f --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.qml @@ -0,0 +1,2203 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 32 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 48 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 64 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 80 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 96 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 112 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 128 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 144 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 160 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 176 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 192 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 208 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 224 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 240 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 256 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 272 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 288 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 304 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 320 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 336 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 352 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 368 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 384 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 400 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 416 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 432 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 448 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 464 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 480 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 496 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 512 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 528 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 544 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 560 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 576 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 592 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 608 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 624 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 640 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 656 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 672 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 688 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 704 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 720 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 736 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 752 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 768 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 784 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 800 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 816 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 832 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 848 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 864 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 880 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 896 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 912 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 928 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 944 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 960 + image: "itemlist.0.png" + } + Frame { + msec: 976 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 992 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1008 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1024 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1040 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1056 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1072 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1088 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1104 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1120 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1136 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1152 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1168 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1184 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1200 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1216 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1232 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1248 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1264 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1280 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1296 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1312 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1328 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1344 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1360 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1376 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1392 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1408 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1424 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1440 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1456 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1472 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1488 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1504 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1520 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1536 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1552 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1568 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1584 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1600 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1616 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1632 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1648 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 192; y: 111 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1664 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 191; y: 111 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1680 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 190; y: 112 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 187; y: 113 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1696 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 184; y: 113 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 180; y: 113 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1712 + hash: "a68b1bc6c2963ee92c3a45f500667b3b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 174; y: 114 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 167; y: 115 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1728 + hash: "7cda93e59466b3348e7ffe3895f89e86" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 160; y: 117 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1744 + hash: "06e0008c78e919f7270402938d9d764b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 140; y: 121 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 132; y: 122 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1760 + hash: "9d8da9199efebb95f56e5d4ebc9a585e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 114; y: 126 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 98; y: 132 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1776 + hash: "54a60a4279911ba4a8a5741bcadfa783" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 91; y: 132 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 91; y: 132 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1792 + hash: "a1a19370a1a8ed78e475f0d0eb12311c" + } + Frame { + msec: 1808 + hash: "196a3b127cf7065614c34856bf8d8bca" + } + Frame { + msec: 1824 + hash: "5fbefbd7c7be4374382cc4c8b86ac78a" + } + Frame { + msec: 1840 + hash: "d6a544c622e504c1b931e1a8a1310a6e" + } + Frame { + msec: 1856 + hash: "20e76f0eb4ec5f691999faf8ad313370" + } + Frame { + msec: 1872 + hash: "7f84a3545907c754ae8a6a30ef61c98d" + } + Frame { + msec: 1888 + hash: "b544901eae32903ad054e8cdfed715eb" + } + Frame { + msec: 1904 + hash: "a010ed1e3312f4ca9f429b7e32cdcef9" + } + Frame { + msec: 1920 + image: "itemlist.1.png" + } + Frame { + msec: 1936 + hash: "93a731dc6f71b6ff5400bf74c87e6c46" + } + Frame { + msec: 1952 + hash: "c73f63d1a024ba956e693487b3ccc761" + } + Frame { + msec: 1968 + hash: "539d3d00fce2d0128cd697d86d237fe7" + } + Frame { + msec: 1984 + hash: "52752d7d6f2d0e085f7132313907b72b" + } + Frame { + msec: 2000 + hash: "f46dd5803a6075e979e0fc733d503bfb" + } + Frame { + msec: 2016 + hash: "b8734698a6bad00ecf019f85328c2c21" + } + Frame { + msec: 2032 + hash: "1cfc499ca756023430cc5b2fa95a599d" + } + Frame { + msec: 2048 + hash: "63a816548837c19f8f0494c137fc0174" + } + Frame { + msec: 2064 + hash: "1bce9b85235e9a1a472c079dfec70ec5" + } + Frame { + msec: 2080 + hash: "6677863e7f74c12648409883f73adbe2" + } + Frame { + msec: 2096 + hash: "98e707a3e39a5f7bd4a101c2ed83535c" + } + Frame { + msec: 2112 + hash: "c1f6d8842d14a9394d4b7797314f50e8" + } + Frame { + msec: 2128 + hash: "579758b477bcd2112b305a5aac7df338" + } + Frame { + msec: 2144 + hash: "4a7bb81090db246db53e2dbc56f710ea" + } + Frame { + msec: 2160 + hash: "074995cdd8a70817d1c8a7bb0ad4c542" + } + Frame { + msec: 2176 + hash: "bd8d7bda4d2e9ad1fba2895d568f36cc" + } + Frame { + msec: 2192 + hash: "40cce3d2d80ac470af44fc334cec1d5b" + } + Frame { + msec: 2208 + hash: "15cbc226b032d5a97199735ea7a1408b" + } + Frame { + msec: 2224 + hash: "12b296aea9b058a5402d0d0a620f8edc" + } + Frame { + msec: 2240 + hash: "6ffd2b79cf0e941a59e74bc6f9025bcb" + } + Frame { + msec: 2256 + hash: "589a58ef76ea709dc8d80390c9044f99" + } + Frame { + msec: 2272 + hash: "c009924bfa30153f22ab168b539494e9" + } + Frame { + msec: 2288 + hash: "4b83674a7c2daa68d735901ad40be2bd" + } + Frame { + msec: 2304 + hash: "0525908c0302ada989e28990bac3f2ca" + } + Frame { + msec: 2320 + hash: "89eb13976ba3ba4413cafeb0cc91c01b" + } + Frame { + msec: 2336 + hash: "75c1295ef99680784b2e11fb88fa1423" + } + Frame { + msec: 2352 + hash: "93d89165cf6a97c76ae6e7f75678a3cd" + } + Frame { + msec: 2368 + hash: "53064c1938f08a55603a99b0db225174" + } + Frame { + msec: 2384 + hash: "31db5684466c0c32128a9a8c7b1835e1" + } + Frame { + msec: 2400 + hash: "99d9e58697736198e0a00443d237e85b" + } + Frame { + msec: 2416 + hash: "6c1e860aef983367365d53f5849ad441" + } + Frame { + msec: 2432 + hash: "6c1e860aef983367365d53f5849ad441" + } + Frame { + msec: 2448 + hash: "6c1e860aef983367365d53f5849ad441" + } + Frame { + msec: 2464 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2480 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2496 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2512 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2528 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2544 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2560 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2576 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2592 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2608 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2624 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2640 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2656 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2672 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2688 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2704 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2720 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2736 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2752 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2768 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2784 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2800 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2816 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2832 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2848 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2864 + hash: "99f9988040a389576cb6420b5391f768" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 181; y: 104 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2880 + image: "itemlist.2.png" + } + Frame { + msec: 2896 + hash: "99f9988040a389576cb6420b5391f768" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 179; y: 105 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 177; y: 106 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2912 + hash: "99f9988040a389576cb6420b5391f768" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 174; y: 108 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 170; y: 110 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2928 + hash: "5bb06b4e74532ba5bc8c7bc38bf77d7f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 166; y: 112 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 160; y: 115 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2944 + hash: "b10a6206830a876017799ef2fcf61b1a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 154; y: 117 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 140; y: 123 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2960 + hash: "b2e24759ba10afd6cff90f4b1e04b496" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 124; y: 127 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 124; y: 127 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2976 + hash: "ccbcd6f45cb529c2db71504c0f69d73e" + } + Frame { + msec: 2992 + hash: "7b31c6d5931677f1aa1e8c7d48a4ff22" + } + Frame { + msec: 3008 + hash: "c52f691a0a6cf155118bdfea2dfea623" + } + Frame { + msec: 3024 + hash: "dd639d1df3d4a9b8f06718def63d588f" + } + Frame { + msec: 3040 + hash: "39d767b09a648ef6295cec2848f9226f" + } + Frame { + msec: 3056 + hash: "5dd46d5f386431e7b13348ac9a9630ed" + } + Frame { + msec: 3072 + hash: "0354e5183b0e66e7ba146d292c559df4" + } + Frame { + msec: 3088 + hash: "984aa6d7075e24de429e05b1b0eda94a" + } + Frame { + msec: 3104 + hash: "1af58a2f44f1f613712d4df85e38356d" + } + Frame { + msec: 3120 + hash: "6e4085e7f1fee724d78808753f04b471" + } + Frame { + msec: 3136 + hash: "73a019ef9057639d631cd99a431b3f3b" + } + Frame { + msec: 3152 + hash: "c9414a2e655a90dfdcb6fb288b4ba0ca" + } + Frame { + msec: 3168 + hash: "3f4c24f7ac89da982af22032309637fb" + } + Frame { + msec: 3184 + hash: "a50e6ada8f73a257657f4348ceaffcfd" + } + Frame { + msec: 3200 + hash: "a67bf40d09259bbd079c12ae4f49150f" + } + Frame { + msec: 3216 + hash: "a2fc512b7c234a9d0b2c1a83387a8a46" + } + Frame { + msec: 3232 + hash: "85090683ce9a3c9833b1cb0b3df076ee" + } + Frame { + msec: 3248 + hash: "275f3594a0e2cc4b6717f9f336e7e1b6" + } + Frame { + msec: 3264 + hash: "2473eb11f7b65a784a2b166114026488" + } + Frame { + msec: 3280 + hash: "4865c30dc45fbf5ca82047b77eca0912" + } + Frame { + msec: 3296 + hash: "54de88bca395449fbaea2c090c7a5d91" + } + Frame { + msec: 3312 + hash: "833f9295cf9a34934f001eac48551b59" + } + Frame { + msec: 3328 + hash: "5bf565f57ababa7380faeee94add91ca" + } + Frame { + msec: 3344 + hash: "6325578867f1eb3b2d47ed40b017b571" + } + Frame { + msec: 3360 + hash: "046a6114176b3a3206b7a2acd6e30b41" + } + Frame { + msec: 3376 + hash: "f8d4120a17f28c2d1d9c4be959098058" + } + Frame { + msec: 3392 + hash: "71356d2e48aad2900784ea6bc1a3d908" + } + Frame { + msec: 3408 + hash: "b84ad460fb81fdc4049abe8f3ff180bb" + } + Frame { + msec: 3424 + hash: "0354239f5eaea23474d9f81385392a8a" + } + Frame { + msec: 3440 + hash: "8ef0eef3393e07ae7605c865a95edc30" + } + Frame { + msec: 3456 + hash: "5b8b384cc8e3faf4310015e19b3eb487" + } + Frame { + msec: 3472 + hash: "77c18ac7dfff2a4e516915e3e3df0717" + } + Frame { + msec: 3488 + hash: "c1d3264384c26345eb8100de829309ca" + } + Frame { + msec: 3504 + hash: "6b21f71d0bedef4bbcb445a13f61e7a3" + } + Frame { + msec: 3520 + hash: "f619097356671f6eb54d3b1c481e709d" + } + Frame { + msec: 3536 + hash: "e56e3a90da446e0c482cb93717f6aacc" + } + Frame { + msec: 3552 + hash: "aa94ebdbb4b8423aff28c95daff0baf5" + } + Frame { + msec: 3568 + hash: "e1744d9cacd1a2c96af4cfdd5c486995" + } + Frame { + msec: 3584 + hash: "7f19ea52e9e41a3b1bd90bb2a144d305" + } + Frame { + msec: 3600 + hash: "7f19ea52e9e41a3b1bd90bb2a144d305" + } + Frame { + msec: 3616 + hash: "7f19ea52e9e41a3b1bd90bb2a144d305" + } + Frame { + msec: 3632 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3648 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3664 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3680 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3696 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3712 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3728 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3744 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3760 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3776 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3792 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3808 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3824 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3840 + image: "itemlist.3.png" + } + Frame { + msec: 3856 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3872 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3888 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3904 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3920 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3936 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3952 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3968 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3984 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 4000 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 4016 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 4032 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 4048 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 4064 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 4080 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 4096 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 31; y: 137 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4112 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 32; y: 137 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4128 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 33; y: 136 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 36; y: 135 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4144 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 40; y: 134 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 132 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4160 + hash: "c2c9c284b185a89faf4ddb5a7867f449" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 64; y: 130 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4176 + hash: "de1c18aeda5d2fbd6dad4554c78617bd" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 86; y: 126 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 110; y: 118 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 110; y: 118 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4192 + hash: "a67bf40d09259bbd079c12ae4f49150f" + } + Frame { + msec: 4208 + hash: "94514668dafbe41c5890a578efd6dea4" + } + Frame { + msec: 4224 + hash: "2e97a74eb9ddb1c9613c89e2d78db018" + } + Frame { + msec: 4240 + hash: "4b5368f0d86bffeb6bd31b58aec88650" + } + Frame { + msec: 4256 + hash: "b459bde7bb4ce51e6ecdab58f64fcbb9" + } + Frame { + msec: 4272 + hash: "7bac8cc3ec64c9ad1c0da282e38c953e" + } + Frame { + msec: 4288 + hash: "a73a58c3d7a757547740a2a161f4c756" + } + Frame { + msec: 4304 + hash: "b35edcb1fa3568a3e770ab2364b82e75" + } + Frame { + msec: 4320 + hash: "d6c863ef57c5e5cb04cdac72f920db0b" + } + Frame { + msec: 4336 + hash: "0db5e4588ff851918b07796f0cf07382" + } + Frame { + msec: 4352 + hash: "71ec8c363ca6a6f7556afb70faccffe6" + } + Frame { + msec: 4368 + hash: "18d026e9c965ada1db67c643576d2a80" + } + Frame { + msec: 4384 + hash: "69f71c22dff981a4da8ec1edcf90e79f" + } + Frame { + msec: 4400 + hash: "680460f5e4d9e649931601041af046b2" + } + Frame { + msec: 4416 + hash: "3028763fd15de2607b20b1331b904a4a" + } + Frame { + msec: 4432 + hash: "333eb60e217fe1ea7469eab52ac461f1" + } + Frame { + msec: 4448 + hash: "ccbcd6f45cb529c2db71504c0f69d73e" + } + Frame { + msec: 4464 + hash: "3445df9b41a0a3e74738cbf328ab7d5c" + } + Frame { + msec: 4480 + hash: "bd2c072558479e9de7a97207e58cc57f" + } + Frame { + msec: 4496 + hash: "3d34b0b24a30eda93377dcb4585afed8" + } + Frame { + msec: 4512 + hash: "d3045703863b0c5a327b9355c23d69f2" + } + Frame { + msec: 4528 + hash: "2f2eb55f693415b840a317211b250e9f" + } + Frame { + msec: 4544 + hash: "791b9ca7d47a3343474c30a35e336d4b" + } + Frame { + msec: 4560 + hash: "73a0c02ebad6d3d5f939d9a00dd898bf" + } + Frame { + msec: 4576 + hash: "d5c11135d586711b12f236430a2c2795" + } + Frame { + msec: 4592 + hash: "34f9ea214fe714ff4e994f715ea6ea39" + } + Frame { + msec: 4608 + hash: "8e49afa00983b156b818533923fb6edd" + } + Frame { + msec: 4624 + hash: "e7e7bef17cee92eca9191fd734d7a577" + } + Frame { + msec: 4640 + hash: "e407f6ed7cb3c130365ab5515d6308c0" + } + Frame { + msec: 4656 + hash: "5bb06b4e74532ba5bc8c7bc38bf77d7f" + } + Frame { + msec: 4672 + hash: "0ad7411316031e22034c14e81ca3a806" + } + Frame { + msec: 4688 + hash: "dd81d7a9b48c922b4c42cba1b5f2b9d7" + } + Frame { + msec: 4704 + hash: "32bef6f5005ad94e29ff59165958fbdc" + } + Frame { + msec: 4720 + hash: "87758dd311f91193bf1e3536c2f58525" + } + Frame { + msec: 4736 + hash: "015be92a4ff4e735fcc3cbc7a8b9d763" + } + Frame { + msec: 4752 + hash: "d4c34ed49317c6692d71681fcd9842b6" + } + Frame { + msec: 4768 + hash: "abaa235bb946a8abaddd52981d632c2d" + } + Frame { + msec: 4784 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4800 + image: "itemlist.4.png" + } + Frame { + msec: 4816 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4832 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4848 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4864 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4880 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4896 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4912 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4928 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4944 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4960 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4976 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4992 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5008 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5024 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5040 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5056 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5072 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5088 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5104 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5120 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5136 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5152 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5168 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5184 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5200 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5216 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5232 + hash: "99f9988040a389576cb6420b5391f768" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 17; y: 120 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5248 + hash: "99f9988040a389576cb6420b5391f768" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 19; y: 120 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 21; y: 120 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5264 + hash: "99f9988040a389576cb6420b5391f768" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 24; y: 119 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 28; y: 119 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5280 + hash: "95b380c9ab6f8db7b822faf023d94546" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 35; y: 119 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 44; y: 119 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5296 + hash: "bb79e53556698c62ec30c75be9f6b7d7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 119 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 96; y: 117 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 96; y: 117 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5312 + hash: "285cc2f0df1f59f25a0135560ab6edf2" + } + Frame { + msec: 5328 + hash: "93a731dc6f71b6ff5400bf74c87e6c46" + } + Frame { + msec: 5344 + hash: "eb555741ab128a50de5a18a454f2e639" + } + Frame { + msec: 5360 + hash: "5dbe6cf898c1e37fcaacecfcf57b2194" + } + Frame { + msec: 5376 + hash: "e7795610115593e78bb32f7bcc0ae2eb" + } + Frame { + msec: 5392 + hash: "20e76f0eb4ec5f691999faf8ad313370" + } + Frame { + msec: 5408 + hash: "d6a544c622e504c1b931e1a8a1310a6e" + } + Frame { + msec: 5424 + hash: "e7a3a21feed244c5b1c710a9254c15f0" + } + Frame { + msec: 5440 + hash: "5a4b1aca24f121d1373646e9d80b86fd" + } + Frame { + msec: 5456 + hash: "331d2ec7021655c86aa64e47718a1088" + } + Frame { + msec: 5472 + hash: "92096bc872e7395aa5b75c44646a0b60" + } + Frame { + msec: 5488 + hash: "0d9aa6cee4d21488cbb5153f8f3ed593" + } + Frame { + msec: 5504 + hash: "c1b943d43701605563fffffcb75f9fa7" + } + Frame { + msec: 5520 + hash: "1b680025d5ad1ddd8f8d5f570ba73e71" + } + Frame { + msec: 5536 + hash: "5539a3b9f60ea747c10ed8328b467cbf" + } + Frame { + msec: 5552 + hash: "0a1317bcb606cd3488c5b14ee5d96585" + } + Frame { + msec: 5568 + hash: "8844af68b11db7d92c69804c7371a746" + } + Frame { + msec: 5584 + hash: "28d7fd127739c6e3b8488651b725c802" + } + Frame { + msec: 5600 + hash: "0cf1a7d958a96aa2768995dddc5ccc09" + } + Frame { + msec: 5616 + hash: "64b902fe7ab4d89ef0c7b760974e3488" + } + Frame { + msec: 5632 + hash: "aba11c597eba550fc1eaddbf554057f6" + } + Frame { + msec: 5648 + hash: "1bacaa3bb9dc3cac9ffc7491cb4dc1a5" + } + Frame { + msec: 5664 + hash: "0ba8b582234d9f0c198c0c9e18e1cb02" + } + Frame { + msec: 5680 + hash: "f66eaf2b5c3529987c0d9d005351ed73" + } + Frame { + msec: 5696 + hash: "75b0bb720fa4c77da3783b3ff31c2fae" + } + Frame { + msec: 5712 + hash: "345b235bb7f13409378e5c0c370f2a41" + } + Frame { + msec: 5728 + hash: "83b7e902dce4e0fdc4ef5d629188c23c" + } + Frame { + msec: 5744 + hash: "04b9041c6f10969889d92e94785c7e88" + } + Frame { + msec: 5760 + image: "itemlist.5.png" + } + Frame { + msec: 5776 + hash: "4f3a902addc34ecdaf390e2427cc52e7" + } + Frame { + msec: 5792 + hash: "68d443f16c16821ffc9ca68b17c76034" + } + Frame { + msec: 5808 + hash: "9d25adc77befa761ee376a9b43595b5e" + } + Frame { + msec: 5824 + hash: "a68b1bc6c2963ee92c3a45f500667b3b" + } + Frame { + msec: 5840 + hash: "d5268cd58c222451d48038e715e83802" + } + Frame { + msec: 5856 + hash: "f37d461541a8ec7a4161b18748de6aea" + } + Frame { + msec: 5872 + hash: "805319ac7ca842feb3649e92f8b5b72f" + } + Frame { + msec: 5888 + hash: "73124472a05080891d4948d8ca273f8c" + } + Frame { + msec: 5904 + hash: "b6e433a23282a50db2e165a2447ba3f6" + } + Frame { + msec: 5920 + hash: "fd8d3f5688b1806998c6087e18c6c730" + } + Frame { + msec: 5936 + hash: "f132dd459950ef2d18aa93ca950d0692" + } + Frame { + msec: 5952 + hash: "ade5beb259b5277c333ca806fc9bdbec" + } + Frame { + msec: 5968 + hash: "ade5beb259b5277c333ca806fc9bdbec" + } + Frame { + msec: 5984 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6000 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6016 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6032 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6048 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6064 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6080 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6096 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6112 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6128 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6144 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6160 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6176 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6192 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6208 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6224 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6240 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6256 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6272 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6288 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6304 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6320 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6336 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6352 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6368 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6384 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6400 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6416 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6432 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6448 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6464 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6480 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6496 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6512 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6528 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6544 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6560 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6576 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6592 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6608 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6624 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6640 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6656 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6672 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6688 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6704 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6720 + image: "itemlist.6.png" + } + Frame { + msec: 6736 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6752 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6768 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6784 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6800 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6816 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6832 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6848 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6864 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6880 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6896 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6912 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6928 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6944 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6960 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6976 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6992 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7008 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7024 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7040 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7056 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7072 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7088 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7104 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7120 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7136 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7152 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7168 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7184 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7200 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7216 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7232 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7248 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7264 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7280 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7296 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7312 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } +} diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.0.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.0.png new file mode 100644 index 0000000..a1ab987 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.0.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.1.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.1.png new file mode 100644 index 0000000..a1ab987 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.1.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.10.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.10.png new file mode 100644 index 0000000..dcfca3f Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.10.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.11.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.11.png new file mode 100644 index 0000000..7cc4047 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.11.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.12.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.12.png new file mode 100644 index 0000000..a97f4ad Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.12.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.13.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.13.png new file mode 100644 index 0000000..7a8c6bd Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.13.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.14.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.14.png new file mode 100644 index 0000000..ae47356 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.14.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.15.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.15.png new file mode 100644 index 0000000..b3a7260 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.15.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.16.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.16.png new file mode 100644 index 0000000..581e824 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.16.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.17.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.17.png new file mode 100644 index 0000000..581e824 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.17.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.18.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.18.png new file mode 100644 index 0000000..581e824 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.18.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.19.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.19.png new file mode 100644 index 0000000..581e824 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.19.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.2.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.2.png new file mode 100644 index 0000000..9877b92 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.2.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.3.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.3.png new file mode 100644 index 0000000..603bd24 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.3.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.4.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.4.png new file mode 100644 index 0000000..5fdfbb8 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.4.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.5.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.5.png new file mode 100644 index 0000000..a1ab987 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.5.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.6.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.6.png new file mode 100644 index 0000000..9ccf9b0 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.6.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.7.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.7.png new file mode 100644 index 0000000..6b40e1b Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.7.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.8.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.8.png new file mode 100644 index 0000000..2fda36d Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.8.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.9.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.9.png new file mode 100644 index 0000000..581e824 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.9.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.qml b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.qml new file mode 100644 index 0000000..3765668 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.qml @@ -0,0 +1,3079 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 32 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 48 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 64 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 80 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 96 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 112 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 128 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 144 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 160 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 176 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 192 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 208 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 224 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 240 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 256 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 272 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 288 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 304 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 320 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 336 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 352 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 368 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 384 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 400 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 416 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 432 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 448 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 464 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 480 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 496 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 512 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 528 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 544 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 560 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 576 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 592 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 608 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 624 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 640 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 656 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 672 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 688 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 704 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 720 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 736 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 752 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 768 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 784 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 800 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 816 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 832 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 848 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 864 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 880 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 896 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 912 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 928 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 944 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 960 + image: "listview.0.png" + } + Frame { + msec: 976 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 992 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1008 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1024 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1040 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1056 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1072 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1088 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1104 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1120 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1136 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1152 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1168 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1184 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1200 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1216 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1232 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1248 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1264 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1280 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1296 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1312 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1328 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1344 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1360 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1376 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1392 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1408 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1424 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1440 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1456 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1472 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1488 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1504 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1520 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1536 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1552 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1568 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1584 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1600 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1616 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1632 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1648 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1664 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1680 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1696 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1712 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1728 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1744 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1760 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1776 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1792 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1808 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1824 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1840 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1856 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1872 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1888 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1904 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1920 + image: "listview.1.png" + } + Frame { + msec: 1936 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1952 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1968 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1984 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2000 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2016 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2032 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2048 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2064 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2080 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2096 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2112 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2128 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2144 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2160 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2176 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2192 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2208 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2224 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2240 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2256 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2272 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2288 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2304 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2320 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2336 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2352 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2368 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2384 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2400 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2416 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2432 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2448 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2464 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2480 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2496 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2512 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2528 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2544 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2560 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2576 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2592 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 553; y: 267 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2608 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2624 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 554; y: 267 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 555; y: 266 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2640 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 556; y: 265 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 558; y: 260 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2656 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 560; y: 256 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2672 + hash: "c315e184c4dcb11d7e9fd4509a8b6a1f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 562; y: 250 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 566; y: 234 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2688 + hash: "aeef1cacca9518408519b670443e396f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 568; y: 216 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2704 + hash: "621626927f83bf7b36b78f5ca7ed4ed0" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 572; y: 192 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 572; y: 192 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2720 + hash: "b2aca965b745e98365195c52b9dd9a2c" + } + Frame { + msec: 2736 + hash: "4cc8c162afcc45c79afd8230893d4ddd" + } + Frame { + msec: 2752 + hash: "b9c0815086393878ad00566db7a3c577" + } + Frame { + msec: 2768 + hash: "23cbc15fce97f966c24e3ec626e01960" + } + Frame { + msec: 2784 + hash: "3a7ce897b47ba39e63be31a020de6f3d" + } + Frame { + msec: 2800 + hash: "2a8a32cd27fad2c57c9eb518c7b3b3ca" + } + Frame { + msec: 2816 + hash: "96d676ad58119430b440a5f0a2215f26" + } + Frame { + msec: 2832 + hash: "5f9cd251615ee6a98470a7b6098f7890" + } + Frame { + msec: 2848 + hash: "c9b1c073cbfbf1c353685b3f38baa675" + } + Frame { + msec: 2864 + hash: "cf5bfbfe8904ea40b796d2b33d5cc363" + } + Frame { + msec: 2880 + image: "listview.2.png" + } + Frame { + msec: 2896 + hash: "c75c3342b476f75fc0c5f56a374da13e" + } + Frame { + msec: 2912 + hash: "0dfcd15d21b7e949b56bc69d881c52f5" + } + Frame { + msec: 2928 + hash: "73b7352bb11d29cbf64b6b594e761e42" + } + Frame { + msec: 2944 + hash: "876361c2fc18c2236c1dffd36f517f44" + } + Frame { + msec: 2960 + hash: "0dfaf61e3a86ee056a5d76cf6f7994b2" + } + Frame { + msec: 2976 + hash: "391995cfc5d8d3808b30d74ba5ea3188" + } + Frame { + msec: 2992 + hash: "6fd4f14c16a8870355fa190c94e4be2d" + } + Frame { + msec: 3008 + hash: "0aac04c8092505d934220e61c7959512" + } + Frame { + msec: 3024 + hash: "6cb0fbe22fcd60b5ed6385e49522b32e" + } + Frame { + msec: 3040 + hash: "2eb7fd1a773e32ae94284cf57efaaff2" + } + Frame { + msec: 3056 + hash: "e143ed5eeb94b35ef97e965f34d45e4d" + } + Frame { + msec: 3072 + hash: "529e85f2cd48c1f0d056682b8350445b" + } + Frame { + msec: 3088 + hash: "d74bded985c00ecd192ff8fdce708450" + } + Frame { + msec: 3104 + hash: "f71568b2173f72c4433a019775923c02" + } + Frame { + msec: 3120 + hash: "1185a1c936ac08633c14d39ca9c4f5e9" + } + Frame { + msec: 3136 + hash: "e641720bf75f1e4f0a8471f3a8b35094" + } + Frame { + msec: 3152 + hash: "cecc41fb42abb95505c094829fd415bf" + } + Frame { + msec: 3168 + hash: "7ad89090beb9de3cd7c5a5a03fca900d" + } + Frame { + msec: 3184 + hash: "2a98fe4406367d4e286d8932d6a21318" + } + Frame { + msec: 3200 + hash: "9aad024b2fc25ce886ccaa4ac106b1d8" + } + Frame { + msec: 3216 + hash: "3c4a787a4d590efd2e72706e40df7b6d" + } + Frame { + msec: 3232 + hash: "1135e06c2981bdaed13c13400e178dc3" + } + Frame { + msec: 3248 + hash: "1fbceedf1c20f2aa3f05be36126280e2" + } + Frame { + msec: 3264 + hash: "5d1ec83f43b649c732cc3f7815100428" + } + Frame { + msec: 3280 + hash: "27501f6b6adccfdb77a5228611e2a95a" + } + Frame { + msec: 3296 + hash: "218dc244352c14467f2b2a39d78a1bc7" + } + Frame { + msec: 3312 + hash: "33a998563d2c053e375f619b7a75a224" + } + Frame { + msec: 3328 + hash: "02d34b79e25367e6d0dc1765cab12353" + } + Frame { + msec: 3344 + hash: "2698cf68138aa7d292167bcc85f60b74" + } + Frame { + msec: 3360 + hash: "0b33e929b420596ff1dce2eeef8480db" + } + Frame { + msec: 3376 + hash: "d8ec307a85cecaacaa908ceb34d5db5b" + } + Frame { + msec: 3392 + hash: "4afe1df3e802b41d1b89b5fab4e35190" + } + Frame { + msec: 3408 + hash: "e8f484ed8d2a6745ee87ac9544281d55" + } + Frame { + msec: 3424 + hash: "6df053920e87d7e6e3ec0368b4b14c25" + } + Frame { + msec: 3440 + hash: "6e94791acce321417a37132821c0260d" + } + Frame { + msec: 3456 + hash: "fea3e31cbf3078615f57c934197dac35" + } + Frame { + msec: 3472 + hash: "e8d15890a8bd95db39889d19f046901b" + } + Frame { + msec: 3488 + hash: "038b422b154dfef2d955b833892c581e" + } + Frame { + msec: 3504 + hash: "01180b3d9b504ca2814382eadaf3a4e0" + } + Frame { + msec: 3520 + hash: "869a0aa0d67043822c65383e0f3264d4" + } + Frame { + msec: 3536 + hash: "43785b1214510c10b65018a9d68a93b1" + } + Frame { + msec: 3552 + hash: "95e6ebc35c2fb128b6e6ac0743268523" + } + Frame { + msec: 3568 + hash: "f8c22a6ca3169de4d29b3b0e2908f581" + } + Frame { + msec: 3584 + hash: "6baf16c321847d269718bcb3468aeeb2" + } + Frame { + msec: 3600 + hash: "30804b5eb2a6d99116475cbdc1a9c043" + } + Frame { + msec: 3616 + hash: "c892c17ec947a910b74f5b8704405e9f" + } + Frame { + msec: 3632 + hash: "696029b77512943001c9eba64191e633" + } + Frame { + msec: 3648 + hash: "4c26bb0ca28d74a2bb79d0bfc8127361" + } + Frame { + msec: 3664 + hash: "6e8c50cc14c9afe73b4baf09a6a8f1a4" + } + Frame { + msec: 3680 + hash: "fd20e4259b44357c93f22f35c698fe1b" + } + Frame { + msec: 3696 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3712 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3728 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3744 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3760 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3776 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3792 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3808 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3824 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3840 + image: "listview.3.png" + } + Frame { + msec: 3856 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3872 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3888 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3904 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3920 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3936 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3952 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3968 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3984 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 4000 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 4016 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 4032 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 4048 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 4064 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 4080 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 4096 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 4112 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 4128 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 4144 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 521; y: 24 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4160 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 25 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4176 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 32 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 37 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4192 + hash: "a5df688148c264de1d376c9b87ddfa6b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 46 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4208 + hash: "a4e2c1878b0afce0ee1eebd63e9c951a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 66 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 88 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4224 + hash: "2f9a79278d492790ef86a09c77e95ff4" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 531; y: 136 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 531; y: 136 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4240 + hash: "5b5ce7206b26528157c426f4e1e3e0a8" + } + Frame { + msec: 4256 + hash: "65a1e5f81ab89b163aed46b984cca45e" + } + Frame { + msec: 4272 + hash: "e28253ad5a2415251b68bcda1d7d4bd0" + } + Frame { + msec: 4288 + hash: "71aae5abb4a9e9077053ea21dd3ec315" + } + Frame { + msec: 4304 + hash: "33fcea38fc3b328b3294f9ac2a26aa1a" + } + Frame { + msec: 4320 + hash: "6299eb1d87f371966307668b92de6a0b" + } + Frame { + msec: 4336 + hash: "4f66d8c7cb6971d0fc24089d123c547b" + } + Frame { + msec: 4352 + hash: "d9906d61b31fabf968290ebcd6688f34" + } + Frame { + msec: 4368 + hash: "5a1945993ff8096ba6b933d45586044a" + } + Frame { + msec: 4384 + hash: "331535e54da9bbdbc2fbf2b244ad0199" + } + Frame { + msec: 4400 + hash: "4dc39de0c54f6e0b77f94f6ae6c345ec" + } + Frame { + msec: 4416 + hash: "ec309a298ce246c13eb666488eb75016" + } + Frame { + msec: 4432 + hash: "a133819f8adc6265eb0e438261c869e3" + } + Frame { + msec: 4448 + hash: "da4d64fd6b3ae7d49ee5c5c8d0117a37" + } + Frame { + msec: 4464 + hash: "620dd1c3fc41ce657eac9d1a5b765fd4" + } + Frame { + msec: 4480 + hash: "ff1c370bd1bf75a98ae7125e7dd5a9db" + } + Frame { + msec: 4496 + hash: "59c6e4297109b5cc7c197749867dddae" + } + Frame { + msec: 4512 + hash: "91b1719e86529d0c35a53a2d0a095dd6" + } + Frame { + msec: 4528 + hash: "2994663d35c9eb453a27c1a1fa9aeeb8" + } + Frame { + msec: 4544 + hash: "ae4ec37b9f6a00b3c9139e5cfe13d32e" + } + Frame { + msec: 4560 + hash: "a98340236d1b65f47e88684168c1429d" + } + Frame { + msec: 4576 + hash: "34848b483ea6a2bd412e29d26beb3ab0" + } + Frame { + msec: 4592 + hash: "dd9bae0e2fca84b265d8cb59686ff88d" + } + Frame { + msec: 4608 + hash: "18b6ef6f5913b0612b76e7b2e25073dd" + } + Frame { + msec: 4624 + hash: "9398aab9478279aed1bc40c9378f8da4" + } + Frame { + msec: 4640 + hash: "a297a304c12102f23bd1e0f0207e0df9" + } + Frame { + msec: 4656 + hash: "091db9138cd6ae801ad857105a83c8f9" + } + Frame { + msec: 4672 + hash: "253938ca4a4f13433ddd502eb94cb7cd" + } + Frame { + msec: 4688 + hash: "6002df1793d290e4e31ee0c91c37bbe6" + } + Frame { + msec: 4704 + hash: "212476fa1c3a52fb8eba03ec3aecdcd8" + } + Frame { + msec: 4720 + hash: "80d4d8434d4e96a2bc23f5ed060d6ddc" + } + Frame { + msec: 4736 + hash: "2d4add725f31a04558635ce4b73a758a" + } + Frame { + msec: 4752 + hash: "57c06022ec1e502c4f49f43063c433e7" + } + Frame { + msec: 4768 + hash: "8393e97990993f9d5f68ea65f8e4a2db" + } + Frame { + msec: 4784 + hash: "9a1fcd96dffaf5c79ecc7f9427e02499" + } + Frame { + msec: 4800 + image: "listview.4.png" + } + Frame { + msec: 4816 + hash: "5ae722cf541e3453e73bbee57dc379e9" + } + Frame { + msec: 4832 + hash: "fc7326c2e2e56d9c3036e8dfc2ea77a8" + } + Frame { + msec: 4848 + hash: "f22a2a68cea158f333b0457025d75490" + } + Frame { + msec: 4864 + hash: "d684c8aa9b835779080f170cafead40f" + } + Frame { + msec: 4880 + hash: "dd451e5e421f929d015981bc7aeb8c66" + } + Frame { + msec: 4896 + hash: "d066f228295db7f46520495167d3e946" + } + Frame { + msec: 4912 + hash: "ebf640a457e3498bade3220aafa70331" + } + Frame { + msec: 4928 + hash: "190f5b1f3ce9d200790c34c50bcc62c5" + } + Frame { + msec: 4944 + hash: "9d4ad865246eb008afa40740b5c9a208" + } + Frame { + msec: 4960 + hash: "81c8b2c0b4f9e74f24d328a1d9b40a9f" + } + Frame { + msec: 4976 + hash: "24acc300307e71bee79bce8de76f56cb" + } + Frame { + msec: 4992 + hash: "1f9d31f94cfce6f868bfcc8a104d2465" + } + Frame { + msec: 5008 + hash: "7a3cab008dcb7a893ae30797b33df6f2" + } + Frame { + msec: 5024 + hash: "38d561a2950434e59513439c7f1120ea" + } + Frame { + msec: 5040 + hash: "8d34131faa15bc126bd4d9ef3be39ef5" + } + Frame { + msec: 5056 + hash: "85d57ef15791b56deb537795dd87911e" + } + Frame { + msec: 5072 + hash: "71e932169915a6c8c2cef0b22febf316" + } + Frame { + msec: 5088 + hash: "8b3452981963aeebadc9ac2013150263" + } + Frame { + msec: 5104 + hash: "a3fb8abecfeb48ba1cd1fd8f40896fa0" + } + Frame { + msec: 5120 + hash: "f53ab533f6a58ae45139f3da4bf8ab4e" + } + Frame { + msec: 5136 + hash: "9ec7012404f3c1c7795810dcee5acc3b" + } + Frame { + msec: 5152 + hash: "99ca43bab532dd5d7566e596c65053ce" + } + Frame { + msec: 5168 + hash: "0af83ad2416821cc230cd2856d1a3e39" + } + Frame { + msec: 5184 + hash: "86fa23ddf2005bbf35238ae04ae554ac" + } + Frame { + msec: 5200 + hash: "bb52a748f1d85dde410cfa4f24e3ed20" + } + Frame { + msec: 5216 + hash: "898b96bc5ee9a3ac61764e5cd9af8cfb" + } + Frame { + msec: 5232 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5248 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5264 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5280 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5296 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5312 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5328 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5344 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5360 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5376 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5392 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5408 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5424 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5440 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5456 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5472 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5488 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5504 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5520 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5536 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5552 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5568 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5584 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5600 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5616 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5632 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5648 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5664 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5680 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5696 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5712 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5728 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5744 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5760 + image: "listview.5.png" + } + Frame { + msec: 5776 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5792 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5808 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5824 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5840 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5856 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5872 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5888 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5904 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5920 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5936 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5952 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5968 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 111; y: 230 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 111; y: 227 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5984 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 111; y: 223 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6000 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 111; y: 216 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 111; y: 210 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6016 + hash: "0076b55d3da4ca365688b6a2c984103f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 112; y: 205 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6032 + hash: "db846ad8e3200ca1fce36a38dc7beab8" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 112; y: 192 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6048 + hash: "3cb6b25725b4285f9c096d595224c5ca" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 111; y: 180 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6064 + hash: "1832e12fdf3b464b02b296e727b33694" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 110; y: 173 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6080 + hash: "6d18d2b5f65cbba4915d0725d24b40f3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 109; y: 158 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 107; y: 140 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6096 + hash: "79bc7afc6b1aa5f8904b3e6d5d4a9389" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 103; y: 124 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6112 + hash: "4436f2d15304c839aacec486c1fd6d96" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 101; y: 111 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6128 + hash: "c3bffc7c95893cf9bbd8596208b7f657" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 101; y: 105 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 101; y: 100 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6144 + hash: "04231c2fdc02729aa34ed4e403dd373b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 101; y: 96 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6160 + hash: "392d75c4b372825e78366eb63a618170" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 101; y: 87 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 102; y: 83 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6176 + hash: "7f91f7bdb0cb62d600ac4aa573681fe3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 102; y: 79 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6192 + hash: "69207181a382650c5e33145555f0d9ba" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 103; y: 76 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 103; y: 72 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6208 + hash: "65a184b5c49b02e08114e437483f928d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 104; y: 68 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 105; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6224 + hash: "c22da9ce54d04f51fb55da755753a509" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 105; y: 61 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6240 + hash: "59dbd5216847a62f60a1d0701a15bb62" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 106; y: 57 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 106; y: 53 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6256 + hash: "bbfc902db6e6ca253afb1c90306b2a63" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 106; y: 47 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 106; y: 47 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6272 + hash: "5c41f194afec5f7e3db9d98673d03d5c" + } + Frame { + msec: 6288 + hash: "deb06d0f915d5f6ec39b1820d57b6af6" + } + Frame { + msec: 6304 + hash: "deb06d0f915d5f6ec39b1820d57b6af6" + } + Frame { + msec: 6320 + hash: "2a1a1f9239a6ccb308e51796f9b0bb89" + } + Frame { + msec: 6336 + hash: "3c1b44201616b8271023bf05a3f3f0f7" + } + Frame { + msec: 6352 + hash: "87afcef49db8b2b547e85e834f8ec304" + } + Frame { + msec: 6368 + hash: "290081b4b1272ef09ec9964c128e61b5" + } + Frame { + msec: 6384 + hash: "19bb3b23ee4b14a5f0a313106ef7c8c1" + } + Frame { + msec: 6400 + hash: "65a184b5c49b02e08114e437483f928d" + } + Frame { + msec: 6416 + hash: "832d2aefbcaf776f35039be527d367c5" + } + Frame { + msec: 6432 + hash: "69207181a382650c5e33145555f0d9ba" + } + Frame { + msec: 6448 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6464 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6480 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6496 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6512 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6528 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6544 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6560 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6576 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6592 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6608 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6624 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6640 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6656 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6672 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6688 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6704 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6720 + image: "listview.6.png" + } + Frame { + msec: 6736 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6752 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6768 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6784 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6800 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6816 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6832 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6848 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6864 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6880 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6896 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6912 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6928 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6944 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6960 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6976 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6992 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7008 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7024 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7040 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7056 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7072 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7088 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7104 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7120 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7136 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7152 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7168 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7184 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7200 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7216 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7232 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7248 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7264 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7280 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7296 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 519; y: 276 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7312 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 519; y: 275 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7328 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 519; y: 274 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7344 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 518; y: 273 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 518; y: 272 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7360 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 518; y: 271 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7376 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 518; y: 268 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7392 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 518; y: 266 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 518; y: 265 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7408 + hash: "9047f597b9e59ca652c172338bed6ef9" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 517; y: 262 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7424 + hash: "87476f78daecd6bb49e8d6e673d28100" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 517; y: 260 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7440 + hash: "6bfd895c6b7d97e4102eb26608cdfeca" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 517; y: 254 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7456 + hash: "e4c2b75beaee54a5781a5acbeb37ea64" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 517; y: 249 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7472 + hash: "d5e816768e9c3db0631416bd86b1b461" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 517; y: 243 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7488 + hash: "df6c7252ebb51e7447396b640e1c6ead" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 517; y: 237 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7504 + hash: "5f4db5386dc76b9f2dac47618c733dee" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 517; y: 231 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7520 + hash: "534d1d16d8321996969b54875ec5f1e0" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 517; y: 225 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7536 + hash: "5263016e53327df1972498b55a60c0ed" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 517; y: 219 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7552 + hash: "6787a5a16d2a61643bb1435f6488ada6" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 518; y: 215 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7568 + hash: "1feabcd683590c3d28d899167e6278b3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 519; y: 208 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7584 + hash: "c0495d6083b2e4ddd2b1dca2f231529c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 520; y: 202 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7600 + hash: "cb302493a17c1806dfcdf002c44e7acd" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 196 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7616 + hash: "f3822b79b678532ce7f826952636be90" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 189 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7632 + hash: "6e30eed182c38be110ba9c7e95b223be" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 185 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7648 + hash: "9e3ad0331c0c041b9a5747a1d44a43fe" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 177 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7664 + hash: "791e6abf9dae670770c2429ee9f1ad71" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 169 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7680 + image: "listview.7.png" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 160 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7696 + hash: "d3ae366fb8212cb987e23150802c88e3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 156 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7712 + hash: "b87708e19d7e8b64fe1ab50ec1723975" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 147 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7728 + hash: "512678e45cdd8d48e10b08ee020afe8e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 144 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7744 + hash: "211aa70e813819d476996b3396e9e5a0" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 137 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7760 + hash: "f16eaa360604be84ce61364ad9733b52" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 130 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7776 + hash: "d3af36dfb187d08abe1458f186a935a2" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 124 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7792 + hash: "9d0a0ba1deb7c4a4a8838e5e6a27f2f6" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 122 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7808 + hash: "69aac14f4c137e66724ca33f00a86676" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 116 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7824 + hash: "893d56e2a2ca257fae9f0c6c0629903d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 111 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7840 + hash: "b9f734e57a72e33973740a59776948d9" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 106 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7856 + hash: "e4b0f3f6a6785d7a183e4a36c5803301" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 104 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7872 + hash: "99ee1e8803c05e546a721b0c9ee39499" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 101 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7888 + hash: "96e7da2f895500a786ed36cb295e9003" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 99 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7904 + hash: "cd369fc5dc31814208e56cf7cd0decea" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 97 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7920 + hash: "5fee72994b65a45b4900a3073f86a3e1" + } + Frame { + msec: 7936 + hash: "9a2f8a65d842b8f92998e6411f7cd53c" + } + Frame { + msec: 7952 + hash: "2848d69017ce71ae101ccdfa7c67f933" + } + Frame { + msec: 7968 + hash: "6568aa88e81f988f65da435df7166167" + } + Frame { + msec: 7984 + hash: "d5f15ee08a2d7667786757a378a7a7f4" + } + Frame { + msec: 8000 + hash: "9b566bd02a561b32d1a4c1ec99c2e2c3" + } + Frame { + msec: 8016 + hash: "580419e1c9e91046547d913f6b8790a4" + } + Frame { + msec: 8032 + hash: "a5a3cd610ec0b35af1295ee6c41e09e3" + } + Frame { + msec: 8048 + hash: "a5a3cd610ec0b35af1295ee6c41e09e3" + } + Frame { + msec: 8064 + hash: "a5a3cd610ec0b35af1295ee6c41e09e3" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 521; y: 97 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8080 + hash: "a5a3cd610ec0b35af1295ee6c41e09e3" + } + Frame { + msec: 8096 + hash: "a5a3cd610ec0b35af1295ee6c41e09e3" + } + Frame { + msec: 8112 + hash: "83b91a371d682a501bc3a3fceabe4f8c" + } + Frame { + msec: 8128 + hash: "798b1dbfa0cce362213f426e2c60ac0e" + } + Frame { + msec: 8144 + hash: "d71b6a693c430a618c23413cb65bb320" + } + Frame { + msec: 8160 + hash: "2baae394390da39447a67151bc503d65" + } + Frame { + msec: 8176 + hash: "06688b05c61a7b862d39534207a8adab" + } + Frame { + msec: 8192 + hash: "a1d3042e16709817906dcdc673ee52c7" + } + Frame { + msec: 8208 + hash: "236dd41feac1b1a8a4bd7911bb184da2" + } + Frame { + msec: 8224 + hash: "f3ec821bba1d32e90bdab0e85c07d7d8" + } + Frame { + msec: 8240 + hash: "e328c35adf7ffc3d7e3af97e798ec8a5" + } + Frame { + msec: 8256 + hash: "651101db68fd3ed1dc5f441c126dc31b" + } + Frame { + msec: 8272 + hash: "651101db68fd3ed1dc5f441c126dc31b" + } + Frame { + msec: 8288 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8304 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8320 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8336 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8352 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8368 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8384 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8400 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8416 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8432 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8448 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8464 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8480 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8496 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8512 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8528 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8544 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8560 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8576 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8592 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8608 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8624 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8640 + image: "listview.8.png" + } + Frame { + msec: 8656 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8672 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8688 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8704 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8720 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8736 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8752 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8768 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8784 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8800 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8816 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8832 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8848 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8864 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8880 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8896 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8912 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8928 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8944 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8960 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8976 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8992 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9008 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9024 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9040 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9056 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9072 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9088 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9104 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9120 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9136 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9152 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9168 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9184 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9200 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9216 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9232 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9248 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9264 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9280 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9296 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9312 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9328 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9344 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9360 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9376 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9392 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9408 + hash: "1171be123a361d72859c25434573482c" + } +} diff --git a/tests/auto/declarative/qmlvisual/ListView/data-X11/basic1.qml b/tests/auto/declarative/qmlvisual/ListView/data-X11/basic1.qml new file mode 100644 index 0000000..ae59b14 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/data-X11/basic1.qml @@ -0,0 +1,159 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 32 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 48 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 64 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 80 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 96 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 112 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 128 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 144 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 160 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 176 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 192 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 208 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 224 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 240 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 256 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 272 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 288 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 304 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 320 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 336 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 352 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 368 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 384 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 400 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 416 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 432 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 448 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 464 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 480 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 496 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 512 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 528 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 544 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 560 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 576 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } +} diff --git a/tests/auto/declarative/qmlvisual/ListView/data-X11/basic2.qml b/tests/auto/declarative/qmlvisual/ListView/data-X11/basic2.qml new file mode 100644 index 0000000..ff19d22 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/data-X11/basic2.qml @@ -0,0 +1,187 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 32 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 48 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 64 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 80 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 96 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 112 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 128 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 144 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 160 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 176 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 192 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 208 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 224 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 240 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 256 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 272 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 288 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 304 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 320 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 336 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 352 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 368 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 384 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 400 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 416 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 432 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 448 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 464 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 480 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 496 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 512 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 528 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 544 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 560 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 576 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 592 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 608 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 624 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 640 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 656 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 672 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 688 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } +} diff --git a/tests/auto/declarative/qmlvisual/ListView/data-X11/basic3.qml b/tests/auto/declarative/qmlvisual/ListView/data-X11/basic3.qml new file mode 100644 index 0000000..2f33cae --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/data-X11/basic3.qml @@ -0,0 +1,147 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 32 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 48 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 64 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 80 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 96 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 112 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 128 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 144 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 160 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 176 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 192 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 208 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 224 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 240 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 256 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 272 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 288 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 304 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 320 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 336 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 352 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 368 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 384 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 400 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 416 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 432 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 448 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 464 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 480 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 496 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 512 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 528 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } +} diff --git a/tests/auto/declarative/qmlvisual/ListView/data-X11/basic4.qml b/tests/auto/declarative/qmlvisual/ListView/data-X11/basic4.qml new file mode 100644 index 0000000..4b1c5cf --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/data-X11/basic4.qml @@ -0,0 +1,171 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 32 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 48 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 64 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 80 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 96 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 112 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 128 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 144 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 160 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 176 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 192 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 208 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 224 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 240 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 256 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 272 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 288 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 304 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 320 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 336 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 352 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 368 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 384 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 400 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 416 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 432 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 448 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 464 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 480 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 496 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 512 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 528 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 544 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 560 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 576 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 592 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 608 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } + Frame { + msec: 624 + hash: "c0dc2737283d8dfa62631e0cbb948b99" + } +} diff --git a/tests/auto/declarative/qmlvisual/ListView/data/basic1.qml b/tests/auto/declarative/qmlvisual/ListView/data/basic1.qml new file mode 100644 index 0000000..4cd44fc --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/data/basic1.qml @@ -0,0 +1,159 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 32 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 48 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 64 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 80 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 96 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 112 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 128 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 144 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 160 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 176 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 192 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 208 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 224 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 240 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 256 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 272 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 288 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 304 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 320 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 336 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 352 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 368 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 384 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 400 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 416 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 432 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 448 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 464 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 480 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 496 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 512 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 528 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Key { + type: 6 + key: 16777249 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 544 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 560 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 576 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } +} diff --git a/tests/auto/declarative/qmlvisual/ListView/data/basic2.qml b/tests/auto/declarative/qmlvisual/ListView/data/basic2.qml new file mode 100644 index 0000000..34ad5ed --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/data/basic2.qml @@ -0,0 +1,187 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 32 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 48 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 64 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 80 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 96 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 112 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 128 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 144 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 160 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 176 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 192 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 208 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 224 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 240 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 256 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 272 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 288 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 304 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 320 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 336 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 352 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 368 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 384 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 400 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 416 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 432 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 448 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 464 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 480 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 496 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 512 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 528 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 544 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 560 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 576 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 592 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 608 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 624 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 640 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Key { + type: 6 + key: 16777249 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 656 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 672 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 688 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } +} diff --git a/tests/auto/declarative/qmlvisual/ListView/data/basic3.qml b/tests/auto/declarative/qmlvisual/ListView/data/basic3.qml new file mode 100644 index 0000000..1c5ddb0 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/data/basic3.qml @@ -0,0 +1,147 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 32 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 48 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 64 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 80 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 96 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 112 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 128 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 144 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 160 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 176 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 192 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 208 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 224 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 240 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 256 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 272 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 288 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 304 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 320 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 336 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 352 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 368 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 384 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 400 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 416 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 432 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 448 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 464 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Key { + type: 6 + key: 16777249 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 480 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 496 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 512 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 528 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } +} diff --git a/tests/auto/declarative/qmlvisual/ListView/data/basic4.qml b/tests/auto/declarative/qmlvisual/ListView/data/basic4.qml new file mode 100644 index 0000000..d121d91 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/data/basic4.qml @@ -0,0 +1,171 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 32 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 48 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 64 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 80 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 96 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 112 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 128 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 144 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 160 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 176 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 192 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 208 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 224 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 240 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 256 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 272 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 288 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 304 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 320 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 336 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 352 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 368 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 384 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 400 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 416 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 432 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 448 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 464 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 480 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 496 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 512 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 528 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Key { + type: 6 + key: 16777249 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 544 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 560 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 576 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 592 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 608 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } + Frame { + msec: 624 + hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + } +} diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.0.png b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.0.png new file mode 100644 index 0000000..a1947ca Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.0.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.1.png b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.1.png new file mode 100644 index 0000000..d27b7fa Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.1.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.2.png b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.2.png new file mode 100644 index 0000000..fdab8c6 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.2.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.3.png b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.3.png new file mode 100644 index 0000000..dc321a8 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.3.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.4.png b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.4.png new file mode 100644 index 0000000..fdab8c6 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.4.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.5.png b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.5.png new file mode 100644 index 0000000..15b51cb Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.5.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.6.png b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.6.png new file mode 100644 index 0000000..a1947ca Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.6.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.qml b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.qml new file mode 100644 index 0000000..073749f --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.qml @@ -0,0 +1,2203 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 32 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 48 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 64 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 80 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 96 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 112 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 128 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 144 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 160 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 176 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 192 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 208 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 224 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 240 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 256 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 272 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 288 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 304 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 320 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 336 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 352 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 368 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 384 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 400 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 416 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 432 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 448 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 464 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 480 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 496 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 512 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 528 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 544 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 560 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 576 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 592 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 608 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 624 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 640 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 656 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 672 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 688 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 704 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 720 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 736 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 752 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 768 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 784 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 800 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 816 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 832 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 848 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 864 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 880 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 896 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 912 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 928 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 944 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 960 + image: "itemlist.0.png" + } + Frame { + msec: 976 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 992 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1008 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1024 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1040 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1056 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1072 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1088 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1104 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1120 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1136 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1152 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1168 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1184 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1200 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1216 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1232 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1248 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1264 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1280 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1296 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1312 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1328 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1344 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1360 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1376 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1392 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1408 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1424 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1440 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1456 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1472 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1488 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1504 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1520 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1536 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1552 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1568 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1584 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1600 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1616 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1632 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 1648 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 192; y: 111 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1664 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 191; y: 111 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1680 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 190; y: 112 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 187; y: 113 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1696 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 184; y: 113 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 180; y: 113 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1712 + hash: "a68b1bc6c2963ee92c3a45f500667b3b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 174; y: 114 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 167; y: 115 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1728 + hash: "7cda93e59466b3348e7ffe3895f89e86" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 160; y: 117 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1744 + hash: "06e0008c78e919f7270402938d9d764b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 140; y: 121 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 132; y: 122 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1760 + hash: "9d8da9199efebb95f56e5d4ebc9a585e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 114; y: 126 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 98; y: 132 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1776 + hash: "54a60a4279911ba4a8a5741bcadfa783" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 91; y: 132 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 91; y: 132 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1792 + hash: "a1a19370a1a8ed78e475f0d0eb12311c" + } + Frame { + msec: 1808 + hash: "196a3b127cf7065614c34856bf8d8bca" + } + Frame { + msec: 1824 + hash: "5fbefbd7c7be4374382cc4c8b86ac78a" + } + Frame { + msec: 1840 + hash: "d6a544c622e504c1b931e1a8a1310a6e" + } + Frame { + msec: 1856 + hash: "20e76f0eb4ec5f691999faf8ad313370" + } + Frame { + msec: 1872 + hash: "7f84a3545907c754ae8a6a30ef61c98d" + } + Frame { + msec: 1888 + hash: "b544901eae32903ad054e8cdfed715eb" + } + Frame { + msec: 1904 + hash: "a010ed1e3312f4ca9f429b7e32cdcef9" + } + Frame { + msec: 1920 + image: "itemlist.1.png" + } + Frame { + msec: 1936 + hash: "93a731dc6f71b6ff5400bf74c87e6c46" + } + Frame { + msec: 1952 + hash: "c73f63d1a024ba956e693487b3ccc761" + } + Frame { + msec: 1968 + hash: "539d3d00fce2d0128cd697d86d237fe7" + } + Frame { + msec: 1984 + hash: "52752d7d6f2d0e085f7132313907b72b" + } + Frame { + msec: 2000 + hash: "f46dd5803a6075e979e0fc733d503bfb" + } + Frame { + msec: 2016 + hash: "b8734698a6bad00ecf019f85328c2c21" + } + Frame { + msec: 2032 + hash: "1cfc499ca756023430cc5b2fa95a599d" + } + Frame { + msec: 2048 + hash: "63a816548837c19f8f0494c137fc0174" + } + Frame { + msec: 2064 + hash: "1bce9b85235e9a1a472c079dfec70ec5" + } + Frame { + msec: 2080 + hash: "6677863e7f74c12648409883f73adbe2" + } + Frame { + msec: 2096 + hash: "98e707a3e39a5f7bd4a101c2ed83535c" + } + Frame { + msec: 2112 + hash: "c1f6d8842d14a9394d4b7797314f50e8" + } + Frame { + msec: 2128 + hash: "579758b477bcd2112b305a5aac7df338" + } + Frame { + msec: 2144 + hash: "4a7bb81090db246db53e2dbc56f710ea" + } + Frame { + msec: 2160 + hash: "074995cdd8a70817d1c8a7bb0ad4c542" + } + Frame { + msec: 2176 + hash: "bd8d7bda4d2e9ad1fba2895d568f36cc" + } + Frame { + msec: 2192 + hash: "40cce3d2d80ac470af44fc334cec1d5b" + } + Frame { + msec: 2208 + hash: "15cbc226b032d5a97199735ea7a1408b" + } + Frame { + msec: 2224 + hash: "12b296aea9b058a5402d0d0a620f8edc" + } + Frame { + msec: 2240 + hash: "6ffd2b79cf0e941a59e74bc6f9025bcb" + } + Frame { + msec: 2256 + hash: "589a58ef76ea709dc8d80390c9044f99" + } + Frame { + msec: 2272 + hash: "c009924bfa30153f22ab168b539494e9" + } + Frame { + msec: 2288 + hash: "4b83674a7c2daa68d735901ad40be2bd" + } + Frame { + msec: 2304 + hash: "0525908c0302ada989e28990bac3f2ca" + } + Frame { + msec: 2320 + hash: "89eb13976ba3ba4413cafeb0cc91c01b" + } + Frame { + msec: 2336 + hash: "75c1295ef99680784b2e11fb88fa1423" + } + Frame { + msec: 2352 + hash: "93d89165cf6a97c76ae6e7f75678a3cd" + } + Frame { + msec: 2368 + hash: "53064c1938f08a55603a99b0db225174" + } + Frame { + msec: 2384 + hash: "31db5684466c0c32128a9a8c7b1835e1" + } + Frame { + msec: 2400 + hash: "99d9e58697736198e0a00443d237e85b" + } + Frame { + msec: 2416 + hash: "6c1e860aef983367365d53f5849ad441" + } + Frame { + msec: 2432 + hash: "6c1e860aef983367365d53f5849ad441" + } + Frame { + msec: 2448 + hash: "6c1e860aef983367365d53f5849ad441" + } + Frame { + msec: 2464 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2480 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2496 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2512 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2528 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2544 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2560 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2576 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2592 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2608 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2624 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2640 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2656 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2672 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2688 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2704 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2720 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2736 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2752 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2768 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2784 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2800 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2816 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2832 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2848 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 2864 + hash: "99f9988040a389576cb6420b5391f768" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 181; y: 104 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2880 + image: "itemlist.2.png" + } + Frame { + msec: 2896 + hash: "99f9988040a389576cb6420b5391f768" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 179; y: 105 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 177; y: 106 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2912 + hash: "99f9988040a389576cb6420b5391f768" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 174; y: 108 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 170; y: 110 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2928 + hash: "5bb06b4e74532ba5bc8c7bc38bf77d7f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 166; y: 112 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 160; y: 115 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2944 + hash: "b10a6206830a876017799ef2fcf61b1a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 154; y: 117 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 140; y: 123 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2960 + hash: "b2e24759ba10afd6cff90f4b1e04b496" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 124; y: 127 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 124; y: 127 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2976 + hash: "ccbcd6f45cb529c2db71504c0f69d73e" + } + Frame { + msec: 2992 + hash: "7b31c6d5931677f1aa1e8c7d48a4ff22" + } + Frame { + msec: 3008 + hash: "c52f691a0a6cf155118bdfea2dfea623" + } + Frame { + msec: 3024 + hash: "dd639d1df3d4a9b8f06718def63d588f" + } + Frame { + msec: 3040 + hash: "39d767b09a648ef6295cec2848f9226f" + } + Frame { + msec: 3056 + hash: "5dd46d5f386431e7b13348ac9a9630ed" + } + Frame { + msec: 3072 + hash: "0354e5183b0e66e7ba146d292c559df4" + } + Frame { + msec: 3088 + hash: "984aa6d7075e24de429e05b1b0eda94a" + } + Frame { + msec: 3104 + hash: "1af58a2f44f1f613712d4df85e38356d" + } + Frame { + msec: 3120 + hash: "6e4085e7f1fee724d78808753f04b471" + } + Frame { + msec: 3136 + hash: "73a019ef9057639d631cd99a431b3f3b" + } + Frame { + msec: 3152 + hash: "c9414a2e655a90dfdcb6fb288b4ba0ca" + } + Frame { + msec: 3168 + hash: "3f4c24f7ac89da982af22032309637fb" + } + Frame { + msec: 3184 + hash: "a50e6ada8f73a257657f4348ceaffcfd" + } + Frame { + msec: 3200 + hash: "a67bf40d09259bbd079c12ae4f49150f" + } + Frame { + msec: 3216 + hash: "a2fc512b7c234a9d0b2c1a83387a8a46" + } + Frame { + msec: 3232 + hash: "85090683ce9a3c9833b1cb0b3df076ee" + } + Frame { + msec: 3248 + hash: "275f3594a0e2cc4b6717f9f336e7e1b6" + } + Frame { + msec: 3264 + hash: "2473eb11f7b65a784a2b166114026488" + } + Frame { + msec: 3280 + hash: "4865c30dc45fbf5ca82047b77eca0912" + } + Frame { + msec: 3296 + hash: "54de88bca395449fbaea2c090c7a5d91" + } + Frame { + msec: 3312 + hash: "833f9295cf9a34934f001eac48551b59" + } + Frame { + msec: 3328 + hash: "5bf565f57ababa7380faeee94add91ca" + } + Frame { + msec: 3344 + hash: "6325578867f1eb3b2d47ed40b017b571" + } + Frame { + msec: 3360 + hash: "046a6114176b3a3206b7a2acd6e30b41" + } + Frame { + msec: 3376 + hash: "f8d4120a17f28c2d1d9c4be959098058" + } + Frame { + msec: 3392 + hash: "71356d2e48aad2900784ea6bc1a3d908" + } + Frame { + msec: 3408 + hash: "b84ad460fb81fdc4049abe8f3ff180bb" + } + Frame { + msec: 3424 + hash: "0354239f5eaea23474d9f81385392a8a" + } + Frame { + msec: 3440 + hash: "8ef0eef3393e07ae7605c865a95edc30" + } + Frame { + msec: 3456 + hash: "5b8b384cc8e3faf4310015e19b3eb487" + } + Frame { + msec: 3472 + hash: "77c18ac7dfff2a4e516915e3e3df0717" + } + Frame { + msec: 3488 + hash: "c1d3264384c26345eb8100de829309ca" + } + Frame { + msec: 3504 + hash: "6b21f71d0bedef4bbcb445a13f61e7a3" + } + Frame { + msec: 3520 + hash: "f619097356671f6eb54d3b1c481e709d" + } + Frame { + msec: 3536 + hash: "e56e3a90da446e0c482cb93717f6aacc" + } + Frame { + msec: 3552 + hash: "aa94ebdbb4b8423aff28c95daff0baf5" + } + Frame { + msec: 3568 + hash: "e1744d9cacd1a2c96af4cfdd5c486995" + } + Frame { + msec: 3584 + hash: "7f19ea52e9e41a3b1bd90bb2a144d305" + } + Frame { + msec: 3600 + hash: "7f19ea52e9e41a3b1bd90bb2a144d305" + } + Frame { + msec: 3616 + hash: "7f19ea52e9e41a3b1bd90bb2a144d305" + } + Frame { + msec: 3632 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3648 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3664 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3680 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3696 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3712 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3728 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3744 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3760 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3776 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3792 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3808 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3824 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3840 + image: "itemlist.3.png" + } + Frame { + msec: 3856 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3872 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3888 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3904 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3920 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3936 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3952 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3968 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 3984 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 4000 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 4016 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 4032 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 4048 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 4064 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 4080 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Frame { + msec: 4096 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 31; y: 137 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4112 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 32; y: 137 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4128 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 33; y: 136 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 36; y: 135 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4144 + hash: "88143ff6c278a5433b314b551b7b8b1d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 40; y: 134 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 132 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4160 + hash: "c2c9c284b185a89faf4ddb5a7867f449" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 64; y: 130 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4176 + hash: "de1c18aeda5d2fbd6dad4554c78617bd" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 86; y: 126 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 110; y: 118 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 110; y: 118 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4192 + hash: "a67bf40d09259bbd079c12ae4f49150f" + } + Frame { + msec: 4208 + hash: "94514668dafbe41c5890a578efd6dea4" + } + Frame { + msec: 4224 + hash: "2e97a74eb9ddb1c9613c89e2d78db018" + } + Frame { + msec: 4240 + hash: "4b5368f0d86bffeb6bd31b58aec88650" + } + Frame { + msec: 4256 + hash: "b459bde7bb4ce51e6ecdab58f64fcbb9" + } + Frame { + msec: 4272 + hash: "7bac8cc3ec64c9ad1c0da282e38c953e" + } + Frame { + msec: 4288 + hash: "a73a58c3d7a757547740a2a161f4c756" + } + Frame { + msec: 4304 + hash: "b35edcb1fa3568a3e770ab2364b82e75" + } + Frame { + msec: 4320 + hash: "d6c863ef57c5e5cb04cdac72f920db0b" + } + Frame { + msec: 4336 + hash: "0db5e4588ff851918b07796f0cf07382" + } + Frame { + msec: 4352 + hash: "71ec8c363ca6a6f7556afb70faccffe6" + } + Frame { + msec: 4368 + hash: "18d026e9c965ada1db67c643576d2a80" + } + Frame { + msec: 4384 + hash: "69f71c22dff981a4da8ec1edcf90e79f" + } + Frame { + msec: 4400 + hash: "680460f5e4d9e649931601041af046b2" + } + Frame { + msec: 4416 + hash: "3028763fd15de2607b20b1331b904a4a" + } + Frame { + msec: 4432 + hash: "333eb60e217fe1ea7469eab52ac461f1" + } + Frame { + msec: 4448 + hash: "ccbcd6f45cb529c2db71504c0f69d73e" + } + Frame { + msec: 4464 + hash: "3445df9b41a0a3e74738cbf328ab7d5c" + } + Frame { + msec: 4480 + hash: "bd2c072558479e9de7a97207e58cc57f" + } + Frame { + msec: 4496 + hash: "3d34b0b24a30eda93377dcb4585afed8" + } + Frame { + msec: 4512 + hash: "d3045703863b0c5a327b9355c23d69f2" + } + Frame { + msec: 4528 + hash: "2f2eb55f693415b840a317211b250e9f" + } + Frame { + msec: 4544 + hash: "791b9ca7d47a3343474c30a35e336d4b" + } + Frame { + msec: 4560 + hash: "73a0c02ebad6d3d5f939d9a00dd898bf" + } + Frame { + msec: 4576 + hash: "d5c11135d586711b12f236430a2c2795" + } + Frame { + msec: 4592 + hash: "34f9ea214fe714ff4e994f715ea6ea39" + } + Frame { + msec: 4608 + hash: "8e49afa00983b156b818533923fb6edd" + } + Frame { + msec: 4624 + hash: "e7e7bef17cee92eca9191fd734d7a577" + } + Frame { + msec: 4640 + hash: "e407f6ed7cb3c130365ab5515d6308c0" + } + Frame { + msec: 4656 + hash: "5bb06b4e74532ba5bc8c7bc38bf77d7f" + } + Frame { + msec: 4672 + hash: "0ad7411316031e22034c14e81ca3a806" + } + Frame { + msec: 4688 + hash: "dd81d7a9b48c922b4c42cba1b5f2b9d7" + } + Frame { + msec: 4704 + hash: "32bef6f5005ad94e29ff59165958fbdc" + } + Frame { + msec: 4720 + hash: "87758dd311f91193bf1e3536c2f58525" + } + Frame { + msec: 4736 + hash: "015be92a4ff4e735fcc3cbc7a8b9d763" + } + Frame { + msec: 4752 + hash: "d4c34ed49317c6692d71681fcd9842b6" + } + Frame { + msec: 4768 + hash: "abaa235bb946a8abaddd52981d632c2d" + } + Frame { + msec: 4784 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4800 + image: "itemlist.4.png" + } + Frame { + msec: 4816 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4832 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4848 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4864 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4880 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4896 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4912 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4928 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4944 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4960 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4976 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 4992 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5008 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5024 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5040 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5056 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5072 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5088 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5104 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5120 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5136 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5152 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5168 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5184 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5200 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5216 + hash: "99f9988040a389576cb6420b5391f768" + } + Frame { + msec: 5232 + hash: "99f9988040a389576cb6420b5391f768" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 17; y: 120 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5248 + hash: "99f9988040a389576cb6420b5391f768" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 19; y: 120 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 21; y: 120 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5264 + hash: "99f9988040a389576cb6420b5391f768" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 24; y: 119 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 28; y: 119 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5280 + hash: "95b380c9ab6f8db7b822faf023d94546" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 35; y: 119 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 44; y: 119 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5296 + hash: "bb79e53556698c62ec30c75be9f6b7d7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 119 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 96; y: 117 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 96; y: 117 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5312 + hash: "285cc2f0df1f59f25a0135560ab6edf2" + } + Frame { + msec: 5328 + hash: "93a731dc6f71b6ff5400bf74c87e6c46" + } + Frame { + msec: 5344 + hash: "eb555741ab128a50de5a18a454f2e639" + } + Frame { + msec: 5360 + hash: "5dbe6cf898c1e37fcaacecfcf57b2194" + } + Frame { + msec: 5376 + hash: "e7795610115593e78bb32f7bcc0ae2eb" + } + Frame { + msec: 5392 + hash: "20e76f0eb4ec5f691999faf8ad313370" + } + Frame { + msec: 5408 + hash: "d6a544c622e504c1b931e1a8a1310a6e" + } + Frame { + msec: 5424 + hash: "e7a3a21feed244c5b1c710a9254c15f0" + } + Frame { + msec: 5440 + hash: "5a4b1aca24f121d1373646e9d80b86fd" + } + Frame { + msec: 5456 + hash: "331d2ec7021655c86aa64e47718a1088" + } + Frame { + msec: 5472 + hash: "92096bc872e7395aa5b75c44646a0b60" + } + Frame { + msec: 5488 + hash: "0d9aa6cee4d21488cbb5153f8f3ed593" + } + Frame { + msec: 5504 + hash: "c1b943d43701605563fffffcb75f9fa7" + } + Frame { + msec: 5520 + hash: "1b680025d5ad1ddd8f8d5f570ba73e71" + } + Frame { + msec: 5536 + hash: "5539a3b9f60ea747c10ed8328b467cbf" + } + Frame { + msec: 5552 + hash: "0a1317bcb606cd3488c5b14ee5d96585" + } + Frame { + msec: 5568 + hash: "8844af68b11db7d92c69804c7371a746" + } + Frame { + msec: 5584 + hash: "28d7fd127739c6e3b8488651b725c802" + } + Frame { + msec: 5600 + hash: "0cf1a7d958a96aa2768995dddc5ccc09" + } + Frame { + msec: 5616 + hash: "64b902fe7ab4d89ef0c7b760974e3488" + } + Frame { + msec: 5632 + hash: "aba11c597eba550fc1eaddbf554057f6" + } + Frame { + msec: 5648 + hash: "1bacaa3bb9dc3cac9ffc7491cb4dc1a5" + } + Frame { + msec: 5664 + hash: "0ba8b582234d9f0c198c0c9e18e1cb02" + } + Frame { + msec: 5680 + hash: "f66eaf2b5c3529987c0d9d005351ed73" + } + Frame { + msec: 5696 + hash: "75b0bb720fa4c77da3783b3ff31c2fae" + } + Frame { + msec: 5712 + hash: "345b235bb7f13409378e5c0c370f2a41" + } + Frame { + msec: 5728 + hash: "83b7e902dce4e0fdc4ef5d629188c23c" + } + Frame { + msec: 5744 + hash: "04b9041c6f10969889d92e94785c7e88" + } + Frame { + msec: 5760 + image: "itemlist.5.png" + } + Frame { + msec: 5776 + hash: "4f3a902addc34ecdaf390e2427cc52e7" + } + Frame { + msec: 5792 + hash: "68d443f16c16821ffc9ca68b17c76034" + } + Frame { + msec: 5808 + hash: "9d25adc77befa761ee376a9b43595b5e" + } + Frame { + msec: 5824 + hash: "a68b1bc6c2963ee92c3a45f500667b3b" + } + Frame { + msec: 5840 + hash: "d5268cd58c222451d48038e715e83802" + } + Frame { + msec: 5856 + hash: "f37d461541a8ec7a4161b18748de6aea" + } + Frame { + msec: 5872 + hash: "805319ac7ca842feb3649e92f8b5b72f" + } + Frame { + msec: 5888 + hash: "73124472a05080891d4948d8ca273f8c" + } + Frame { + msec: 5904 + hash: "b6e433a23282a50db2e165a2447ba3f6" + } + Frame { + msec: 5920 + hash: "fd8d3f5688b1806998c6087e18c6c730" + } + Frame { + msec: 5936 + hash: "f132dd459950ef2d18aa93ca950d0692" + } + Frame { + msec: 5952 + hash: "ade5beb259b5277c333ca806fc9bdbec" + } + Frame { + msec: 5968 + hash: "ade5beb259b5277c333ca806fc9bdbec" + } + Frame { + msec: 5984 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6000 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6016 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6032 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6048 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6064 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6080 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6096 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6112 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6128 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6144 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6160 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6176 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6192 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6208 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6224 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6240 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6256 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6272 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6288 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6304 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6320 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6336 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6352 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6368 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6384 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6400 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6416 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6432 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6448 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6464 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6480 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6496 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6512 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6528 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6544 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6560 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6576 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6592 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6608 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6624 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6640 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6656 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6672 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6688 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6704 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6720 + image: "itemlist.6.png" + } + Frame { + msec: 6736 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6752 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6768 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6784 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6800 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6816 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6832 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6848 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6864 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6880 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6896 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6912 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6928 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6944 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6960 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6976 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 6992 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7008 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7024 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7040 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7056 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7072 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7088 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7104 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7120 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7136 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7152 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7168 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7184 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7200 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7216 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7232 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7248 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7264 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7280 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7296 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } + Frame { + msec: 7312 + hash: "bf47cc398a702dd17c8efebb3d2f8073" + } +} diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.0.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.0.png new file mode 100644 index 0000000..581e824 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/listview.0.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.1.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.1.png new file mode 100644 index 0000000..581e824 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/listview.1.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.10.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.10.png new file mode 100644 index 0000000..dcfca3f Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/listview.10.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.11.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.11.png new file mode 100644 index 0000000..7cc4047 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/listview.11.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.12.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.12.png new file mode 100644 index 0000000..a97f4ad Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/listview.12.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.13.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.13.png new file mode 100644 index 0000000..7a8c6bd Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/listview.13.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.14.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.14.png new file mode 100644 index 0000000..ae47356 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/listview.14.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.15.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.15.png new file mode 100644 index 0000000..b3a7260 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/listview.15.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.16.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.16.png new file mode 100644 index 0000000..581e824 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/listview.16.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.17.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.17.png new file mode 100644 index 0000000..581e824 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/listview.17.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.18.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.18.png new file mode 100644 index 0000000..581e824 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/listview.18.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.19.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.19.png new file mode 100644 index 0000000..581e824 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/listview.19.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.2.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.2.png new file mode 100644 index 0000000..579c68c Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/listview.2.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.3.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.3.png new file mode 100644 index 0000000..b3a7260 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/listview.3.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.4.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.4.png new file mode 100644 index 0000000..19758b0 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/listview.4.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.5.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.5.png new file mode 100644 index 0000000..581e824 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/listview.5.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.6.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.6.png new file mode 100644 index 0000000..82cac48 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/listview.6.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.7.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.7.png new file mode 100644 index 0000000..9277a82 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/listview.7.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.8.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.8.png new file mode 100644 index 0000000..8c36da7 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/listview.8.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.9.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.9.png new file mode 100644 index 0000000..581e824 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/ListView/data/listview.9.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.qml b/tests/auto/declarative/qmlvisual/ListView/data/listview.qml new file mode 100644 index 0000000..cd5d7b4 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/data/listview.qml @@ -0,0 +1,3079 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 32 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 48 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 64 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 80 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 96 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 112 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 128 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 144 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 160 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 176 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 192 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 208 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 224 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 240 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 256 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 272 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 288 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 304 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 320 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 336 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 352 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 368 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 384 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 400 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 416 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 432 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 448 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 464 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 480 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 496 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 512 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 528 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 544 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 560 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 576 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 592 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 608 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 624 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 640 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 656 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 672 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 688 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 704 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 720 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 736 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 752 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 768 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 784 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 800 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 816 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 832 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 848 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 864 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 880 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 896 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 912 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 928 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 944 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 960 + image: "listview.0.png" + } + Frame { + msec: 976 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 992 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1008 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1024 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1040 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1056 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1072 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1088 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1104 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1120 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1136 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1152 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1168 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1184 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1200 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1216 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1232 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1248 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1264 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1280 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1296 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1312 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1328 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1344 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1360 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1376 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1392 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1408 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1424 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1440 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1456 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1472 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1488 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1504 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1520 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1536 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1552 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1568 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1584 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1600 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1616 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1632 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1648 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1664 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1680 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1696 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1712 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1728 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1744 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1760 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1776 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1792 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1808 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1824 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1840 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1856 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1872 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1888 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1904 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1920 + image: "listview.1.png" + } + Frame { + msec: 1936 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1952 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1968 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 1984 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2000 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2016 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2032 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2048 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2064 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2080 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2096 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2112 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2128 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2144 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2160 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2176 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2192 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2208 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2224 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2240 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2256 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2272 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2288 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2304 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2320 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2336 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2352 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2368 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2384 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2400 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2416 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2432 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2448 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2464 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2480 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2496 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2512 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2528 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2544 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2560 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2576 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2592 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 553; y: 267 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2608 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 2624 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 554; y: 267 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 555; y: 266 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2640 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 556; y: 265 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 558; y: 260 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2656 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 560; y: 256 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2672 + hash: "c315e184c4dcb11d7e9fd4509a8b6a1f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 562; y: 250 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 566; y: 234 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2688 + hash: "aeef1cacca9518408519b670443e396f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 568; y: 216 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2704 + hash: "621626927f83bf7b36b78f5ca7ed4ed0" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 572; y: 192 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 572; y: 192 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2720 + hash: "b2aca965b745e98365195c52b9dd9a2c" + } + Frame { + msec: 2736 + hash: "b80cc493e604c42aca2367e26bc9e844" + } + Frame { + msec: 2752 + hash: "39165ad87fc687e0f165f8a2675173b5" + } + Frame { + msec: 2768 + hash: "edd1da7c34c3eb7f1f16b782dfa41a13" + } + Frame { + msec: 2784 + hash: "d31a7915cdb2a7f392e6edc3047a6606" + } + Frame { + msec: 2800 + hash: "3038dbb3fe3c255adcbecfc106bacb99" + } + Frame { + msec: 2816 + hash: "454137c508d76f2c38b8007247420b81" + } + Frame { + msec: 2832 + hash: "16eb385d3ce3b186745974500f855a97" + } + Frame { + msec: 2848 + hash: "8871fded1fbbdcb0fdfdaa2e6eecc3d1" + } + Frame { + msec: 2864 + hash: "f49955dab8341e7ca472c3f547cbeaab" + } + Frame { + msec: 2880 + image: "listview.2.png" + } + Frame { + msec: 2896 + hash: "c0ef41c682fa9802c9eb74fd249cfd40" + } + Frame { + msec: 2912 + hash: "6174fea6ef04fbcefd32d6a0b35a3514" + } + Frame { + msec: 2928 + hash: "7b2288a8be7b3c465e725aeb5788e91f" + } + Frame { + msec: 2944 + hash: "b39d8cb650ee00c245b556235843490b" + } + Frame { + msec: 2960 + hash: "9478ea0bf640924931d627cd8b607eba" + } + Frame { + msec: 2976 + hash: "39743788f56c6f5c29fa9549e586d1ae" + } + Frame { + msec: 2992 + hash: "ec8ab3547e10d18e9493b8fae5125591" + } + Frame { + msec: 3008 + hash: "169b115d03db8c901db4f4c2909a18d3" + } + Frame { + msec: 3024 + hash: "bf438b17a1e8df6d6bb05474cacd12a7" + } + Frame { + msec: 3040 + hash: "2aad06334128659e143c4c6c8415a30b" + } + Frame { + msec: 3056 + hash: "ea0e8d7387b9b54a47bb99c058093462" + } + Frame { + msec: 3072 + hash: "e483e585399a47490599ca265cf73000" + } + Frame { + msec: 3088 + hash: "43bed4aac1a2a9b66eafefc117424500" + } + Frame { + msec: 3104 + hash: "ba5c36add368938f8134a0a88e599c00" + } + Frame { + msec: 3120 + hash: "c905be5276a871bd1ac392580231c9e4" + } + Frame { + msec: 3136 + hash: "0c96d9b0119513c1f327f9e6651e89cd" + } + Frame { + msec: 3152 + hash: "c4ba0836dbb900600f8f4aed42eb1ea1" + } + Frame { + msec: 3168 + hash: "253d014f89a616032664f29f268cfd85" + } + Frame { + msec: 3184 + hash: "a5185192d7db7c4a4c8bec6cb5a2a73a" + } + Frame { + msec: 3200 + hash: "d453cc5b89d3fa00586cc41d5a9a8092" + } + Frame { + msec: 3216 + hash: "b3c39c0c06643612681b098101458d32" + } + Frame { + msec: 3232 + hash: "09beec410a0ca7c47fe08991341aea0c" + } + Frame { + msec: 3248 + hash: "c13c269b384029d04a05fd0170e5909e" + } + Frame { + msec: 3264 + hash: "cafe360c512ab92804dc1fddae9b8fb6" + } + Frame { + msec: 3280 + hash: "26dfe538a7edc8f43af1d78e678f3dfa" + } + Frame { + msec: 3296 + hash: "11e03f6901a4bdbc1eabe72b1ddbee4b" + } + Frame { + msec: 3312 + hash: "0ea8886b1256649665a1597f62cc633b" + } + Frame { + msec: 3328 + hash: "013c34be077fb689333df9b04a931b3a" + } + Frame { + msec: 3344 + hash: "d0e9f1d147e0767c12a89f33b5f2b5b3" + } + Frame { + msec: 3360 + hash: "9888bf29cd868bad6b2593842413b283" + } + Frame { + msec: 3376 + hash: "d8ec307a85cecaacaa908ceb34d5db5b" + } + Frame { + msec: 3392 + hash: "4afe1df3e802b41d1b89b5fab4e35190" + } + Frame { + msec: 3408 + hash: "e8f484ed8d2a6745ee87ac9544281d55" + } + Frame { + msec: 3424 + hash: "48eaa0644a27cb3e53c75bd0ce08bf47" + } + Frame { + msec: 3440 + hash: "f1523d82dfc5c136fbe8746449bb5013" + } + Frame { + msec: 3456 + hash: "d664786f1a79f851e72aa48ee6736374" + } + Frame { + msec: 3472 + hash: "e43bb6d0374c8bab67b5fafcaeb2a205" + } + Frame { + msec: 3488 + hash: "77ef61827c993b16691a023e99cc7f7e" + } + Frame { + msec: 3504 + hash: "6198e0d242db79e81fb81f621c78a3c9" + } + Frame { + msec: 3520 + hash: "a66b4773ef05ca78aa12e2c8a151c53a" + } + Frame { + msec: 3536 + hash: "52fa0b693c3de208e5943521eef5587c" + } + Frame { + msec: 3552 + hash: "0e237f706f9c2c4c616271f9b9d014e5" + } + Frame { + msec: 3568 + hash: "14edd1dc2371a9aadaa3c079d325fab6" + } + Frame { + msec: 3584 + hash: "1fe873b07ee24edaea224939e10830f1" + } + Frame { + msec: 3600 + hash: "30804b5eb2a6d99116475cbdc1a9c043" + } + Frame { + msec: 3616 + hash: "c892c17ec947a910b74f5b8704405e9f" + } + Frame { + msec: 3632 + hash: "696029b77512943001c9eba64191e633" + } + Frame { + msec: 3648 + hash: "4c26bb0ca28d74a2bb79d0bfc8127361" + } + Frame { + msec: 3664 + hash: "2d1539db88647d73b9c53cde7c424dd7" + } + Frame { + msec: 3680 + hash: "fd20e4259b44357c93f22f35c698fe1b" + } + Frame { + msec: 3696 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3712 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3728 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3744 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3760 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3776 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3792 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3808 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3824 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3840 + image: "listview.3.png" + } + Frame { + msec: 3856 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3872 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3888 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3904 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3920 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3936 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3952 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3968 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 3984 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 4000 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 4016 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 4032 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 4048 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 4064 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 4080 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 4096 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 4112 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 4128 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Frame { + msec: 4144 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 521; y: 24 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4160 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 25 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4176 + hash: "5d49efe1383065f0b88f1bfdbbe5e165" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 32 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 37 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4192 + hash: "a5df688148c264de1d376c9b87ddfa6b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 46 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4208 + hash: "a4e2c1878b0afce0ee1eebd63e9c951a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 66 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 88 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4224 + hash: "2f9a79278d492790ef86a09c77e95ff4" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 531; y: 136 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 531; y: 136 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4240 + hash: "5b5ce7206b26528157c426f4e1e3e0a8" + } + Frame { + msec: 4256 + hash: "65a1e5f81ab89b163aed46b984cca45e" + } + Frame { + msec: 4272 + hash: "e28253ad5a2415251b68bcda1d7d4bd0" + } + Frame { + msec: 4288 + hash: "71aae5abb4a9e9077053ea21dd3ec315" + } + Frame { + msec: 4304 + hash: "33fcea38fc3b328b3294f9ac2a26aa1a" + } + Frame { + msec: 4320 + hash: "6299eb1d87f371966307668b92de6a0b" + } + Frame { + msec: 4336 + hash: "4f66d8c7cb6971d0fc24089d123c547b" + } + Frame { + msec: 4352 + hash: "d9906d61b31fabf968290ebcd6688f34" + } + Frame { + msec: 4368 + hash: "5a1945993ff8096ba6b933d45586044a" + } + Frame { + msec: 4384 + hash: "331535e54da9bbdbc2fbf2b244ad0199" + } + Frame { + msec: 4400 + hash: "4dc39de0c54f6e0b77f94f6ae6c345ec" + } + Frame { + msec: 4416 + hash: "ec309a298ce246c13eb666488eb75016" + } + Frame { + msec: 4432 + hash: "a133819f8adc6265eb0e438261c869e3" + } + Frame { + msec: 4448 + hash: "da4d64fd6b3ae7d49ee5c5c8d0117a37" + } + Frame { + msec: 4464 + hash: "620dd1c3fc41ce657eac9d1a5b765fd4" + } + Frame { + msec: 4480 + hash: "ff1c370bd1bf75a98ae7125e7dd5a9db" + } + Frame { + msec: 4496 + hash: "59c6e4297109b5cc7c197749867dddae" + } + Frame { + msec: 4512 + hash: "91b1719e86529d0c35a53a2d0a095dd6" + } + Frame { + msec: 4528 + hash: "2994663d35c9eb453a27c1a1fa9aeeb8" + } + Frame { + msec: 4544 + hash: "ae4ec37b9f6a00b3c9139e5cfe13d32e" + } + Frame { + msec: 4560 + hash: "a98340236d1b65f47e88684168c1429d" + } + Frame { + msec: 4576 + hash: "34848b483ea6a2bd412e29d26beb3ab0" + } + Frame { + msec: 4592 + hash: "dd9bae0e2fca84b265d8cb59686ff88d" + } + Frame { + msec: 4608 + hash: "18b6ef6f5913b0612b76e7b2e25073dd" + } + Frame { + msec: 4624 + hash: "9398aab9478279aed1bc40c9378f8da4" + } + Frame { + msec: 4640 + hash: "a297a304c12102f23bd1e0f0207e0df9" + } + Frame { + msec: 4656 + hash: "091db9138cd6ae801ad857105a83c8f9" + } + Frame { + msec: 4672 + hash: "253938ca4a4f13433ddd502eb94cb7cd" + } + Frame { + msec: 4688 + hash: "6002df1793d290e4e31ee0c91c37bbe6" + } + Frame { + msec: 4704 + hash: "212476fa1c3a52fb8eba03ec3aecdcd8" + } + Frame { + msec: 4720 + hash: "80d4d8434d4e96a2bc23f5ed060d6ddc" + } + Frame { + msec: 4736 + hash: "2d4add725f31a04558635ce4b73a758a" + } + Frame { + msec: 4752 + hash: "57c06022ec1e502c4f49f43063c433e7" + } + Frame { + msec: 4768 + hash: "8393e97990993f9d5f68ea65f8e4a2db" + } + Frame { + msec: 4784 + hash: "9a1fcd96dffaf5c79ecc7f9427e02499" + } + Frame { + msec: 4800 + image: "listview.4.png" + } + Frame { + msec: 4816 + hash: "5ae722cf541e3453e73bbee57dc379e9" + } + Frame { + msec: 4832 + hash: "fc7326c2e2e56d9c3036e8dfc2ea77a8" + } + Frame { + msec: 4848 + hash: "f22a2a68cea158f333b0457025d75490" + } + Frame { + msec: 4864 + hash: "d684c8aa9b835779080f170cafead40f" + } + Frame { + msec: 4880 + hash: "dd451e5e421f929d015981bc7aeb8c66" + } + Frame { + msec: 4896 + hash: "d066f228295db7f46520495167d3e946" + } + Frame { + msec: 4912 + hash: "ebf640a457e3498bade3220aafa70331" + } + Frame { + msec: 4928 + hash: "190f5b1f3ce9d200790c34c50bcc62c5" + } + Frame { + msec: 4944 + hash: "9d4ad865246eb008afa40740b5c9a208" + } + Frame { + msec: 4960 + hash: "81c8b2c0b4f9e74f24d328a1d9b40a9f" + } + Frame { + msec: 4976 + hash: "24acc300307e71bee79bce8de76f56cb" + } + Frame { + msec: 4992 + hash: "1f9d31f94cfce6f868bfcc8a104d2465" + } + Frame { + msec: 5008 + hash: "7a3cab008dcb7a893ae30797b33df6f2" + } + Frame { + msec: 5024 + hash: "38d561a2950434e59513439c7f1120ea" + } + Frame { + msec: 5040 + hash: "8d34131faa15bc126bd4d9ef3be39ef5" + } + Frame { + msec: 5056 + hash: "85d57ef15791b56deb537795dd87911e" + } + Frame { + msec: 5072 + hash: "71e932169915a6c8c2cef0b22febf316" + } + Frame { + msec: 5088 + hash: "8b3452981963aeebadc9ac2013150263" + } + Frame { + msec: 5104 + hash: "a3fb8abecfeb48ba1cd1fd8f40896fa0" + } + Frame { + msec: 5120 + hash: "f53ab533f6a58ae45139f3da4bf8ab4e" + } + Frame { + msec: 5136 + hash: "9ec7012404f3c1c7795810dcee5acc3b" + } + Frame { + msec: 5152 + hash: "99ca43bab532dd5d7566e596c65053ce" + } + Frame { + msec: 5168 + hash: "0af83ad2416821cc230cd2856d1a3e39" + } + Frame { + msec: 5184 + hash: "86fa23ddf2005bbf35238ae04ae554ac" + } + Frame { + msec: 5200 + hash: "bb52a748f1d85dde410cfa4f24e3ed20" + } + Frame { + msec: 5216 + hash: "898b96bc5ee9a3ac61764e5cd9af8cfb" + } + Frame { + msec: 5232 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5248 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5264 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5280 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5296 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5312 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5328 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5344 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5360 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5376 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5392 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5408 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5424 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5440 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5456 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5472 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5488 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5504 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5520 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5536 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5552 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5568 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5584 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5600 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5616 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5632 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5648 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5664 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5680 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5696 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5712 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5728 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5744 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5760 + image: "listview.5.png" + } + Frame { + msec: 5776 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5792 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5808 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5824 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5840 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5856 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5872 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5888 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5904 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5920 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5936 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5952 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 5968 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 111; y: 230 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 111; y: 227 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5984 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 111; y: 223 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6000 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 111; y: 216 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 111; y: 210 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6016 + hash: "0076b55d3da4ca365688b6a2c984103f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 112; y: 205 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6032 + hash: "db846ad8e3200ca1fce36a38dc7beab8" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 112; y: 192 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6048 + hash: "3cb6b25725b4285f9c096d595224c5ca" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 111; y: 180 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6064 + hash: "1832e12fdf3b464b02b296e727b33694" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 110; y: 173 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6080 + hash: "6d18d2b5f65cbba4915d0725d24b40f3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 109; y: 158 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 107; y: 140 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6096 + hash: "79bc7afc6b1aa5f8904b3e6d5d4a9389" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 103; y: 124 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6112 + hash: "4436f2d15304c839aacec486c1fd6d96" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 101; y: 111 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6128 + hash: "c3bffc7c95893cf9bbd8596208b7f657" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 101; y: 105 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 101; y: 100 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6144 + hash: "04231c2fdc02729aa34ed4e403dd373b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 101; y: 96 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6160 + hash: "392d75c4b372825e78366eb63a618170" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 101; y: 87 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 102; y: 83 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6176 + hash: "7f91f7bdb0cb62d600ac4aa573681fe3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 102; y: 79 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6192 + hash: "69207181a382650c5e33145555f0d9ba" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 103; y: 76 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 103; y: 72 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6208 + hash: "65a184b5c49b02e08114e437483f928d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 104; y: 68 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 105; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6224 + hash: "c22da9ce54d04f51fb55da755753a509" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 105; y: 61 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6240 + hash: "59dbd5216847a62f60a1d0701a15bb62" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 106; y: 57 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 106; y: 53 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6256 + hash: "bbfc902db6e6ca253afb1c90306b2a63" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 106; y: 47 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 106; y: 47 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6272 + hash: "5c41f194afec5f7e3db9d98673d03d5c" + } + Frame { + msec: 6288 + hash: "5c41f194afec5f7e3db9d98673d03d5c" + } + Frame { + msec: 6304 + hash: "deb06d0f915d5f6ec39b1820d57b6af6" + } + Frame { + msec: 6320 + hash: "deb06d0f915d5f6ec39b1820d57b6af6" + } + Frame { + msec: 6336 + hash: "2a1a1f9239a6ccb308e51796f9b0bb89" + } + Frame { + msec: 6352 + hash: "3c1b44201616b8271023bf05a3f3f0f7" + } + Frame { + msec: 6368 + hash: "87afcef49db8b2b547e85e834f8ec304" + } + Frame { + msec: 6384 + hash: "290081b4b1272ef09ec9964c128e61b5" + } + Frame { + msec: 6400 + hash: "19bb3b23ee4b14a5f0a313106ef7c8c1" + } + Frame { + msec: 6416 + hash: "65a184b5c49b02e08114e437483f928d" + } + Frame { + msec: 6432 + hash: "832d2aefbcaf776f35039be527d367c5" + } + Frame { + msec: 6448 + hash: "69207181a382650c5e33145555f0d9ba" + } + Frame { + msec: 6464 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6480 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6496 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6512 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6528 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6544 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6560 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6576 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6592 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6608 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6624 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6640 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6656 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6672 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6688 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6704 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6720 + image: "listview.6.png" + } + Frame { + msec: 6736 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6752 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6768 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6784 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6800 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6816 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6832 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6848 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6864 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6880 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6896 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6912 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6928 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6944 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6960 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6976 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 6992 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7008 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7024 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7040 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7056 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7072 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7088 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7104 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7120 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7136 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7152 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7168 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7184 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7200 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7216 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7232 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7248 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7264 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7280 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Frame { + msec: 7296 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 519; y: 276 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7312 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 519; y: 275 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7328 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 519; y: 274 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7344 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 518; y: 273 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 518; y: 272 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7360 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 518; y: 271 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7376 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 518; y: 268 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7392 + hash: "89fe95733476bd000457e36ee4ecfc73" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 518; y: 266 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 518; y: 265 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7408 + hash: "9047f597b9e59ca652c172338bed6ef9" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 517; y: 262 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7424 + hash: "87476f78daecd6bb49e8d6e673d28100" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 517; y: 260 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7440 + hash: "6bfd895c6b7d97e4102eb26608cdfeca" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 517; y: 254 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7456 + hash: "e4c2b75beaee54a5781a5acbeb37ea64" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 517; y: 249 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7472 + hash: "d5e816768e9c3db0631416bd86b1b461" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 517; y: 243 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7488 + hash: "22cb512b302afc6c3c9dec1d47b3bf03" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 517; y: 237 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7504 + hash: "a7e458e007954bd908cf27a1841d36ea" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 517; y: 231 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7520 + hash: "0f9fa53b247f72e9a8ff6201b188b410" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 517; y: 225 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7536 + hash: "c986ea3853dd33f7f2b5629f67429423" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 517; y: 219 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7552 + hash: "114ffaa5cf38e4884a1d477884541b44" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 518; y: 215 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7568 + hash: "7cdf1bb327484618909ded5411aca4ec" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 519; y: 208 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7584 + hash: "d4c005194ed510f5d54a811176943dc2" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 520; y: 202 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7600 + hash: "3103351bc83675c877fb6dcd1a6ddbbc" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 196 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7616 + hash: "2c13ddda8d89501c9487b83f8b115570" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 189 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7632 + hash: "476834b6d88077f9983ed358c06bd0c3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 185 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7648 + hash: "cc2148c6a7ba0bbe6ceea848b7e48621" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 177 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7664 + hash: "5b8824848dd1de3632b26e04e95b5899" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 169 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7680 + image: "listview.7.png" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 160 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7696 + hash: "d0a4a8b631e3494043f261fb8da67938" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 156 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7712 + hash: "985111215c3959a45b293879af701318" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 147 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7728 + hash: "ed5917a3fe95777f2efdaa154af0c489" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 144 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7744 + hash: "6fa9de2983f0e30cb96c035c28757b93" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 137 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7760 + hash: "fd568c7d27618a71b0f0882ca57b685b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 130 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7776 + hash: "f5b941f5741a9a78122605576809c395" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 124 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7792 + hash: "ffc96a85d7dbbed257b69a0c735e21b8" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 122 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7808 + hash: "cfb6335c5449554e631d6e3106ea8a00" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 116 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7824 + hash: "ff9786e85ee8af6177ac8e5cc1307462" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 111 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7840 + hash: "3140b49dfee8e690b5c778044385e107" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 106 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7856 + hash: "0d899af24685a9998a6b961023286fde" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 104 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7872 + hash: "99ee1e8803c05e546a721b0c9ee39499" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 101 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7888 + hash: "96e7da2f895500a786ed36cb295e9003" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 99 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7904 + hash: "cd369fc5dc31814208e56cf7cd0decea" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 521; y: 97 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7920 + hash: "5fee72994b65a45b4900a3073f86a3e1" + } + Frame { + msec: 7936 + hash: "9a2f8a65d842b8f92998e6411f7cd53c" + } + Frame { + msec: 7952 + hash: "2848d69017ce71ae101ccdfa7c67f933" + } + Frame { + msec: 7968 + hash: "6568aa88e81f988f65da435df7166167" + } + Frame { + msec: 7984 + hash: "d5f15ee08a2d7667786757a378a7a7f4" + } + Frame { + msec: 8000 + hash: "9b566bd02a561b32d1a4c1ec99c2e2c3" + } + Frame { + msec: 8016 + hash: "580419e1c9e91046547d913f6b8790a4" + } + Frame { + msec: 8032 + hash: "a5a3cd610ec0b35af1295ee6c41e09e3" + } + Frame { + msec: 8048 + hash: "a5a3cd610ec0b35af1295ee6c41e09e3" + } + Frame { + msec: 8064 + hash: "a5a3cd610ec0b35af1295ee6c41e09e3" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 521; y: 97 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8080 + hash: "a5a3cd610ec0b35af1295ee6c41e09e3" + } + Frame { + msec: 8096 + hash: "a5a3cd610ec0b35af1295ee6c41e09e3" + } + Frame { + msec: 8112 + hash: "83b91a371d682a501bc3a3fceabe4f8c" + } + Frame { + msec: 8128 + hash: "798b1dbfa0cce362213f426e2c60ac0e" + } + Frame { + msec: 8144 + hash: "d71b6a693c430a618c23413cb65bb320" + } + Frame { + msec: 8160 + hash: "2baae394390da39447a67151bc503d65" + } + Frame { + msec: 8176 + hash: "06688b05c61a7b862d39534207a8adab" + } + Frame { + msec: 8192 + hash: "a1d3042e16709817906dcdc673ee52c7" + } + Frame { + msec: 8208 + hash: "236dd41feac1b1a8a4bd7911bb184da2" + } + Frame { + msec: 8224 + hash: "f3ec821bba1d32e90bdab0e85c07d7d8" + } + Frame { + msec: 8240 + hash: "e328c35adf7ffc3d7e3af97e798ec8a5" + } + Frame { + msec: 8256 + hash: "651101db68fd3ed1dc5f441c126dc31b" + } + Frame { + msec: 8272 + hash: "651101db68fd3ed1dc5f441c126dc31b" + } + Frame { + msec: 8288 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8304 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8320 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8336 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8352 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8368 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8384 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8400 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8416 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8432 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8448 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8464 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8480 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8496 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8512 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8528 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8544 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8560 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8576 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8592 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8608 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8624 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8640 + image: "listview.8.png" + } + Frame { + msec: 8656 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8672 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8688 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8704 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8720 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8736 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8752 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8768 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8784 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8800 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8816 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8832 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8848 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8864 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8880 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8896 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8912 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8928 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8944 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8960 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8976 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 8992 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9008 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9024 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9040 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9056 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9072 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9088 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9104 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9120 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9136 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9152 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9168 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9184 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9200 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9216 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9232 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9248 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9264 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9280 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9296 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9312 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9328 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9344 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9360 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9376 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9392 + hash: "1171be123a361d72859c25434573482c" + } + Frame { + msec: 9408 + hash: "1171be123a361d72859c25434573482c" + } +} diff --git a/tests/auto/declarative/qmlvisual/ListView/itemlist.qml b/tests/auto/declarative/qmlvisual/ListView/itemlist.qml new file mode 100644 index 0000000..8cbbdb0 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/itemlist.qml @@ -0,0 +1,40 @@ +// This example demonstrates placing items in a view using +// a VisualItemModel + +import Qt 4.6 + +Rectangle { + color: "lightgray" + width: 240 + height: 320 + + VisualItemModel { + id: itemModel + objectName: "itemModel" + Rectangle { + objectName: "item1" + height: view.height; width: view.width; color: "#FFFEF0" + } + Rectangle { + objectName: "item2" + height: view.height; width: view.width; color: "#F0FFF7" + } + Rectangle { + objectName: "item3" + height: view.height; width: view.width; color: "#F4F0FF" + } + } + + ListView { + id: view + objectName: "view" + anchors.fill: parent + anchors.bottomMargin: 30 + model: itemModel + preferredHighlightBegin: 0 + preferredHighlightEnd: 0 + highlightRangeMode: "StrictlyEnforceRange" + orientation: ListView.Horizontal + flickDeceleration: 2000 + } +} diff --git a/tests/auto/declarative/qmlvisual/ListView/listview.qml b/tests/auto/declarative/qmlvisual/ListView/listview.qml new file mode 100644 index 0000000..fb9eecd --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/listview.qml @@ -0,0 +1,81 @@ +import Qt 4.6 + +Rectangle { + width: 600; height: 300; color: "white" + + ListModel { + id: myModel + ListElement { + itemColor: "red" + } + ListElement { + itemColor: "green" + } + ListElement { + itemColor: "blue" + } + ListElement { + itemColor: "orange" + } + ListElement { + itemColor: "brown" + } + ListElement { + itemColor: "yellow" + } + ListElement { + itemColor: "purple" + } + ListElement { + itemColor: "darkred" + } + ListElement { + itemColor: "darkblue" + } + } + + Component { + id: myDelegate + Item { + width: 200; height: 50 + Rectangle { + x: 5; y : 5 + width: 190; height: 40 + opacity: 0.5 + color: itemColor + } + } + } + + Component { + id: myHighlight + Rectangle { color: "black" } + } + + ListView { + id: list1 + width: 200; height: parent.height + model: myModel; delegate: myDelegate + highlight: myHighlight; currentIndex: list3.currentIndex + focus: true + } + ListView { + id: list2 + x: 200; width: 200; height: parent.height + model: myModel; delegate: myDelegate; highlight: myHighlight + preferredHighlightBegin: 80 + preferredHighlightEnd: 220 + highlightRangeMode: "ApplyRange" + currentIndex: list1.currentIndex + } + ListView { + id: list3 + x: 400; width: 200; height: parent.height + model: myModel; delegate: myDelegate; highlight: myHighlight + currentIndex: list1.currentIndex + preferredHighlightBegin: 125 + preferredHighlightEnd: 125 + highlightRangeMode: "StrictlyEnforceRange" + flickDeceleration: 1000 + } +} diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.0.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.0.png new file mode 100644 index 0000000..c59b816 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.0.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.1.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.1.png new file mode 100644 index 0000000..d4dbc70 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.1.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.10.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.10.png new file mode 100644 index 0000000..ed9d345 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.10.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.11.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.11.png new file mode 100644 index 0000000..ed9d345 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.11.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.12.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.12.png new file mode 100644 index 0000000..45ee400 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.12.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.13.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.13.png new file mode 100644 index 0000000..c73e158 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.13.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.14.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.14.png new file mode 100644 index 0000000..e2fff6d Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.14.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.15.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.15.png new file mode 100644 index 0000000..d7a13df Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.15.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.16.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.16.png new file mode 100644 index 0000000..beb3094 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.16.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.17.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.17.png new file mode 100644 index 0000000..beb3094 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.17.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.18.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.18.png new file mode 100644 index 0000000..beb3094 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.18.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.19.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.19.png new file mode 100644 index 0000000..d3a2650 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.19.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.2.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.2.png new file mode 100644 index 0000000..a09dd28 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.2.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.20.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.20.png new file mode 100644 index 0000000..600462a Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.20.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.21.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.21.png new file mode 100644 index 0000000..6defca0 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.21.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.22.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.22.png new file mode 100644 index 0000000..91967e1 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.22.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.3.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.3.png new file mode 100644 index 0000000..d099a79 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.3.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.4.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.4.png new file mode 100644 index 0000000..385efc8 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.4.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.5.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.5.png new file mode 100644 index 0000000..25a7c3c Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.5.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.6.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.6.png new file mode 100644 index 0000000..25a7c3c Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.6.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.7.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.7.png new file mode 100644 index 0000000..7a24f51 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.7.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.8.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.8.png new file mode 100644 index 0000000..7a24f51 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.8.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.9.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.9.png new file mode 100644 index 0000000..45ee400 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.9.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.qml b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.qml new file mode 100644 index 0000000..d062667 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.qml @@ -0,0 +1,3751 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 32 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 48 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 64 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 80 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 96 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 112 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 128 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 144 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 160 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 176 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 192 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 208 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 224 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 240 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 256 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 272 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 288 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 304 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 320 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 336 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 352 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 368 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 384 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 400 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 416 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 432 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 448 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 464 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 480 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 496 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 512 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 528 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 544 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 560 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 576 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 592 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 608 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 624 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 640 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 656 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 672 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 688 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 704 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 720 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 736 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 752 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 768 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 784 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 800 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 816 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 832 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 848 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 864 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 880 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 896 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 912 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 928 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 944 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 960 + image: "packageviews.0.png" + } + Frame { + msec: 976 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 992 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1008 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1024 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1040 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1056 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1072 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1088 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1104 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1120 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1136 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1152 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1168 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1184 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1200 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1216 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1232 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1248 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1264 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1280 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1296 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1312 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1328 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1344 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1360 + hash: "a327426c93b523526f993b5271ab4501" + } + Frame { + msec: 1376 + hash: "a327426c93b523526f993b5271ab4501" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 57; y: 164 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1392 + hash: "a327426c93b523526f993b5271ab4501" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 57; y: 162 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1408 + hash: "a327426c93b523526f993b5271ab4501" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 57; y: 159 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 57; y: 156 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1424 + hash: "a327426c93b523526f993b5271ab4501" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 56; y: 152 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 56; y: 147 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1440 + hash: "87b7cacfb2d9e8ad916e331b2cf1f13e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 55; y: 141 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 133 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1456 + hash: "34290c1435c1a96d08152479d2d1334e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 126 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 54; y: 126 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1472 + hash: "ef5fb09ec8fb4b0d97c864618d6f6231" + } + Frame { + msec: 1488 + hash: "d5b4c2e1d4b0bc877c99739a67b4a4fb" + } + Frame { + msec: 1504 + hash: "a3623a3f253590d51ee03b6849e88edb" + } + Frame { + msec: 1520 + hash: "4c1115f1041629b7c37cf4ae001fd7d3" + } + Frame { + msec: 1536 + hash: "845bb3d1f52bee4a469fb12d6875a323" + } + Frame { + msec: 1552 + hash: "eb08b5a671149005dbafc8507bb78b18" + } + Frame { + msec: 1568 + hash: "16744a5b90b29954faf0710010ac6369" + } + Frame { + msec: 1584 + hash: "322bbe367fbbf0bf07f9153da652a5fc" + } + Frame { + msec: 1600 + hash: "257769f7c3e24bb2d0cd674dfbe42913" + } + Frame { + msec: 1616 + hash: "8e299cbcaeae4d53d0fc05e03d36e0d9" + } + Frame { + msec: 1632 + hash: "f3fb7f30336045abb4557247aab5bde1" + } + Frame { + msec: 1648 + hash: "468400fb4e9bfa454ea00f19aa5d77b5" + } + Frame { + msec: 1664 + hash: "429cc820ada7a515b2cb71f133320949" + } + Frame { + msec: 1680 + hash: "721ec7594d8f815e5648eb8d570d1179" + } + Frame { + msec: 1696 + hash: "9bc4105a0456c36738c435323e690db1" + } + Frame { + msec: 1712 + hash: "e54a84718dbdc45dd814089051772585" + } + Frame { + msec: 1728 + hash: "2c969450ede6b6ea7e0e68ee54d02aaa" + } + Frame { + msec: 1744 + hash: "c2015dd1d4bd223a7fe1df03027af2f3" + } + Frame { + msec: 1760 + hash: "74108fedfb0967adea181893834bcd9b" + } + Frame { + msec: 1776 + hash: "b04a22f1cfde6ede57117992cd97dc1c" + } + Frame { + msec: 1792 + hash: "271d71cb03dd38100812466a973b79ef" + } + Frame { + msec: 1808 + hash: "130709eecd8eca395085020a83e7553a" + } + Frame { + msec: 1824 + hash: "a0e5e187ed5245fd766803d266195e6b" + } + Frame { + msec: 1840 + hash: "d29c145f3ba39a7c2c6ac54b27f9cea1" + } + Frame { + msec: 1856 + hash: "6e41349b4adb6e37a2f9f2482c0aa5b1" + } + Frame { + msec: 1872 + hash: "c02c52d3c87c6befb65f3bf392981cd5" + } + Frame { + msec: 1888 + hash: "ec48d113c8468bd1e1b465e248eecaee" + } + Frame { + msec: 1904 + hash: "a2c9b917d1f0cff0e088d3b624d9eeb8" + } + Frame { + msec: 1920 + image: "packageviews.1.png" + } + Frame { + msec: 1936 + hash: "c4d4f8a351316b4a33f42f5fb030f304" + } + Frame { + msec: 1952 + hash: "1baee6be1da687309d84a992e430c915" + } + Frame { + msec: 1968 + hash: "4245f02817f7a674c34c581cbd9e1181" + } + Frame { + msec: 1984 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2000 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2016 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2032 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2048 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2064 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2080 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2096 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2112 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2128 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2144 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2160 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2176 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2192 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2208 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2224 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2240 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2256 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2272 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2288 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 70; y: 89 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2304 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2320 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2336 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2352 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 70; y: 89 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2368 + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Frame { + msec: 2384 + hash: "3b9a75225adddb01e92286463e15bf98" + } + Frame { + msec: 2400 + hash: "32f99602756898b4ec607d4124b5120f" + } + Frame { + msec: 2416 + hash: "60007f14752d2d87ba6e335ad596f1ad" + } + Frame { + msec: 2432 + hash: "dcfad2407f53f83964fa7be762a137bd" + } + Frame { + msec: 2448 + hash: "fcc1a30a33bec046868734014132eb70" + } + Frame { + msec: 2464 + hash: "f60592829a2765b3cd3a0cecb9c45426" + } + Frame { + msec: 2480 + hash: "a0e26063acd1b53b5eeeb31187f38336" + } + Frame { + msec: 2496 + hash: "d7f3e776038bd479db292bcba3a65fc7" + } + Frame { + msec: 2512 + hash: "4af31954235ab8a7cf8462eaa64d7dda" + } + Frame { + msec: 2528 + hash: "aff3f287c07f546e0d3e9e68731d82fe" + } + Frame { + msec: 2544 + hash: "75fbc4e26466e8a1f66503addfcbb525" + } + Frame { + msec: 2560 + hash: "cb4c91f725ec46dd066475efc2bc2d65" + } + Frame { + msec: 2576 + hash: "106434203ccc2fd8246c56520095a473" + } + Frame { + msec: 2592 + hash: "129ced0e7fc406e81b1ced72397adc5c" + } + Frame { + msec: 2608 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2624 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2640 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2656 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2672 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2688 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2704 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2720 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2736 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2752 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2768 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2784 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2800 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2816 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2832 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2848 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2864 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2880 + image: "packageviews.2.png" + } + Frame { + msec: 2896 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2912 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2928 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2944 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2960 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2976 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 2992 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3008 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3024 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3040 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3056 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3072 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3088 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3104 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3120 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3136 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3152 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3168 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3184 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3200 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3216 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3232 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3248 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3264 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3280 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3296 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3312 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3328 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3344 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3360 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3376 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3392 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 49; y: 162 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3408 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Frame { + msec: 3424 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: 161 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3440 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: 159 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: 157 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3456 + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: 153 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: 149 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3472 + hash: "1c84452b0ce90ae6f136f5bcce408220" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: 144 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: 138 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 50; y: 138 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3488 + hash: "4c77d402b995297dadb5e671f071605f" + } + Frame { + msec: 3504 + hash: "babd28626a81bd48b39b56f8da69c360" + } + Frame { + msec: 3520 + hash: "71654a76f9b94fafaf3767003598fb96" + } + Frame { + msec: 3536 + hash: "87ad69a660e072e71f940db93be3a949" + } + Frame { + msec: 3552 + hash: "147f7f3f1913bc5ac5889c1a4daa8026" + } + Frame { + msec: 3568 + hash: "9c26b3ad7a5dacd56028afa7bf4deef6" + } + Frame { + msec: 3584 + hash: "18611ff90e5af36c9b6396c3df4cd646" + } + Frame { + msec: 3600 + hash: "84701fd73ed8e1951bd4c806b70654ac" + } + Frame { + msec: 3616 + hash: "42b40f1683beb23f4fe5ade066c0626f" + } + Frame { + msec: 3632 + hash: "8c6aeefaa6f36cdffcf7bdb1597c6fbe" + } + Frame { + msec: 3648 + hash: "731cea2e0d8fb8aac6ae919b23b89b87" + } + Frame { + msec: 3664 + hash: "d4dc70a8e09e7ec03e7c1f5123b7abef" + } + Frame { + msec: 3680 + hash: "5246e2f52aa104e8030eef105a5b5a7c" + } + Frame { + msec: 3696 + hash: "a9c3d0034c09ba81d19d57ff550d7b4f" + } + Frame { + msec: 3712 + hash: "e9092b1be19273f1f29912cd493dd238" + } + Frame { + msec: 3728 + hash: "c2b19c7b818c94e932558676a026f049" + } + Frame { + msec: 3744 + hash: "6627c4d6daab8e6500dbd0d921bc1ebd" + } + Frame { + msec: 3760 + hash: "45c584ca18e8bfd6aa495c16a977662a" + } + Frame { + msec: 3776 + hash: "de79039a8bb623f7d48afe1549ae23e0" + } + Frame { + msec: 3792 + hash: "076d29278466038071095093266553f5" + } + Frame { + msec: 3808 + hash: "73ed162dc5f9983bf22446f63691f7e4" + } + Frame { + msec: 3824 + hash: "4cc3648635884a69191f0cfe2051f621" + } + Frame { + msec: 3840 + image: "packageviews.3.png" + } + Frame { + msec: 3856 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 3872 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 3888 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 3904 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 3920 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 3936 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 3952 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 3968 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 3984 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4000 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4016 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4032 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4048 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4064 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4080 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4096 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4112 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4128 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4144 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4160 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4176 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4192 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4208 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4224 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4240 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4256 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4272 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4288 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4304 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4320 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4336 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4352 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Frame { + msec: 4368 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 151; y: 170 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 151; y: 168 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4384 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 152; y: 166 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 153; y: 163 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4400 + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 154; y: 160 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 155; y: 154 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4416 + hash: "ac75b9adaecd10206c4daa07c93adb27" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 155; y: 148 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 156; y: 141 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4432 + hash: "539ec244fd42801cfcf97adc12f48786" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 160; y: 121 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4448 + hash: "7d7bc6f7d2ff1da352ddab0d679906e7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 162; y: 101 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 166; y: 83 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 166; y: 83 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4464 + hash: "4b508eb55971a03c6dc8a50d0244fa21" + } + Frame { + msec: 4480 + hash: "2ceb497ca10e6448a019b62a225a72e4" + } + Frame { + msec: 4496 + hash: "1fd9b89ebcb8e707c9b1b13ba64061b4" + } + Frame { + msec: 4512 + hash: "24a3a48843860f643e55ca6dfec84f98" + } + Frame { + msec: 4528 + hash: "48ea9398101f44a707c44ee1c5102d0c" + } + Frame { + msec: 4544 + hash: "d8f2cebcdb542e75bbbaa4391ca881b8" + } + Frame { + msec: 4560 + hash: "df35827ac111c67588922aadd45b3c85" + } + Frame { + msec: 4576 + hash: "c1e612548c8d5c2f844e94ad4c0f1db4" + } + Frame { + msec: 4592 + hash: "c298bccebeb1f4528c935e5fd256479c" + } + Frame { + msec: 4608 + hash: "4c01d969eba4eca32b8a3b7f6f9c99f0" + } + Frame { + msec: 4624 + hash: "66c783ae698cb91195088591a9bd67c1" + } + Frame { + msec: 4640 + hash: "5419f6889162fb0db6b8c9e521f57f4f" + } + Frame { + msec: 4656 + hash: "d153dbf30acf36145d7fcb8e37dd5c6d" + } + Frame { + msec: 4672 + hash: "ffbf186683dc979ef29cdd5ff50296fc" + } + Frame { + msec: 4688 + hash: "ddcedde95d1ebcafe5b73924ecfa047a" + } + Frame { + msec: 4704 + hash: "d94b9e92f2c1a5e0ea2f8dd21a905517" + } + Frame { + msec: 4720 + hash: "92c27d497128ccdcbfe8224a0f55a302" + } + Frame { + msec: 4736 + hash: "7146017581b03e6551822653e54d5001" + } + Frame { + msec: 4752 + hash: "a39567e01b8963d3b71f5f525d1582d4" + } + Frame { + msec: 4768 + hash: "842654ef5a24143e41412b2450b6024c" + } + Frame { + msec: 4784 + hash: "c2a002588b4b3f89806d6d283c39ea54" + } + Frame { + msec: 4800 + image: "packageviews.4.png" + } + Frame { + msec: 4816 + hash: "2bea5cc22ea4989f8f07fbf62d09880b" + } + Frame { + msec: 4832 + hash: "b8326b959b75b05c050ff91f0c34fa55" + } + Frame { + msec: 4848 + hash: "d5f2e63bd18b2067221ec80764c7500d" + } + Frame { + msec: 4864 + hash: "157f93ebaa95664965539237ba121265" + } + Frame { + msec: 4880 + hash: "5bda47a6295e500f24b6ba7bf04e9282" + } + Frame { + msec: 4896 + hash: "0134d543cfbf085eb4b5ea4a0f5ae32f" + } + Frame { + msec: 4912 + hash: "d27f2ad3bd9817c23caf01ba64335776" + } + Frame { + msec: 4928 + hash: "4dd96288601f4481a24b75afedd34599" + } + Frame { + msec: 4944 + hash: "d5ebfbd190fe2482af54004ad9434818" + } + Frame { + msec: 4960 + hash: "6a8c5c64228b3be521407e00c2b6a1de" + } + Frame { + msec: 4976 + hash: "645219e7aa6761bef1b11ac8f17f1f42" + } + Frame { + msec: 4992 + hash: "54fff3170fa43d99eca2c87381ecaf1e" + } + Frame { + msec: 5008 + hash: "54fff3170fa43d99eca2c87381ecaf1e" + } + Frame { + msec: 5024 + hash: "00c3c11b9b266504b8cdbdf4edcc3a98" + } + Frame { + msec: 5040 + hash: "00c3c11b9b266504b8cdbdf4edcc3a98" + } + Frame { + msec: 5056 + hash: "00c3c11b9b266504b8cdbdf4edcc3a98" + } + Frame { + msec: 5072 + hash: "54fff3170fa43d99eca2c87381ecaf1e" + } + Frame { + msec: 5088 + hash: "6a8c5c64228b3be521407e00c2b6a1de" + } + Frame { + msec: 5104 + hash: "f91cea801322d1bc6ac1b9eeae96c704" + } + Frame { + msec: 5120 + hash: "d27f2ad3bd9817c23caf01ba64335776" + } + Frame { + msec: 5136 + hash: "5bda47a6295e500f24b6ba7bf04e9282" + } + Frame { + msec: 5152 + hash: "d5f2e63bd18b2067221ec80764c7500d" + } + Frame { + msec: 5168 + hash: "b10145c10c2bc9d01ec6a49a399f728e" + } + Frame { + msec: 5184 + hash: "f0b759a49bf21b0c9b311a1dd02d7807" + } + Frame { + msec: 5200 + hash: "1c5546c3ddbde95d10921c8c32fd2d67" + } + Frame { + msec: 5216 + hash: "c2a002588b4b3f89806d6d283c39ea54" + } + Frame { + msec: 5232 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5248 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5264 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5280 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5296 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5312 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5328 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5344 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5360 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5376 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5392 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5408 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5424 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5440 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5456 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5472 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5488 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5504 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5520 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5536 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5552 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5568 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5584 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5600 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5616 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5632 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5648 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5664 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5680 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5696 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5712 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5728 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5744 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5760 + image: "packageviews.5.png" + } + Frame { + msec: 5776 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5792 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5808 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5824 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5840 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5856 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5872 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5888 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5904 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5920 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5936 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5952 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5968 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 5984 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6000 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6016 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6032 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6048 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6064 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6080 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6096 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6112 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6128 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6144 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6160 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6176 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6192 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6208 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6224 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6240 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6256 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6272 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6288 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6304 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6320 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6336 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6352 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6368 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6384 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6400 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6416 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6432 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6448 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6464 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6480 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6496 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6512 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 177; y: 168 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6528 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6544 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6560 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6576 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 178; y: 168 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6592 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 178; y: 168 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6608 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6624 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6640 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6656 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6672 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6688 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6704 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6720 + image: "packageviews.6.png" + } + Frame { + msec: 6736 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6752 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6768 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6784 + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Frame { + msec: 6800 + hash: "f6de07972a225d276b4b5c424dc490ef" + } + Frame { + msec: 6816 + hash: "d8c400ca33d590a9b4d9b179b5634d94" + } + Frame { + msec: 6832 + hash: "21ec87c22e52b3daa78bd94b771a105c" + } + Frame { + msec: 6848 + hash: "19a3667f4051e40e944ec58abb16846a" + } + Frame { + msec: 6864 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 6880 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 6896 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 6912 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 6928 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 6944 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 6960 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 6976 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 6992 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7008 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7024 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7040 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7056 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7072 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7088 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7104 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7120 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7136 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7152 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7168 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7184 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7200 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7216 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7232 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7248 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7264 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7280 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7296 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7312 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7328 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7344 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7360 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7376 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7392 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7408 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 157; y: 37 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7424 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Frame { + msec: 7440 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 157; y: 39 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7456 + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 157; y: 44 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 157; y: 51 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7472 + hash: "e8ad02d4c2429a03ff0686888e4038bf" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 157; y: 59 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 158; y: 67 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7488 + hash: "43dcc86aeff3b8b74ae1b87e735e8963" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 158; y: 87 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 158; y: 96 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7504 + hash: "96e10ce9e5a80caf626213e5c696d84d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 160; y: 116 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7520 + hash: "3b34cb99481d5418136840afd649807d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 164; y: 134 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 164; y: 134 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7536 + hash: "494cf05eb3d8eb221d0e3c233c936e87" + } + Frame { + msec: 7552 + hash: "e0d5f3aab9fbfac1de47f42202dbeb79" + } + Frame { + msec: 7568 + hash: "8cd6919e15ea4320e00e79d43596ea80" + } + Frame { + msec: 7584 + hash: "395a63aa12928a6b597eabd74f019a03" + } + Frame { + msec: 7600 + hash: "16d4ccbda396a9afcaeac4ddca733012" + } + Frame { + msec: 7616 + hash: "71955518b68a9817a41d5d0f63adcc57" + } + Frame { + msec: 7632 + hash: "152f2569fe8849d5c4289699dba2ee32" + } + Frame { + msec: 7648 + hash: "a1de2cb5acc31a9d73e005c3a44cee4f" + } + Frame { + msec: 7664 + hash: "96ceaad68263b5165a65f557ae19d9cd" + } + Frame { + msec: 7680 + image: "packageviews.7.png" + } + Frame { + msec: 7696 + hash: "9ff5d2774820dac56655a44d965c7742" + } + Frame { + msec: 7712 + hash: "79cdbfb2f93a35680eab38f0df2eaf66" + } + Frame { + msec: 7728 + hash: "19896d510a27871fc589579e27adc0dc" + } + Frame { + msec: 7744 + hash: "71b62e488897345eebf8d9640d50585f" + } + Frame { + msec: 7760 + hash: "4853b95a3f1ae0ebbd468dff3605d595" + } + Frame { + msec: 7776 + hash: "a8030aa0aede17d91758af08256cf39d" + } + Frame { + msec: 7792 + hash: "a2a5e71349060ae262d337d9aa33b549" + } + Frame { + msec: 7808 + hash: "7b5f32f0e53ab102ef6f1eca7da016dd" + } + Frame { + msec: 7824 + hash: "7b5f32f0e53ab102ef6f1eca7da016dd" + } + Frame { + msec: 7840 + hash: "25908df38057c7394135108d9618e28d" + } + Frame { + msec: 7856 + hash: "d3b3ab6e43eef22ca71fc35c36b1f50d" + } + Frame { + msec: 7872 + hash: "c25759db4e12acbe8e4701c7c86d1957" + } + Frame { + msec: 7888 + hash: "fe67a155ead8495d646fa7bbcf5db6b4" + } + Frame { + msec: 7904 + hash: "34e2877a8b84e53e5c85fb1b25d57e2b" + } + Frame { + msec: 7920 + hash: "2fc6c5a0e9bb80e3c8f12553e7e96d02" + } + Frame { + msec: 7936 + hash: "b5122a2530e21a01e93862bd8060e320" + } + Frame { + msec: 7952 + hash: "9c55e0c920bcf5189fb24e1765d221db" + } + Frame { + msec: 7968 + hash: "1106703562135e36ae62130200960fc8" + } + Frame { + msec: 7984 + hash: "c24b57dbf01d2646fbbeb3e66636e220" + } + Frame { + msec: 8000 + hash: "71663a05c04bb77c2e25299a9c6dd9ce" + } + Frame { + msec: 8016 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8032 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8048 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8064 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8080 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8096 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8112 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8128 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8144 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8160 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8176 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8192 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8208 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8224 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8240 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8256 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8272 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8288 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8304 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8320 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8336 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8352 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8368 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8384 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8400 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8416 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8432 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8448 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8464 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8480 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8496 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8512 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8528 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8544 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8560 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8576 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8592 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8608 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8624 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8640 + image: "packageviews.8.png" + } + Frame { + msec: 8656 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8672 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8688 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Frame { + msec: 8704 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 46; y: 147 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8720 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 146 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8736 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 145 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 143 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8752 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 141 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8768 + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 138 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 134 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 129 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8784 + hash: "7b1354e70befc84c343145987c81562f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: 122 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8800 + hash: "6107f00c6472d877b5c109dd58d73145" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: 115 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 45; y: 115 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8816 + hash: "47288701643899e26b53d28595d59b29" + } + Frame { + msec: 8832 + hash: "a3b4b613d19c8f21ec1b75c1c660ed1d" + } + Frame { + msec: 8848 + hash: "7a5d9fe471eb673f68b77d97f9108bac" + } + Frame { + msec: 8864 + hash: "20a09795ffcf05276d7a5be24b33e207" + } + Frame { + msec: 8880 + hash: "225e529ac77f225fc8b84ed71cdcd70f" + } + Frame { + msec: 8896 + hash: "e4188406a3d3d1f1b83547d362a187f8" + } + Frame { + msec: 8912 + hash: "82707040aad297885ba1c8c6672dc017" + } + Frame { + msec: 8928 + hash: "a369118e98e2bd67dc4242c5e8c86cb8" + } + Frame { + msec: 8944 + hash: "001ef50f7d2b7db7e0db8d2190137d0c" + } + Frame { + msec: 8960 + hash: "2db473b2bd9fd602ed0298501752dae9" + } + Frame { + msec: 8976 + hash: "f9cdbb4e515abf23721627e3f2748960" + } + Frame { + msec: 8992 + hash: "cbc072c5b117ce156a4d6661ae488a77" + } + Frame { + msec: 9008 + hash: "79acb38cec803e6ebeb570dc4d7bbb30" + } + Frame { + msec: 9024 + hash: "848014437545fc8d2e454a774586a8ca" + } + Frame { + msec: 9040 + hash: "0836f3a48355f6384c6b3f452df1e7d6" + } + Frame { + msec: 9056 + hash: "b3da223cdf138e915fcb424cf9181d6b" + } + Frame { + msec: 9072 + hash: "1a7cf7e7ddaac64eeff0d23997580b8c" + } + Frame { + msec: 9088 + hash: "cfbd055b2f905db503250b49120948db" + } + Frame { + msec: 9104 + hash: "c5b8a4ce51ec806f0ce654a8977fb17d" + } + Frame { + msec: 9120 + hash: "d09ba0ea9e7fed2f50d6463ac74da470" + } + Frame { + msec: 9136 + hash: "47ec5bab098fd88ef5be3703c316717a" + } + Frame { + msec: 9152 + hash: "3ea8c442ed43bd3a2aebc9cc2aacfc01" + } + Frame { + msec: 9168 + hash: "f016f14b0b21781924ac2afe146b1b97" + } + Frame { + msec: 9184 + hash: "7b7b6954cce0ca202585310520bbb3e3" + } + Frame { + msec: 9200 + hash: "b0de94ee3b0ce4845101606d2d512426" + } + Frame { + msec: 9216 + hash: "8dc56bcb2313bd8dd9ef0cbc098b80e5" + } + Frame { + msec: 9232 + hash: "a1692b26fb73ade5a05e03de3f4a8dbe" + } + Frame { + msec: 9248 + hash: "672dd46e629475d823b182104f15aa24" + } + Frame { + msec: 9264 + hash: "2859e53d63c20af7891efc99d5e515b5" + } + Frame { + msec: 9280 + hash: "b44b1c4eaa33fbd09c8e59c1bf2a8f2a" + } + Frame { + msec: 9296 + hash: "d520fa81032ca25ec2cb6c358488049d" + } + Frame { + msec: 9312 + hash: "3676c00bd5c3e9af8c4092afd80f58c2" + } + Frame { + msec: 9328 + hash: "6be4d4c35aba5a8d32a28dd88f32acd1" + } + Frame { + msec: 9344 + hash: "375473d4d838ef937c3164e7451d9391" + } + Frame { + msec: 9360 + hash: "610253e766974af4958c3623547deebd" + } + Frame { + msec: 9376 + hash: "20b79be381a95930c924240815cc63f4" + } + Frame { + msec: 9392 + hash: "88130d7132f472ff8495d640adf290cc" + } + Frame { + msec: 9408 + hash: "2e81f4c9a0221708146adcb508eb2d30" + } + Frame { + msec: 9424 + hash: "977f52ed922ba5db66440f115f7484a2" + } + Frame { + msec: 9440 + hash: "706f99c32d00be14ae67b4866fee0cd9" + } + Frame { + msec: 9456 + hash: "210231604091497b510c4a1d42295574" + } + Frame { + msec: 9472 + hash: "210231604091497b510c4a1d42295574" + } + Frame { + msec: 9488 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9504 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9520 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9536 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9552 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9568 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9584 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9600 + image: "packageviews.9.png" + } + Frame { + msec: 9616 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9632 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9648 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9664 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9680 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9696 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9712 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9728 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9744 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9760 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9776 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9792 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9808 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9824 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9840 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9856 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9872 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9888 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9904 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9920 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9936 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9952 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9968 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 9984 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 10000 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 10016 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 10032 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 10048 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 10064 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 10080 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 10096 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 10112 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 10128 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 10144 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 10160 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 10176 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 48; y: 137 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 10192 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 10208 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 10224 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 10240 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 10256 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 48; y: 137 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 10272 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 10288 + hash: "c54f97c72088b6319efba3c79bbef0fa" + } + Frame { + msec: 10304 + hash: "3627adf820bc44f99cca852096f337a0" + } + Frame { + msec: 10320 + hash: "48c0f775534ff9bbe9227e60ad9a3622" + } + Frame { + msec: 10336 + hash: "da5c6fd80ee0dc20e81031c84ede20cf" + } + Frame { + msec: 10352 + hash: "ce7595da55b274259771eb99a42df454" + } + Frame { + msec: 10368 + hash: "c2dd2aa17b9508477699fefe55bfbd06" + } + Frame { + msec: 10384 + hash: "4ee897ddfec1081eef8bc5d799774f82" + } + Frame { + msec: 10400 + hash: "f4da67964a175acf4cde4a24b054c24c" + } + Frame { + msec: 10416 + hash: "e3da951dad465f1a69d8d7c08e888f02" + } + Frame { + msec: 10432 + hash: "ff862073eada170a07d209048367b823" + } + Frame { + msec: 10448 + hash: "cb61d5a89c1acc2b646f3c07214bea4a" + } + Frame { + msec: 10464 + hash: "15d842ac551c15a136c7598adf2fe2b1" + } + Frame { + msec: 10480 + hash: "04b9e85f7418bbc402e51e0ce8149180" + } + Frame { + msec: 10496 + hash: "455dff37edfac66f5e4ae78e10b93cf9" + } + Frame { + msec: 10512 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10528 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10544 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10560 + image: "packageviews.10.png" + } + Frame { + msec: 10576 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10592 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10608 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10624 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10640 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10656 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10672 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10688 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10704 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10720 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10736 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10752 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10768 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10784 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10800 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10816 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10832 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10848 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10864 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10880 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10896 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10912 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10928 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10944 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10960 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10976 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 10992 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11008 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11024 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11040 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11056 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11072 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11088 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11104 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11120 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11136 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11152 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11168 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11184 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11200 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11216 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11232 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11248 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11264 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11280 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11296 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11312 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11328 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11344 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11360 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11376 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11392 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11408 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11424 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11440 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11456 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11472 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11488 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11504 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 47; y: 141 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11520 + image: "packageviews.11.png" + } + Frame { + msec: 11536 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11552 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11568 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 47; y: 141 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11584 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11600 + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Frame { + msec: 11616 + hash: "cf515f316c197a307a7fb8373df3b107" + } + Frame { + msec: 11632 + hash: "927379ba611284d5c98a3eb5aca04f7c" + } + Frame { + msec: 11648 + hash: "387ad2042589de0a19cb13aa0cac8872" + } + Frame { + msec: 11664 + hash: "6536ad87d1f04b13c28c43ae0fed984f" + } + Frame { + msec: 11680 + hash: "38d77d6610739614e95c70f32736f238" + } + Frame { + msec: 11696 + hash: "9a6c3a95b61d3b9b787417600123b6d8" + } + Frame { + msec: 11712 + hash: "782d907d7d170108beb030c93d9a4d94" + } + Frame { + msec: 11728 + hash: "646ee08d1ffe676ca0363f70e14c2ed6" + } + Frame { + msec: 11744 + hash: "830730ed9990c8f96fa5c7e6b4228884" + } + Frame { + msec: 11760 + hash: "2e678862f358814278d38950c7c5765b" + } + Frame { + msec: 11776 + hash: "c656eb6ace9caf86d417d79452c4ea34" + } + Frame { + msec: 11792 + hash: "227a9bb3644c26622ef654ba2c61ddad" + } + Frame { + msec: 11808 + hash: "bc8188bf8be749bfb28fc64bb5773922" + } + Frame { + msec: 11824 + hash: "f1e90cfd466bdc26ba98632fe1e5360c" + } + Frame { + msec: 11840 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 11856 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 11872 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 11888 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 11904 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 11920 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 11936 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 11952 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 11968 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 11984 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12000 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12016 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12032 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12048 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12064 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12080 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12096 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12112 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12128 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12144 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12160 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12176 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12192 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12208 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12224 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12240 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12256 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12272 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12288 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12304 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12320 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12336 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12352 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12368 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12384 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12400 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12416 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12432 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12448 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12464 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12480 + image: "packageviews.12.png" + } + Frame { + msec: 12496 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12512 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12528 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12544 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12560 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12576 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12592 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12608 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12624 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12640 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12656 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12672 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12688 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12704 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12720 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12736 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12752 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12768 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12784 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12800 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12816 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12832 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12848 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12864 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12880 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12896 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12912 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12928 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12944 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12960 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12976 + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Frame { + msec: 12992 + hash: "81795ee4213ac62e073d811aaf6b580c" + } +} diff --git a/tests/auto/declarative/qmlvisual/Package_Views/packageviews.qml b/tests/auto/declarative/qmlvisual/Package_Views/packageviews.qml new file mode 100644 index 0000000..f6c033f --- /dev/null +++ b/tests/auto/declarative