diff options
90 files changed, 9752 insertions, 848 deletions
diff --git a/doc/src/declarative/qmldocument.qdoc b/doc/src/declarative/qmldocument.qdoc index 84e7926..2775ea6 100644 --- a/doc/src/declarative/qmldocument.qdoc +++ b/doc/src/declarative/qmldocument.qdoc @@ -71,6 +71,8 @@ Rectangle { } \endcode +QML documents are always encoded in UTF-8 format. + A QML document always begins with one or more import statements. To prevent elements introduced in later versions from affecting existing QML programs, the element types available within a document are controlled by the imported QML \l {Modules}. That is, diff --git a/doc/src/declarative/qmlformat.qdoc b/doc/src/declarative/qmlformat.qdoc index be1afa4..72bbe40 100644 --- a/doc/src/declarative/qmlformat.qdoc +++ b/doc/src/declarative/qmlformat.qdoc @@ -192,6 +192,10 @@ different property bindings. \section1 Syntax +\section2 Encoding + +QML files are always encoded in UTF-8 format. + \section2 Commenting The commenting rules in QML are the same as for ECMAScript. Both \e {MultiLineComment} blocks and \e {SingleLineComment}'s are supported. diff --git a/doc/src/declarative/binding.qdoc b/doc/src/declarative/qtbinding.qdoc index 94465a1..e925227 100644 --- a/doc/src/declarative/binding.qdoc +++ b/doc/src/declarative/qtbinding.qdoc @@ -42,7 +42,14 @@ /*! \page qtbinding.html \target qtbinding -\title QML/C++ Data Binding +\title Using QML in C++ Applications + +\list +\o QmlEngine and QmlComponent +\o QmlContext and data +\o QBindableMap +\o QAbstractItemModel Data models +\endlist The QML mechanisms of data binding can also be used to bind Qt C++ objects. diff --git a/doc/src/declarative/qtdeclarative.qdoc b/doc/src/declarative/qtdeclarative.qdoc index 73814db..45f9347 100644 --- a/doc/src/declarative/qtdeclarative.qdoc +++ b/doc/src/declarative/qtdeclarative.qdoc @@ -77,6 +77,7 @@ completely new applications. QML is fully \l {Extending QML}{extensible from C+ \o \l {tutorials-declarative-contacts.html}{Tutorial: 'Introduction to QML'} \o \l {advtutorial.html}{Advanced Tutorial: 'Same Game'} \o \l {QML Examples and Walkthroughs} +\o \l {Using QML in C++ Applications} \endlist \section1 Core QML Features: diff --git a/src/declarative/debugger/qmldebugclient.cpp b/src/declarative/debugger/qmldebugclient.cpp index d13de57..3171808 100644 --- a/src/declarative/debugger/qmldebugclient.cpp +++ b/src/declarative/debugger/qmldebugclient.cpp @@ -104,7 +104,7 @@ bool QmlDebugConnection::isConnected() const class QmlDebugClientPrivate : public QObjectPrivate { - Q_DECLARE_PUBLIC(QmlDebugClient); + Q_DECLARE_PUBLIC(QmlDebugClient) public: QmlDebugClientPrivate(); diff --git a/src/declarative/fx/qfxitem.cpp b/src/declarative/fx/qfxitem.cpp index 6324724..903fad7 100644 --- a/src/declarative/fx/qfxitem.cpp +++ b/src/declarative/fx/qfxitem.cpp @@ -1483,8 +1483,8 @@ void QFxItemPrivate::resources_removeAt(int) int QFxItemPrivate::resources_count() const { - // ### - return 0; + Q_Q(const QFxItem); + return q->children().count(); } void QFxItemPrivate::resources_append(QObject *o) @@ -1498,10 +1498,14 @@ void QFxItemPrivate::resources_insert(int, QObject *) // ### } -QObject *QFxItemPrivate::resources_at(int) const +QObject *QFxItemPrivate::resources_at(int idx) const { - // ### - return 0; + Q_Q(const QFxItem); + QObjectList children = q->children(); + if (idx < children.count()) + return children.at(idx); + else + return 0; } void QFxItemPrivate::resources_clear() @@ -1516,8 +1520,8 @@ void QFxItemPrivate::children_removeAt(int) int QFxItemPrivate::children_count() const { - // ### - return 0; + Q_Q(const QFxItem); + return q->childItems().count(); } void QFxItemPrivate::children_append(QFxItem *i) @@ -1531,10 +1535,14 @@ void QFxItemPrivate::children_insert(int, QFxItem *) // ### } -QFxItem *QFxItemPrivate::children_at(int) const +QFxItem *QFxItemPrivate::children_at(int idx) const { - // ### - return 0; + Q_Q(const QFxItem); + QList<QGraphicsItem *> children = q->childItems(); + if (idx < children.count()) + return qobject_cast<QFxItem *>(children.at(idx)); + else + return 0; } void QFxItemPrivate::children_clear() diff --git a/src/declarative/fx/qfxlistview.cpp b/src/declarative/fx/qfxlistview.cpp index 604d16b..4fb0ec1 100644 --- a/src/declarative/fx/qfxlistview.cpp +++ b/src/declarative/fx/qfxlistview.cpp @@ -166,7 +166,7 @@ public: class QFxListViewPrivate : public QFxFlickablePrivate { - Q_DECLARE_PUBLIC(QFxListView); + Q_DECLARE_PUBLIC(QFxListView) public: QFxListViewPrivate() diff --git a/src/declarative/fx/qfxtext.cpp b/src/declarative/fx/qfxtext.cpp index c26ed2c..4d02f0d 100644 --- a/src/declarative/fx/qfxtext.cpp +++ b/src/declarative/fx/qfxtext.cpp @@ -427,9 +427,13 @@ void QFxText::setTextFormat(TextFormat format) This property cannot be used with wrap enabled or with rich text. - Eliding can be ElideNone, ElideLeft, ElideMiddle, or ElideRight. + Eliding can be ElideNone (the default), ElideLeft, ElideMiddle, or ElideRight. - ElideNone is the default. + If the text is a multi-length string, and the mode is not ElideNone, + the first string that fits will be used, otherwise the last will be elided. + + Multi-length strings are ordered from longest to shortest, separated by the + Unicode "String Terminator" character U009C (write this in QML with "\\x9C"). */ Qt::TextElideMode QFxText::elideMode() const { diff --git a/src/declarative/fx/qfxtextinput_p.h b/src/declarative/fx/qfxtextinput_p.h index a2b45bb..3978be4 100644 --- a/src/declarative/fx/qfxtextinput_p.h +++ b/src/declarative/fx/qfxtextinput_p.h @@ -61,7 +61,7 @@ QT_BEGIN_NAMESPACE class QFxTextInputPrivate : public QFxPaintedItemPrivate { - Q_DECLARE_PUBLIC(QFxTextInput); + Q_DECLARE_PUBLIC(QFxTextInput) public: QFxTextInputPrivate() : control(new QLineControl(QString())), color((QRgb)0), style(QFxText::Normal), diff --git a/src/declarative/qml/qml.pri b/src/declarative/qml/qml.pri index 2e62a3b..58a18a2 100644 --- a/src/declarative/qml/qml.pri +++ b/src/declarative/qml/qml.pri @@ -44,7 +44,8 @@ SOURCES += qml/qmlparser.cpp \ qml/qmlcontextscriptclass.cpp \ qml/qmlglobalscriptclass.cpp \ qml/qmlvaluetypescriptclass.cpp \ - qml/qmltypenamescriptclass.cpp + qml/qmltypenamescriptclass.cpp \ + qml/qmllistscriptclass.cpp HEADERS += qml/qmlparser_p.h \ qml/qmlinstruction_p.h \ @@ -105,7 +106,8 @@ HEADERS += qml/qmlparser_p.h \ qml/qmlcontextscriptclass_p.h \ qml/qmlglobalscriptclass_p.h \ qml/qmlvaluetypescriptclass_p.h \ - qml/qmltypenamescriptclass_p.h + qml/qmltypenamescriptclass_p.h \ + qml/qmllistscriptclass_p.h # for qtscript debugger contains(QT_CONFIG, scripttools):QT += scripttools diff --git a/src/declarative/qml/qmlengine.cpp b/src/declarative/qml/qmlengine.cpp index d5f64c2..528e8c9 100644 --- a/src/declarative/qml/qmlengine.cpp +++ b/src/declarative/qml/qmlengine.cpp @@ -86,6 +86,7 @@ #include <private/qmlxmlhttprequest_p.h> #include <private/qmlsqldatabase_p.h> #include <private/qmltypenamescriptclass_p.h> +#include <private/qmllistscriptclass_p.h> #ifdef Q_OS_WIN // for %APPDATA% #include "qt_windows.h" @@ -173,6 +174,8 @@ QmlEnginePrivate::~QmlEnginePrivate() valueTypeClass = 0; delete typeNameClass; typeNameClass = 0; + delete listClass; + listClass = 0; delete networkAccessManager; networkAccessManager = 0; delete nodeListClass; @@ -218,6 +221,7 @@ void QmlEnginePrivate::init() objectClass = new QmlObjectScriptClass(q); valueTypeClass = new QmlValueTypeScriptClass(q); typeNameClass = new QmlTypeNameScriptClass(q); + listClass = new QmlListScriptClass(q); rootContext = new QmlContext(q,true); #ifdef QT_SCRIPTTOOLS_LIB if (qmlDebugger()){ @@ -1095,7 +1099,7 @@ public: int slash = type.indexOf('/'); if (slash >= 0) { while (!s) { - s = set.value(QString::fromLatin1(type.left(slash))); + s = set.value(QString::fromUtf8(type.left(slash))); int nslash = type.indexOf('/',slash+1); if (nslash > 0) slash = nslash; diff --git a/src/declarative/qml/qmlengine_p.h b/src/declarative/qml/qmlengine_p.h index 4c90a80..a85ac55 100644 --- a/src/declarative/qml/qmlengine_p.h +++ b/src/declarative/qml/qmlengine_p.h @@ -96,6 +96,7 @@ class QScriptDeclarativeClass; class QmlTypeNameScriptClass; class QmlTypeNameCache; class QmlComponentAttached; +class QmlListScriptClass; class QmlEnginePrivate : public QObjectPrivate { @@ -129,6 +130,7 @@ public: QmlObjectScriptClass *objectClass; QmlValueTypeScriptClass *valueTypeClass; QmlTypeNameScriptClass *typeNameClass; + QmlListScriptClass *listClass; // Global script class QScriptClass *globalClass; // Used by DOM Core 3 API diff --git a/src/declarative/qml/qmlerror.cpp b/src/declarative/qml/qmlerror.cpp index 5ee9144..514fe44 100644 --- a/src/declarative/qml/qmlerror.cpp +++ b/src/declarative/qml/qmlerror.cpp @@ -201,6 +201,7 @@ QDebug operator<<(QDebug debug, const QmlError &error) if (f.open(QIODevice::ReadOnly)) { QByteArray data = f.readAll(); QTextStream stream(data, QIODevice::ReadOnly); + stream.setCodec("UTF-8"); const QString code = stream.readAll(); const QStringList lines = code.split(QLatin1Char('\n')); diff --git a/src/declarative/qml/qmlinfo.cpp b/src/declarative/qml/qmlinfo.cpp index 862d6ba..119641f 100644 --- a/src/declarative/qml/qmlinfo.cpp +++ b/src/declarative/qml/qmlinfo.cpp @@ -63,7 +63,7 @@ QT_BEGIN_NAMESPACE For example, \code - qmlInfo(object, tr("component property is a write-once property")); + qmlInfo(tr("component property is a write-once property"), object); \endcode prints @@ -77,7 +77,7 @@ void qmlInfo(const QString& msg, QObject* object) { QString pos = QLatin1String("QML"); if (object) { - pos += " "; + pos += QLatin1Char(' '); pos += QLatin1String(object->metaObject()->className()); } QmlDeclarativeData *ddata = QmlDeclarativeData::get(object); diff --git a/src/declarative/qml/qmllistscriptclass.cpp b/src/declarative/qml/qmllistscriptclass.cpp new file mode 100644 index 0000000..09bde8c --- /dev/null +++ b/src/declarative/qml/qmllistscriptclass.cpp @@ -0,0 +1,141 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (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 either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** 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.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qmllistscriptclass_p.h" +#include <private/qmlengine_p.h> + +QT_BEGIN_NAMESPACE + +struct ListData : public QScriptDeclarativeClass::Object { + QGuard<QObject> object; + int propertyIdx; + QmlListScriptClass::ListType type; +}; + +QmlListScriptClass::QmlListScriptClass(QmlEngine *e) +: QScriptDeclarativeClass(QmlEnginePrivate::getScriptEngine(e)), engine(e) +{ + QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine); + + m_lengthId = createPersistentIdentifier(QLatin1String("length")); +} + +QmlListScriptClass::~QmlListScriptClass() +{ +} + +QScriptValue QmlListScriptClass::newList(QObject *object, int propId, ListType type) +{ + QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine); + + if (!object || propId == -1) + return scriptEngine->nullValue(); + + ListData *data = new ListData; + data->object = object; + data->propertyIdx = propId; + data->type = type; + + return newObject(scriptEngine, this, data); +} + +QScriptClass::QueryFlags +QmlListScriptClass::queryProperty(Object *object, const Identifier &name, + QScriptClass::QueryFlags flags) +{ + if (name == m_lengthId.identifier) + return QScriptClass::HandlesReadAccess; + + bool ok = false; + quint32 idx = toArrayIndex(name, &ok); + + if (ok) { + lastIndex = idx; + return QScriptClass::HandlesReadAccess; + } else { + return 0; + } +} + +QScriptValue QmlListScriptClass::property(Object *obj, const Identifier &name) +{ + QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine); + QmlEnginePrivate *enginePriv = QmlEnginePrivate::get(engine); + + ListData *data = (ListData *)obj; + if (!data->object) + return scriptEngine->undefinedValue(); + + void *list = 0; + void *args[] = { &list, 0 }; + QMetaObject::metacall(data->object, QMetaObject::ReadProperty, + data->propertyIdx, args); + + if (!list) + return scriptEngine->undefinedValue(); + + if (data->type == QListPtr) { + const QList<QObject *> &qlist = *((QList<QObject *>*)list); + + if (name == m_lengthId.identifier) + return qlist.count(); + else if (lastIndex < qlist.count()) + return enginePriv->objectClass->newQObject(qlist.at(lastIndex)); + else + return scriptEngine->undefinedValue(); + + } else { + Q_ASSERT(data->type == QmlListPtr); + const QmlList<QObject *> &qmllist = *((QmlList<QObject *>*)list); + + int count = qmllist.count(); + + if (name == m_lengthId.identifier) + return count; + else if (lastIndex < count) + return enginePriv->objectClass->newQObject(qmllist.at(lastIndex)); + else + return scriptEngine->undefinedValue(); + } +} + +QT_END_NAMESPACE + diff --git a/src/declarative/qml/qmllistscriptclass_p.h b/src/declarative/qml/qmllistscriptclass_p.h new file mode 100644 index 0000000..7592098 --- /dev/null +++ b/src/declarative/qml/qmllistscriptclass_p.h @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (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 either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** 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.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QMLLISTSCRIPTCLASS_P_H +#define QMLLISTSCRIPTCLASS_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <private/qscriptdeclarativeclass_p.h> + +QT_BEGIN_NAMESPACE + +class QmlEngine; +class QmlListScriptClass : public QScriptDeclarativeClass +{ +public: + QmlListScriptClass(QmlEngine *); + ~QmlListScriptClass(); + + enum ListType { QListPtr, QmlListPtr }; + QScriptValue newList(QObject *, int, ListType); + +protected: + virtual QScriptClass::QueryFlags queryProperty(Object *, const Identifier &, + QScriptClass::QueryFlags flags); + virtual QScriptValue property(Object *, const Identifier &); + +private: + PersistentIdentifier m_lengthId; + QmlEngine *engine; + + quint32 lastIndex; +}; + +QT_END_NAMESPACE + +#endif // QMLLISTSCRIPTCLASS_P_H + diff --git a/src/declarative/qml/qmlmetaproperty.cpp b/src/declarative/qml/qmlmetaproperty.cpp index 86116c7..5635016 100644 --- a/src/declarative/qml/qmlmetaproperty.cpp +++ b/src/declarative/qml/qmlmetaproperty.cpp @@ -906,7 +906,6 @@ void QmlMetaPropertyPrivate::write(QObject *object, const QmlPropertyCache::Data } else if (vt == listType || value.userType() == listType) { QVariant listVar = prop.read(object); - QmlMetaType::clear(listVar); QmlMetaType::append(listVar, value); } diff --git a/src/declarative/qml/qmlobjectscriptclass.cpp b/src/declarative/qml/qmlobjectscriptclass.cpp index 80f2786..122db51 100644 --- a/src/declarative/qml/qmlobjectscriptclass.cpp +++ b/src/declarative/qml/qmlobjectscriptclass.cpp @@ -45,6 +45,7 @@ #include <private/qmlcontext_p.h> #include <private/qmldeclarativedata_p.h> #include <private/qmltypenamescriptclass_p.h> +#include <private/qmllistscriptclass_p.h> #include <QtDeclarative/qmlbinding.h> #include <QtCore/qtimer.h> @@ -64,8 +65,7 @@ QmlObjectScriptClass::QmlObjectScriptClass(QmlEngine *bindEngine) : QScriptDeclarativeClass(QmlEnginePrivate::getScriptEngine(bindEngine)), lastData(0), engine(bindEngine) { - engine = bindEngine; - QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(bindEngine); + QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine); m_destroy = scriptEngine->newFunction(destroy); m_destroyId = createPersistentIdentifier(QLatin1String("destroy")); @@ -214,7 +214,13 @@ QScriptValue QmlObjectScriptClass::property(QObject *obj, const Identifier &name return enginePriv->valueTypeClass->newObject(obj, lastData->coreIndex, valueType); } - if (lastData->flags & QmlPropertyCache::Data::IsQObjectDerived) { + if (lastData->flags & QmlPropertyCache::Data::IsQList) { + return enginePriv->listClass->newList(obj, lastData->coreIndex, + QmlListScriptClass::QListPtr); + } else if (lastData->flags & QmlPropertyCache::Data::IsQmlList) { + return enginePriv->listClass->newList(obj, lastData->coreIndex, + QmlListScriptClass::QmlListPtr); + } if (lastData->flags & QmlPropertyCache::Data::IsQObjectDerived) { QObject *rv = 0; void *args[] = { &rv, 0 }; QMetaObject::metacall(obj, QMetaObject::ReadProperty, lastData->coreIndex, args); diff --git a/src/declarative/qml/qmlrewrite.cpp b/src/declarative/qml/qmlrewrite.cpp index 5166c96..19b88cc 100644 --- a/src/declarative/qml/qmlrewrite.cpp +++ b/src/declarative/qml/qmlrewrite.cpp @@ -40,9 +40,13 @@ ****************************************************************************/ #include "qmlrewrite_p.h" +#include <QtDeclarative/qfxglobal.h> +#include <QtCore/qdebug.h> QT_BEGIN_NAMESPACE +DEFINE_BOOL_CONFIG_OPTION(rewriteDump, QML_REWRITE_DUMP); + namespace QmlRewrite { QString RewriteBinding::operator()(const QString &code) @@ -76,8 +80,20 @@ QString RewriteBinding::rewrite(QString code, unsigned position, _writer->replace(startOfStatement, 0, QLatin1String("(function() { ")); _writer->replace(endOfStatement, 0, QLatin1String(" })")); + if (rewriteDump()) { + qWarning() << "============================================================="; + qWarning() << "Rewrote:"; + qWarning() << qPrintable(code); + } + w.write(&code); + if (rewriteDump()) { + qWarning() << "To:"; + qWarning() << qPrintable(code); + qWarning() << "============================================================="; + } + return code; } @@ -95,12 +111,80 @@ bool RewriteBinding::visit(AST::Block *ast) bool RewriteBinding::visit(AST::ExpressionStatement *ast) { - unsigned startOfExpressionStatement = ast->firstSourceLocation().begin() - _position; - _writer->replace(startOfExpressionStatement, 0, QLatin1String("return ")); + if (_loopStack.isEmpty()) { + unsigned startOfExpressionStatement = ast->firstSourceLocation().begin() - _position; + _writer->replace(startOfExpressionStatement, 0, QLatin1String("return ")); + } return false; } +bool RewriteBinding::visit(AST::DoWhileStatement *ast) +{ + _loopStack.append(ast); + return true; +} + +void RewriteBinding::endVisit(AST::DoWhileStatement *) +{ + _loopStack.removeLast(); +} + +bool RewriteBinding::visit(AST::WhileStatement *ast) +{ + _loopStack.append(ast); + return true; +} + +void RewriteBinding::endVisit(AST::WhileStatement *) +{ + _loopStack.removeLast(); +} + +bool RewriteBinding::visit(AST::ForStatement *ast) +{ + _loopStack.append(ast); + return true; +} + +void RewriteBinding::endVisit(AST::ForStatement *) +{ + _loopStack.removeLast(); +} + +bool RewriteBinding::visit(AST::LocalForStatement *ast) +{ + _loopStack.append(ast); + return true; +} + +void RewriteBinding::endVisit(AST::LocalForStatement *) +{ + _loopStack.removeLast(); +} + +bool RewriteBinding::visit(AST::ForEachStatement *ast) +{ + _loopStack.append(ast); + return true; +} + +void RewriteBinding::endVisit(AST::ForEachStatement *) +{ + _loopStack.removeLast(); +} + +bool RewriteBinding::visit(AST::LocalForEachStatement *ast) +{ + _loopStack.append(ast); + return true; +} + +void RewriteBinding::endVisit(AST::LocalForEachStatement *) +{ + _loopStack.removeLast(); +} + } // namespace QmlRewrite QT_END_NAMESPACE diff --git a/src/declarative/qml/qmlrewrite_p.h b/src/declarative/qml/qmlrewrite_p.h index b6fe017..449b219 100644 --- a/src/declarative/qml/qmlrewrite_p.h +++ b/src/declarative/qml/qmlrewrite_p.h @@ -76,8 +76,30 @@ protected: void accept(AST::Node *node); QString rewrite(QString code, unsigned position, AST::Statement *node); + virtual bool visit(AST::Block *ast); virtual bool visit(AST::ExpressionStatement *ast); + + virtual bool visit(AST::DoWhileStatement *ast); + virtual void endVisit(AST::DoWhileStatement *ast); + + virtual bool visit(AST::WhileStatement *ast); + virtual void endVisit(AST::WhileStatement *ast); + + virtual bool visit(AST::ForStatement *ast); + virtual void endVisit(AST::ForStatement *ast); + + virtual bool visit(AST::LocalForStatement *ast); + virtual void endVisit(AST::LocalForStatement *ast); + + virtual bool visit(AST::ForEachStatement *ast); + virtual void endVisit(AST::ForEachStatement *ast); + + virtual bool visit(AST::LocalForEachStatement *ast); + virtual void endVisit(AST::LocalForEachStatement *ast); + +private: + QList<AST::Statement *> _loopStack; }; } // namespace QmlRewrite diff --git a/src/declarative/qml/qmlscriptparser.cpp b/src/declarative/qml/qmlscriptparser.cpp index 9cc12b3..6e5f315 100644 --- a/src/declarative/qml/qmlscriptparser.cpp +++ b/src/declarative/qml/qmlscriptparser.cpp @@ -870,6 +870,7 @@ bool QmlScriptParser::parse(const QByteArray &qmldata, const QUrl &url) const QString fileName = url.toString(); QTextStream stream(qmldata, QIODevice::ReadOnly); + stream.setCodec("UTF-8"); const QString code = stream.readAll(); data = new QmlScriptParserJsASTData(fileName); diff --git a/src/declarative/util/qmlstateoperations.cpp b/src/declarative/util/qmlstateoperations.cpp index 716cec4..60fd421 100644 --- a/src/declarative/util/qmlstateoperations.cpp +++ b/src/declarative/util/qmlstateoperations.cpp @@ -48,11 +48,14 @@ #include <QtDeclarative/qmlinfo.h> #include <private/qfxanchors_p.h> #include <private/qfxitem_p.h> +#include <QtGui/qgraphicsitem.h> +#include <QtCore/qmath.h> QT_BEGIN_NAMESPACE class QmlParentChangePrivate : public QObjectPrivate { + Q_DECLARE_PUBLIC(QmlParentChange) public: QmlParentChangePrivate() : target(0), parent(0), origParent(0), origStackBefore(0) {} @@ -67,53 +70,37 @@ public: void QmlParentChangePrivate::doChange(QFxItem *targetParent, QFxItem *stackBefore) { if (targetParent && target && target->parentItem()) { - QPointF me = target->parentItem()->mapToScene(QPointF(0,0)); - QPointF them = targetParent->mapToScene(QPointF(0,0)); - - QPointF themx = targetParent->mapToScene(QPointF(1,0)); - QPointF themy = targetParent->mapToScene(QPointF(0,1)); - - themx -= them; - themy -= them; - - target->setParentItem(targetParent); - - // XXX - this is silly and will only work in a few cases - - /* - xDiff = rx * themx_x + ry * themy_x - yDiff = rx * themx_y + ry * themy_y - */ - - qreal rx = 0; - qreal ry = 0; - qreal xDiff = them.x() - me.x(); - qreal yDiff = them.y() - me.y(); - - - if (themx.x() == 0.) { - ry = xDiff / themy.x(); - rx = (yDiff - ry * themy.y()) / themx.y(); - } else if (themy.x() == 0.) { - rx = xDiff / themx.x(); - ry = (yDiff - rx * themx.y()) / themy.y(); - } else if (themx.y() == 0.) { - ry = yDiff / themy.y(); - rx = (xDiff - ry * themy.x()) / themx.x(); - } else if (themy.y() == 0.) { - rx = yDiff / themx.y(); - ry = (xDiff - rx * themx.x()) / themy.x(); - } else { - qreal div = (themy.x() * themx.y() - themy.y() * themx.x()); - - if (div != 0.) - rx = (themx.y() * xDiff - themx.x() * yDiff) / div; - - if (themy.y() != 0.) ry = (yDiff - rx * themx.y()) / themy.y(); + //### for backwards direction, we can just restore original x, y, scale, rotation + Q_Q(QmlParentChange); + const QTransform &transform = target->itemTransform(targetParent); + if (transform.type() >= QTransform::TxShear) { + qmlInfo(QObject::tr("Unable to preserve appearance under complex transform"), q); } - target->setX(target->x() - rx); - target->setY(target->y() - ry); + qreal scale = 1; + qreal rotation = 0; + if (transform.type() != QTransform::TxRotate) { + if (transform.m11() == transform.m22()) + scale = transform.m11(); + else + qmlInfo(QObject::tr("Unable to preserve appearance under non-uniform scale"), q); + } else if (transform.type() == QTransform::TxRotate) { + if (transform.m11() == transform.m22()) + scale = qSqrt(transform.m11()*transform.m11() + transform.m12()*transform.m12()); + else + qmlInfo(QObject::tr("Unable to preserve appearance under non-uniform scale"), q); + + if (scale != 0) + rotation = atan2(transform.m12()/scale, transform.m11()/scale) * 180/M_PI; + else + qmlInfo(QObject::tr("Unable to preserve appearance under scale of 0"), q); + } + target->setParentItem(targetParent); + //qDebug() << transform.dx() << transform.dy() << rotation << scale; + target->setX(transform.dx()); + target->setY(transform.dy()); + target->setRotation(rotation); + target->setScale(scale); } else if (target) { target->setParentItem(targetParent); } @@ -127,7 +114,16 @@ void QmlParentChangePrivate::doChange(QFxItem *targetParent, QFxItem *stackBefor /*! \preliminary \qmlclass ParentChange - \brief The ParentChange element allows you to reparent an object in a state. + \brief The ParentChange element allows you to reparent an Item in a state change. + + ParentChange reparents an Item while preserving its visual appearance (position, rotation, + and scale) on screen. You can then specify a transition to move/rotate/scale the Item to + its final intended appearance. + + ParentChange can only preserve visual appearance if no complex transforms are involved. + More specifically, it will not work if the transform property has been set for any + Items involved in the reparenting (defined as any Items in the common ancestor tree + for the original and new parent). */ QML_DEFINE_TYPE(Qt,4,6,(QT_VERSION&0x00ff00)>>8,ParentChange,QmlParentChange) diff --git a/src/script/bridge/qscriptdeclarativeclass.cpp b/src/script/bridge/qscriptdeclarativeclass.cpp index d019839..1e59f66 100644 --- a/src/script/bridge/qscriptdeclarativeclass.cpp +++ b/src/script/bridge/qscriptdeclarativeclass.cpp @@ -258,6 +258,13 @@ QString QScriptDeclarativeClass::toString(const Identifier &identifier) return QString((QChar *)r->data(), r->size()); } +quint32 QScriptDeclarativeClass::toArrayIndex(const Identifier &identifier, bool *ok) +{ + JSC::UString::Rep *r = (JSC::UString::Rep *)identifier; + JSC::UString s(r); + return s.toArrayIndex(ok); +} + QScriptClass::QueryFlags QScriptDeclarativeClass::queryProperty(Object *object, const Identifier &name, QScriptClass::QueryFlags flags) diff --git a/src/script/bridge/qscriptdeclarativeclass_p.h b/src/script/bridge/qscriptdeclarativeclass_p.h index b28209a..559e842 100644 --- a/src/script/bridge/qscriptdeclarativeclass_p.h +++ b/src/script/bridge/qscriptdeclarativeclass_p.h @@ -103,6 +103,7 @@ public: PersistentIdentifier createPersistentIdentifier(const Identifier &); QString toString(const Identifier &); + quint32 toArrayIndex(const Identifier &, bool *ok); virtual QScriptClass::QueryFlags queryProperty(Object *, const Identifier &, QScriptClass::QueryFlags flags); diff --git a/tests/auto/declarative/declarative.pro b/tests/auto/declarative/declarative.pro index eef9da7..b51e285 100644 --- a/tests/auto/declarative/declarative.pro +++ b/tests/auto/declarative/declarative.pro @@ -25,9 +25,6 @@ SUBDIRS += anchors \ states \ visual -SUBDIRS -= examples # Human-interactive - # Tests which should run in Pulse PULSE_TESTS = $$SUBDIRS -PULSE_TESTS -= visual # All except 'visual' tests, allegedly too flaky diff --git a/tests/auto/declarative/qmlecmascript/data/listProperties.qml b/tests/auto/declarative/qmlecmascript/data/listProperties.qml new file mode 100644 index 0000000..73a1d6f --- /dev/null +++ b/tests/auto/declarative/qmlecmascript/data/listProperties.qml @@ -0,0 +1,44 @@ +import Qt.test 1.0 +import Qt 4.6 + +MyQmlObject { + id: root + + objectListProperty: [ + Object { property int a: 10 }, + Object { property int a: 11 } + ] + + objectQmlListProperty: [ + Object { property int a: 10 }, + Object { property int a: 1 }, + Object { property int a: 39 } + ] + + Script { + function calcTest1() { + var rv = 0; + for (var ii = 0; ii < root.objectListProperty.length; ++ii) { + rv += root.objectListProperty[ii].a; + } + return rv; + } + + function calcTest2() { + var rv = 0; + for (var ii = 0; ii < root.objectQmlListProperty.length; ++ii) { + rv += root.objectQmlListProperty[ii].a; + } + return rv; + } + } + + property int test1: calcTest1(); + property int test2: root.objectListProperty.length + property int test3: calcTest2(); + property int test4: root.objectQmlListProperty.length + property bool test5: root.objectQmlListProperty[1] != undefined + property bool test6: root.objectQmlListProperty[100] == undefined + property bool test7: root.objectListProperty[1] != undefined + property bool test8: root.objectListProperty[100] == undefined +} diff --git a/tests/auto/declarative/qmlecmascript/testtypes.h b/tests/auto/declarative/qmlecmascript/testtypes.h index e6c2c20..ae3a954 100644 --- a/tests/auto/declarative/qmlecmascript/testtypes.h +++ b/tests/auto/declarative/qmlecmascript/testtypes.h @@ -6,6 +6,7 @@ #include <QtDeclarative/qmlexpression.h> #include <QtCore/qpoint.h> #include <QtCore/qsize.h> +#include <QtDeclarative/qmllist.h> #include <QtCore/qrect.h> class MyQmlAttachedObject : public QObject @@ -23,11 +24,14 @@ class MyQmlObject : public QObject Q_OBJECT Q_ENUMS(MyEnum) Q_ENUMS(MyEnum2) - Q_PROPERTY(int deleteOnSet READ deleteOnSet WRITE setDeleteOnSet); + Q_PROPERTY(int deleteOnSet READ deleteOnSet WRITE setDeleteOnSet) Q_PROPERTY(bool trueProperty READ trueProperty CONSTANT) Q_PROPERTY(bool falseProperty READ falseProperty CONSTANT) Q_PROPERTY(QString stringProperty READ stringProperty WRITE setStringProperty NOTIFY stringChanged) - Q_PROPERTY(QObject *objectProperty READ objectProperty WRITE setObjectProperty NOTIFY objectChanged); + Q_PROPERTY(QObject *objectProperty READ objectProperty WRITE setObjectProperty NOTIFY objectChanged) + Q_PROPERTY(QmlList<QObject *> *objectQmlListProperty READ objectQmlListProperty CONSTANT) + Q_PROPERTY(QList<QObject *> *objectListProperty READ objectListProperty CONSTANT) + public: MyQmlObject(): m_methodCalled(false), m_methodIntCalled(false), m_object(0) {} @@ -54,6 +58,9 @@ public: emit objectChanged(); } + QmlList<QObject *> *objectQmlListProperty() { return &m_objectQmlList; } + QList<QObject *> *objectListProperty() { return &m_objectQList; } + bool methodCalled() const { return m_methodCalled; } bool methodIntCalled() const { return m_methodIntCalled; } @@ -84,6 +91,8 @@ private: QObject *m_object; QString m_string; + QmlConcreteList<QObject *> m_objectQmlList; + QList<QObject *> m_objectQList; }; QML_DECLARE_TYPE(MyQmlObject); diff --git a/tests/auto/declarative/qmlecmascript/tst_qmlecmascript.cpp b/tests/auto/declarative/qmlecmascript/tst_qmlecmascript.cpp index 7fb1703..f24882a 100644 --- a/tests/auto/declarative/qmlecmascript/tst_qmlecmascript.cpp +++ b/tests/auto/declarative/qmlecmascript/tst_qmlecmascript.cpp @@ -63,6 +63,7 @@ private slots: void extendedObjectPropertyLookup(); void scriptErrors(); void signalTriggeredBindings(); + void listProperties(); private: QmlEngine engine; @@ -787,6 +788,25 @@ void tst_qmlecmascript::signalTriggeredBindings() QCOMPARE(object->property("test2").toReal(), 400.); } +/* +Test that list properties can be iterated from ECMAScript +*/ +void tst_qmlecmascript::listProperties() +{ + QmlComponent component(&engine, TEST_FILE("listProperties.qml")); + MyQmlObject *object = qobject_cast<MyQmlObject*>(component.create()); + QVERIFY(object != 0); + + QCOMPARE(object->property("test1").toInt(), 21); + QCOMPARE(object->property("test2").toInt(), 2); + QCOMPARE(object->property("test3").toInt(), 50); + QCOMPARE(object->property("test4").toInt(), 3); + QCOMPARE(object->property("test5").toBool(), true); + QCOMPARE(object->property("test6").toBool(), true); + QCOMPARE(object->property("test7").toBool(), true); + QCOMPARE(object->property("test8").toBool(), true); +} + QTEST_MAIN(tst_qmlecmascript) #include "tst_qmlecmascript.moc" diff --git a/tests/auto/declarative/qmllanguage/data/I18nÁâãäå.qml b/tests/auto/declarative/qmllanguage/data/I18nType30.qml index 42dbc69..42dbc69 100644 --- a/tests/auto/declarative/qmllanguage/data/I18nÁâãäå.qml +++ b/tests/auto/declarative/qmllanguage/data/I18nType30.qml diff --git a/tests/auto/declarative/qmllanguage/data/i18nNameSpace.qml b/tests/auto/declarative/qmllanguage/data/i18nNameSpace.qml new file mode 100644 index 0000000..c0b2f94 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/i18nNameSpace.qml @@ -0,0 +1,5 @@ +import Test 1.0 as Áâãäå + +Áâãäå.MyTypeObject { + stringProperty: "Test áâãäå: 40" +} diff --git a/tests/auto/declarative/qmllanguage/data/i18nType.qml b/tests/auto/declarative/qmllanguage/data/i18nType.qml index 11ef895..d7954ef 100644 --- a/tests/auto/declarative/qmllanguage/data/i18nType.qml +++ b/tests/auto/declarative/qmllanguage/data/i18nType.qml @@ -1 +1 @@ -I18nÁâãäå { } +I18nTypeÁâãäå { } diff --git a/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp b/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp index b99d040..8d4ae65 100644 --- a/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp +++ b/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp @@ -24,6 +24,8 @@ public: } private slots: + void initTestCase(); + void cleanupTestCase(); void errors_data(); void errors(); @@ -116,6 +118,24 @@ inline QUrl TEST_FILE(const char *filename) return TEST_FILE(QLatin1String(filename)); } +void tst_qmllanguage::initTestCase() +{ + // Create locale-specific file + // For POSIX, this will just be data/I18nType.qml, since POSIX is 7-bit + // For iso8859-1 locale, this will just be data/I18nType?????.qml where ????? is 5 8-bit characters + // For utf-8 locale, this will be data/I18nType??????????.qml where ?????????? is 5 8-bit characters, UTF-8 encoded + QFile in(TEST_FILE(QLatin1String("I18nType30.qml")).toLocalFile()); + QVERIFY(in.open(QIODevice::ReadOnly)); + QFile out(TEST_FILE(QString::fromUtf8("I18nType\303\201\303\242\303\243\303\244\303\245.qml")).toLocalFile()); + QVERIFY(out.open(QIODevice::WriteOnly)); + out.write(in.readAll()); +} + +void tst_qmllanguage::cleanupTestCase() +{ + QVERIFY(QFile::remove(TEST_FILE(QString::fromUtf8("I18nType\303\201\303\242\303\243\303\244\303\245.qml")).toLocalFile())); +} + void tst_qmllanguage::errors_data() { QTest::addColumn<QString>("file"); @@ -686,11 +706,12 @@ void tst_qmllanguage::i18n_data() { QTest::addColumn<QString>("file"); QTest::addColumn<QString>("stringProperty"); - QTest::newRow("i18nStrings") << "i18nStrings.qml" << QString::fromUtf8("Test áâãäå (5 accented 'a' letters)"); - QTest::newRow("i18nDeclaredPropertyNames") << "i18nDeclaredPropertyNames.qml" << QString::fromUtf8("Test áâãäå: 10"); - QTest::newRow("i18nDeclaredPropertyUse") << "i18nDeclaredPropertyUse.qml" << QString::fromUtf8("Test áâãäå: 15"); - QTest::newRow("i18nScript") << "i18nScript.qml" << QString::fromUtf8("Test áâãäå: 20"); - QTest::newRow("i18nType") << "i18nType.qml" << QString::fromUtf8("Test áâãäå: 30"); + QTest::newRow("i18nStrings") << "i18nStrings.qml" << QString::fromUtf8("Test \303\241\303\242\303\243\303\244\303\245 (5 accented 'a' letters)"); + QTest::newRow("i18nDeclaredPropertyNames") << "i18nDeclaredPropertyNames.qml" << QString::fromUtf8("Test \303\241\303\242\303\243\303\244\303\245: 10"); + QTest::newRow("i18nDeclaredPropertyUse") << "i18nDeclaredPropertyUse.qml" << QString::fromUtf8("Test \303\241\303\242\303\243\303\244\303\245: 15"); + QTest::newRow("i18nScript") << "i18nScript.qml" << QString::fromUtf8("Test \303\241\303\242\303\243\303\244\303\245: 20"); + QTest::newRow("i18nType") << "i18nType.qml" << QString::fromUtf8("Test \303\241\303\242\303\243\303\244\303\245: 30"); + QTest::newRow("i18nNameSpace") << "i18nNameSpace.qml" << QString::fromUtf8("Test \303\241\303\242\303\243\303\244\303\245: 40"); } void tst_qmllanguage::i18n() diff --git a/tests/auto/declarative/visual/ListView/data-X11/basic1.qml b/tests/auto/declarative/visual/ListView/data-X11/basic1.qml new file mode 100644 index 0000000..ae59b14 --- /dev/null +++ b/tests/auto/declarative/visual/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/visual/ListView/data-X11/basic2.qml b/tests/auto/declarative/visual/ListView/data-X11/basic2.qml new file mode 100644 index 0000000..ff19d22 --- /dev/null +++ b/tests/auto/declarative/visual/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/visual/ListView/data-X11/basic3.qml b/tests/auto/declarative/visual/ListView/data-X11/basic3.qml new file mode 100644 index 0000000..2f33cae --- /dev/null +++ b/tests/auto/declarative/visual/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/visual/ListView/data-X11/basic4.qml b/tests/auto/declarative/visual/ListView/data-X11/basic4.qml new file mode 100644 index 0000000..4b1c5cf --- /dev/null +++ b/tests/auto/declarative/visual/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/visual/flickable/data-X11/flickable.0.png b/tests/auto/declarative/visual/flickable/data-X11/flickable.0.png Binary files differnew file mode 100644 index 0000000..5da2f2a --- /dev/null +++ b/tests/auto/declarative/visual/flickable/data-X11/flickable.0.png diff --git a/tests/auto/declarative/visual/flickable/data-X11/flickable.1.png b/tests/auto/declarative/visual/flickable/data-X11/flickable.1.png Binary files differnew file mode 100644 index 0000000..1c33ca6 --- /dev/null +++ b/tests/auto/declarative/visual/flickable/data-X11/flickable.1.png diff --git a/tests/auto/declarative/visual/flickable/data-X11/flickable.2.png b/tests/auto/declarative/visual/flickable/data-X11/flickable.2.png Binary files differnew file mode 100644 index 0000000..67cdf8f --- /dev/null +++ b/tests/auto/declarative/visual/flickable/data-X11/flickable.2.png diff --git a/tests/auto/declarative/visual/flickable/data-X11/flickable.qml b/tests/auto/declarative/visual/flickable/data-X11/flickable.qml new file mode 100644 index 0000000..6a60409 --- /dev/null +++ b/tests/auto/declarative/visual/flickable/data-X11/flickable.qml @@ -0,0 +1,791 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 32 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 48 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 64 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 80 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 96 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 112 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 128 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 144 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 160 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 176 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 192 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 208 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 224 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 240 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 256 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 272 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 288 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 304 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 320 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 336 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 352 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 368 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 384 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 400 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 416 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 432 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 448 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 464 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 480 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 496 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 512 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 528 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 544 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 560 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 576 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 592 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 608 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 624 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 640 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 656 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 672 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 688 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 704 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Frame { + msec: 720 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 517; y: 154 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 736 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Mouse { + type: 5 + button: 1 + buttons: 1 + x: 514; y: 154 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 752 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Mouse { + type: 5 + button: 1 + buttons: 1 + x: 509; y: 155 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 768 + hash: "2a07f4ab51ed6ac07c2efecfd561cdff" + } + Mouse { + type: 5 + button: 1 + buttons: 1 + x: 497; y: 155 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 784 + hash: "4f30ebc802a38cd4ad05018b6bc429a4" + } + Mouse { + type: 5 + button: 1 + buttons: 1 + x: 480; y: 155 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 800 + hash: "8d2e349b2aad07d98f11a30a33a5b409" + } + Mouse { + type: 5 + button: 1 + buttons: 1 + x: 443; y: 155 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 816 + hash: "09647796906da54345fffa18eb1b1f91" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 443; y: 155 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 832 + hash: "09647796906da54345fffa18eb1b1f91" + } + Frame { + msec: 848 + hash: "4a7dd2931129756437e38b3516474aa1" + } + Frame { + msec: 864 + hash: "bbec3d9d7ca38599b03e44ed3c2b68b6" + } + Frame { + msec: 880 + hash: "07214f888dba9ea84eae306cf92a0f7f" + } + Frame { + msec: 896 + hash: "0feac7c874f8caf11db319c13ed2250e" + } + Frame { + msec: 912 + hash: "7de76db129b4e9d17836d17fff687b99" + } + Frame { + msec: 928 + hash: "7f3414d54148afd7b01ed0fe54b60ba2" + } + Frame { + msec: 944 + hash: "692cde1197a0f37bee5a4e57160bff8b" + } + Frame { + msec: 960 + image: "flickable.0.png" + } + Frame { + msec: 976 + hash: "d0b879cb63d003c0fd00c14160e7d1a4" + } + Frame { + msec: 992 + hash: "9a0879e4e9b23ad3c9340d7c28eb6386" + } + Frame { + msec: 1008 + hash: "2b6f4cb48284a835f77bc6368566c187" + } + Frame { + msec: 1024 + hash: "53c094e3aa4f841195b2ce4e0fa34fae" + } + Frame { + msec: 1040 + hash: "3ef7530199a136d339adf677cf98f035" + } + Frame { + msec: 1056 + hash: "1a707788b43773ffa05d0ad88e6f156d" + } + Frame { + msec: 1072 + hash: "e51dc6702e59c68e6a34f4a8f6c5b5c5" + } + Frame { + msec: 1088 + hash: "1fe6d9b517ad1b9aaf16d005577ab45d" + } + Frame { + msec: 1104 + hash: "fac02bdb63d4aa7749a66f6aa91a7035" + } + Frame { + msec: 1120 + hash: "4bad8d93cee30c76a4b263981adc0c2f" + } + Frame { + msec: 1136 + hash: "8bcee1ab8a1ab66b22d59d975a265906" + } + Frame { + msec: 1152 + hash: "a68fa84e32d4ba44d4d53b476505ff6e" + } + Frame { + msec: 1168 + hash: "d7258071d6673ef22a8836a8fdc6c5a6" + } + Frame { + msec: 1184 + hash: "c708f62342663a4a879c86cd97448b75" + } + Frame { + msec: 1200 + hash: "2e28d213283f4791d051177f468d9246" + } + Frame { + msec: 1216 + hash: "beb36da1d54eedc62b65c47ba7c43f59" + } + Frame { + msec: 1232 + hash: "2cea7b5571c563a709e211fbb5684a9d" + } + Frame { + msec: 1248 + hash: "9ef0bafe8a9d52bc2fb7732c02ea9304" + } + Frame { + msec: 1264 + hash: "7a489611578c9590aaf1b85763d8ae2c" + } + Frame { + msec: 1280 + hash: "31b8e33b788821922d6d437f40c7811c" + } + Frame { + msec: 1296 + hash: "421ae01b4d757996aefb35641f167c2d" + } + Frame { + msec: 1312 + hash: "175c93fde4cb520881802a57bf10be5f" + } + Frame { + msec: 1328 + hash: "11602a6ca746c83c857524eafc4d9570" + } + Frame { + msec: 1344 + hash: "4f10b74a1bb8d65f3d371cc613a1641a" + } + Frame { + msec: 1360 + hash: "d8505ce7ad73683817ed4e3a7f3ab610" + } + Frame { + msec: 1376 + hash: "a800684370e06817e1a2a34ceb2fc651" + } + Frame { + msec: 1392 + hash: "267e184af16c63eefe290c6659917b34" + } + Frame { + msec: 1408 + hash: "354c5b04c0ed2288c23064debb4e261e" + } + Frame { + msec: 1424 + hash: "67d300a0f15f0642c4ba0c8bd7662c01" + } + Frame { + msec: 1440 + hash: "2fe12d1625140c2da1f0af17e1bf548b" + } + Frame { + msec: 1456 + hash: "fef2140a272d78f5c0e93ec3a4c6e6c9" + } + Frame { + msec: 1472 + hash: "b9331a586bad1619e51794bc66bf36fc" + } + Frame { + msec: 1488 + hash: "8ba04c015ca8c150e0bbb09769955b5d" + } + Frame { + msec: 1504 + hash: "09f573e1465533e67fa0d504e5481c8b" + } + Frame { + msec: 1520 + hash: "fe3e919aa08ddd51ee7b81ef405b10f4" + } + Frame { + msec: 1536 + hash: "e5d85427a2e02dd83d2932205e7aa6ac" + } + Frame { + msec: 1552 + hash: "4e97fda26cbb0273dd69e50cf134a147" + } + Frame { + msec: 1568 + hash: "7e13b494b5397b747eb6065f7555acce" + } + Frame { + msec: 1584 + hash: "fe9567c08f776bed903a74c9c21a18bb" + } + Frame { + msec: 1600 + hash: "086dd974228d51513e732c96c69dd07f" + } + Frame { + msec: 1616 + hash: "b43d5b4f44df55b1099c7ba339df1799" + } + Frame { + msec: 1632 + hash: "ce0e82fc42ff0017b40278e323682348" + } + Frame { + msec: 1648 + hash: "e28b9cee2047774d70df6510c83e9dfe" + } + Frame { + msec: 1664 + hash: "568d97ff98ac2d867981eb7330b831b1" + } + Frame { + msec: 1680 + hash: "10f38a5f95a91bc7380a13f5aa30f22f" + } + Frame { + msec: 1696 + hash: "2f9ec9b1843f2970fa8225f313781404" + } + Frame { + msec: 1712 + hash: "bdd8405a889ff9a6e33cce65416bdc43" + } + Frame { + msec: 1728 + hash: "9f57f8460ade9e6ff3db7a0a8d044f07" + } + Frame { + msec: 1744 + hash: "36d1e95a006c00b183b24a05c2acf12f" + } + Frame { + msec: 1760 + hash: "78d7f8b056c0341b442c0eabbf6da90b" + } + Frame { + msec: 1776 + hash: "f5786d9a77a28796908fcb376af2cc1f" + } + Frame { + msec: 1792 + hash: "38cfaf7a356163f8ff9708ba625907b7" + } + Frame { + msec: 1808 + hash: "989922a8c5e3c000811a994bfe183d7f" + } + Frame { + msec: 1824 + hash: "989922a8c5e3c000811a994bfe183d7f" + } + Frame { + msec: 1840 + hash: "989922a8c5e3c000811a994bfe183d7f" + } + Frame { + msec: 1856 + hash: "f5786d9a77a28796908fcb376af2cc1f" + } + Frame { + msec: 1872 + hash: "014cfc6573eb0a89acacd6f154098202" + } + Frame { + msec: 1888 + hash: "247fead2e4139421cb6e5f7a97fa1768" + } + Frame { + msec: 1904 + hash: "bdd8405a889ff9a6e33cce65416bdc43" + } + Frame { + msec: 1920 + image: "flickable.1.png" + } + Frame { + msec: 1936 + hash: "d64f65edf900912158634c88b5c0b5ca" + } + Frame { + msec: 1952 + hash: "d714183774f603269335b0675e0656f8" + } + Frame { + msec: 1968 + hash: "24f9e90f7789a7c5db65d59312d49fe1" + } + Frame { + msec: 1984 + hash: "ce0e82fc42ff0017b40278e323682348" + } + Frame { + msec: 2000 + hash: "f564293ff63ccc952597ac228c6437dc" + } + Frame { + msec: 2016 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2032 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2048 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2064 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2080 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2096 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2112 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2128 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2144 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2160 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2176 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2192 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2208 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2224 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2240 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2256 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2272 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2288 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2304 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2320 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2336 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2352 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2368 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2384 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2400 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2416 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2432 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2448 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2464 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2480 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2496 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2512 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2528 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2544 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2560 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2576 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2592 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2608 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2624 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2640 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2656 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2672 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2688 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2704 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2720 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2736 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2752 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2768 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2784 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2800 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2816 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2832 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2848 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2864 + hash: "555d97eac7e8b06cb81f4af74098ce65" + } + Frame { + msec: 2880 + image: "flickable.2.png" + } +} diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test.0.png b/tests/auto/declarative/visual/focusscope/data-X11/test.0.png Binary files differnew file mode 100644 index 0000000..d0fb8a0 --- /dev/null +++ b/tests/auto/declarative/visual/focusscope/data-X11/test.0.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test.1.png b/tests/auto/declarative/visual/focusscope/data-X11/test.1.png Binary files differnew file mode 100644 index 0000000..d0fb8a0 --- /dev/null +++ b/tests/auto/declarative/visual/focusscope/data-X11/test.1.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test.2.png b/tests/auto/declarative/visual/focusscope/data-X11/test.2.png Binary files differnew file mode 100644 index 0000000..f25f27c --- /dev/null +++ b/tests/auto/declarative/visual/focusscope/data-X11/test.2.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test.3.png b/tests/auto/declarative/visual/focusscope/data-X11/test.3.png Binary files differnew file mode 100644 index 0000000..74a9b3f --- /dev/null +++ b/tests/auto/declarative/visual/focusscope/data-X11/test.3.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test.4.png b/tests/auto/declarative/visual/focusscope/data-X11/test.4.png Binary files differnew file mode 100644 index 0000000..74a9b3f --- /dev/null +++ b/tests/auto/declarative/visual/focusscope/data-X11/test.4.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test.5.png b/tests/auto/declarative/visual/focusscope/data-X11/test.5.png Binary files differnew file mode 100644 index 0000000..74a9b3f --- /dev/null +++ b/tests/auto/declarative/visual/focusscope/data-X11/test.5.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test.qml b/tests/auto/declarative/visual/focusscope/data-X11/test.qml new file mode 100644 index 0000000..5c66034 --- /dev/null +++ b/tests/auto/declarative/visual/focusscope/data-X11/test.qml @@ -0,0 +1,1599 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 32 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 48 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 64 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 80 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 96 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 112 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 128 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 144 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 160 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 176 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 192 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 208 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 224 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 240 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 256 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 272 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 288 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 304 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 320 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 336 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 352 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 368 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 384 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 400 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 416 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 432 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 448 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 464 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 480 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 496 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 512 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 528 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 544 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 560 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 576 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 592 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 608 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 624 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 640 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 656 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 672 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 688 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 704 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 720 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 736 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 752 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 768 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 784 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 800 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 816 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 832 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 848 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 864 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 880 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 896 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 912 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 928 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 944 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 960 + image: "test.0.png" + } + Frame { + msec: 976 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 992 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1008 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1024 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1040 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1056 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1072 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1088 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1104 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1120 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1136 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1152 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1168 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1184 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1200 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1216 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1232 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1248 + hash: "e608f3483071562580bf492da25a4104" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 1264 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1280 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1296 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1312 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1328 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 1344 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1360 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1376 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1392 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1408 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1424 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1440 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1456 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1472 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1488 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1504 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1520 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1536 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1552 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1568 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1584 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1600 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1616 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1632 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1648 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1664 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1680 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1696 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1712 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1728 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1744 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1760 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1776 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1792 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 1808 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Key { + type: 6 + key: 16777234 + modifiers: 536870912 + text: "1c" + autorep: false + count: 1 + } + Frame { + msec: 1824 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1840 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1856 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1872 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1888 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1904 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1920 + image: "test.1.png" + } + Frame { + msec: 1936 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1952 + hash: "e608f3483071562580bf492da25a4104" + } + Key { + type: 7 + key: 16777234 + modifiers: 536870912 + text: "1c" + autorep: false + count: 1 + } + Frame { + msec: 1968 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 1984 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2000 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2016 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2032 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2048 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2064 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2080 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2096 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2112 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2128 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2144 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2160 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2176 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2192 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2208 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2224 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2240 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2256 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2272 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2288 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2304 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2320 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2336 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 2352 + hash: "e608f3483071562580bf492da25a4104" + } + Key { + type: 6 + key: 16777237 + modifiers: 536870912 + text: "1f" + autorep: false + count: 1 + } + Frame { + msec: 2368 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2384 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2400 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2416 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2432 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2448 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2464 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Key { + type: 7 + key: 16777237 + modifiers: 536870912 + text: "1f" + autorep: false + count: 1 + } + Frame { + msec: 2480 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2496 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2512 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2528 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2544 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2560 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2576 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2592 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2608 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2624 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2640 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2656 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2672 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2688 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2704 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2720 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2736 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2752 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2768 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2784 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2800 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2816 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2832 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2848 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2864 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2880 + image: "test.2.png" + } + Frame { + msec: 2896 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2912 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2928 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2944 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2960 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 2976 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Key { + type: 6 + key: 16777235 + modifiers: 536870912 + text: "1e" + autorep: false + count: 1 + } + Frame { + msec: 2992 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3008 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3024 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3040 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3056 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3072 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3088 + hash: "e608f3483071562580bf492da25a4104" + } + Key { + type: 7 + key: 16777235 + modifiers: 536870912 + text: "1e" + autorep: false + count: 1 + } + Frame { + msec: 3104 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3120 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3136 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3152 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3168 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3184 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3200 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3216 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3232 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3248 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3264 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3280 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3296 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3312 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3328 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3344 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3360 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3376 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3392 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3408 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3424 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3440 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3456 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3472 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3488 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3504 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3520 + hash: "e608f3483071562580bf492da25a4104" + } + Frame { + msec: 3536 + hash: "e608f3483071562580bf492da25a4104" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 3552 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3568 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3584 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3600 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3616 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3632 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3648 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 3664 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3680 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3696 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3712 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3728 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3744 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3760 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3776 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3792 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3808 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3824 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3840 + image: "test.3.png" + } + Frame { + msec: 3856 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3872 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3888 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3904 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3920 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3936 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3952 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3968 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 3984 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 4000 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 4016 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 4032 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 4048 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 4064 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 4080 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 4096 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 4112 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 4128 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 4144 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 4160 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 4176 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Key { + type: 6 + key: 16777237 + modifiers: 536870912 + text: "1f" + autorep: false + count: 1 + } + Frame { + msec: 4192 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4208 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4224 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4240 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4256 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4272 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Key { + type: 7 + key: 16777237 + modifiers: 536870912 + text: "1f" + autorep: false + count: 1 + } + Frame { + msec: 4288 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4304 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4320 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4336 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4352 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4368 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4384 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4400 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4416 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4432 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4448 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4464 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4480 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4496 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4512 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4528 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4544 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4560 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4576 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4592 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4608 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4624 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4640 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4656 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4672 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4688 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4704 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4720 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4736 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4752 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4768 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Frame { + msec: 4784 + hash: "231a20ad55d5ba3be9baf46a80ec86f4" + } + Key { + type: 6 + key: 16777235 + modifiers: 536870912 + text: "1e" + autorep: false + count: 1 + } + Frame { + msec: 4800 + image: "test.4.png" + } + Frame { + msec: 4816 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 4832 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 4848 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 4864 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 4880 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 4896 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Key { + type: 7 + key: 16777235 + modifiers: 536870912 + text: "1e" + autorep: false + count: 1 + } + Frame { + msec: 4912 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 4928 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 4944 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 4960 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 4976 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 4992 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5008 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5024 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5040 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5056 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5072 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5088 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5104 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5120 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5136 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5152 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5168 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5184 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5200 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5216 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5232 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5248 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5264 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5280 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5296 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5312 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5328 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5344 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5360 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5376 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5392 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5408 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5424 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5440 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5456 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5472 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5488 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5504 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5520 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5536 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5552 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5568 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5584 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5600 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5616 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5632 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5648 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5664 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5680 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5696 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5712 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5728 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5744 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5760 + image: "test.5.png" + } + Frame { + msec: 5776 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5792 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 5808 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5824 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5840 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5856 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5872 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } + Frame { + msec: 5888 + hash: "383edfe8be8621d456162cc1cd88ae1a" + } +} diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test2.0.png b/tests/auto/declarative/visual/focusscope/data-X11/test2.0.png Binary files differnew file mode 100644 index 0000000..6be7aef --- /dev/null +++ b/tests/auto/declarative/visual/focusscope/data-X11/test2.0.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test2.1.png b/tests/auto/declarative/visual/focusscope/data-X11/test2.1.png Binary files differnew file mode 100644 index 0000000..6be7aef --- /dev/null +++ b/tests/auto/declarative/visual/focusscope/data-X11/test2.1.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test2.qml b/tests/auto/declarative/visual/focusscope/data-X11/test2.qml new file mode 100644 index 0000000..7170907 --- /dev/null +++ b/tests/auto/declarative/visual/focusscope/data-X11/test2.qml @@ -0,0 +1,607 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 32 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 48 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 64 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 80 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 96 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 112 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 128 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 144 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 160 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 176 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 192 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 208 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 224 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 240 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 256 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 272 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 288 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 304 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 320 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 336 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 352 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 368 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 384 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 400 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 416 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 432 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 448 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 464 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 480 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 496 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 512 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 528 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 544 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 560 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 576 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 592 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 608 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 624 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 640 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 656 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 672 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 688 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 704 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 720 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 736 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 752 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 768 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 784 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 800 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 816 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 832 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 848 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 864 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 880 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 896 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 912 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 928 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 944 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 960 + image: "test2.0.png" + } + Frame { + msec: 976 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 992 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1008 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1024 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1040 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1056 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1072 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1088 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1104 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1120 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1136 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1152 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1168 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1184 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1200 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1216 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1232 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1248 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1264 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1280 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1296 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1312 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1328 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1344 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1360 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1376 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1392 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1408 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1424 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1440 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1456 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1472 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1488 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1504 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1520 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1536 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1552 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1568 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1584 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1600 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1616 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1632 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1648 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1664 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1680 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1696 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1712 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1728 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1744 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1760 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1776 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1792 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1808 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1824 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1840 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1856 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1872 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1888 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1904 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1920 + image: "test2.1.png" + } + Frame { + msec: 1936 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1952 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1968 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 1984 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2000 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2016 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2032 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2048 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2064 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2080 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2096 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2112 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2128 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2144 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2160 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2176 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2192 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2208 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2224 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2240 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2256 + hash: "529409797f67656145ea88544bb8cc9f" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2272 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2288 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2304 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2320 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2336 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2352 + hash: "529409797f67656145ea88544bb8cc9f" + } + Frame { + msec: 2368 + hash: "529409797f67656145ea88544bb8cc9f" + } +} diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.0.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.0.png Binary files differnew file mode 100644 index 0000000..2821112 --- /dev/null +++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.0.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.1.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.1.png Binary files differnew file mode 100644 index 0000000..d3aeb93 --- /dev/null +++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.1.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.2.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.2.png Binary files differnew file mode 100644 index 0000000..d7b647f --- /dev/null +++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.2.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.3.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.3.png Binary files differnew file mode 100644 index 0000000..551efc8 --- /dev/null +++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.3.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.4.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.4.png Binary files differnew file mode 100644 index 0000000..5e59cbe --- /dev/null +++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.4.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.5.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.5.png Binary files differnew file mode 100644 index 0000000..622c768 --- /dev/null +++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.5.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.6.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.6.png Binary files differnew file mode 100644 index 0000000..d7b647f --- /dev/null +++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.6.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.7.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.7.png Binary files differnew file mode 100644 index 0000000..d3aeb93 --- /dev/null +++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.7.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.8.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.8.png Binary files differnew file mode 100644 index 0000000..891a10a --- /dev/null +++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.8.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.9.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.9.png Binary files differnew file mode 100644 index 0000000..c346260 --- /dev/null +++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.9.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.qml b/tests/auto/declarative/visual/focusscope/data-X11/test3.qml new file mode 100644 index 0000000..e7cb67c --- /dev/null +++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.qml @@ -0,0 +1,2879 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 32 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 48 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 64 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 80 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 96 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 112 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 128 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 144 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 160 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 176 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 192 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 208 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 224 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 240 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 256 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 272 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 288 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 304 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 320 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 336 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 352 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 368 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 384 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 400 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 416 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 432 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 448 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 464 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 480 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 496 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 512 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 528 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 544 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 560 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 576 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 592 + hash: "d157fdaf13170250e66768364e90e820" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 608 + hash: "70404a8e19cee8dad4a7dc16b3b018e2" + } + Frame { + msec: 624 + hash: "70404a8e19cee8dad4a7dc16b3b018e2" + } + Frame { + msec: 640 + hash: "42ede0774612c5ce72bcb17c1f8c53fb" + } + Frame { + msec: 656 + hash: "acbf5d05e87e456b49636a8e533b8819" + } + Frame { + msec: 672 + hash: "1c3adf6475d5bbf23c83dda77614834f" + } + Frame { + msec: 688 + hash: "b047088d7d135614c7de5d6b1fe6447c" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 704 + hash: "59393e79f5571c1b0b54ceb96c570afd" + } + Frame { + msec: 720 + hash: "2657a9db93dab4180ddf5a3d928fa83c" + } + Frame { + msec: 736 + hash: "bd012a5b982553780ef81ea273381988" + } + Frame { + msec: 752 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 768 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 784 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 800 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 816 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 832 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 848 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 864 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 880 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 896 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 912 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 928 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 944 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 960 + image: "test3.0.png" + } + Frame { + msec: 976 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 992 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 1008 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 1024 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 1040 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 1056 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 1072 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 1088 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 1104 + hash: "3ba7daa96383cc7fcd2f3e15b9b46bea" + } + Frame { + msec: 1120 + hash: "3ba7daa96383cc7fcd2f3e15b9b46bea" + } + Frame { + msec: 1136 + hash: "c097e88ae5cea1203735aba2de753b35" + } + Frame { + msec: 1152 + hash: "309058119191341625c797e14b1d68fd" + } + Frame { + msec: 1168 + hash: "d2d44135892d56e556b6343e0d2177df" + } + Frame { + msec: 1184 + hash: "8f77166dfb871d1ad3c4b21e9626dcf8" + } + Frame { + msec: 1200 + hash: "b6bd7476decc62d295414eea18f21ffb" + } + Frame { + msec: 1216 + hash: "8ca06a6b2787a3e684b6a0614baf057f" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 1232 + hash: "119130d0bde37eb6038e4fbcea54d619" + } + Frame { + msec: 1248 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 1264 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 1280 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 1296 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 1312 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 1328 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 1344 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 1360 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 1376 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 1392 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 1408 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 1424 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 1440 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 1456 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 1472 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 1488 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 1504 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 1520 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 1536 + hash: "d36e8e689b999046f5671cce03ec98b9" + } + Frame { + msec: 1552 + hash: "d36e8e689b999046f5671cce03ec98b9" + } + Frame { + msec: 1568 + hash: "1ae470df65b1637dfed5ed330bf6f2cc" + } + Frame { + msec: 1584 + hash: "fd98bff5f8c97cf0644aca6d205720b3" + } + Frame { + msec: 1600 + hash: "6c97607356ec22d77da6170de94ed1b8" + } + Frame { + msec: 1616 + hash: "ee49691989ffada50e3b82df960ec1cb" + } + Frame { + msec: 1632 + hash: "fba046a966f5ebdc17a73c33fb2fb1af" + } + Frame { + msec: 1648 + hash: "5031c1c466e14e7daf39be6af1a9c402" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 1664 + hash: "508c31a76bbb9ae50ec44484ea889289" + } + Frame { + msec: 1680 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 1696 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 1712 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 1728 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 1744 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 1760 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 1776 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 1792 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 1808 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 1824 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 1840 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 1856 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 1872 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 1888 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 1904 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 1920 + image: "test3.1.png" + } + Frame { + msec: 1936 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 1952 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 1968 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 1984 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 2000 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 2016 + hash: "c79134dc4b03885c0c2139e9f1949968" + } + Frame { + msec: 2032 + hash: "c79134dc4b03885c0c2139e9f1949968" + } + Frame { + msec: 2048 + hash: "6f29381e25034bcb9177033fdaf1ee4c" + } + Frame { + msec: 2064 + hash: "e9668338280735ed6cf1e71f02d28f04" + } + Frame { + msec: 2080 + hash: "ecd5a887981d564c6e40c215ebb867d2" + } + Frame { + msec: 2096 + hash: "0960f7192633036319aa3500dbf38d2b" + } + Frame { + msec: 2112 + hash: "22ececdfdd7eb5a8999df153de47c2e6" + } + Frame { + msec: 2128 + hash: "f77abe52bd76bca4b728415c4dfd52dc" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 2144 + hash: "6d19c9df56ed8037dd5a123945b6fea0" + } + Frame { + msec: 2160 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 2176 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 2192 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 2208 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 2224 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 2240 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 2256 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 2272 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 2288 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 2304 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 2320 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 2336 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 2352 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 2368 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 2384 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 2400 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 2416 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 2432 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 2448 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 2464 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 2480 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 2496 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 2512 + hash: "316d165df776e906015714372e67f452" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 2528 + hash: "3e0fa3d0d36a4ea51e9e89933d91e58a" + } + Frame { + msec: 2544 + hash: "3e0fa3d0d36a4ea51e9e89933d91e58a" + } + Frame { + msec: 2560 + hash: "eea826901b19fb3c7aff8594d8030acb" + } + Frame { + msec: 2576 + hash: "a673c5dbc0b1b7bf585319a923db6478" + } + Frame { + msec: 2592 + hash: "c9fa9bdb8c8ad8c1144feb4a7f9ae96e" + } + Frame { + msec: 2608 + hash: "646601d0aabe76467c3317fb12e785e5" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 2624 + hash: "a88500a959cd4127528a74af4979d83a" + } + Frame { + msec: 2640 + hash: "ab288556e0bff85a48be364ee7a61b18" + } + Frame { + msec: 2656 + hash: "db5d053fd16f3bd6e3048f1d7f123027" + } + Frame { + msec: 2672 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 2688 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 2704 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 2720 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 2736 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 2752 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 2768 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 2784 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 2800 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 2816 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 2832 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 2848 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 2864 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 2880 + image: "test3.2.png" + } + Frame { + msec: 2896 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 2912 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 2928 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 2944 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 2960 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 2976 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 2992 + hash: "dfc6df49c4340429529e88e877940158" + } + Frame { + msec: 3008 + hash: "dfc6df49c4340429529e88e877940158" + } + Frame { + msec: 3024 + hash: "e44644da7159bfde1a1cf6148d268c53" + } + Frame { + msec: 3040 + hash: "f0045733c7f4e799c4ca49ec28c7c652" + } + Frame { + msec: 3056 + hash: "8b0ded24c343556849ea67d191c03a17" + } + Frame { + msec: 3072 + hash: "0c50a579850c3eb43c4824bf7e8b1d12" + } + Frame { + msec: 3088 + hash: "747d2205db14cf72dc5989e92b8076ab" + } + Frame { + msec: 3104 + hash: "a0a9196cb896eadf411cbcccaa069f10" + } + Frame { + msec: 3120 + hash: "c682ad7747f7245b4e213fc078d51e8f" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 3136 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 3152 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 3168 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 3184 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 3200 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 3216 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 3232 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 3248 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 3264 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 3280 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 3296 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 3312 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 3328 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 3344 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 3360 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 3376 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 3392 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 3408 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 3424 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 3440 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 3456 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 3472 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 3488 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 3504 + hash: "115b81c715a58e66c3d1f09bb03fe97f" + } + Frame { + msec: 3520 + hash: "115b81c715a58e66c3d1f09bb03fe97f" + } + Frame { + msec: 3536 + hash: "a994e45c41afe0a4ab7d65c27139f3d8" + } + Frame { + msec: 3552 + hash: "b02ecf8c3413752aa1d2bfa6e08184ca" + } + Frame { + msec: 3568 + hash: "85ef0bedcb66676ca658068561d8df8e" + } + Frame { + msec: 3584 + hash: "435bce6119a6542ce9ad743baa70ceb0" + } + Frame { + msec: 3600 + hash: "5918c9c068ca62795d7b97ac818d79d5" + } + Frame { + msec: 3616 + hash: "ff3ebc0c6f7eb39bbc10fad07b671d82" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 3632 + hash: "0426b9666ccd84aa0d095e47a9379bd7" + } + Frame { + msec: 3648 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 3664 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 3680 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 3696 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 3712 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 3728 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 3744 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 3760 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 3776 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 3792 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 3808 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 3824 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 3840 + image: "test3.3.png" + } + Frame { + msec: 3856 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 3872 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 3888 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 3904 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 3920 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 3936 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 3952 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 3968 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 3984 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 4000 + hash: "30901e72d40975b92c9d96c0f52b458c" + } + Frame { + msec: 4016 + hash: "30901e72d40975b92c9d96c0f52b458c" + } + Frame { + msec: 4032 + hash: "f4f84cb8e42e269b121b2ffa9204db38" + } + Frame { + msec: 4048 + hash: "41e9198277d0d590d176fd9972bfbf58" + } + Frame { + msec: 4064 + hash: "664bddf12068363afc89f8fc52d133c0" + } + Frame { + msec: 4080 + hash: "18a12504f09551bd6e3013ef1bbf40f9" + } + Frame { + msec: 4096 + hash: "95717e24255e442d955d3c64691576e0" + } + Frame { + msec: 4112 + hash: "7cb9b9a71bfb1cd3061efde86e57ff34" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 4128 + hash: "a090d2c37080361240769198f1032b7a" + } + Frame { + msec: 4144 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4160 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4176 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4192 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4208 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4224 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4240 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4256 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4272 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4288 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4304 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4320 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4336 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4352 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4368 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4384 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4400 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4416 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4432 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4448 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4464 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4480 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4496 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4512 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4528 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4544 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4560 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4576 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4592 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4608 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4624 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4640 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4656 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4672 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4688 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4704 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4720 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4736 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4752 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4768 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4784 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4800 + image: "test3.4.png" + } + Frame { + msec: 4816 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4832 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4848 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4864 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4880 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4896 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4912 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4928 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4944 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4960 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4976 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 4992 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 5008 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 5024 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 5040 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 5056 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 5072 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 5088 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Frame { + msec: 5104 + hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + } + Key { + type: 6 + key: 16777234 + modifiers: 536870912 + text: "1c" + autorep: false + count: 1 + } + Frame { + msec: 5120 + hash: "0a524f53903aa1651152fd4a6068c14c" + } + Frame { + msec: 5136 + hash: "0a524f53903aa1651152fd4a6068c14c" + } + Frame { + msec: 5152 + hash: "bbef86b80161702653b88f6cfa88528c" + } + Frame { + msec: 5168 + hash: "26de302dde8fb22e509c0b3c8cb37abd" + } + Frame { + msec: 5184 + hash: "9f3ec01bf5ae12383a58a716d462d479" + } + Frame { + msec: 5200 + hash: "cbfa90ccd871ba1ab12f75e8e5f2e11e" + } + Frame { + msec: 5216 + hash: "c5ba4fd178429a1cb44ec96da8a1a404" + } + Frame { + msec: 5232 + hash: "fb87133ef012abe68491be1cc627d580" + } + Key { + type: 7 + key: 16777234 + modifiers: 536870912 + text: "1c" + autorep: false + count: 1 + } + Frame { + msec: 5248 + hash: "0f8147bf9cd92eec88ea6f8b9f2ad5eb" + } + Frame { + msec: 5264 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5280 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5296 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5312 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5328 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5344 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5360 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5376 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5392 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5408 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5424 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5440 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5456 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5472 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5488 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5504 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5520 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5536 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5552 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5568 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5584 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5600 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5616 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5632 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5648 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5664 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5680 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5696 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Frame { + msec: 5712 + hash: "f2ca9897c874faa97f2d959964da4bd1" + } + Key { + type: 6 + key: 16777234 + modifiers: 536870912 + text: "1c" + autorep: false + count: 1 + } + Frame { + msec: 5728 + hash: "f78a62f7143dbf86e0b153fe08a9bf6e" + } + Frame { + msec: 5744 + hash: "f78a62f7143dbf86e0b153fe08a9bf6e" + } + Frame { + msec: 5760 + image: "test3.5.png" + } + Frame { + msec: 5776 + hash: "e89f6d4727cf92ce87e4c48eb34074a6" + } + Frame { + msec: 5792 + hash: "eb7761ac018dbb93b72acd3126a7eace" + } + Frame { + msec: 5808 + hash: "a70638789eeaada677afa68a7dcc1f97" + } + Frame { + msec: 5824 + hash: "bb709f17058d1f41b34831d1055195cc" + } + Frame { + msec: 5840 + hash: "3b459f10eb299712180fed277c75ca22" + } + Frame { + msec: 5856 + hash: "8f77a04a3690f7cbfae4858c8fff1a24" + } + Key { + type: 7 + key: 16777234 + modifiers: 536870912 + text: "1c" + autorep: false + count: 1 + } + Frame { + msec: 5872 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 5888 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 5904 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 5920 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 5936 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 5952 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 5968 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 5984 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 6000 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 6016 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 6032 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 6048 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 6064 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 6080 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 6096 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 6112 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 6128 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 6144 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 6160 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 6176 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 6192 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 6208 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 6224 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 6240 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 6256 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Frame { + msec: 6272 + hash: "0d20e56256c2aa305c487c7875249c45" + } + Key { + type: 6 + key: 16777234 + modifiers: 536870912 + text: "1c" + autorep: false + count: 1 + } + Frame { + msec: 6288 + hash: "80a729efc25a86d09977f6abe4b96e77" + } + Frame { + msec: 6304 + hash: "80a729efc25a86d09977f6abe4b96e77" + } + Frame { + msec: 6320 + hash: "75e57461badc3fd9c38548c751a86b62" + } + Frame { + msec: 6336 + hash: "b0f49c8a67bdf1285334514d78a6b613" + } + Frame { + msec: 6352 + hash: "564bca050cfc30f19b77989a1e3a26d8" + } + Frame { + msec: 6368 + hash: "caca4855c581f42b26623bf717302884" + } + Frame { + msec: 6384 + hash: "89db7709fcec729023c910608b504665" + } + Frame { + msec: 6400 + hash: "5501f75f4b8b3229a7db38df4e9cc938" + } + Frame { + msec: 6416 + hash: "505d12f5900fa920f47c650d24745ec5" + } + Key { + type: 7 + key: 16777234 + modifiers: 536870912 + text: "1c" + autorep: false + count: 1 + } + Frame { + msec: 6432 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6448 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6464 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6480 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6496 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6512 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6528 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6544 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6560 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6576 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6592 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6608 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6624 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6640 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6656 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6672 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6688 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6704 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6720 + image: "test3.6.png" + } + Frame { + msec: 6736 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6752 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6768 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6784 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6800 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6816 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6832 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Frame { + msec: 6848 + hash: "4e9b6719737e92ef409b76772a9d6b4a" + } + Key { + type: 6 + key: 16777234 + modifiers: 536870912 + text: "1c" + autorep: false + count: 1 + } + Frame { + msec: 6864 + hash: "240f48d1c5aa1c23bf1c660a0a468283" + } + Frame { + msec: 6880 + hash: "240f48d1c5aa1c23bf1c660a0a468283" + } + Frame { + msec: 6896 + hash: "e1ba9a4edfd19acffdf25e51dbbc94a5" + } + Frame { + msec: 6912 + hash: "e40877ef6876be3f44db947af54287bc" + } + Frame { + msec: 6928 + hash: "a72d66c4691d03e7b9a12df9df3d4b4d" + } + Frame { + msec: 6944 + hash: "26cda82027725475f2be660a8e8b2463" + } + Frame { + msec: 6960 + hash: "233e9b1c58cc338d22e3d3ca8669a33a" + } + Frame { + msec: 6976 + hash: "316788ce1340cb0e151d12d244a48068" + } + Frame { + msec: 6992 + hash: "6213c8fde998ae5b819f9e3f7f7ea857" + } + Key { + type: 7 + key: 16777234 + modifiers: 536870912 + text: "1c" + autorep: false + count: 1 + } + Frame { + msec: 7008 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7024 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7040 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7056 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7072 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7088 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7104 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7120 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7136 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7152 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7168 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7184 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7200 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7216 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7232 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7248 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7264 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7280 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7296 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7312 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7328 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7344 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7360 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7376 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7392 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7408 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7424 + hash: "316d165df776e906015714372e67f452" + } + Frame { + msec: 7440 + hash: "316d165df776e906015714372e67f452" + } + Key { + type: 6 + key: 16777234 + modifiers: 536870912 + text: "1c" + autorep: false + count: 1 + } + Frame { + msec: 7456 + hash: "37bfd610be786be852b78bdb933b9a01" + } + Frame { + msec: 7472 + hash: "37bfd610be786be852b78bdb933b9a01" + } + Frame { + msec: 7488 + hash: "05b41d669cdb7821d3db181c444f9667" + } + Frame { + msec: 7504 + hash: "2ddf3b590860a1db12d04ab4dde830a3" + } + Frame { + msec: 7520 + hash: "ecc85633bf413d41da38b87d21c92653" + } + Frame { + msec: 7536 + hash: "829b18a6568680d9fbf720926ec65954" + } + Frame { + msec: 7552 + hash: "04f844fe5b2f944d435a9c66d93d2907" + } + Key { + type: 7 + key: 16777234 + modifiers: 536870912 + text: "1c" + autorep: false + count: 1 + } + Frame { + msec: 7568 + hash: "49680fff1a16c74de135a72c6b13d156" + } + Frame { + msec: 7584 + hash: "a4b4e3a49ce12e8a8a1a43a808555243" + } + Frame { + msec: 7600 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 7616 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 7632 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 7648 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 7664 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 7680 + image: "test3.7.png" + } + Frame { + msec: 7696 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 7712 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 7728 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 7744 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 7760 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 7776 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 7792 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 7808 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 7824 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 7840 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 7856 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 7872 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 7888 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 7904 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 7920 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 7936 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 7952 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Frame { + msec: 7968 + hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + } + Key { + type: 6 + key: 16777234 + modifiers: 536870912 + text: "1c" + autorep: false + count: 1 + } + Frame { + msec: 7984 + hash: "0211b4e4fe18757e34bec35eab5fde3b" + } + Frame { + msec: 8000 + hash: "0211b4e4fe18757e34bec35eab5fde3b" + } + Frame { + msec: 8016 + hash: "abbd3f1a519e8f667b2eebe75c9b4cb3" + } + Frame { + msec: 8032 + hash: "803607ec60ef51b54444a184462beb0f" + } + Frame { + msec: 8048 + hash: "e0b670a80137b3fa8ca9ae8fab5aa123" + } + Frame { + msec: 8064 + hash: "a291881f5d7a42973ac4a6054418259a" + } + Frame { + msec: 8080 + hash: "c5ed7f0b91af1bf0eba6c149bccb72ab" + } + Frame { + msec: 8096 + hash: "25b094fc7f6e8442ae672439a5b10a79" + } + Frame { + msec: 8112 + hash: "9bc4a4dc68228a400b9e87d645e29828" + } + Key { + type: 7 + key: 16777234 + modifiers: 536870912 + text: "1c" + autorep: false + count: 1 + } + Frame { + msec: 8128 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8144 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8160 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8176 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8192 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8208 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8224 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8240 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8256 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8272 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8288 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8304 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8320 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8336 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8352 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8368 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8384 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8400 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8416 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8432 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8448 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8464 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8480 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Frame { + msec: 8496 + hash: "4baf177df487bf872c7edd4ab4561120" + } + Key { + type: 6 + key: 16777234 + modifiers: 536870912 + text: "1c" + autorep: false + count: 1 + } + Frame { + msec: 8512 + hash: "2eabf99cadf1ded6a355bdf39715ad57" + } + Frame { + msec: 8528 + hash: "2eabf99cadf1ded6a355bdf39715ad57" + } + Frame { + msec: 8544 + hash: "7e70fd7a53929ef47f69c63273818ee1" + } + Frame { + msec: 8560 + hash: "e76066a86a120d7abf0d645c804c9e69" + } + Frame { + msec: 8576 + hash: "e79a0e6badc18ded04e07ce6b805b493" + } + Frame { + msec: 8592 + hash: "67891f5078a0c34a3fb17bbc325b9011" + } + Frame { + msec: 8608 + hash: "6533d214e86aa581da50d26cc1bcd34e" + } + Frame { + msec: 8624 + hash: "c649e873c3ce3fe5639e8d9b9912eafe" + } + Key { + type: 7 + key: 16777234 + modifiers: 536870912 + text: "1c" + autorep: false + count: 1 + } + Frame { + msec: 8640 + image: "test3.8.png" + } + Frame { + msec: 8656 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 8672 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 8688 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 8704 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 8720 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 8736 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 8752 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 8768 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 8784 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 8800 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 8816 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 8832 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 8848 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 8864 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 8880 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 8896 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 8912 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 8928 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 8944 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 8960 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 8976 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 8992 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 9008 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 9024 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 9040 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Frame { + msec: 9056 + hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + } + Key { + type: 6 + key: 16777234 + modifiers: 536870912 + text: "1c" + autorep: false + count: 1 + } + Frame { + msec: 9072 + hash: "72494522826c29edd9a763342d8ee909" + } + Frame { + msec: 9088 + hash: "72494522826c29edd9a763342d8ee909" + } + Frame { + msec: 9104 + hash: "ecba7d108741a940d77920db52f6bc47" + } + Frame { + msec: 9120 + hash: "6aa456342c3bb8b6071c28c5d550929e" + } + Frame { + msec: 9136 + hash: "bd94dbfa0651b9060cacdbe9a9adc38c" + } + Frame { + msec: 9152 + hash: "bb6e75073be7b1e9f3c66761b72611b2" + } + Frame { + msec: 9168 + hash: "11bfc218dd57a9909b1fd7f021577cfa" + } + Frame { + msec: 9184 + hash: "d2fbc4d380862423ad2d3a33468b417d" + } + Frame { + msec: 9200 + hash: "0ca09d4275b1c36575e484d79a7d8d2a" + } + Key { + type: 7 + key: 16777234 + modifiers: 536870912 + text: "1c" + autorep: false + count: 1 + } + Frame { + msec: 9216 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9232 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9248 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9264 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9280 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9296 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9312 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9328 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9344 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9360 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9376 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9392 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9408 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9424 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9440 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9456 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9472 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9488 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9504 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9520 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9536 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9552 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9568 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9584 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9600 + image: "test3.9.png" + } + Frame { + msec: 9616 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9632 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9648 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9664 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9680 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9696 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9712 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9728 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9744 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9760 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9776 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9792 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9808 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9824 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9840 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9856 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9872 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9888 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9904 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9920 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9936 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9952 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9968 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 9984 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10000 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10016 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10032 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10048 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10064 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10080 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10096 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10112 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10128 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10144 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10160 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10176 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10192 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10208 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10224 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10240 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10256 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10272 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10288 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10304 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10320 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10336 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10352 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10368 + hash: "d157fdaf13170250e66768364e90e820" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 10384 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10400 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10416 + hash: "d157fdaf13170250e66768364e90e820" + } + Frame { + msec: 10432 + hash: "d157fdaf13170250e66768364e90e820" + } +} diff --git a/tests/auto/declarative/visual/focusscope/data/test3.0.png.reject.png b/tests/auto/declarative/visual/focusscope/data/test3.0.png.reject.png Binary files differdeleted file mode 100644 index 374acf5..0000000 --- a/tests/auto/declarative/visual/focusscope/data/test3.0.png.reject.png +++ /dev/null diff --git a/tests/auto/declarative/visual/focusscope/data/test3.1.png.reject.png b/tests/auto/declarative/visual/focusscope/data/test3.1.png.reject.png Binary files differdeleted file mode 100644 index 795071b..0000000 --- a/tests/auto/declarative/visual/focusscope/data/test3.1.png.reject.png +++ /dev/null diff --git a/tests/auto/declarative/visual/qfxtext/elide/data-X11/elide.0.png b/tests/auto/declarative/visual/qfxtext/elide/data-X11/elide.0.png Binary files differnew file mode 100644 index 0000000..b2734e4 --- /dev/null +++ b/tests/auto/declarative/visual/qfxtext/elide/data-X11/elide.0.png diff --git a/tests/auto/declarative/visual/qfxtext/elide/data-X11/elide.qml b/tests/auto/declarative/visual/qfxtext/elide/data-X11/elide.qml new file mode 100644 index 0000000..d5f1cff --- /dev/null +++ b/tests/auto/declarative/visual/qfxtext/elide/data-X11/elide.qml @@ -0,0 +1,279 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 32 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 48 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 64 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 80 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 96 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 112 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 128 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 144 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 160 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 176 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 192 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 208 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 224 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 240 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 256 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 272 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 288 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 304 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 320 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 336 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 352 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 368 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 384 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 400 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 416 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 432 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 448 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 464 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 480 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 496 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 512 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 528 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 544 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 560 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 576 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 592 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 608 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 624 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 640 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 656 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 672 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 688 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 704 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 720 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 736 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 752 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 768 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 784 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 800 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 816 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 832 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 848 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 864 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 880 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 896 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 912 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 928 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 944 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 960 + image: "elide.0.png" + } + Frame { + msec: 976 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 992 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 1008 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 1024 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 1040 + hash: "dd213807dd517c25972f0f6f42b01c17" + } + Frame { + msec: 1056 + hash: "dd213807dd517c25972f0f6f42b01c17" + } +} diff --git a/tests/auto/declarative/visual/qfxtext/elide/multilength.qml b/tests/auto/declarative/visual/qfxtext/elide/multilength.qml new file mode 100644 index 0000000..6cd37b4 --- /dev/null +++ b/tests/auto/declarative/visual/qfxtext/elide/multilength.qml @@ -0,0 +1,20 @@ +import Qt 4.6 + +Rectangle { + width: 500 + height: 50 + color: "lightBlue" + Rectangle { + width: MyText.width + height: MyText.height + color: "white" + anchors.centerIn: parent + Text { + id: MyText + width: NumberAnimation { from: 500; to: 0; running: true; repeat: true; duration: 1000 } + elide: "ElideRight" + text: "aaaaaaa bbbbbbb ccccccc\x9Caaaaa bbbbb ccccc\x9Caaa bbb ccc\x9Ca b c" + text: "Brevity is the soul of wit, and tediousness the limbs and outward flourishes.\x9CBrevity is a great charm of eloquence.\x9CBe concise!\x9CSHHHHHHHHHHHHHHHHHHHHHHHHHHHH" + } + } +} diff --git a/tests/auto/declarative/visual/repeater/data-X11/basic1.0.png b/tests/auto/declarative/visual/repeater/data-X11/basic1.0.png Binary files differnew file mode 100644 index 0000000..18ab543 --- /dev/null +++ b/tests/auto/declarative/visual/repeater/data-X11/basic1.0.png diff --git a/tests/auto/declarative/visual/repeater/data-X11/basic1.qml b/tests/auto/declarative/visual/repeater/data-X11/basic1.qml new file mode 100644 index 0000000..bf215ca --- /dev/null +++ b/tests/auto/declarative/visual/repeater/data-X11/basic1.qml @@ -0,0 +1,323 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 32 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 48 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 64 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 80 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 96 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 112 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 128 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 144 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 160 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 176 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 192 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 208 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 224 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 240 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 256 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 272 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 288 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 304 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 320 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 336 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 352 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 368 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 384 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 400 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 416 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 432 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 448 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 464 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 480 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 496 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 512 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 528 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 544 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 560 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 576 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 592 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 608 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 624 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 640 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 656 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 672 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 688 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 704 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 720 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 736 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 752 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 768 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 784 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 800 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 816 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 832 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 848 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 864 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 880 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 896 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 912 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 928 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 944 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 960 + image: "basic1.0.png" + } + Frame { + msec: 976 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 992 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1008 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1024 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1040 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1056 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1072 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1088 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1104 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1120 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1136 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1152 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1168 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1184 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1200 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1216 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1232 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } +} diff --git a/tests/auto/declarative/visual/repeater/data-X11/basic2.0.png b/tests/auto/declarative/visual/repeater/data-X11/basic2.0.png Binary files differnew file mode 100644 index 0000000..18ab543 --- /dev/null +++ b/tests/auto/declarative/visual/repeater/data-X11/basic2.0.png diff --git a/tests/auto/declarative/visual/repeater/data-X11/basic2.qml b/tests/auto/declarative/visual/repeater/data-X11/basic2.qml new file mode 100644 index 0000000..cb6b46c --- /dev/null +++ b/tests/auto/declarative/visual/repeater/data-X11/basic2.qml @@ -0,0 +1,331 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 32 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 48 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 64 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 80 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 96 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 112 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 128 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 144 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 160 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 176 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 192 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 208 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 224 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 240 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 256 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 272 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 288 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 304 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 320 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 336 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 352 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 368 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 384 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 400 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 416 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 432 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 448 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 464 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 480 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 496 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 512 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 528 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 544 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 560 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 576 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 592 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 608 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 624 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 640 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 656 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 672 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 688 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 704 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 720 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 736 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 752 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 768 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 784 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 800 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 816 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 832 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 848 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 864 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 880 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 896 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 912 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 928 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 944 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 960 + image: "basic2.0.png" + } + Frame { + msec: 976 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 992 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1008 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1024 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1040 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1056 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1072 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1088 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1104 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1120 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1136 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1152 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1168 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1184 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1200 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1216 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1232 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1248 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1264 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } +} diff --git a/tests/auto/declarative/visual/repeater/data-X11/basic3.0.png b/tests/auto/declarative/visual/repeater/data-X11/basic3.0.png Binary files differnew file mode 100644 index 0000000..18ab543 --- /dev/null +++ b/tests/auto/declarative/visual/repeater/data-X11/basic3.0.png diff --git a/tests/auto/declarative/visual/repeater/data-X11/basic3.qml b/tests/auto/declarative/visual/repeater/data-X11/basic3.qml new file mode 100644 index 0000000..9545fa9 --- /dev/null +++ b/tests/auto/declarative/visual/repeater/data-X11/basic3.qml @@ -0,0 +1,347 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 32 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 48 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 64 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 80 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 96 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 112 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 128 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 144 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 160 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 176 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 192 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 208 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 224 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 240 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 256 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 272 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 288 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 304 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 320 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 336 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 352 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 368 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 384 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 400 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 416 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 432 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 448 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 464 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 480 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 496 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 512 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 528 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 544 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 560 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 576 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 592 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 608 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 624 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 640 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 656 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 672 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 688 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 704 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 720 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 736 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 752 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 768 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 784 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 800 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 816 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 832 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 848 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 864 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 880 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 896 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 912 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 928 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 944 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 960 + image: "basic3.0.png" + } + Frame { + msec: 976 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 992 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1008 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1024 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1040 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1056 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1072 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1088 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1104 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1120 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1136 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1152 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1168 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1184 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1200 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1216 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1232 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1248 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1264 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1280 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1296 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1312 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1328 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } +} diff --git a/tests/auto/declarative/visual/repeater/data-X11/basic4.0.png b/tests/auto/declarative/visual/repeater/data-X11/basic4.0.png Binary files differnew file mode 100644 index 0000000..18ab543 --- /dev/null +++ b/tests/auto/declarative/visual/repeater/data-X11/basic4.0.png diff --git a/tests/auto/declarative/visual/repeater/data-X11/basic4.qml b/tests/auto/declarative/visual/repeater/data-X11/basic4.qml new file mode 100644 index 0000000..4839206 --- /dev/null +++ b/tests/auto/declarative/visual/repeater/data-X11/basic4.qml @@ -0,0 +1,419 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 32 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 48 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 64 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 80 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 96 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 112 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 128 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 144 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 160 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 176 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 192 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 208 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 224 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 240 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 256 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 272 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 288 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 304 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 320 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 336 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 352 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 368 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 384 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 400 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 416 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 432 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 448 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 464 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 480 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 496 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 512 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 528 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 544 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 560 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 576 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 592 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 608 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 624 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 640 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 656 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 672 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 688 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 704 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 720 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 736 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 752 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 768 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 784 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 800 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 816 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 832 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 848 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 864 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 880 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 896 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 912 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 928 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 944 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 960 + image: "basic4.0.png" + } + Frame { + msec: 976 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 992 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1008 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1024 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1040 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1056 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1072 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1088 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1104 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1120 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1136 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1152 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1168 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1184 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1200 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1216 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1232 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1248 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1264 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1280 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1296 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1312 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1328 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1344 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1360 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1376 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1392 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1408 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1424 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1440 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1456 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1472 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1488 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1504 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1520 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1536 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1552 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1568 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1584 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1600 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } + Frame { + msec: 1616 + hash: "71dedc2f057c660fa5089de2dd6313a4" + } +} diff --git a/tests/auto/declarative/visual/tst_visual.cpp b/tests/auto/declarative/visual/tst_visual.cpp index d95fa5b..cb32085 100644 --- a/tests/auto/declarative/visual/tst_visual.cpp +++ b/tests/auto/declarative/visual/tst_visual.cpp @@ -7,6 +7,8 @@ #include <QProcess> #include <QFile> +enum Mode { Record, Play, TestVisuals, UpdateVisuals, UpdatePlatformVisuals, Test }; + static QString testdir; class tst_visual : public QObject { @@ -14,7 +16,7 @@ class tst_visual : public QObject public: tst_visual(); - static QString toTestScript(const QString &); + static QString toTestScript(const QString &, Mode=Test); static QString viewer(); private slots: @@ -84,7 +86,7 @@ void tst_visual::visual() QCOMPARE(p.exitCode(), 0); } -QString tst_visual::toTestScript(const QString &file) +QString tst_visual::toTestScript(const QString &file, Mode mode) { if (!file.endsWith(".qml")) return QString(); @@ -93,9 +95,43 @@ QString tst_visual::toTestScript(const QString &file) if (index == -1) return QString(); + const char* platformsuffix=0; // platforms with different fonts +#if defined(Q_WS_MACX) + platformsuffix = "-MAC"; +#elif defined(Q_WS_X11) + platformsuffix = "-X11"; +#elif defined(Q_WS_WIN32) + platformsuffix = "-WIN"; +#elif defined(Q_WS_QWS) + platformsuffix = "-QWS"; +#elif defined(Q_WS_S60) + platformsuffix = "-S60"; +#endif + QString testdata = file.left(index + 1) + - QString("data") + QDir::separator() + - file.mid(index + 1, file.length() - index - 5); + QString("data"); + QString testname = file.mid(index + 1, file.length() - index - 5); + + if (platformsuffix && (mode == UpdatePlatformVisuals || QFile::exists(testdata+QLatin1String(platformsuffix)+QDir::separator()+testname))) { + QString platformdir = testdata + QLatin1String(platformsuffix); + if (mode == UpdatePlatformVisuals) { + Q_ASSERT(QDir().mkpath(platformdir)); + // Copy from base + QDir dir(testdata,testname+".*"); + dir.setFilter(QDir::Files); + QFileInfoList list = dir.entryInfoList(); + for (int i = 0; i < list.size(); ++i) { + QFile in(list.at(i).filePath()); + Q_ASSERT(in.open(QIODevice::ReadOnly)); + QFile out(platformdir + QDir::separator() + list.at(i).fileName()); + Q_ASSERT(out.open(QIODevice::WriteOnly)); + out.write(in.readAll()); + } + } + testdata = platformdir; + } + + testdata += QDir::separator() + testname; return testdata; } @@ -115,7 +151,7 @@ QStringList tst_visual::findQmlFiles(const QDir &d) QStringList dirs = d.entryList(QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks); foreach (const QString &dir, dirs) { - if (dir == "data") + if (dir.left(4) == "data") continue; QDir sub = d; @@ -126,13 +162,11 @@ QStringList tst_visual::findQmlFiles(const QDir &d) return rv; } -enum Mode { Record, Play, TestVisuals, UpdateVisuals, Test }; - void action(Mode mode, const QString &file) { Q_ASSERT(mode != Test); - QString testdata = tst_visual::toTestScript(file); + QString testdata = tst_visual::toTestScript(file,mode); if (Record == mode) { QStringList arguments; @@ -161,7 +195,7 @@ void action(Mode mode, const QString &file) p.setProcessChannelMode(QProcess::ForwardedChannels); p.start(tst_visual::viewer(), arguments); p.waitForFinished(); - } else if (UpdateVisuals == mode) { + } else if (UpdateVisuals == mode || UpdatePlatformVisuals == mode) { QStringList arguments; arguments << "-script" << testdata << "-scriptopts" << "play,record,exitoncomplete,saveonexit" @@ -177,10 +211,11 @@ void usage() { fprintf(stderr, "\n"); fprintf(stderr, "QML related options\n"); - fprintf(stderr, " -record file : record new test data for file\n"); - fprintf(stderr, " -play file : playback test data for file, printing errors\n"); - fprintf(stderr, " -testvisuals file : playback test data for file, without errors\n"); - fprintf(stderr, " -updatevisuals file : playback test data for file, accept new visuals for file\n"); + fprintf(stderr, " -record file : record new test data for file\n"); + fprintf(stderr, " -play file : playback test data for file, printing errors\n"); + fprintf(stderr, " -testvisuals file : playback test data for file, without errors\n"); + fprintf(stderr, " -updatevisuals file : playback test data for file, accept new visuals for file\n"); + fprintf(stderr, " -updateplatformvisuals file : playback test data for file, accept new visuals for file only on current platform (MacOSX/Win32/X11/QWS/S60)\n"); } int main(int argc, char **argv) @@ -209,6 +244,9 @@ int main(int argc, char **argv) } else if (arg == "-updatevisuals" && (ii + 1) < argc) { mode = UpdateVisuals; file = argv[++ii]; + } else if (arg == "-updateplatformvisuals" && (ii + 1) < argc) { + mode = UpdatePlatformVisuals; + file = argv[++ii]; } else { newArgv[newArgc++] = argv[ii]; } diff --git a/tools/qmldebugger/engine.cpp b/tools/qmldebugger/engine.cpp index 321f5e0..fac10f3 100644 --- a/tools/qmldebugger/engine.cpp +++ b/tools/qmldebugger/engine.cpp @@ -1,144 +1,21 @@ -#include "engine.h" -#include "propertyview.h" -#include "watchtablemodel.h" -#include <QtDeclarative/qmldebugclient.h> -#include <QPushButton> #include <QVBoxLayout> #include <QHBoxLayout> -#include <QLineEdit> -#include <QTreeWidget> -#include <QTableWidget> #include <QSplitter> #include <QTabWidget> -#include <QMouseEvent> -#include <QAction> -#include <QMenu> -#include <QInputDialog> #include <QFile> -#include <QHeaderView> -#include <QPointer> + #include <private/qmlenginedebug_p.h> +#include <QtDeclarative/qmldebugclient.h> #include <QtDeclarative/qmlcomponent.h> #include <QtDeclarative/qfxitem.h> #include <QtDeclarative/qmldebugservice.h> -QT_BEGIN_NAMESPACE - - -class QmlObjectTree : public QTreeWidget -{ - Q_OBJECT -public: - enum AdditionalRoles { - ContextIdRole = Qt::UserRole + 1 - }; - - QmlObjectTree(QWidget *parent = 0); - - QTreeWidgetItem *findItemByObjectId(int debugId) const; - -signals: - void addExpressionWatch(int debugId, const QString &); - -protected: - virtual void mousePressEvent(QMouseEvent *); - -private: - QTreeWidgetItem *findItem(QTreeWidgetItem *item, int debugId) const; -}; - -QmlObjectTree::QmlObjectTree(QWidget *parent) -: QTreeWidget(parent) -{ -} - -QTreeWidgetItem *QmlObjectTree::findItemByObjectId(int debugId) const -{ - for (int i=0; i<topLevelItemCount(); i++) { - QTreeWidgetItem *item = findItem(topLevelItem(i), debugId); - if (item) - return item; - } - - return 0; -} - -QTreeWidgetItem *QmlObjectTree::findItem(QTreeWidgetItem *item, int debugId) const -{ - if (item->data(0, Qt::UserRole).toInt() == debugId) - return item; - - QTreeWidgetItem *child; - for (int i=0; i<item->childCount(); i++) { - child = findItem(item->child(i), debugId); - if (child) - return child; - } - - return 0; -} - -void QmlObjectTree::mousePressEvent(QMouseEvent *me) -{ - QTreeWidget::mousePressEvent(me); - if (!currentItem()) - return; - if(me->button() == Qt::RightButton && me->type() == QEvent::MouseButtonPress) { - QAction action(tr("Add watch..."), 0); - QList<QAction *> actions; - actions << &action; - int debugId = currentItem()->data(0, Qt::UserRole).toInt(); - if (debugId >= 0 && QMenu::exec(actions, me->globalPos())) { - bool ok = false; - QString watch = QInputDialog::getText(this, tr("Watch expression"), - tr("Expression:"), QLineEdit::Normal, QString(), &ok); - if (ok && !watch.isEmpty()) - emit addExpressionWatch(debugId, watch); - } - } -} - - -class WatchTableHeaderView : public QHeaderView -{ - Q_OBJECT -public: - WatchTableHeaderView(QTableView *parent); - -signals: - void stopWatching(int column); - -protected: - void mousePressEvent(QMouseEvent *me); - -private: - QTableView *m_table; -}; - -WatchTableHeaderView::WatchTableHeaderView(QTableView *parent) - : QHeaderView(Qt::Horizontal, parent), m_table(parent) -{ - QObject::connect(this, SIGNAL(sectionClicked(int)), - m_table, SLOT(selectColumn(int))); - setClickable(true); -} +#include "engine.h" +#include "objectpropertiesview.h" +#include "objecttree.h" +#include "watchtable.h" -void WatchTableHeaderView::mousePressEvent(QMouseEvent *me) -{ - QHeaderView::mousePressEvent(me); - - if (me->button() == Qt::RightButton && me->type() == QEvent::MouseButtonPress) { - int col = logicalIndexAt(me->pos()); - if (col >= 0) { - m_table->selectColumn(col); - QAction action(tr("Stop watching"), 0); - QList<QAction *> actions; - actions << &action; - if (QMenu::exec(actions, me->globalPos())) - emit stopWatching(col); - } - } -} +QT_BEGIN_NAMESPACE class DebuggerEngineItem : public QObject @@ -159,14 +36,12 @@ private: int m_engineId; }; -EnginePane::EnginePane(QmlDebugConnection *client, QWidget *parent) -: QWidget(parent), m_client(client), m_engines(0), m_context(0), m_object(0), m_watchedObject(0), m_watchTableModel(0) +EnginePane::EnginePane(QmlDebugConnection *conn, QWidget *parent) +: QWidget(parent), m_client(new QmlEngineDebug(conn, this)), m_engines(0), m_context(0), m_watchTableModel(0) { - QVBoxLayout *layout = new QVBoxLayout; + QVBoxLayout *layout = new QVBoxLayout(this); layout->setContentsMargins(0, 0, 0, 0); - setLayout(layout); - QFile enginesFile(":/engines.qml"); enginesFile.open(QFile::ReadOnly); Q_ASSERT(enginesFile.isOpen()); @@ -187,30 +62,34 @@ EnginePane::EnginePane(QmlDebugConnection *client, QWidget *parent) QSplitter *splitter = new QSplitter; - m_objTree = new QmlObjectTree(this); - m_objTree->setHeaderHidden(true); - connect(m_objTree, SIGNAL(itemClicked(QTreeWidgetItem *, int)), this, SLOT(itemClicked(QTreeWidgetItem *))); - connect(m_objTree, SIGNAL(addExpressionWatch(int,QString)), this, SLOT(addExpressionWatch(int,QString))); - splitter->addWidget(m_objTree); + m_objTree = new ObjectTree(m_client, this); + m_propertiesView = new ObjectPropertiesView(m_client); + m_watchTableModel = new WatchTableModel(m_client, this); + + m_watchTableView = new WatchTableView(m_watchTableModel); + m_watchTableView->setModel(m_watchTableModel); + WatchTableHeaderView *header = new WatchTableHeaderView(m_watchTableModel); + m_watchTableView->setHorizontalHeader(header); + + connect(m_objTree, SIGNAL(objectSelected(QmlDebugObjectReference)), + m_propertiesView, SLOT(reload(QmlDebugObjectReference))); + connect(m_objTree, SIGNAL(expressionWatchRequested(QmlDebugObjectReference,QString)), + m_watchTableModel, SLOT(expressionWatchRequested(QmlDebugObjectReference,QString))); + + connect(m_propertiesView, SIGNAL(activated(QmlDebugObjectReference,QmlDebugPropertyReference)), + m_watchTableModel, SLOT(togglePropertyWatch(QmlDebugObjectReference,QmlDebugPropertyReference))); - m_propView = new PropertyView(this); - connect(m_propView, SIGNAL(propertyActivated(QmlDebugPropertyReference)), - this, SLOT(propertyActivated(QmlDebugPropertyReference))); + connect(m_watchTableModel, SIGNAL(watchCreated(QmlDebugWatch*)), + m_propertiesView, SLOT(watchCreated(QmlDebugWatch*))); - m_watchTableModel = new WatchTableModel(this); - m_watchTable = new QTableView(this); - m_watchTable->setModel(m_watchTableModel); - QObject::connect(m_watchTable, SIGNAL(activated(QModelIndex)), - this, SLOT(watchedItemActivated(QModelIndex))); - WatchTableHeaderView *header = new WatchTableHeaderView(m_watchTable); - m_watchTable->setHorizontalHeader(header); - QObject::connect(header, SIGNAL(stopWatching(int)), - this, SLOT(stopWatching(int))); + connect(m_watchTableView, SIGNAL(objectActivated(int)), + m_objTree, SLOT(selectObject(int))); m_tabs = new QTabWidget(this); - m_tabs->addTab(m_propView, tr("Properties")); - m_tabs->addTab(m_watchTable, tr("Watched")); + m_tabs->addTab(m_propertiesView, tr("Properties")); + m_tabs->addTab(m_watchTableView, tr("Watched")); + splitter->addWidget(m_objTree); splitter->addWidget(m_tabs); splitter->setStretchFactor(1, 2); layout->addWidget(splitter); @@ -222,128 +101,6 @@ void EnginePane::engineSelected(int id) queryContext(id); } -void EnginePane::itemClicked(QTreeWidgetItem *item) -{ - m_propView->clear(); - - if (m_object) { - delete m_object; - m_object = 0; - } - - m_object = m_client.queryObjectRecursive(QmlDebugObjectReference(item->data(0, Qt::UserRole).toInt()), this); - if (!m_object->isWaiting()) - showProperties(); - else - QObject::connect(m_object, SIGNAL(stateChanged(State)), - this, SLOT(showProperties())); -} - -void EnginePane::showProperties() -{ - QmlDebugObjectReference obj = m_object->object(); - m_propView->setObject(obj); - - if (m_watchedObject) { - m_client.removeWatch(m_watchedObject); - delete m_watchedObject; - m_watchedObject = 0; - } - - QmlDebugWatch *watch = m_client.addWatch(obj, this); - if (watch->state() != QmlDebugWatch::Dead) { - m_watchedObject = watch; - QObject::connect(watch, SIGNAL(valueChanged(QByteArray,QVariant)), - this, SLOT(valueChanged(QByteArray,QVariant))); - } - - delete m_object; m_object = 0; -} - -void EnginePane::addExpressionWatch(int debugId, const QString &expr) -{ - QmlDebugWatch *watch = m_client.addWatch(QmlDebugObjectReference(debugId), expr, this); - - if (watch->state() != QmlDebugWatch::Dead) { - QObject::connect(watch, SIGNAL(valueChanged(QByteArray,QVariant)), - this, SLOT(valueChanged(QByteArray,QVariant))); - m_watchTableModel->addWatch(watch, expr); - m_watchTable->resizeColumnsToContents(); - } -} - -void EnginePane::valueChanged(const QByteArray &propertyName, const QVariant &value) -{ - QmlDebugWatch *watch = qobject_cast<QmlDebugWatch*>(sender()); - - m_watchTableModel->updateWatch(watch, value); - - if (!propertyName.isEmpty()) { - if (watch->objectDebugId() == m_propView->object().debugId()) - m_propView->updateProperty(propertyName, value); - } -} - -void EnginePane::propertyActivated(const QmlDebugPropertyReference &property) -{ - PropertyView *view = qobject_cast<PropertyView*>(sender()); - if (!view) - return; - - QmlDebugObjectReference object = view->object(); - QmlDebugWatch *watch = m_watchTableModel->findWatch(object.debugId(), property.name()); - if (watch) { - m_client.removeWatch(watch); - delete watch; - watch = 0; - } else { - QmlDebugWatch *watch = m_client.addWatch(property, this); - if (watch->state() != QmlDebugWatch::Dead) { - QObject::connect(watch, SIGNAL(stateChanged(State)), - this, SLOT(propertyWatchStateChanged())); - QObject::connect(watch, SIGNAL(valueChanged(QByteArray,QVariant)), - this, SLOT(valueChanged(QByteArray,QVariant))); - QString desc = property.name() - + QLatin1String(" on\n") - + object.className() - + QLatin1String(": ") - + (object.name().isEmpty() ? QLatin1String("<unnamed>") : object.name()); - m_watchTableModel->addWatch(watch, desc); - m_watchTable->resizeColumnsToContents(); - } - } -} - -void EnginePane::propertyWatchStateChanged() -{ - QmlDebugPropertyWatch *watch = qobject_cast<QmlDebugPropertyWatch*>(sender()); - if (watch && watch->objectDebugId() == m_propView->object().debugId()) - m_propView->setPropertyIsWatched(watch->name(), watch->state() == QmlDebugWatch::Active); -} - -void EnginePane::stopWatching(int column) -{ - QmlDebugWatch *watch = m_watchTableModel->findWatch(column); - if (watch) { - m_client.removeWatch(watch); - delete watch; - watch = 0; - } -} - -void EnginePane::watchedItemActivated(const QModelIndex &index) -{ - QmlDebugWatch *watch = m_watchTableModel->findWatch(index.column()); - if (!watch) - return; - QTreeWidgetItem *item = m_objTree->findItemByObjectId(watch->objectDebugId()); - if (item) { - m_objTree->setCurrentItem(item); - m_objTree->scrollToItem(item); - item->setExpanded(true); - } -} - void EnginePane::queryContext(int id) { if (m_context) { @@ -351,88 +108,30 @@ void EnginePane::queryContext(int id) m_context = 0; } - m_context = m_client.queryRootContexts(QmlDebugEngineReference(id), this); + m_context = m_client->queryRootContexts(QmlDebugEngineReference(id), this); if (!m_context->isWaiting()) contextChanged(); else - QObject::connect(m_context, SIGNAL(stateChanged(State)), + QObject::connect(m_context, SIGNAL(stateChanged(State)), this, SLOT(contextChanged())); } void EnginePane::contextChanged() { - dump(m_context->rootContext(), 0); + //dump(m_context->rootContext(), 0); + foreach (const QmlDebugObjectReference &object, m_context->rootContext().objects()) - fetchObject(object.debugId()); + m_objTree->reload(object.debugId()); delete m_context; m_context = 0; } -void EnginePane::dump(const QmlDebugContextReference &ctxt, int ind) -{ - QByteArray indent(ind * 4, ' '); - qWarning().nospace() << indent.constData() << ctxt.debugId() << " " - << qPrintable(ctxt.name()); - - for (int ii = 0; ii < ctxt.contexts().count(); ++ii) - dump(ctxt.contexts().at(ii), ind + 1); - - for (int ii = 0; ii < ctxt.objects().count(); ++ii) - dump(ctxt.objects().at(ii), ind); -} - -void EnginePane::dump(const QmlDebugObjectReference &obj, int ind) -{ - QByteArray indent(ind * 4, ' '); - qWarning().nospace() << indent.constData() << qPrintable(obj.className()) - << " " << qPrintable(obj.name()) << " " - << obj.debugId(); - - for (int ii = 0; ii < obj.children().count(); ++ii) - dump(obj.children().at(ii), ind + 1); -} - - -void EnginePane::buildTree(const QmlDebugObjectReference &obj, QTreeWidgetItem *parent) -{ - if (!parent) - m_objTree->clear(); - - QTreeWidgetItem *item = parent ? new QTreeWidgetItem(parent) : new QTreeWidgetItem(m_objTree); - item->setText(0, obj.className()); - item->setData(0, Qt::UserRole, obj.debugId()); - item->setData(0, QmlObjectTree::ContextIdRole, obj.contextDebugId()); - - if (parent && obj.contextDebugId() >= 0 - && obj.contextDebugId() != parent->data(0, QmlObjectTree::ContextIdRole).toInt()) { - QmlDebugFileReference source = obj.source(); - if (!source.url().isEmpty()) { - QString toolTipString = QLatin1String("URL: ") + source.url().toString(); - item->setToolTip(0, toolTipString); - } - item->setForeground(0, QColor("orange")); - } else { - item->setExpanded(true); - } - - if (obj.contextDebugId() < 0) - item->setForeground(0, Qt::lightGray); - - for (int ii = 0; ii < obj.children().count(); ++ii) - buildTree(obj.children().at(ii), item); -} - void EnginePane::refreshEngines() { if (m_engines) return; - QList<QmlDebugWatch *> watches = m_watchTableModel->watches(); - for (int i=0; i<watches.count(); i++) - m_client.removeWatch(watches[i]); - qDeleteAll(watches); - - m_engines = m_client.queryAvailableEngines(this); + m_engines = m_client->queryAvailableEngines(this); if (!m_engines->isWaiting()) enginesChanged(); else @@ -462,28 +161,6 @@ void EnginePane::enginesChanged() engineSelected(qobject_cast<DebuggerEngineItem*>(m_engineItems.at(0))->engineId()); } -void EnginePane::fetchObject(int id) -{ - if (m_object) { - delete m_object; - m_object = 0; - } - - m_object = m_client.queryObjectRecursive(QmlDebugObjectReference(id), this); - if (!m_object->isWaiting()) - objectFetched(); - else - QObject::connect(m_object, SIGNAL(stateChanged(State)), - this, SLOT(objectFetched())); -} - -void EnginePane::objectFetched() -{ - dump(m_object->object(), 0); - buildTree(m_object->object(), 0); - delete m_object; m_object = 0; -} - #include "engine.moc" diff --git a/tools/qmldebugger/engine.h b/tools/qmldebugger/engine.h index c7707ed..8e8c0f2 100644 --- a/tools/qmldebugger/engine.h +++ b/tools/qmldebugger/engine.h @@ -10,21 +10,15 @@ QT_BEGIN_NAMESPACE +class ObjectPropertiesView; class QmlDebugConnection; class QmlDebugPropertyReference; class QmlDebugWatch; -class QmlObjectTree; -class EngineClientPlugin; -class PropertyView; +class ObjectTree; class WatchTableModel; -class QLineEdit; -class QModelIndex; -class QTreeWidget; -class QTreeWidgetItem; +class WatchTableView; + class QTabWidget; -class QTableWidget; -class QTableView; -class QTableWidgetItem; class EnginePane : public QWidget { @@ -41,42 +35,23 @@ private slots: void queryContext(int); void contextChanged(); - void fetchObject(int); - void objectFetched(); - void engineSelected(int); - void itemClicked(QTreeWidgetItem *); - void showProperties(); - void addExpressionWatch(int debugId, const QString &expr); - - void valueChanged(const QByteArray &property, const QVariant &value); - - void propertyActivated(const QmlDebugPropertyReference &property); - void propertyWatchStateChanged(); - void watchedItemActivated(const QModelIndex &index); - void stopWatching(int column); - private: - void dump(const QmlDebugContextReference &, int); - void dump(const QmlDebugObjectReference &, int); - void buildTree(const QmlDebugObjectReference &, QTreeWidgetItem *parent); - - QmlEngineDebug m_client; + QmlEngineDebug *m_client; QmlDebugEnginesQuery *m_engines; QmlDebugRootContextQuery *m_context; - QmlDebugObjectQuery *m_object; - QmlObjectTree *m_objTree; + ObjectTree *m_objTree; QTabWidget *m_tabs; - PropertyView *m_propView; - QTableView *m_watchTable; + WatchTableView *m_watchTableView; QmlView *m_engineView; QList<QObject *> m_engineItems; - QmlDebugWatch *m_watchedObject; WatchTableModel *m_watchTableModel; + + ObjectPropertiesView *m_propertiesView; }; QT_END_NAMESPACE diff --git a/tools/qmldebugger/main.cpp b/tools/qmldebugger/main.cpp index ccd3761..c9983cd 100644 --- a/tools/qmldebugger/main.cpp +++ b/tools/qmldebugger/main.cpp @@ -1,154 +1,6 @@ -#include <QtNetwork/qtcpsocket.h> #include <QtGui/qapplication.h> -#include <QtGui/qwidget.h> -#include <QtGui/qpainter.h> -#include <QtGui/qscrollbar.h> -#include <QtDeclarative/qmldebugclient.h> -#include <QtCore/qdebug.h> -#include <QtCore/qstringlist.h> -#include <QtCore/qdatastream.h> -#include <QtCore/qtimer.h> -#include "canvasframerate.h" -#include "engine.h" -#include <QVBoxLayout> -#include <QPushButton> -#include <QLineEdit> -#include <QTabWidget> -#include <QSpinBox> -#include <QLabel> -class Shell : public QWidget -{ -Q_OBJECT -public: - Shell(QWidget * = 0); - - void setHost(const QString &host); - void setPort(quint16 port); - void showEngineTab(); - -public slots: - void connectToHost(); - void disconnectFromHost(); - -private slots: - void connectionStateChanged(); - -private: - QmlDebugConnection client; - - QLabel *m_connectionState; - QLineEdit *m_host; - QSpinBox *m_port; - QPushButton *m_connectButton; - QPushButton *m_disconnectButton; - - EnginePane *m_enginePane; - QTabWidget *m_tabs; -}; - -Shell::Shell(QWidget *parent) -: QWidget(parent) -{ - QVBoxLayout *layout = new QVBoxLayout; - setLayout(layout); - - - QHBoxLayout *connectLayout = new QHBoxLayout; - layout->addLayout(connectLayout); - connectLayout->addStretch(2); - - m_connectionState = new QLabel(this); - connectLayout->addWidget(m_connectionState); - m_host = new QLineEdit(this); - m_host->setText("127.0.0.1"); - connectLayout->addWidget(m_host); - m_port = new QSpinBox(this); - m_port->setMinimum(1024); - m_port->setMaximum(20000); - m_port->setValue(3768); - connectLayout->addWidget(m_port); - m_connectButton = new QPushButton(tr("Connect"), this); - QObject::connect(m_connectButton, SIGNAL(clicked()), - this, SLOT(connectToHost())); - connectLayout->addWidget(m_connectButton); - m_disconnectButton = new QPushButton(tr("Disconnect"), this); - QObject::connect(m_disconnectButton, SIGNAL(clicked()), - this, SLOT(disconnectFromHost())); - m_disconnectButton->setEnabled(false); - connectLayout->addWidget(m_disconnectButton); - - m_tabs = new QTabWidget(this); - layout->addWidget(m_tabs); - - CanvasFrameRate *cfr = new CanvasFrameRate(&client, this); - m_tabs->addTab(cfr, tr("Frame Rate")); - - m_enginePane = new EnginePane(&client, this); - m_tabs->addTab(m_enginePane, tr("QML Engine")); - - QObject::connect(&client, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(connectionStateChanged())); - connectionStateChanged(); -} - -void Shell::setHost(const QString &host) -{ - m_host->setText(host); -} - -void Shell::setPort(quint16 port) -{ - m_port->setValue(port); -} - -void Shell::showEngineTab() -{ - m_tabs->setCurrentWidget(m_enginePane); -} - -void Shell::connectionStateChanged() -{ - switch (client.state()) { - default: - case QAbstractSocket::UnconnectedState: - m_connectionState->setText(tr("Disconnected")); - m_connectButton->setEnabled(true); - m_disconnectButton->setEnabled(false); - break; - case QAbstractSocket::HostLookupState: - m_connectionState->setText(tr("Resolving")); - m_connectButton->setEnabled(false); - m_disconnectButton->setEnabled(true); - break; - case QAbstractSocket::ConnectingState: - m_connectionState->setText(tr("Connecting")); - m_connectButton->setEnabled(false); - m_disconnectButton->setEnabled(true); - break; - case QAbstractSocket::ConnectedState: - m_connectionState->setText(tr("Connected")); - m_connectButton->setEnabled(false); - m_disconnectButton->setEnabled(true); - - QTimer::singleShot(0, m_enginePane, SLOT(refreshEngines())); - break; - case QAbstractSocket::ClosingState: - m_connectionState->setText(tr("Closing")); - m_connectButton->setEnabled(false); - m_disconnectButton->setEnabled(false); - break; - } -} - -void Shell::connectToHost() -{ - client.connectToHost(m_host->text(), m_port->value()); -} - -void Shell::disconnectFromHost() -{ - client.disconnectFromHost(); -} +#include "qmldebugger.h" int main(int argc, char ** argv) { @@ -156,24 +8,27 @@ int main(int argc, char ** argv) QStringList args = app.arguments(); - Shell shell; + QmlDebugger win; if (args.contains("--engine")) - shell.showEngineTab(); + win.showEngineTab(); - if (args.count() > 1 && args.at(1).contains(':')) { - QStringList hostAndPort = args.at(1).split(':'); + for (int i=0; i<args.count(); i++) { + if (!args[i].contains(':')) + continue; + QStringList hostAndPort = args[i].split(':'); bool ok = false; - quint16 port = hostAndPort[1].toInt(&ok); + quint16 port = hostAndPort.value(1).toInt(&ok); if (ok) { - shell.setHost(hostAndPort[0]); - shell.setPort(port); - shell.connectToHost(); + qWarning() << "qmldebugger connecting to" + << hostAndPort[0] << port << "..."; + win.setHost(hostAndPort[0]); + win.setPort(port); + win.connectToHost(); + break; } } - shell.show(); + win.show(); return app.exec(); } - -#include "main.moc" diff --git a/tools/qmldebugger/objectpropertiesview.cpp b/tools/qmldebugger/objectpropertiesview.cpp new file mode 100644 index 0000000..f725194 --- /dev/null +++ b/tools/qmldebugger/objectpropertiesview.cpp @@ -0,0 +1,176 @@ +#include <QtCore/qdebug.h> + +#include <QtGui/qtreewidget.h> +#include <QtGui/qlayout.h> + +#include <QtDeclarative/qmldebugservice.h> +#include <QtDeclarative/qmldebug.h> +#include <QtDeclarative/qmldebugclient.h> + +#include "objectpropertiesview.h" + +QT_BEGIN_NAMESPACE + +class PropertiesViewItem : public QObject, public QTreeWidgetItem +{ + Q_OBJECT +public: + PropertiesViewItem(QTreeWidget *widget); + PropertiesViewItem(QTreeWidgetItem *parent); + + QmlDebugPropertyReference property; +}; + +PropertiesViewItem::PropertiesViewItem(QTreeWidget *widget) +: QTreeWidgetItem(widget) +{ +} + +PropertiesViewItem::PropertiesViewItem(QTreeWidgetItem *parent) +: QTreeWidgetItem(parent) +{ +} + +ObjectPropertiesView::ObjectPropertiesView(QmlEngineDebug *client, QWidget *parent) + : QWidget(parent), + m_client(client), + m_query(0), + m_watch(0) +{ + QVBoxLayout *layout = new QVBoxLayout; + layout->setContentsMargins(0, 0, 0, 0); + layout->setSpacing(0); + setLayout(layout); + + m_tree = new QTreeWidget(this); + m_tree->setExpandsOnDoubleClick(false); + m_tree->setHeaderLabels(QStringList() << tr("Property") << tr("Value")); + QObject::connect(m_tree, SIGNAL(itemActivated(QTreeWidgetItem *, int)), + this, SLOT(itemActivated(QTreeWidgetItem *))); + + m_tree->setColumnCount(2); + + layout->addWidget(m_tree); +} + +void ObjectPropertiesView::reload(const QmlDebugObjectReference &obj) +{ + if (m_query) + delete m_query; + + m_query = m_client->queryObjectRecursive(obj, this); + if (!m_query->isWaiting()) + queryFinished(); + else + QObject::connect(m_query, SIGNAL(stateChanged(State)), + this, SLOT(queryFinished())); +} + +void ObjectPropertiesView::queryFinished() +{ + if (!m_query) + return; + + QmlDebugObjectReference obj = m_query->object(); + + QmlDebugWatch *watch = m_client->addWatch(obj, this); + if (watch->state() == QmlDebugWatch::Dead) { + delete watch; + watch = 0; + } else { + if (m_watch) { + m_client->removeWatch(m_watch); + delete m_watch; + } + m_watch = watch; + QObject::connect(watch, SIGNAL(valueChanged(QByteArray,QVariant)), + this, SLOT(valueChanged(QByteArray,QVariant))); + } + + delete m_query; + m_query = 0; + + setObject(obj); +} + +void ObjectPropertiesView::setObject(const QmlDebugObjectReference &object) +{ + m_object = object; + m_tree->clear(); + + + QList<QmlDebugPropertyReference> properties = object.properties(); + for (int i=0; i<properties.count(); i++) { + const QmlDebugPropertyReference &p = properties[i]; + + PropertiesViewItem *item = new PropertiesViewItem(m_tree); + item->property = p; + + item->setText(0, p.name()); + item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); + if (!p.hasNotifySignal()) + item->setForeground(0, Qt::lightGray); + + if (!p.binding().isEmpty()) { + PropertiesViewItem *binding = new PropertiesViewItem(item); + binding->setText(1, p.binding()); + binding->setForeground(1, Qt::darkGreen); + } + + item->setExpanded(true); + } + + m_tree->resizeColumnToContents(0); +} + +void ObjectPropertiesView::watchCreated(QmlDebugWatch *watch) +{ + if (watch->objectDebugId() == m_object.debugId() + && qobject_cast<QmlDebugPropertyWatch*>(watch)) { + connect(watch, SIGNAL(stateChanged(State)), SLOT(watchStateChanged())); + setWatched(qobject_cast<QmlDebugPropertyWatch*>(watch)->name(), true); + } +} + +void ObjectPropertiesView::watchStateChanged() +{ + QmlDebugWatch *watch = qobject_cast<QmlDebugWatch*>(sender()); + + if (watch->objectDebugId() == m_object.debugId() + && qobject_cast<QmlDebugPropertyWatch*>(watch) + && watch->state() == QmlDebugWatch::Inactive) { + setWatched(qobject_cast<QmlDebugPropertyWatch*>(watch)->name(), false); + } +} + +void ObjectPropertiesView::setWatched(const QString &property, bool watched) +{ + for (int i=0; i<m_tree->topLevelItemCount(); i++) { + PropertiesViewItem *item = static_cast<PropertiesViewItem *>(m_tree->topLevelItem(i)); + if (item->property.name() == property && item->property.hasNotifySignal()) { + QFont font = m_tree->font(); + font.setBold(watched); + item->setFont(0, font); + } + } +} + +void ObjectPropertiesView::valueChanged(const QByteArray &name, const QVariant &value) +{ + for (int i=0; i<m_tree->topLevelItemCount(); i++) { + PropertiesViewItem *item = static_cast<PropertiesViewItem *>(m_tree->topLevelItem(i)); + if (item->property.name() == name) + item->setText(1, value.toString()); + } +} + +void ObjectPropertiesView::itemActivated(QTreeWidgetItem *i) +{ + PropertiesViewItem *item = static_cast<PropertiesViewItem *>(i); + if (!item->property.name().isEmpty() && item->property.hasNotifySignal()) + emit activated(m_object, item->property); +} + +QT_END_NAMESPACE + +#include "objectpropertiesview.moc" diff --git a/tools/qmldebugger/objectpropertiesview.h b/tools/qmldebugger/objectpropertiesview.h new file mode 100644 index 0000000..0f72ff4 --- /dev/null +++ b/tools/qmldebugger/objectpropertiesview.h @@ -0,0 +1,47 @@ +#ifndef PROPERTIESTABLEMODEL_H +#define PROPERTIESTABLEMODEL_H + +#include <QtDeclarative/qmldebug.h> + +#include <QtGui/qwidget.h> + +QT_BEGIN_NAMESPACE + +class QTreeWidget; +class QTreeWidgetItem; + +class ObjectPropertiesView : public QWidget +{ + Q_OBJECT +public: + ObjectPropertiesView(QmlEngineDebug *client, QWidget *parent = 0); + +signals: + void activated(const QmlDebugObjectReference &, const QmlDebugPropertyReference &); + +public slots: + void reload(const QmlDebugObjectReference &); + void watchCreated(QmlDebugWatch *); + +private slots: + void queryFinished(); + void watchStateChanged(); + void valueChanged(const QByteArray &name, const QVariant &value); + void itemActivated(QTreeWidgetItem *i); + +private: + void setObject(const QmlDebugObjectReference &object); + void setWatched(const QString &property, bool watched); + + QmlEngineDebug *m_client; + QmlDebugObjectQuery *m_query; + QmlDebugWatch *m_watch; + + QTreeWidget *m_tree; + QmlDebugObjectReference m_object; +}; + + +QT_END_NAMESPACE + +#endif diff --git a/tools/qmldebugger/objecttree.cpp b/tools/qmldebugger/objecttree.cpp new file mode 100644 index 0000000..f68e7f1 --- /dev/null +++ b/tools/qmldebugger/objecttree.cpp @@ -0,0 +1,168 @@ +#include <QtGui/qevent.h> +#include <QtGui/qmenu.h> +#include <QtGui/qaction.h> + +#include <QInputDialog> + +#include <QtDeclarative/qmldebugservice.h> +#include <QtDeclarative/qmldebug.h> +#include <QtDeclarative/qmldebugclient.h> + +#include "objecttree.h" + +Q_DECLARE_METATYPE(QmlDebugObjectReference) + +ObjectTree::ObjectTree(QmlEngineDebug *client, QWidget *parent) + : QTreeWidget(parent), + m_client(client), + m_query(0) +{ + setHeaderHidden(true); + + connect(this, SIGNAL(itemClicked(QTreeWidgetItem *, int)), + this, SLOT(handleItemClicked(QTreeWidgetItem *))); +} + +void ObjectTree::reload(int objectDebugId) +{ + if (m_query) { + delete m_query; + m_query = 0; + } + + m_query = m_client->queryObjectRecursive(QmlDebugObjectReference(objectDebugId), this); + if (!m_query->isWaiting()) + objectFetched(); + else + QObject::connect(m_query, SIGNAL(stateChanged(State)), + this, SLOT(objectFetched())); +} + +void ObjectTree::selectObject(int debugId) +{ + QTreeWidgetItem *item = findItemByObjectId(debugId); + if (item) { + setCurrentItem(item); + scrollToItem(item); + item->setExpanded(true); + } +} + +void ObjectTree::objectFetched() +{ + dump(m_query->object(), 0); + buildTree(m_query->object(), 0); + + delete m_query; + m_query = 0; +} + +void ObjectTree::handleItemClicked(QTreeWidgetItem *item) +{ + QmlDebugObjectReference obj = item->data(0, Qt::UserRole).value<QmlDebugObjectReference>(); + if (obj.debugId() < 0) { + qWarning("QML Object Tree: bad object id"); + return; + } + emit objectSelected(obj); +} + +void ObjectTree::buildTree(const QmlDebugObjectReference &obj, QTreeWidgetItem *parent) +{ + if (!parent) + clear(); + + QTreeWidgetItem *item = parent ? new QTreeWidgetItem(parent) : new QTreeWidgetItem(this); + item->setText(0, obj.className()); + item->setData(0, Qt::UserRole, qVariantFromValue(obj)); + + if (parent && obj.contextDebugId() >= 0 + && obj.contextDebugId() != parent->data(0, Qt::UserRole + ).value<QmlDebugObjectReference>().contextDebugId()) { + QmlDebugFileReference source = obj.source(); + if (!source.url().isEmpty()) { + QString toolTipString = QLatin1String("URL: ") + source.url().toString(); + item->setToolTip(0, toolTipString); + } + item->setForeground(0, QColor("orange")); + } else { + item->setExpanded(true); + } + + if (obj.contextDebugId() < 0) + item->setForeground(0, Qt::lightGray); + + for (int ii = 0; ii < obj.children().count(); ++ii) + buildTree(obj.children().at(ii), item); +} + +void ObjectTree::dump(const QmlDebugContextReference &ctxt, int ind) +{ + QByteArray indent(ind * 4, ' '); + qWarning().nospace() << indent.constData() << ctxt.debugId() << " " + << qPrintable(ctxt.name()); + + for (int ii = 0; ii < ctxt.contexts().count(); ++ii) + dump(ctxt.contexts().at(ii), ind + 1); + + for (int ii = 0; ii < ctxt.objects().count(); ++ii) + dump(ctxt.objects().at(ii), ind); +} + +void ObjectTree::dump(const QmlDebugObjectReference &obj, int ind) +{ + QByteArray indent(ind * 4, ' '); + qWarning().nospace() << indent.constData() << qPrintable(obj.className()) + << " " << qPrintable(obj.name()) << " " + << obj.debugId(); + + for (int ii = 0; ii < obj.children().count(); ++ii) + dump(obj.children().at(ii), ind + 1); +} + +QTreeWidgetItem *ObjectTree::findItemByObjectId(int debugId) const +{ + for (int i=0; i<topLevelItemCount(); i++) { + QTreeWidgetItem *item = findItem(topLevelItem(i), debugId); + if (item) + return item; + } + + return 0; +} + +QTreeWidgetItem *ObjectTree::findItem(QTreeWidgetItem *item, int debugId) const +{ + if (item->data(0, Qt::UserRole).value<QmlDebugObjectReference>().debugId() == debugId) + return item; + + QTreeWidgetItem *child; + for (int i=0; i<item->childCount(); i++) { + child = findItem(item->child(i), debugId); + if (child) + return child; + } + + return 0; +} + +void ObjectTree::mousePressEvent(QMouseEvent *me) +{ + QTreeWidget::mousePressEvent(me); + if (!currentItem()) + return; + if(me->button() == Qt::RightButton && me->type() == QEvent::MouseButtonPress) { + QAction action(tr("Add watch..."), 0); + QList<QAction *> actions; + actions << &action; + QmlDebugObjectReference obj = + currentItem()->data(0, Qt::UserRole).value<QmlDebugObjectReference>(); + if (QMenu::exec(actions, me->globalPos())) { + bool ok = false; + QString watch = QInputDialog::getText(this, tr("Watch expression"), + tr("Expression:"), QLineEdit::Normal, QString(), &ok); + if (ok && !watch.isEmpty()) + emit expressionWatchRequested(obj, watch); + } + } +} diff --git a/tools/qmldebugger/objecttree.h b/tools/qmldebugger/objecttree.h new file mode 100644 index 0000000..bba6c08 --- /dev/null +++ b/tools/qmldebugger/objecttree.h @@ -0,0 +1,51 @@ +#ifndef OBJECTTREE_H +#define OBJECTTREE_H + +#include <QtGui/qtreewidget.h> + +QT_BEGIN_NAMESPACE + +class QTreeWidgetItem; + +class QmlEngineDebug; +class QmlDebugObjectReference; +class QmlDebugObjectQuery; +class QmlDebugContextReference; + + +class ObjectTree : public QTreeWidget +{ + Q_OBJECT +public: + ObjectTree(QmlEngineDebug *client, QWidget *parent = 0); + +signals: + void objectSelected(const QmlDebugObjectReference &); + void expressionWatchRequested(const QmlDebugObjectReference &, const QString &); + +public slots: + void reload(int objectDebugId); + void selectObject(int debugId); + +protected: + virtual void mousePressEvent(QMouseEvent *); + +private slots: + void objectFetched(); + void handleItemClicked(QTreeWidgetItem *); + +private: + QTreeWidgetItem *findItemByObjectId(int debugId) const; + QTreeWidgetItem *findItem(QTreeWidgetItem *item, int debugId) const; + void dump(const QmlDebugContextReference &, int); + void dump(const QmlDebugObjectReference &, int); + void buildTree(const QmlDebugObjectReference &, QTreeWidgetItem *parent); + + QmlEngineDebug *m_client; + QmlDebugObjectQuery *m_query; +}; + +QT_END_NAMESPACE + + +#endif diff --git a/tools/qmldebugger/propertyview.cpp b/tools/qmldebugger/propertyview.cpp deleted file mode 100644 index 44e406b..0000000 --- a/tools/qmldebugger/propertyview.cpp +++ /dev/null @@ -1,117 +0,0 @@ -#include "propertyview.h" -#include <QtCore/qdebug.h> -#include <QtGui/qboxlayout.h> -#include <QtGui/qtreewidget.h> - -QT_BEGIN_NAMESPACE - -PropertyView::PropertyView(QWidget *parent) -: QWidget(parent), m_tree(0) -{ - QVBoxLayout *layout = new QVBoxLayout; - layout->setContentsMargins(0, 0, 0, 0); - layout->setSpacing(0); - setLayout(layout); - - m_tree = new QTreeWidget(this); - m_tree->setExpandsOnDoubleClick(false); - m_tree->setHeaderLabels(QStringList() << tr("Property") << tr("Value")); - QObject::connect(m_tree, SIGNAL(itemActivated(QTreeWidgetItem *, int)), - this, SLOT(itemActivated(QTreeWidgetItem *))); - - m_tree->setColumnCount(2); - - layout->addWidget(m_tree); -} - -class PropertyViewItem : public QObject, public QTreeWidgetItem -{ - Q_OBJECT -public: - PropertyViewItem(QTreeWidget *widget); - PropertyViewItem(QTreeWidgetItem *parent); - - QmlDebugPropertyReference property; -}; - -PropertyViewItem::PropertyViewItem(QTreeWidget *widget) -: QTreeWidgetItem(widget) -{ -} - -PropertyViewItem::PropertyViewItem(QTreeWidgetItem *parent) -: QTreeWidgetItem(parent) -{ -} - - -void PropertyView::setObject(const QmlDebugObjectReference &object) -{ - m_object = object; - m_tree->clear(); - - QList<QmlDebugPropertyReference> properties = object.properties(); - for (int i=0; i<properties.count(); i++) { - const QmlDebugPropertyReference &p = properties[i]; - - PropertyViewItem *item = new PropertyViewItem(m_tree); - item->property = p; - - item->setText(0, p.name()); - item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); - if (!p.hasNotifySignal()) - item->setForeground(0, Qt::lightGray); - - if (!p.binding().isEmpty()) { - PropertyViewItem *binding = new PropertyViewItem(item); - binding->setText(1, p.binding()); - binding->setForeground(1, Qt::darkGreen); - } - - item->setExpanded(true); - } - - m_tree->resizeColumnToContents(0); -} - -const QmlDebugObjectReference &PropertyView::object() const -{ - return m_object; -} - -void PropertyView::clear() -{ - setObject(QmlDebugObjectReference()); -} - -void PropertyView::updateProperty(const QString &name, const QVariant &value) -{ - for (int i=0; i<m_tree->topLevelItemCount(); i++) { - PropertyViewItem *item = static_cast<PropertyViewItem *>(m_tree->topLevelItem(i)); - if (item->property.name() == name) - item->setText(1, value.toString()); - } -} - -void PropertyView::setPropertyIsWatched(const QString &name, bool watched) -{ - for (int i=0; i<m_tree->topLevelItemCount(); i++) { - PropertyViewItem *item = static_cast<PropertyViewItem *>(m_tree->topLevelItem(i)); - if (item->property.name() == name && item->property.hasNotifySignal()) { - QFont font = m_tree->font(); - font.setBold(watched); - item->setFont(0, font); - } - } -} - -void PropertyView::itemActivated(QTreeWidgetItem *i) -{ - PropertyViewItem *item = static_cast<PropertyViewItem *>(i); - if (!item->property.name().isEmpty() && item->property.hasNotifySignal()) - emit propertyActivated(item->property); -} - -QT_END_NAMESPACE - -#include "propertyview.moc" diff --git a/tools/qmldebugger/propertyview.h b/tools/qmldebugger/propertyview.h deleted file mode 100644 index 6b69bdf..0000000 --- a/tools/qmldebugger/propertyview.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef PROPERTYVIEW_H -#define PROPERTYVIEW_H - -#include <QtGui/qwidget.h> -#include <QtCore/qpointer.h> -#include <QtDeclarative/qmldebug.h> - -QT_BEGIN_NAMESPACE - -class QTreeWidget; -class QTreeWidgetItem; - -class PropertyView : public QWidget -{ - Q_OBJECT -public: - PropertyView(QWidget *parent = 0); - - void setObject(const QmlDebugObjectReference &object); - const QmlDebugObjectReference &object() const; - - void updateProperty(const QString &name, const QVariant &value); - void setPropertyIsWatched(const QString &name, bool watched); - - void clear(); - -signals: - void propertyActivated(const QmlDebugPropertyReference &property); - -private slots: - void itemActivated(QTreeWidgetItem *); - -private: - QmlDebugObjectReference m_object; - QTreeWidget *m_tree; -}; - -QT_END_NAMESPACE - -#endif // PROPERTYVIEW_H diff --git a/tools/qmldebugger/qmldebugger.cpp b/tools/qmldebugger/qmldebugger.cpp new file mode 100644 index 0000000..0f0fc03 --- /dev/null +++ b/tools/qmldebugger/qmldebugger.cpp @@ -0,0 +1,125 @@ +#include <QtCore/qtimer.h> +#include <QtCore/qdebug.h> +#include <QVBoxLayout> +#include <QPushButton> +#include <QLineEdit> +#include <QTabWidget> +#include <QSpinBox> +#include <QLabel> + +#include "canvasframerate.h" +#include "engine.h" +#include "qmldebugger.h" + +QmlDebugger::QmlDebugger(QWidget *parent) +: QWidget(parent) +{ + QVBoxLayout *layout = new QVBoxLayout; + setLayout(layout); + + + QHBoxLayout *connectLayout = new QHBoxLayout; + layout->addLayout(connectLayout); + connectLayout->addStretch(2); + + m_connectionState = new QLabel(this); + connectLayout->addWidget(m_connectionState); + m_host = new QLineEdit(this); + m_host->setText("127.0.0.1"); + connectLayout->addWidget(m_host); + m_port = new QSpinBox(this); + m_port->setMinimum(1024); + m_port->setMaximum(20000); + m_port->setValue(3768); + connectLayout->addWidget(m_port); + m_connectButton = new QPushButton(tr("Connect"), this); + QObject::connect(m_connectButton, SIGNAL(clicked()), + this, SLOT(connectToHost())); + connectLayout->addWidget(m_connectButton); + m_disconnectButton = new QPushButton(tr("Disconnect"), this); + QObject::connect(m_disconnectButton, SIGNAL(clicked()), + this, SLOT(disconnectFromHost())); + m_disconnectButton->setEnabled(false); + connectLayout->addWidget(m_disconnectButton); + + m_tabs = new QTabWidget(this); + layout->addWidget(m_tabs); + + CanvasFrameRate *cfr = new CanvasFrameRate(&client, this); + m_tabs->addTab(cfr, tr("Frame Rate")); + + m_enginePane = new EnginePane(&client, this); + m_tabs->addTab(m_enginePane, tr("QML Engine")); + + QObject::connect(&client, SIGNAL(stateChanged(QAbstractSocket::SocketState)), + this, SLOT(connectionStateChanged())); + connectionStateChanged(); + + QObject::connect(&client, SIGNAL(error(QAbstractSocket::SocketError)), + this, SLOT(connectionError(QAbstractSocket::SocketError))); +} + +void QmlDebugger::setHost(const QString &host) +{ + m_host->setText(host); +} + +void QmlDebugger::setPort(quint16 port) +{ + m_port->setValue(port); +} + +void QmlDebugger::showEngineTab() +{ + m_tabs->setCurrentWidget(m_enginePane); +} + +void QmlDebugger::connectionStateChanged() +{ + switch (client.state()) { + default: + case QAbstractSocket::UnconnectedState: + m_connectionState->setText(tr("Disconnected")); + m_connectButton->setEnabled(true); + m_disconnectButton->setEnabled(false); + break; + case QAbstractSocket::HostLookupState: + m_connectionState->setText(tr("Resolving")); + m_connectButton->setEnabled(false); + m_disconnectButton->setEnabled(true); + break; + case QAbstractSocket::ConnectingState: + m_connectionState->setText(tr("Connecting")); + m_connectButton->setEnabled(false); + m_disconnectButton->setEnabled(true); + break; + case QAbstractSocket::ConnectedState: + m_connectionState->setText(tr("Connected")); + m_connectButton->setEnabled(false); + m_disconnectButton->setEnabled(true); + + QTimer::singleShot(0, m_enginePane, SLOT(refreshEngines())); + break; + case QAbstractSocket::ClosingState: + m_connectionState->setText(tr("Closing")); + m_connectButton->setEnabled(false); + m_disconnectButton->setEnabled(false); + break; + } +} + +void QmlDebugger::connectionError(QAbstractSocket::SocketError socketError) +{ + qWarning() << "qmldebugger cannot connect:" << socketError + << client.errorString(); +} + +void QmlDebugger::connectToHost() +{ + client.connectToHost(m_host->text(), m_port->value()); +} + +void QmlDebugger::disconnectFromHost() +{ + client.disconnectFromHost(); +} diff --git a/tools/qmldebugger/qmldebugger.h b/tools/qmldebugger/qmldebugger.h new file mode 100644 index 0000000..9203e33 --- /dev/null +++ b/tools/qmldebugger/qmldebugger.h @@ -0,0 +1,47 @@ +#ifndef QMLDEBUGGER_H +#define QMLDEBUGGER_H + +#include <QtDeclarative/qmldebugclient.h> +#include <QtNetwork/qtcpsocket.h> +#include <QtGui/qwidget.h> + +class QLabel; +class QLineEdit; +class QSpinBox; +class QPushButton; +class QTabWidget; + +class EnginePane; + +class QmlDebugger : public QWidget +{ + Q_OBJECT +public: + QmlDebugger(QWidget * = 0); + + void setHost(const QString &host); + void setPort(quint16 port); + void showEngineTab(); + +public slots: + void connectToHost(); + void disconnectFromHost(); + +private slots: + void connectionStateChanged(); + void connectionError(QAbstractSocket::SocketError socketError); + +private: + QmlDebugConnection client; + + QLabel *m_connectionState; + QLineEdit *m_host; + QSpinBox *m_port; + QPushButton *m_connectButton; + QPushButton *m_disconnectButton; + + EnginePane *m_enginePane; + QTabWidget *m_tabs; +}; + +#endif diff --git a/tools/qmldebugger/qmldebugger.pri b/tools/qmldebugger/qmldebugger.pri new file mode 100644 index 0000000..ce36381 --- /dev/null +++ b/tools/qmldebugger/qmldebugger.pri @@ -0,0 +1,22 @@ +QT += network declarative +contains(QT_CONFIG, opengles2)|contains(QT_CONFIG, opengles1): QT += opengl + +# Input +HEADERS += $$PWD/qmldebugger.h \ + $$PWD/canvasframerate.h \ + $$PWD/watchtable.h \ + $$PWD/engine.h \ + $$PWD/objecttree.h \ + $$PWD/objectpropertiesview.h + +SOURCES += $$PWD/qmldebugger.cpp \ + $$PWD/main.cpp \ + $$PWD/canvasframerate.cpp \ + $$PWD/watchtable.cpp \ + $$PWD/engine.cpp \ + $$PWD/objecttree.cpp \ + $$PWD/objectpropertiesview.cpp + +RESOURCES += $$PWD/qmldebugger.qrc + +OTHER_FILES += $$PWD/engines.qml diff --git a/tools/qmldebugger/qmldebugger.pro b/tools/qmldebugger/qmldebugger.pro index b177875..4cdfd18 100644 --- a/tools/qmldebugger/qmldebugger.pro +++ b/tools/qmldebugger/qmldebugger.pro @@ -1,20 +1,6 @@ DESTDIR = ../../bin -QT += network declarative -contains(QT_CONFIG, opengles2)|contains(QT_CONFIG, opengles1): QT += opengl -# Input -HEADERS += canvasframerate.h \ - watchtablemodel.h \ - propertyview.h \ - engine.h -SOURCES += main.cpp \ - canvasframerate.cpp \ - watchtablemodel.cpp \ - propertyview.cpp \ - engine.cpp -RESOURCES += qmldebugger.qrc - -OTHER_FILES += engines.qml +include(qmldebugger.pri) target.path=$$[QT_INSTALL_BINS] INSTALLS += target diff --git a/tools/qmldebugger/watchtablemodel.cpp b/tools/qmldebugger/watchtable.cpp index 9d3ca1e..e4163dc 100644 --- a/tools/qmldebugger/watchtablemodel.cpp +++ b/tools/qmldebugger/watchtable.cpp @@ -1,25 +1,38 @@ -#include "watchtablemodel.h" +#include "watchtable.h" #include <QtCore/qdebug.h> +#include <QtGui/qevent.h> +#include <QtGui/qaction.h> +#include <QtGui/qmenu.h> + #include <QtDeclarative/qmldebug.h> #include <QtDeclarative/qmlmetatype.h> QT_BEGIN_NAMESPACE -WatchTableModel::WatchTableModel(QObject *parent) - : QAbstractTableModel(parent) +WatchTableModel::WatchTableModel(QmlEngineDebug *client, QObject *parent) + : QAbstractTableModel(parent), + m_client(client) { } +WatchTableModel::~WatchTableModel() +{ + for (int i=0; i<m_columns.count(); i++) + delete m_columns[i].watch; +} + void WatchTableModel::addWatch(QmlDebugWatch *watch, const QString &title) { QString property; if (qobject_cast<QmlDebugPropertyWatch *>(watch)) property = qobject_cast<QmlDebugPropertyWatch *>(watch)->name(); - // Watch will be automatically removed when its state is Inactive - QObject::connect(watch, SIGNAL(stateChanged(State)), SLOT(watchStateChanged())); + connect(watch, SIGNAL(valueChanged(QByteArray,QVariant)), + SLOT(watchedValueChanged(QByteArray,QVariant))); + + connect(watch, SIGNAL(stateChanged(State)), SLOT(watchStateChanged())); int col = columnCount(QModelIndex()); beginInsertColumns(QModelIndex(), col, col); @@ -87,14 +100,6 @@ QmlDebugWatch *WatchTableModel::findWatch(int objectDebugId, const QString &prop return 0; } -QList<QmlDebugWatch *> WatchTableModel::watches() const -{ - QList<QmlDebugWatch *> watches; - for (int i=0; i<m_columns.count(); i++) - watches << m_columns[i].watch; - return watches; -} - int WatchTableModel::rowCount(const QModelIndex &) const { return m_values.count(); @@ -156,8 +161,11 @@ QVariant WatchTableModel::data(const QModelIndex &idx, int role) const void WatchTableModel::watchStateChanged() { QmlDebugWatch *watch = qobject_cast<QmlDebugWatch*>(sender()); - if (watch && watch->state() == QmlDebugWatch::Inactive) + + if (watch && watch->state() == QmlDebugWatch::Inactive) { removeWatch(watch); + watch->deleteLater(); + } } int WatchTableModel::columnForWatch(QmlDebugWatch *watch) const @@ -183,4 +191,109 @@ void WatchTableModel::addValue(int column, const QVariant &value) endInsertRows(); } +void WatchTableModel::togglePropertyWatch(const QmlDebugObjectReference &object, const QmlDebugPropertyReference &property) +{ + QmlDebugWatch *watch = findWatch(object.debugId(), property.name()); + if (watch) { + // watch will be deleted in watchStateChanged() + m_client->removeWatch(watch); + return; + } + + watch = m_client->addWatch(property, this); + if (watch->state() == QmlDebugWatch::Dead) { + delete watch; + watch = 0; + } else { + QString desc = property.name() + + QLatin1String(" on\n") + + object.className() + + QLatin1String(": ") + + (object.name().isEmpty() ? QLatin1String("<unnamed>") : object.name()); + addWatch(watch, desc); + emit watchCreated(watch); + } +} + +void WatchTableModel::watchedValueChanged(const QByteArray &propertyName, const QVariant &value) +{ + Q_UNUSED(propertyName); + QmlDebugWatch *watch = qobject_cast<QmlDebugWatch*>(sender()); + if (watch) + updateWatch(watch, value); +} + +void WatchTableModel::expressionWatchRequested(const QmlDebugObjectReference &obj, const QString &expr) +{ + QmlDebugWatch *watch = m_client->addWatch(obj, expr, this); + + if (watch->state() == QmlDebugWatch::Dead) { + delete watch; + watch = 0; + } else { + addWatch(watch, expr); + emit watchCreated(watch); + } +} + +void WatchTableModel::stopWatching(int column) +{ + QmlDebugWatch *watch = findWatch(column); + if (watch) { + m_client->removeWatch(watch); + delete watch; + watch = 0; + } +} + + +//---------------------------------------------- + +WatchTableHeaderView::WatchTableHeaderView(WatchTableModel *model, QWidget *parent) + : QHeaderView(Qt::Horizontal, parent), + m_model(model) +{ + setClickable(true); +} + +void WatchTableHeaderView::mousePressEvent(QMouseEvent *me) +{ + QHeaderView::mousePressEvent(me); + + if (me->button() == Qt::RightButton && me->type() == QEvent::MouseButtonPress) { + int col = logicalIndexAt(me->pos()); + if (col >= 0) { + QAction action(tr("Stop watching"), 0); + QList<QAction *> actions; + actions << &action; + if (QMenu::exec(actions, me->globalPos())) + m_model->stopWatching(col); + } + } +} + + +//---------------------------------------------- + +WatchTableView::WatchTableView(WatchTableModel *model, QWidget *parent) + : QTableView(parent), + m_model(model) +{ + connect(model, SIGNAL(watchCreated(QmlDebugWatch*)), SLOT(watchCreated(QmlDebugWatch*))); + connect(this, SIGNAL(activated(QModelIndex)), SLOT(indexActivated(QModelIndex))); +} + +void WatchTableView::indexActivated(const QModelIndex &index) +{ + QmlDebugWatch *watch = m_model->findWatch(index.column()); + if (watch) + emit objectActivated(watch->objectDebugId()); +} + +void WatchTableView::watchCreated(QmlDebugWatch *watch) +{ + int column = m_model->columnForWatch(watch); + resizeColumnToContents(column); +} + QT_END_NAMESPACE diff --git a/tools/qmldebugger/watchtablemodel.h b/tools/qmldebugger/watchtable.h index 306b9d8..abada2b 100644 --- a/tools/qmldebugger/watchtablemodel.h +++ b/tools/qmldebugger/watchtable.h @@ -1,41 +1,57 @@ #ifndef WATCHTABLEMODEL_H #define WATCHTABLEMODEL_H -#include <QWidget> #include <QtCore/qpointer.h> #include <QtCore/qlist.h> + +#include <QWidget> +#include <QHeaderView> #include <QAbstractTableModel> +#include <QTableView> QT_BEGIN_NAMESPACE class QmlDebugWatch; +class QmlEngineDebug; +class QmlDebugPropertyReference; +class QmlDebugObjectReference; class WatchTableModel : public QAbstractTableModel { Q_OBJECT public: - WatchTableModel(QObject *parent = 0); - - void addWatch(QmlDebugWatch *watch, const QString &title); - void updateWatch(QmlDebugWatch *watch, const QVariant &value); + WatchTableModel(QmlEngineDebug *client, QObject *parent = 0); + ~WatchTableModel(); QmlDebugWatch *findWatch(int column) const; - QmlDebugWatch *findWatch(int objectDebugId, const QString &property) const; + int columnForWatch(QmlDebugWatch *watch) const; - QList<QmlDebugWatch *> watches() const; + void stopWatching(int column); int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent = QModelIndex()) const; QVariant headerData(int section, Qt::Orientation orientation, int role) const; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; +signals: + void watchCreated(QmlDebugWatch *watch); + +public slots: + void togglePropertyWatch(const QmlDebugObjectReference &obj, const QmlDebugPropertyReference &prop); + void expressionWatchRequested(const QmlDebugObjectReference &, const QString &); + private slots: void watchStateChanged(); + void watchedValueChanged(const QByteArray &propertyName, const QVariant &value); private: - int columnForWatch(QmlDebugWatch *watch) const; - void addValue(int column, const QVariant &value); + void addWatch(QmlDebugWatch *watch, const QString &title); void removeWatch(QmlDebugWatch *watch); + void updateWatch(QmlDebugWatch *watch, const QVariant &value); + + QmlDebugWatch *findWatch(int objectDebugId, const QString &property) const; + + void addValue(int column, const QVariant &value); struct WatchedEntity { @@ -51,11 +67,44 @@ private: bool first; }; + QmlEngineDebug *m_client; QList<WatchedEntity> m_columns; QList<Value> m_values; }; +class WatchTableHeaderView : public QHeaderView +{ + Q_OBJECT +public: + WatchTableHeaderView(WatchTableModel *model, QWidget *parent = 0); + +protected: + void mousePressEvent(QMouseEvent *me); + +private: + WatchTableModel *m_model; +}; + + +class WatchTableView : public QTableView +{ + Q_OBJECT +public: + WatchTableView(WatchTableModel *model, QWidget *parent = 0); + +signals: + void objectActivated(int objectDebugId); + +private slots: + void indexActivated(const QModelIndex &index); + void watchCreated(QmlDebugWatch *watch); + +private: + WatchTableModel *m_model; +}; + + QT_END_NAMESPACE #endif // WATCHTABLEMODEL_H |