diff options
author | Yann Bodson <yann.bodson@nokia.com> | 2009-11-17 06:40:54 (GMT) |
---|---|---|
committer | Yann Bodson <yann.bodson@nokia.com> | 2009-11-17 06:40:54 (GMT) |
commit | cee1c78e0def34a0c4303ce70dc8611fd775a912 (patch) | |
tree | 09b0943d158f9e432b288bd54ff1b2cce730319e | |
parent | 00ba769bd417ff005a5e9854bfcc5dbd0acd9848 (diff) | |
parent | 2f8e5ce75853091ff4bab885654923e0b7c4986e (diff) | |
download | Qt-cee1c78e0def34a0c4303ce70dc8611fd775a912.zip Qt-cee1c78e0def34a0c4303ce70dc8611fd775a912.tar.gz Qt-cee1c78e0def34a0c4303ce70dc8611fd775a912.tar.bz2 |
Merge branch 'kinetic-declarativeui' of scm.dev.nokia.troll.no:qt/kinetic into kinetic-declarativeui
22 files changed, 3007 insertions, 43 deletions
diff --git a/src/declarative/qml/qmlvmemetaobject.cpp b/src/declarative/qml/qmlvmemetaobject.cpp index ed28d78..3f5dd475 100644 --- a/src/declarative/qml/qmlvmemetaobject.cpp +++ b/src/declarative/qml/qmlvmemetaobject.cpp @@ -108,15 +108,7 @@ int QmlVMEMetaObject::metaCall(QMetaObject::Call c, int _id, void **a) QPair<int, QmlPropertyValueInterceptor*> pair = interceptors.value(id); int valueIndex = pair.first; QmlPropertyValueInterceptor *vi = pair.second; - QVariant::Type type = QVariant::Invalid; - if (id >= propOffset) { - id -= propOffset; - if (id < metaData->propertyCount) { - type = data[id].type(); - } - } else { - type = property(id).type(); - } + QVariant::Type type = property(id).type(); if (type != QVariant::Invalid) { if (valueIndex != -1) { @@ -129,6 +121,8 @@ int QmlVMEMetaObject::metaCall(QMetaObject::Call c, int _id, void **a) valueType->setValue(QVariant(type, a[0])); QMetaProperty valueProp = valueType->metaObject()->property(valueIndex); vi->write(valueProp.read(valueType)); + + if (!ep) delete valueType; return -1; } else { vi->write(QVariant(type, a[0])); diff --git a/src/declarative/util/qmlstateoperations.cpp b/src/declarative/util/qmlstateoperations.cpp index 0d977de..e2933b2 100644 --- a/src/declarative/util/qmlstateoperations.cpp +++ b/src/declarative/util/qmlstateoperations.cpp @@ -475,6 +475,8 @@ void QmlAnchorChanges::setReset(const QString &reset) Q_D(QmlAnchorChanges); 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(); } /*! @@ -766,8 +768,8 @@ bool QmlAnchorChanges::override(ActionEvent*other) return false; if (static_cast<ActionEvent*>(this) == other) return true; - //### can we do any other meaningful comparison? Do we need to attempt to merge the two - // somehow if they have the same target and some of the same anchors? + if (static_cast<QmlAnchorChanges*>(other)->object() == object()) + return true; return false; } diff --git a/tests/auto/declarative/anchors/tst_anchors.cpp b/tests/auto/declarative/anchors/tst_anchors.cpp index 22f8327..d340a7d 100644 --- a/tests/auto/declarative/anchors/tst_anchors.cpp +++ b/tests/auto/declarative/anchors/tst_anchors.cpp @@ -46,6 +46,9 @@ #include <private/qmlgraphicstext_p.h> #include <QtDeclarative/private/qmlgraphicsanchors_p_p.h> +Q_DECLARE_METATYPE(QmlGraphicsAnchors::UsedAnchor) +Q_DECLARE_METATYPE(QmlGraphicsAnchorLine::AnchorLine) + class tst_anchors : public QObject { @@ -62,7 +65,9 @@ private slots: void illegalSets(); void illegalSets_data(); void reset(); + void reset_data(); void nullItem(); + void nullItem_data(); void crash1(); }; @@ -214,17 +219,19 @@ void tst_anchors::illegalSets_data() << "Rectangle { id: rect; Rectangle { anchors.left: rect.left; anchors.right: rect.right; anchors.horizontalCenter: rect.horizontalCenter } }" << "QML QmlGraphicsRectangle (file::2:23) Can't specify left, right, and hcenter anchors."; - QTest::newRow("H - anchor to V") - << "Rectangle { Rectangle { anchors.left: parent.top } }" - << "QML QmlGraphicsRectangle (file::2:13) Can't anchor a horizontal edge to a vertical edge."; + foreach (const QString &side, QStringList() << "left" << "right") { + QTest::newRow("H - anchor to V") + << QString("Rectangle { Rectangle { anchors.%1: parent.top } }").arg(side) + << "QML QmlGraphicsRectangle (file::2:13) Can't anchor a horizontal edge to a vertical edge."; - QTest::newRow("H - anchor to non parent/sibling") - << "Rectangle { Item { Rectangle { id: rect } } Rectangle { anchors.left: rect.left } }" - << "QML QmlGraphicsRectangle (file::2:45) Can't anchor to an item that isn't a parent or sibling."; + QTest::newRow("H - anchor to non parent/sibling") + << QString("Rectangle { Item { Rectangle { id: rect } } Rectangle { anchors.%1: rect.%1 } }").arg(side) + << "QML QmlGraphicsRectangle (file::2:45) Can't anchor to an item that isn't a parent or sibling."; - QTest::newRow("H - anchor to self") - << "Rectangle { id: rect; anchors.left: rect.left }" - << "QML QmlGraphicsRectangle (file::2:1) Can't anchor item to self."; + QTest::newRow("H - anchor to self") + << QString("Rectangle { id: rect; anchors.%1: rect.%1 }").arg(side) + << "QML QmlGraphicsRectangle (file::2:1) Can't anchor item to self."; + } QTest::newRow("V - too many anchors") @@ -235,17 +242,20 @@ void tst_anchors::illegalSets_data() << "Rectangle { Text { id: text1; text: \"Hello\" } Text { anchors.baseline: text1.baseline; anchors.top: text1.top; } }" << "QML QmlGraphicsText (file::2:47) Baseline anchor can't be used in conjunction with top, bottom, or vcenter anchors."; - QTest::newRow("V - anchor to H") - << "Rectangle { Rectangle { anchors.top: parent.left } }" - << "QML QmlGraphicsRectangle (file::2:13) Can't anchor a vertical edge to a horizontal edge."; + foreach (const QString &side, QStringList() << "top" << "bottom" << "baseline") { - QTest::newRow("V - anchor to non parent/sibling") - << "Rectangle { Item { Rectangle { id: rect } } Rectangle { anchors.top: rect.top } }" - << "QML QmlGraphicsRectangle (file::2:45) Can't anchor to an item that isn't a parent or sibling."; + QTest::newRow("V - anchor to H") + << QString("Rectangle { Rectangle { anchors.%1: parent.left } }").arg(side) + << "QML QmlGraphicsRectangle (file::2:13) Can't anchor a vertical edge to a horizontal edge."; - QTest::newRow("V - anchor to self") - << "Rectangle { id: rect; anchors.top: rect.top }" - << "QML QmlGraphicsRectangle (file::2:1) Can't anchor item to self."; + QTest::newRow("V - anchor to non parent/sibling") + << QString("Rectangle { Item { Rectangle { id: rect } } Rectangle { anchors.%1: rect.%1 } }").arg(side) + << "QML QmlGraphicsRectangle (file::2:45) Can't anchor to an item that isn't a parent or sibling."; + + QTest::newRow("V - anchor to self") + << QString("Rectangle { id: rect; anchors.%1: rect.%1 }").arg(side) + << "QML QmlGraphicsRectangle (file::2:1) Can't anchor item to self."; + } QTest::newRow("centerIn - anchor to non parent/sibling") @@ -260,35 +270,77 @@ void tst_anchors::illegalSets_data() void tst_anchors::reset() { - QmlGraphicsItem *aItem = new QmlGraphicsItem; + QFETCH(QString, side); + QFETCH(QmlGraphicsAnchorLine::AnchorLine, anchorLine); + QFETCH(QmlGraphicsAnchors::UsedAnchor, usedAnchor); + + QmlGraphicsItem *baseItem = new QmlGraphicsItem; + QmlGraphicsAnchorLine anchor; - anchor.item = aItem; - anchor.anchorLine = QmlGraphicsAnchorLine::Top; + anchor.item = baseItem; + anchor.anchorLine = anchorLine; QmlGraphicsItem *item = new QmlGraphicsItem; - item->anchors()->setBottom(anchor); - QCOMPARE(item->anchors()->usedAnchors().testFlag(QmlGraphicsAnchors::HasBottomAnchor), true); - item->anchors()->resetBottom(); - QCOMPARE(item->anchors()->usedAnchors().testFlag(QmlGraphicsAnchors::HasBottomAnchor), false); + const QMetaObject *meta = item->anchors()->metaObject(); + QMetaProperty p = meta->property(meta->indexOfProperty(side.toUtf8().constData())); + + QVERIFY(p.write(item->anchors(), qVariantFromValue(anchor))); + QCOMPARE(item->anchors()->usedAnchors().testFlag(usedAnchor), true); + + QVERIFY(p.reset(item->anchors())); + QCOMPARE(item->anchors()->usedAnchors().testFlag(usedAnchor), false); + + delete item; + delete baseItem; +} + +void tst_anchors::reset_data() +{ + QTest::addColumn<QString>("side"); + QTest::addColumn<QmlGraphicsAnchorLine::AnchorLine>("anchorLine"); + QTest::addColumn<QmlGraphicsAnchors::UsedAnchor>("usedAnchor"); + + QTest::newRow("left") << "left" << QmlGraphicsAnchorLine::Left << QmlGraphicsAnchors::HasLeftAnchor; + QTest::newRow("top") << "top" << QmlGraphicsAnchorLine::Top << QmlGraphicsAnchors::HasTopAnchor; + QTest::newRow("right") << "right" << QmlGraphicsAnchorLine::Right << QmlGraphicsAnchors::HasRightAnchor; + QTest::newRow("bottom") << "bottom" << QmlGraphicsAnchorLine::Bottom << QmlGraphicsAnchors::HasBottomAnchor; + + QTest::newRow("hcenter") << "horizontalCenter" << QmlGraphicsAnchorLine::HCenter << QmlGraphicsAnchors::HasHCenterAnchor; + QTest::newRow("vcenter") << "verticalCenter" << QmlGraphicsAnchorLine::VCenter << QmlGraphicsAnchors::HasVCenterAnchor; + QTest::newRow("baseline") << "baseline" << QmlGraphicsAnchorLine::Baseline << QmlGraphicsAnchors::HasBaselineAnchor; } void tst_anchors::nullItem() { + QFETCH(QString, side); + QmlGraphicsAnchorLine anchor; - QmlGraphicsItem *item; + QmlGraphicsItem *item = new QmlGraphicsItem; - QTest::ignoreMessage(QtWarningMsg, "QML QmlGraphicsItem (unknown location) Can't anchor to a null item."); - item = new QmlGraphicsItem; - item->anchors()->setLeft(anchor); - delete item; + const QMetaObject *meta = item->anchors()->metaObject(); + QMetaProperty p = meta->property(meta->indexOfProperty(side.toUtf8().constData())); QTest::ignoreMessage(QtWarningMsg, "QML QmlGraphicsItem (unknown location) Can't anchor to a null item."); - item = new QmlGraphicsItem; - item->anchors()->setBottom(anchor); + QVERIFY(p.write(item->anchors(), qVariantFromValue(anchor))); + delete item; } +void tst_anchors::nullItem_data() +{ + QTest::addColumn<QString>("side"); + + QTest::newRow("left") << "left"; + QTest::newRow("top") << "top"; + QTest::newRow("right") << "right"; + QTest::newRow("bottom") << "bottom"; + + QTest::newRow("hcenter") << "horizontalCenter"; + QTest::newRow("vcenter") << "verticalCenter"; + QTest::newRow("baseline") << "baseline"; +} + void tst_anchors::crash1() { QmlView *view = new QmlView; diff --git a/tests/auto/declarative/qmllanguage/data/DynamicPropertiesNestedType.qml b/tests/auto/declarative/qmllanguage/data/DynamicPropertiesNestedType.qml new file mode 100644 index 0000000..5c2edb4 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/DynamicPropertiesNestedType.qml @@ -0,0 +1,6 @@ +import Qt 4.6 + +Object { + property int super_a: 10 + property int super_c: 14 +} diff --git a/tests/auto/declarative/qmllanguage/data/dynamicProperties.qml b/tests/auto/declarative/qmllanguage/data/dynamicProperties.qml index f93e446..17fa974 100644 --- a/tests/auto/declarative/qmllanguage/data/dynamicProperties.qml +++ b/tests/auto/declarative/qmllanguage/data/dynamicProperties.qml @@ -7,6 +7,7 @@ Object { property real realProperty: -19.9 property string stringProperty: "Hello World!" property color colorProperty: "red" + property url urlProperty: "main.qml" property date dateProperty: "1945-09-02" property var varProperty: "Hello World!" property variant variantProperty: 12 diff --git a/tests/auto/declarative/qmllanguage/data/dynamicPropertiesNested.qml b/tests/auto/declarative/qmllanguage/data/dynamicPropertiesNested.qml new file mode 100644 index 0000000..7bfab67 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/dynamicPropertiesNested.qml @@ -0,0 +1,9 @@ +import Qt 4.6 + +DynamicPropertiesNestedType { + property int a: 13 + property int b: 12 + + super_a: 11 +} + diff --git a/tests/auto/declarative/qmllanguage/data/dynamicSignalsAndSlots.qml b/tests/auto/declarative/qmllanguage/data/dynamicSignalsAndSlots.qml index b0ca970..72ec218 100644 --- a/tests/auto/declarative/qmllanguage/data/dynamicSignalsAndSlots.qml +++ b/tests/auto/declarative/qmllanguage/data/dynamicSignalsAndSlots.qml @@ -4,4 +4,7 @@ Object { function slot1() {} signal signal2 function slot2() {} + + property int test: 0 + function slot3(a) { print(1921); test = a; } } diff --git a/tests/auto/declarative/qmllanguage/data/listProperties.qml b/tests/auto/declarative/qmllanguage/data/listProperties.qml new file mode 100644 index 0000000..c39ceae --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/listProperties.qml @@ -0,0 +1,9 @@ +import Qt 4.6 + +Object { + property list<Object> listProperty + property int test: listProperty.length + + listProperty: [ Object{}, Object {} ] +} + diff --git a/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp b/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp index d5c5c4d..892d2eb 100644 --- a/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp +++ b/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp @@ -91,6 +91,8 @@ private slots: void idProperty(); void assignSignal(); void dynamicProperties(); + void dynamicPropertiesNested(); + void listProperties(); void dynamicObjectProperties(); void dynamicSignalsAndSlots(); void simpleBindings(); @@ -554,12 +556,40 @@ void tst_qmllanguage::dynamicProperties() QCOMPARE(object->property("doubleProperty"), QVariant(-10.1)); QCOMPARE(object->property("realProperty"), QVariant((qreal)-19.9)); QCOMPARE(object->property("stringProperty"), QVariant("Hello World!")); + QCOMPARE(object->property("urlProperty"), QVariant(TEST_FILE("main.qml"))); QCOMPARE(object->property("colorProperty"), QVariant(QColor("red"))); QCOMPARE(object->property("dateProperty"), QVariant(QDate(1945, 9, 2))); QCOMPARE(object->property("varProperty"), QVariant("Hello World!")); QCOMPARE(object->property("variantProperty"), QVariant(12)); } +// Test that nested types can use dynamic properties +void tst_qmllanguage::dynamicPropertiesNested() +{ + QmlComponent component(&engine, TEST_FILE("dynamicPropertiesNested.qml")); + VERIFY_ERRORS(0); + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(object->property("super_a").toInt(), 11); // Overridden + QCOMPARE(object->property("super_c").toInt(), 14); // Inherited + QCOMPARE(object->property("a").toInt(), 13); // New + QCOMPARE(object->property("b").toInt(), 12); // New + + delete object; +} + +// Tests the creation and assignment to dynamic list properties +void tst_qmllanguage::listProperties() +{ + QmlComponent component(&engine, TEST_FILE("listProperties.qml")); + VERIFY_ERRORS(0); + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(object->property("test").toInt(), 2); +} + // Tests the creation and assignment of dynamic object properties // ### Not complete void tst_qmllanguage::dynamicObjectProperties() @@ -584,6 +614,10 @@ void tst_qmllanguage::dynamicSignalsAndSlots() QVERIFY(object->metaObject()->indexOfMethod("signal2()") != -1); QVERIFY(object->metaObject()->indexOfMethod("slot1()") != -1); QVERIFY(object->metaObject()->indexOfMethod("slot2()") != -1); + + QCOMPARE(object->property("test").toInt(), 0); + QMetaObject::invokeMethod(object, "slot3", Qt::DirectConnection, Q_ARG(QVariant, QVariant(10))); + QCOMPARE(object->property("test").toInt(), 10); } void tst_qmllanguage::simpleBindings() diff --git a/tests/auto/declarative/shared/debugutil.cpp b/tests/auto/declarative/shared/debugutil.cpp new file mode 100644 index 0000000..7008529 --- /dev/null +++ b/tests/auto/declarative/shared/debugutil.cpp @@ -0,0 +1,173 @@ +/**************************************************************************** +** +** Copyright (C) 2009 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 <QSignalSpy> +#include <QEventLoop> +#include <QTimer> + +#include <private/qmldebugclient_p.h> +#include <private/qmldebugservice_p.h> + +#include "debugutil_p.h" + +bool QmlDebugTest::waitForSignal(QObject *receiver, const char *member, int timeout) { + QEventLoop loop; + QTimer timer; + QObject::connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit())); + QObject::connect(receiver, member, &loop, SLOT(quit())); + timer.start(timeout); + loop.exec(); + return timer.isActive(); +} + + +QmlDebugTestData::QmlDebugTestData(QEventLoop *el) + : exitCode(-1), loop(el) +{ +} + +QmlDebugTestData::~QmlDebugTestData() +{ + qDeleteAll(items); +} + +void QmlDebugTestData::testsFinished(int code) +{ + exitCode = code; + loop->quit(); +} + + + +QmlDebugTestService::QmlDebugTestService(const QString &s, QObject *parent) + : QmlDebugService(s, parent), enabled(false) +{ +} + +void QmlDebugTestService::messageReceived(const QByteArray &ba) +{ + sendMessage(ba); +} + +void QmlDebugTestService::enabledChanged(bool e) +{ + emit enabledStateChanged(); + enabled = e; +} + + +QmlDebugTestClient::QmlDebugTestClient(const QString &s, QmlDebugConnection *c) + : QmlDebugClient(s, c) +{ +} + +QByteArray QmlDebugTestClient::waitForResponse() +{ + QSignalSpy spy(this, SIGNAL(serverMessage(QByteArray))); + QmlDebugTest::waitForSignal(this, SIGNAL(serverMessage(QByteArray))); + if (spy.count() == 0) { + qWarning() << "tst_QmlDebugClient: no response from server!"; + return QByteArray(); + } + return spy.at(0).at(0).value<QByteArray>(); +} + +void QmlDebugTestClient::messageReceived(const QByteArray &ba) +{ + emit serverMessage(ba); +} + + +tst_QmlDebug_Thread::tst_QmlDebug_Thread(QmlDebugTestData *data, QmlTestFactory *factory) + : m_ready(false), m_data(data), m_factory(factory) +{ +} + +void tst_QmlDebug_Thread::run() +{ + QTest::qWait(1000); + + QmlDebugConnection conn; + conn.connectToHost("127.0.0.1", 3768); + bool ok = conn.waitForConnected(5000); + Q_ASSERT(ok); + + while (!m_ready) + QTest::qWait(100); + + m_data->conn = &conn; + + Q_ASSERT(m_factory); + QObject *test = m_factory->createTest(m_data); + Q_ASSERT(test); + int code = QTest::qExec(test); + emit testsFinished(code); +} + + +int QmlDebugTest::runTests(QmlTestFactory *factory, const QList<QByteArray> &qml) +{ + qputenv("QML_DEBUG_SERVER_PORT", "3768"); + + QEventLoop loop; + QmlDebugTestData data(&loop); + + tst_QmlDebug_Thread thread(&data, factory); + QObject::connect(&thread, SIGNAL(testsFinished(int)), &data, SLOT(testsFinished(int))); + thread.start(); + + QmlEngine engine; // blocks until client connects + + foreach (const QByteArray &code, qml) { + QmlComponent c(&engine, code, QUrl("file://")); + Q_ASSERT(c.isReady()); // fails if bad syntax + data.items << qobject_cast<QmlGraphicsItem*>(c.create()); + } + + // start the test + data.engine = &engine; + thread.m_ready = true; + + loop.exec(); + + return data.exitCode; +} + + diff --git a/tests/auto/declarative/shared/debugutil_p.h b/tests/auto/declarative/shared/debugutil_p.h new file mode 100644 index 0000000..665aeda --- /dev/null +++ b/tests/auto/declarative/shared/debugutil_p.h @@ -0,0 +1,142 @@ +/**************************************************************************** +** +** Copyright (C) 2009 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 <QSignalSpy> +#include <QEventLoop> +#include <QPointer> +#include <QTimer> +#include <QThread> +#include <QTest> + +#include <QtDeclarative/qmlengine.h> + +#include <private/qmldebugclient_p.h> +#include <private/qmldebugservice_p.h> +#include <private/qmlgraphicsitem_p.h> + + +class QmlDebugTestData : public QObject +{ + Q_OBJECT +public: + QmlDebugTestData(QEventLoop *el); + + ~QmlDebugTestData(); + + QmlEngine *engine; + QmlDebugConnection *conn; + + int exitCode; + QEventLoop *loop; + + QList<QmlGraphicsItem *> items; + +public slots: + void testsFinished(int code); +}; + + +class QmlTestFactory +{ +public: + QmlTestFactory() {} + virtual ~QmlTestFactory() {} + + virtual QObject *createTest(QmlDebugTestData *data) = 0; +}; + + +namespace QmlDebugTest { + + bool waitForSignal(QObject *receiver, const char *member, int timeout = 5000); + + int runTests(QmlTestFactory *factory, const QList<QByteArray> &qml = QList<QByteArray>()); +} + +class QmlDebugTestService : public QmlDebugService +{ + Q_OBJECT +public: + QmlDebugTestService(const QString &s, QObject *parent = 0); + bool enabled; + +signals: + void enabledStateChanged(); + +protected: + virtual void messageReceived(const QByteArray &ba); + + virtual void enabledChanged(bool e); +}; + +class QmlDebugTestClient : public QmlDebugClient +{ + Q_OBJECT +public: + QmlDebugTestClient(const QString &s, QmlDebugConnection *c); + + QByteArray waitForResponse(); + +signals: + void serverMessage(const QByteArray &); + +protected: + virtual void messageReceived(const QByteArray &ba); +}; + +class tst_QmlDebug_Thread : public QThread +{ + Q_OBJECT +public: + tst_QmlDebug_Thread(QmlDebugTestData *data, QmlTestFactory *factory); + + void run(); + + bool m_ready; + +signals: + void testsFinished(int); + +private: + QmlDebugTestData *m_data; + QmlTestFactory *m_factory; +}; + + diff --git a/tests/auto/declarative/visual/animation/reanchor/data/reanchor.0.png b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.0.png Binary files differnew file mode 100644 index 0000000..c7bbf38 --- /dev/null +++ b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.0.png diff --git a/tests/auto/declarative/visual/animation/reanchor/data/reanchor.1.png b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.1.png Binary files differnew file mode 100644 index 0000000..612500b --- /dev/null +++ b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.1.png diff --git a/tests/auto/declarative/visual/animation/reanchor/data/reanchor.2.png b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.2.png Binary files differnew file mode 100644 index 0000000..c7bbf38 --- /dev/null +++ b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.2.png diff --git a/tests/auto/declarative/visual/animation/reanchor/data/reanchor.3.png b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.3.png Binary files differnew file mode 100644 index 0000000..c7bbf38 --- /dev/null +++ b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.3.png diff --git a/tests/auto/declarative/visual/animation/reanchor/data/reanchor.4.png b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.4.png Binary files differnew file mode 100644 index 0000000..1910eb4 --- /dev/null +++ b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.4.png diff --git a/tests/auto/declarative/visual/animation/reanchor/data/reanchor.5.png b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.5.png Binary files differnew file mode 100644 index 0000000..3b8eebd --- /dev/null +++ b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.5.png diff --git a/tests/auto/declarative/visual/animation/reanchor/data/reanchor.6.png b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.6.png Binary files differnew file mode 100644 index 0000000..c7bbf38 --- /dev/null +++ b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.6.png diff --git a/tests/auto/declarative/visual/animation/reanchor/data/reanchor.7.png b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.7.png Binary files differnew file mode 100644 index 0000000..c7bbf38 --- /dev/null +++ b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.7.png diff --git a/tests/auto/declarative/visual/animation/reanchor/data/reanchor.8.png b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.8.png Binary files differnew file mode 100644 index 0000000..960be31 --- /dev/null +++ b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.8.png diff --git a/tests/auto/declarative/visual/animation/reanchor/data/reanchor.qml b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.qml new file mode 100644 index 0000000..0f58de5 --- /dev/null +++ b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.qml @@ -0,0 +1,2471 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 32 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 48 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 64 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 80 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 96 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 112 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 128 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 144 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 160 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 176 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 192 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 208 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 224 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 240 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 256 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 272 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 288 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 304 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 320 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 336 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 352 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 368 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 384 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 400 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 416 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 432 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 448 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 464 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 480 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 496 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 512 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 528 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 544 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 560 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 576 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 592 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 608 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 624 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 640 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 656 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 672 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 688 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 704 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 720 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 736 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 752 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 768 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 784 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 800 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 816 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 832 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 848 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 864 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 880 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 896 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 912 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 928 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 944 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 960 + image: "reanchor.0.png" + } + Frame { + msec: 976 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 992 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1008 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1024 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1040 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1056 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1072 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1088 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1104 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1120 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1136 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1152 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1168 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1184 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1200 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1216 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1232 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1248 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1264 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1280 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1296 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1312 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1328 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1344 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1360 + hash: "213811853dbefdc418099721e3bf8651" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 88; y: 115 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1376 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1392 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1408 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1424 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1440 + hash: "213811853dbefdc418099721e3bf8651" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 88; y: 115 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1456 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 1472 + hash: "c2d6dd91f3e9cdcacbadcb449c8a9896" + } + Frame { + msec: 1488 + hash: "1098ea19aecebd71208e101d522c1981" + } + Frame { + msec: 1504 + hash: "8cc59c20d796c073038518d2855fb6f0" + } + Frame { + msec: 1520 + hash: "914a89d0cfdc68145024ce2305a5e76e" + } + Frame { + msec: 1536 + hash: "7a2e3ca2660df24d9a6ec49a7422ebe1" + } + Frame { + msec: 1552 + hash: "b71496d986d5f0aa76b4f1663627f1f7" + } + Frame { + msec: 1568 + hash: "41b29a523db919bc0a4e0a9a88bfc873" + } + Frame { + msec: 1584 + hash: "97632a0de766b9ffbf71f21eeb0ff9a2" + } + Frame { + msec: 1600 + hash: "94cc196e62c150008461ff9996b4cae8" + } + Frame { + msec: 1616 + hash: "32e96ad2d15fa2386d365ab249ddf4f4" + } + Frame { + msec: 1632 + hash: "209394314f971b12fbc61ca45010cc62" + } + Frame { + msec: 1648 + hash: "b917c2684dda8af00278b34ababdcf5c" + } + Frame { + msec: 1664 + hash: "92b506860c1c5dc52f87c24c89921b05" + } + Frame { + msec: 1680 + hash: "7b7e96113fa9359954be9b3ac87943c3" + } + Frame { + msec: 1696 + hash: "42bc69db42c5df902038cec414246ec5" + } + Frame { + msec: 1712 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 1728 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 1744 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 1760 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 1776 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 1792 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 1808 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 1824 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 1840 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 1856 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 1872 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 1888 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 1904 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 1920 + image: "reanchor.1.png" + } + Frame { + msec: 1936 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 1952 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 1968 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 1984 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 2000 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 2016 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 2032 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 2048 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 2064 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 2080 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 2096 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 87; y: 114 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2112 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 2128 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 2144 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 2160 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 2176 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 2192 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 2208 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 87; y: 114 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2224 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 2240 + hash: "2d1aa011f2008a6147ba593e3cf272d7" + } + Frame { + msec: 2256 + hash: "206699ea84ce9fd60c1603b7a48a5134" + } + Frame { + msec: 2272 + hash: "68eb6df93a2b6db7023f7c3cc71d5b5f" + } + Frame { + msec: 2288 + hash: "5a4cd0620959dde92eeeaaa4dcd13091" + } + Frame { + msec: 2304 + hash: "17b763187a777253b25b22f5dd7253ae" + } + Frame { + msec: 2320 + hash: "1de9dcf4d385266f4482e2d0967d9119" + } + Frame { + msec: 2336 + hash: "833496add6dbc3103a28a47e453a738b" + } + Frame { + msec: 2352 + hash: "b3bab2e9c56db60cd54e68369e6b790d" + } + Frame { + msec: 2368 + hash: "ee91c6cd909bec401a1a7eebd10b8b02" + } + Frame { + msec: 2384 + hash: "0ed679ad0ab7bd3544947bccda88647b" + } + Frame { + msec: 2400 + hash: "d7dfcdc8a4233821919f1732d8c39712" + } + Frame { + msec: 2416 + hash: "c52829ee689e4c312a9dff8dbd4a79f9" + } + Frame { + msec: 2432 + hash: "7962badda0e80a61b67943d3b31f892d" + } + Frame { + msec: 2448 + hash: "fc5f2c24e3d8743ab5b20aaa122bacc2" + } + Frame { + msec: 2464 + hash: "201b9ee6c9ac6208ef812fe2e95020ef" + } + Frame { + msec: 2480 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2496 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2512 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2528 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2544 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2560 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2576 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2592 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2608 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2624 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2640 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2656 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2672 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2688 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2704 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2720 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2736 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2752 + hash: "213811853dbefdc418099721e3bf8651" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 87; y: 114 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2768 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2784 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2800 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2816 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2832 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2848 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 2864 + hash: "213811853dbefdc418099721e3bf8651" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 87; y: 114 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2880 + image: "reanchor.2.png" + } + Frame { + msec: 2896 + hash: "c2d6dd91f3e9cdcacbadcb449c8a9896" + } + Frame { + msec: 2912 + hash: "1098ea19aecebd71208e101d522c1981" + } + Frame { + msec: 2928 + hash: "8cc59c20d796c073038518d2855fb6f0" + } + Frame { + msec: 2944 + hash: "914a89d0cfdc68145024ce2305a5e76e" + } + Frame { + msec: 2960 + hash: "7a2e3ca2660df24d9a6ec49a7422ebe1" + } + Frame { + msec: 2976 + hash: "b71496d986d5f0aa76b4f1663627f1f7" + } + Frame { + msec: 2992 + hash: "41b29a523db919bc0a4e0a9a88bfc873" + } + Frame { + msec: 3008 + hash: "97632a0de766b9ffbf71f21eeb0ff9a2" + } + Frame { + msec: 3024 + hash: "94cc196e62c150008461ff9996b4cae8" + } + Frame { + msec: 3040 + hash: "32e96ad2d15fa2386d365ab249ddf4f4" + } + Frame { + msec: 3056 + hash: "209394314f971b12fbc61ca45010cc62" + } + Frame { + msec: 3072 + hash: "b917c2684dda8af00278b34ababdcf5c" + } + Frame { + msec: 3088 + hash: "92b506860c1c5dc52f87c24c89921b05" + } + Frame { + msec: 3104 + hash: "7b7e96113fa9359954be9b3ac87943c3" + } + Frame { + msec: 3120 + hash: "42bc69db42c5df902038cec414246ec5" + } + Frame { + msec: 3136 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 3152 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 3168 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 3184 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 3200 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 3216 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 3232 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 3248 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 3264 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 3280 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 3296 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 3312 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 3328 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 3344 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 3360 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 87; y: 114 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3376 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 3392 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 3408 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 3424 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 3440 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 3456 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 3472 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 87; y: 114 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3488 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 3504 + hash: "2d1aa011f2008a6147ba593e3cf272d7" + } + Frame { + msec: 3520 + hash: "206699ea84ce9fd60c1603b7a48a5134" + } + Frame { + msec: 3536 + hash: "68eb6df93a2b6db7023f7c3cc71d5b5f" + } + Frame { + msec: 3552 + hash: "5a4cd0620959dde92eeeaaa4dcd13091" + } + Frame { + msec: 3568 + hash: "17b763187a777253b25b22f5dd7253ae" + } + Frame { + msec: 3584 + hash: "1de9dcf4d385266f4482e2d0967d9119" + } + Frame { + msec: 3600 + hash: "833496add6dbc3103a28a47e453a738b" + } + Frame { + msec: 3616 + hash: "b3bab2e9c56db60cd54e68369e6b790d" + } + Frame { + msec: 3632 + hash: "ee91c6cd909bec401a1a7eebd10b8b02" + } + Frame { + msec: 3648 + hash: "0ed679ad0ab7bd3544947bccda88647b" + } + Frame { + msec: 3664 + hash: "d7dfcdc8a4233821919f1732d8c39712" + } + Frame { + msec: 3680 + hash: "c52829ee689e4c312a9dff8dbd4a79f9" + } + Frame { + msec: 3696 + hash: "7962badda0e80a61b67943d3b31f892d" + } + Frame { + msec: 3712 + hash: "fc5f2c24e3d8743ab5b20aaa122bacc2" + } + Frame { + msec: 3728 + hash: "201b9ee6c9ac6208ef812fe2e95020ef" + } + Frame { + msec: 3744 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 3760 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 3776 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 3792 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 3808 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 3824 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 3840 + image: "reanchor.3.png" + } + Frame { + msec: 3856 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 3872 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 3888 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 3904 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 3920 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 3936 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 3952 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 3968 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 3984 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4000 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4016 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4032 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4048 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4064 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4080 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4096 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4112 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4128 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4144 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4160 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4176 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4192 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4208 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4224 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4240 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4256 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4272 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4288 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4304 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4320 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4336 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4352 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4368 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4384 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4400 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4416 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4432 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4448 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4464 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4480 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4496 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4512 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4528 + hash: "213811853dbefdc418099721e3bf8651" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 174; y: 174 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4544 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4560 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4576 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4592 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4608 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4624 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4640 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4656 + hash: "213811853dbefdc418099721e3bf8651" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 174; y: 174 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4672 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 4688 + hash: "5d38bf4a033de31985ae9989107908af" + } + Frame { + msec: 4704 + hash: "ed1bd2abd42848ecd07f0f0654c2b80f" + } + Frame { + msec: 4720 + hash: "588de6662123733303d93f62c6481f6a" + } + Frame { + msec: 4736 + hash: "aae79c2fbb2fd1ac7efa9802bff40f95" + } + Frame { + msec: 4752 + hash: "f17512798136f67f25aaa0aeb60678e1" + } + Frame { + msec: 4768 + hash: "79578a1e0e3e9cd45c210d0c5d3e75d6" + } + Frame { + msec: 4784 + hash: "5dad4ff201744cda6ff41f89414c8d11" + } + Frame { + msec: 4800 + image: "reanchor.4.png" + } + Frame { + msec: 4816 + hash: "c4559982aa3f3d291364deed4bd96d65" + } + Frame { + msec: 4832 + hash: "0dff03ea9154bdb2a813358b04cfbde9" + } + Frame { + msec: 4848 + hash: "09bdf2869dee1c0cbe3c8c2e9254580b" + } + Frame { + msec: 4864 + hash: "ba7762978bbd63d624029910fe16fb6d" + } + Frame { + msec: 4880 + hash: "f00d198ab8f4f625b60e9e2071d8adfd" + } + Frame { + msec: 4896 + hash: "adcec9c9a5b0d60cf45b2915365ea09c" + } + Frame { + msec: 4912 + hash: "a65cd6fbb26d618692ef23148015a4f2" + } + Frame { + msec: 4928 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 4944 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 4960 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 4976 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 4992 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5008 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5024 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5040 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5056 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5072 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5088 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5104 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5120 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5136 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5152 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5168 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5184 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5200 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5216 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5232 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5248 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5264 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5280 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5296 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5312 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5328 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5344 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5360 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5376 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5392 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5408 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5424 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5440 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5456 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5472 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5488 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5504 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5520 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5536 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5552 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5568 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5584 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5600 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5616 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5632 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5648 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5664 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5680 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5696 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5712 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5728 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5744 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5760 + image: "reanchor.5.png" + } + Frame { + msec: 5776 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5792 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5808 + hash: "1137e22c68e043950811dee295e19b04" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 95; y: 78 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5824 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5840 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5856 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5872 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5888 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5904 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5920 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5936 + hash: "1137e22c68e043950811dee295e19b04" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 95; y: 78 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5952 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 5968 + hash: "103bbc9ce594851f5243b103f8fef1c1" + } + Frame { + msec: 5984 + hash: "c381148b052be2e6244f24c2292b89cf" + } + Frame { + msec: 6000 + hash: "2fda1d635fa47bff7de867df3dadfb4f" + } + Frame { + msec: 6016 + hash: "4d35e00af33ad5dc84998cda2d066b4e" + } + Frame { + msec: 6032 + hash: "14005d52d372acf6d3495f69bbf00b7d" + } + Frame { + msec: 6048 + hash: "29728f64d12e858d960c4e197824ef43" + } + Frame { + msec: 6064 + hash: "798822f0c20ef87cb01fe1dcd76c7585" + } + Frame { + msec: 6080 + hash: "4cdeea0f91587ef32a2c2e282f6d00e6" + } + Frame { + msec: 6096 + hash: "08ca5d16771e58da6cdd20b86dc65f03" + } + Frame { + msec: 6112 + hash: "e9aeb432709d275048ad9d84fb21db1a" + } + Frame { + msec: 6128 + hash: "3b642f27d356fd1815dc50f8e750623d" + } + Frame { + msec: 6144 + hash: "7c1db0ec278849ec044ea0aa3383075b" + } + Frame { + msec: 6160 + hash: "da902850879c95d4ddffbb1ba0060f25" + } + Frame { + msec: 6176 + hash: "e4053bd0db7752e7a47e096da645b69b" + } + Frame { + msec: 6192 + hash: "aabbb6d34399818347db265151a547b7" + } + Frame { + msec: 6208 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6224 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6240 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6256 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6272 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6288 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6304 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6320 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6336 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6352 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6368 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6384 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6400 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6416 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6432 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6448 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6464 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6480 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6496 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6512 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6528 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6544 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6560 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6576 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6592 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6608 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6624 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6640 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6656 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6672 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6688 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6704 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6720 + image: "reanchor.6.png" + } + Frame { + msec: 6736 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6752 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6768 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6784 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6800 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6816 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6832 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6848 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6864 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6880 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6896 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6912 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6928 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6944 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6960 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6976 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 6992 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7008 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7024 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7040 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7056 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7072 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7088 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7104 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7120 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7136 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7152 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7168 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7184 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7200 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7216 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7232 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7248 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7264 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7280 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7296 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7312 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7328 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7344 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7360 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7376 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7392 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7408 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7424 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7440 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7456 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7472 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7488 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7504 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7520 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7536 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7552 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7568 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7584 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7600 + hash: "213811853dbefdc418099721e3bf8651" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 86; y: 136 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7616 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7632 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7648 + hash: "213811853dbefdc418099721e3bf8651" + } + Frame { + msec: 7664 + hash: "213811853dbefdc418099721e3bf8651" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 86; y: 136 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7680 + image: "reanchor.7.png" + } + Frame { + msec: 7696 + hash: "c2d6dd91f3e9cdcacbadcb449c8a9896" + } + Frame { + msec: 7712 + hash: "1098ea19aecebd71208e101d522c1981" + } + Frame { + msec: 7728 + hash: "8cc59c20d796c073038518d2855fb6f0" + } + Frame { + msec: 7744 + hash: "914a89d0cfdc68145024ce2305a5e76e" + } + Frame { + msec: 7760 + hash: "7a2e3ca2660df24d9a6ec49a7422ebe1" + } + Frame { + msec: 7776 + hash: "b71496d986d5f0aa76b4f1663627f1f7" + } + Frame { + msec: 7792 + hash: "41b29a523db919bc0a4e0a9a88bfc873" + } + Frame { + msec: 7808 + hash: "97632a0de766b9ffbf71f21eeb0ff9a2" + } + Frame { + msec: 7824 + hash: "94cc196e62c150008461ff9996b4cae8" + } + Frame { + msec: 7840 + hash: "32e96ad2d15fa2386d365ab249ddf4f4" + } + Frame { + msec: 7856 + hash: "209394314f971b12fbc61ca45010cc62" + } + Frame { + msec: 7872 + hash: "b917c2684dda8af00278b34ababdcf5c" + } + Frame { + msec: 7888 + hash: "92b506860c1c5dc52f87c24c89921b05" + } + Frame { + msec: 7904 + hash: "7b7e96113fa9359954be9b3ac87943c3" + } + Frame { + msec: 7920 + hash: "42bc69db42c5df902038cec414246ec5" + } + Frame { + msec: 7936 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 7952 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 7968 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 7984 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8000 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8016 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8032 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8048 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8064 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8080 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8096 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8112 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8128 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8144 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8160 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8176 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8192 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8208 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8224 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8240 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8256 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8272 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8288 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8304 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8320 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8336 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8352 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8368 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8384 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8400 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 177; y: 173 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8416 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8432 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8448 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8464 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8480 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8496 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8512 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 177; y: 173 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8528 + hash: "7eb4027421fd6aa7d668a704e40a6e61" + } + Frame { + msec: 8544 + hash: "b4f30663a9b21e42375645e970f57d0b" + } + Frame { + msec: 8560 + hash: "6c12dbf4af8801573515b61123d4b1d7" + } + Frame { + msec: 8576 + hash: "facc61397c734bb4409d5664dc059a14" + } + Frame { + msec: 8592 + hash: "897e15e37276454d11fac6a528e967a6" + } + Frame { + msec: 8608 + hash: "cf8173519f1e042c227ff61c62308640" + } + Frame { + msec: 8624 + hash: "d0fcda14ea4bcfebf04ccf99e292ac6a" + } + Frame { + msec: 8640 + image: "reanchor.8.png" + } + Frame { + msec: 8656 + hash: "74b4ababa97def538f5340e88a4419a4" + } + Frame { + msec: 8672 + hash: "b96b5b64505b1814ddd42a52569d7fd9" + } + Frame { + msec: 8688 + hash: "0e3e07aad030b2075c4bc61b02ebe49e" + } + Frame { + msec: 8704 + hash: "c5eebc652c58e3a44d5ed481100ef242" + } + Frame { + msec: 8720 + hash: "d4a74185304c126739af728ddda40e0c" + } + Frame { + msec: 8736 + hash: "448572d3c1060b8311952429a7f9430d" + } + Frame { + msec: 8752 + hash: "00f64c09657a8afd6caa186efb6ad860" + } + Frame { + msec: 8768 + hash: "2a360e6feaaf303e9ee63145085796e6" + } + Frame { + msec: 8784 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 8800 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 8816 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 8832 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 8848 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 8864 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 8880 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 8896 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 8912 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 8928 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 8944 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 8960 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 8976 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 8992 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 9008 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 9024 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 9040 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 9056 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 9072 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 9088 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 9104 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 9120 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 9136 + hash: "1137e22c68e043950811dee295e19b04" + } + Key { + type: 6 + key: 16777249 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 9152 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 9168 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 9184 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 9200 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 9216 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 9232 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 9248 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 9264 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 9280 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 9296 + hash: "1137e22c68e043950811dee295e19b04" + } + Frame { + msec: 9312 + hash: "1137e22c68e043950811dee295e19b04" + } +} diff --git a/tests/auto/declarative/visual/animation/reanchor/reanchor.qml b/tests/auto/declarative/visual/animation/reanchor/reanchor.qml new file mode 100644 index 0000000..1cc68a9 --- /dev/null +++ b/tests/auto/declarative/visual/animation/reanchor/reanchor.qml @@ -0,0 +1,68 @@ +import Qt 4.6 + +Rectangle { + id: container + width: 200; height: 200 + Rectangle { + id: myRect + objectName: "MyRect" + color: "green"; + anchors.left: parent.left + anchors.right: rightGuideline.left + anchors.top: topGuideline.top + anchors.bottom: container.bottom + } + Item { id: leftGuideline; x: 10 } + Item { id: rightGuideline; x: 150 } + Item { id: topGuideline; y: 10 } + Item { id: bottomGuideline; y: 150 } + Item { id: topGuideline2; y: 50 } + Item { id: bottomGuideline2; y: 175 } + + MouseRegion { + id: wholeArea + anchors.fill: parent + onClicked: { + if (container.state == "") { + container.state = "reanchored"; + } else if (container.state == "reanchored") { + container.state = "reanchored2"; + } else if (container.state == "reanchored2") + container.state = "reanchored"; + } + } + + states: [ State { + name: "reanchored" + AnchorChanges { + target: myRect; + left: leftGuideline.left + right: container.right + top: container.top + bottom: bottomGuideline.bottom + } + }, State { + name: "reanchored2" + AnchorChanges { + target: myRect; + reset: "left, right" + top: topGuideline2.top + bottom: bottomGuideline2.bottom + } + }] + + transitions: Transition { + NumberAnimation { matchProperties: "x,y,width,height" } + } + + MouseRegion { + width: 50; height: 50 + anchors.right: parent.right + anchors.bottom: parent.bottom + onClicked: { + container.state = ""; + } + } + + state: "reanchored" +} |