summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorQt Continuous Integration System <qt-info@nokia.com>2010-02-11 15:45:07 (GMT)
committerQt Continuous Integration System <qt-info@nokia.com>2010-02-11 15:45:07 (GMT)
commitb02508a00d82dd2a4bd097af22861dcdef14adea (patch)
tree96e26fcf6ce4bb3930ca0425107a43a5f829fa68 /tests/auto
parent163b383404f25f5e951959a8d5056124567ef183 (diff)
parent1c2d8e41377644df27ac0ef5cdeeecb79598661c (diff)
downloadQt-b02508a00d82dd2a4bd097af22861dcdef14adea.zip
Qt-b02508a00d82dd2a4bd097af22861dcdef14adea.tar.gz
Qt-b02508a00d82dd2a4bd097af22861dcdef14adea.tar.bz2
Merge branch 'master' of scm.dev.nokia.troll.no:qt/qt-qml into master-integration
* 'master' of scm.dev.nokia.troll.no:qt/qt-qml: (3398 commits) Fixed compile of these recently renamed tests. Update QmlChanges.txt Adds qml prefix to all declarative autotests Removed "running: true" for animations used as propertyvaluesource Animations are running by default when used as property source value Fix QmlEngine offlineStoragePath test. Fix Image test on Windows. Fix FontLoader test on Windows. Test should use ceil() not floor() since ceil() is used for calculating Fix BorderImage tests on Windows. Test should use ceil() not floor() since ceil() is used for calculating Clean up Must pass app arguments onto qExec() or else test system cannot QML Object toString should use 64-bit address on 64-bit platforms Improve stability of tst_qmlecmascript::dynamicDestruction Fix tst_qmlecmascript::callQtInvokables Fixed qmldebug* tests crashing. Fix declarative/qmldom::loadDynamicProperty autotest Fix declarative/animatedimage autotest Removed the tests/auto/declarative/visual(&examples) from .pro ...
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/declarative/.gitignore4
-rw-r--r--tests/auto/declarative/declarative.pro65
-rw-r--r--tests/auto/declarative/examples/data/dummytest.qml6
-rw-r--r--tests/auto/declarative/examples/data/webbrowser/webbrowser.qml6
-rw-r--r--tests/auto/declarative/examples/examples.pro5
-rw-r--r--tests/auto/declarative/examples/tst_examples.cpp201
-rw-r--r--tests/auto/declarative/graphicswidgets/data/graphicswidgets.qml57
-rw-r--r--tests/auto/declarative/graphicswidgets/graphicswidgets.pro8
-rw-r--r--tests/auto/declarative/graphicswidgets/tst_graphicswidgets.cpp77
-rw-r--r--tests/auto/declarative/layouts/data/layouts.qml33
-rw-r--r--tests/auto/declarative/layouts/layouts.pro7
-rw-r--r--tests/auto/declarative/layouts/tst_layouts.cpp148
-rw-r--r--tests/auto/declarative/parserstress/parserstress.pro7
-rw-r--r--tests/auto/declarative/parserstress/tst_parserstress.cpp151
-rw-r--r--tests/auto/declarative/qmetaobjectbuilder/qmetaobjectbuilder.pro7
-rw-r--r--tests/auto/declarative/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp1258
-rw-r--r--tests/auto/declarative/qmlanimations/data/attached.qml34
-rw-r--r--tests/auto/declarative/qmlanimations/data/badproperty1.qml21
-rw-r--r--tests/auto/declarative/qmlanimations/data/badproperty2.qml21
-rw-r--r--tests/auto/declarative/qmlanimations/data/badtype1.qml12
-rw-r--r--tests/auto/declarative/qmlanimations/data/badtype2.qml12
-rw-r--r--tests/auto/declarative/qmlanimations/data/badtype3.qml12
-rw-r--r--tests/auto/declarative/qmlanimations/data/badtype4.qml27
-rw-r--r--tests/auto/declarative/qmlanimations/data/dotproperty.qml24
-rw-r--r--tests/auto/declarative/qmlanimations/data/mixedtype1.qml25
-rw-r--r--tests/auto/declarative/qmlanimations/data/mixedtype2.qml25
-rw-r--r--tests/auto/declarative/qmlanimations/data/properties.qml14
-rw-r--r--tests/auto/declarative/qmlanimations/data/properties2.qml14
-rw-r--r--tests/auto/declarative/qmlanimations/data/properties3.qml14
-rw-r--r--tests/auto/declarative/qmlanimations/data/properties4.qml14
-rw-r--r--tests/auto/declarative/qmlanimations/data/properties5.qml14
-rw-r--r--tests/auto/declarative/qmlanimations/data/propertiesTransition.qml29
-rw-r--r--tests/auto/declarative/qmlanimations/data/propertiesTransition2.qml29
-rw-r--r--tests/auto/declarative/qmlanimations/data/propertiesTransition3.qml29
-rw-r--r--tests/auto/declarative/qmlanimations/data/propertiesTransition4.qml29
-rw-r--r--tests/auto/declarative/qmlanimations/data/propertiesTransition5.qml29
-rw-r--r--tests/auto/declarative/qmlanimations/data/propertiesTransition6.qml29
-rw-r--r--tests/auto/declarative/qmlanimations/data/valuesource.qml14
-rw-r--r--tests/auto/declarative/qmlanimations/data/valuesource2.qml14
-rw-r--r--tests/auto/declarative/qmlanimations/qmlanimations.pro6
-rw-r--r--tests/auto/declarative/qmlanimations/tst_qmlanimations.cpp611
-rw-r--r--tests/auto/declarative/qmlbehaviors/data/binding.qml26
-rw-r--r--tests/auto/declarative/qmlbehaviors/data/color.qml24
-rw-r--r--tests/auto/declarative/qmlbehaviors/data/cpptrigger.qml11
-rw-r--r--tests/auto/declarative/qmlbehaviors/data/disabled.qml27
-rw-r--r--tests/auto/declarative/qmlbehaviors/data/empty.qml23
-rw-r--r--tests/auto/declarative/qmlbehaviors/data/groupProperty.qml23
-rw-r--r--tests/auto/declarative/qmlbehaviors/data/groupProperty2.qml23
-rw-r--r--tests/auto/declarative/qmlbehaviors/data/loop.qml19
-rw-r--r--tests/auto/declarative/qmlbehaviors/data/nonSelecting.qml26
-rw-r--r--tests/auto/declarative/qmlbehaviors/data/nonSelecting2.qml26
-rw-r--r--tests/auto/declarative/qmlbehaviors/data/parent.qml28
-rw-r--r--tests/auto/declarative/qmlbehaviors/data/reassignedAnimation.qml27
-rw-r--r--tests/auto/declarative/qmlbehaviors/data/scripttrigger.qml16
-rw-r--r--tests/auto/declarative/qmlbehaviors/data/simple.qml26
-rw-r--r--tests/auto/declarative/qmlbehaviors/qmlbehaviors.pro6
-rw-r--r--tests/auto/declarative/qmlbehaviors/tst_qmlbehaviors.cpp281
-rw-r--r--tests/auto/declarative/qmlbinding/data/test-binding.qml16
-rw-r--r--tests/auto/declarative/qmlbinding/data/test-binding2.qml16
-rw-r--r--tests/auto/declarative/qmlbinding/qmlbinding.pro8
-rw-r--r--tests/auto/declarative/qmlbinding/tst_qmlbinding.cpp107
-rw-r--r--tests/auto/declarative/qmlconnection/data/test-connection.qml10
-rw-r--r--tests/auto/declarative/qmlconnection/data/test-connection2.qml3
-rw-r--r--tests/auto/declarative/qmlconnection/data/test-connection3.qml3
-rw-r--r--tests/auto/declarative/qmlconnection/data/trimming.qml10
-rw-r--r--tests/auto/declarative/qmlconnection/qmlconnection.pro8
-rw-r--r--tests/auto/declarative/qmlconnection/tst_qmlconnection.cpp139
-rw-r--r--tests/auto/declarative/qmlcontext/qmlcontext.pro6
-rw-r--r--tests/auto/declarative/qmlcontext/tst_qmlcontext.cpp434
-rw-r--r--tests/auto/declarative/qmldatetimeformatter/qmldatetimeformatter.pro5
-rw-r--r--tests/auto/declarative/qmldatetimeformatter/tst_qmldatetimeformatter.cpp150
-rw-r--r--tests/auto/declarative/qmldebug/qmldebug.pro7
-rw-r--r--tests/auto/declarative/qmldebug/tst_qmldebug.cpp833
-rw-r--r--tests/auto/declarative/qmldebugclient/qmldebugclient.pro7
-rw-r--r--tests/auto/declarative/qmldebugclient/tst_qmldebugclient.cpp157
-rw-r--r--tests/auto/declarative/qmldebugservice/qmldebugservice.pro7
-rw-r--r--tests/auto/declarative/qmldebugservice/tst_qmldebugservice.cpp189
-rw-r--r--tests/auto/declarative/qmldom/data/MyComponent.qml4
-rw-r--r--tests/auto/declarative/qmldom/data/MyItem.qml4
-rw-r--r--tests/auto/declarative/qmldom/data/importdir/Bar.qml2
-rw-r--r--tests/auto/declarative/qmldom/data/importlib/sublib/qmldir/Foo.qml2
-rw-r--r--tests/auto/declarative/qmldom/data/top.qml6
-rw-r--r--tests/auto/declarative/qmldom/qmldom.pro7
-rw-r--r--tests/auto/declarative/qmldom/tst_qmldom.cpp1313
-rw-r--r--tests/auto/declarative/qmleasefollow/data/easefollow1.qml3
-rw-r--r--tests/auto/declarative/qmleasefollow/data/easefollow2.qml5
-rw-r--r--tests/auto/declarative/qmleasefollow/data/easefollow3.qml6
-rw-r--r--tests/auto/declarative/qmleasefollow/qmleasefollow.pro8
-rw-r--r--tests/auto/declarative/qmleasefollow/tst_qmleasefollow.cpp122
-rw-r--r--tests/auto/declarative/qmlecmascript/data/ConstantsOverrideBindings.qml6
-rw-r--r--tests/auto/declarative/qmlecmascript/data/CustomObject.qml5
-rw-r--r--tests/auto/declarative/qmlecmascript/data/MethodsObject.qml6
-rw-r--r--tests/auto/declarative/qmlecmascript/data/NestedTypeTransientErrors.qml11
-rw-r--r--tests/auto/declarative/qmlecmascript/data/ScopeObject.qml14
-rw-r--r--tests/auto/declarative/qmlecmascript/data/TypeForDynamicCreation.qml2
-rw-r--r--tests/auto/declarative/qmlecmascript/data/aliasPropertyAndBinding.qml14
-rw-r--r--tests/auto/declarative/qmlecmascript/data/assignBasicTypes.2.qml26
-rw-r--r--tests/auto/declarative/qmlecmascript/data/assignBasicTypes.qml29
-rw-r--r--tests/auto/declarative/qmlecmascript/data/attachedProperty.qml11
-rw-r--r--tests/auto/declarative/qmlecmascript/data/bindingLoop.qml14
-rw-r--r--tests/auto/declarative/qmlecmascript/data/boolPropertiesEvaluateAsBool.1.qml5
-rw-r--r--tests/auto/declarative/qmlecmascript/data/boolPropertiesEvaluateAsBool.2.qml5
-rw-r--r--tests/auto/declarative/qmlecmascript/data/bug.1.qml10
-rw-r--r--tests/auto/declarative/qmlecmascript/data/compositePropertyType.qml8
-rw-r--r--tests/auto/declarative/qmlecmascript/data/constantsOverrideBindings.1.qml8
-rw-r--r--tests/auto/declarative/qmlecmascript/data/constantsOverrideBindings.2.qml11
-rw-r--r--tests/auto/declarative/qmlecmascript/data/constantsOverrideBindings.3.qml7
-rw-r--r--tests/auto/declarative/qmlecmascript/data/deferredProperties.qml10
-rw-r--r--tests/auto/declarative/qmlecmascript/data/deletedObject.qml25
-rw-r--r--tests/auto/declarative/qmlecmascript/data/dynamicCreation.helper.qml6
-rw-r--r--tests/auto/declarative/qmlecmascript/data/dynamicCreation.qml21
-rw-r--r--tests/auto/declarative/qmlecmascript/data/dynamicDeletion.qml20
-rw-r--r--tests/auto/declarative/qmlecmascript/data/enums.1.qml20
-rw-r--r--tests/auto/declarative/qmlecmascript/data/enums.2.qml8
-rw-r--r--tests/auto/declarative/qmlecmascript/data/exceptionClearsOnReeval.qml6
-rw-r--r--tests/auto/declarative/qmlecmascript/data/exceptionProducesWarning.qml8
-rw-r--r--tests/auto/declarative/qmlecmascript/data/exceptionProducesWarning2.qml7
-rw-r--r--tests/auto/declarative/qmlecmascript/data/extendedObjectPropertyLookup.qml8
-rw-r--r--tests/auto/declarative/qmlecmascript/data/extensionObjects.qml10
-rw-r--r--tests/auto/declarative/qmlecmascript/data/externalScript.1.qml11
-rw-r--r--tests/auto/declarative/qmlecmascript/data/externalScript.2.js8
-rw-r--r--tests/auto/declarative/qmlecmascript/data/externalScript.2.qml11
-rw-r--r--tests/auto/declarative/qmlecmascript/data/externalScript.3.qml13
-rw-r--r--tests/auto/declarative/qmlecmascript/data/externalScript.4.qml15
-rw-r--r--tests/auto/declarative/qmlecmascript/data/externalScript.js6
-rw-r--r--tests/auto/declarative/qmlecmascript/data/idShortcutInvalidates.1.qml13
-rw-r--r--tests/auto/declarative/qmlecmascript/data/idShortcutInvalidates.qml12
-rw-r--r--tests/auto/declarative/qmlecmascript/data/jsObject.qml12
-rw-r--r--tests/auto/declarative/qmlecmascript/data/listProperties.qml44
-rw-r--r--tests/auto/declarative/qmlecmascript/data/listToVariant.qml5
-rw-r--r--tests/auto/declarative/qmlecmascript/data/methods.1.qml6
-rw-r--r--tests/auto/declarative/qmlecmascript/data/methods.2.qml6
-rw-r--r--tests/auto/declarative/qmlecmascript/data/methods.3.qml7
-rw-r--r--tests/auto/declarative/qmlecmascript/data/methods.4.qml11
-rw-r--r--tests/auto/declarative/qmlecmascript/data/methods.5.qml9
-rw-r--r--tests/auto/declarative/qmlecmascript/data/multiEngineObject.qml5
-rw-r--r--tests/auto/declarative/qmlecmascript/data/nonExistantAttachedObject.qml5
-rw-r--r--tests/auto/declarative/qmlecmascript/data/objectsCompareAsEqual.qml15
-rw-r--r--tests/auto/declarative/qmlecmascript/data/outerBindingOverridesInnerBinding.qml14
-rw-r--r--tests/auto/declarative/qmlecmascript/data/qmlToString.qml11
-rw-r--r--tests/auto/declarative/qmlecmascript/data/scope.2.qml42
-rw-r--r--tests/auto/declarative/qmlecmascript/data/scope.qml48
-rw-r--r--tests/auto/declarative/qmlecmascript/data/scriptAccess.js7
-rw-r--r--tests/auto/declarative/qmlecmascript/data/scriptAccess.qml17
-rw-r--r--tests/auto/declarative/qmlecmascript/data/scriptErrors.js2
-rw-r--r--tests/auto/declarative/qmlecmascript/data/scriptErrors.qml17
-rw-r--r--tests/auto/declarative/qmlecmascript/data/selfDeletingBinding.2.qml17
-rw-r--r--tests/auto/declarative/qmlecmascript/data/selfDeletingBinding.qml18
-rw-r--r--tests/auto/declarative/qmlecmascript/data/shutdownErrors.qml13
-rw-r--r--tests/auto/declarative/qmlecmascript/data/signalAssignment.1.qml5
-rw-r--r--tests/auto/declarative/qmlecmascript/data/signalAssignment.2.qml5
-rw-r--r--tests/auto/declarative/qmlecmascript/data/signalParameterTypes.qml16
-rw-r--r--tests/auto/declarative/qmlecmascript/data/signalTriggeredBindings.qml20
-rw-r--r--tests/auto/declarative/qmlecmascript/data/transientErrors.qml10
-rw-r--r--tests/auto/declarative/qmlecmascript/data/undefinedResetsProperty.2.qml10
-rw-r--r--tests/auto/declarative/qmlecmascript/data/undefinedResetsProperty.qml7
-rw-r--r--tests/auto/declarative/qmlecmascript/data/valueTypeFunctions.qml6
-rw-r--r--tests/auto/declarative/qmlecmascript/qmlecmascript.pro10
-rw-r--r--tests/auto/declarative/qmlecmascript/testtypes.cpp82
-rw-r--r--tests/auto/declarative/qmlecmascript/testtypes.h595
-rw-r--r--tests/auto/declarative/qmlecmascript/tst_qmlecmascript.cpp1663
-rw-r--r--tests/auto/declarative/qmlengine/qmlengine.pro8
-rw-r--r--tests/auto/declarative/qmlengine/tst_qmlengine.cpp240
-rw-r--r--tests/auto/declarative/qmlerror/qmlerror.pro6
-rw-r--r--tests/auto/declarative/qmlerror/test.txt3
-rw-r--r--tests/auto/declarative/qmlerror/tst_qmlerror.cpp242
-rw-r--r--tests/auto/declarative/qmlfontloader/data/dummy.ttf0
-rw-r--r--tests/auto/declarative/qmlfontloader/data/tarzeau_ocr_a.ttfbin0 -> 24544 bytes
-rw-r--r--tests/auto/declarative/qmlfontloader/qmlfontloader.pro8
-rw-r--r--tests/auto/declarative/qmlfontloader/tst_qmlfontloader.cpp156
-rw-r--r--tests/auto/declarative/qmlgraphicsanchors/data/anchors.qml162
-rw-r--r--tests/auto/declarative/qmlgraphicsanchors/data/centerin.qml12
-rw-r--r--tests/auto/declarative/qmlgraphicsanchors/data/crash1.qml11
-rw-r--r--tests/auto/declarative/qmlgraphicsanchors/data/fill.qml14
-rw-r--r--tests/auto/declarative/qmlgraphicsanchors/data/loop1.qml8
-rw-r--r--tests/auto/declarative/qmlgraphicsanchors/data/loop2.qml20
-rw-r--r--tests/auto/declarative/qmlgraphicsanchors/data/margins.qml13
-rw-r--r--tests/auto/declarative/qmlgraphicsanchors/qmlgraphicsanchors.pro6
-rw-r--r--tests/auto/declarative/qmlgraphicsanchors/tst_qmlgraphicsanchors.cpp459
-rw-r--r--tests/auto/declarative/qmlgraphicsanimatedimage/data/colors.gifbin0 -> 505 bytes
-rw-r--r--tests/auto/declarative/qmlgraphicsanimatedimage/data/colors.qml5
-rw-r--r--tests/auto/declarative/qmlgraphicsanimatedimage/data/stickman.gifbin0 -> 164923 bytes
-rw-r--r--tests/auto/declarative/qmlgraphicsanimatedimage/data/stickman.qml5
-rw-r--r--tests/auto/declarative/qmlgraphicsanimatedimage/data/stickmanpause.qml7
-rw-r--r--tests/auto/declarative/qmlgraphicsanimatedimage/data/stickmanstopped.qml6
-rw-r--r--tests/auto/declarative/qmlgraphicsanimatedimage/qmlgraphicsanimatedimage.pro7
-rw-r--r--tests/auto/declarative/qmlgraphicsanimatedimage/tst_qmlgraphicsanimatedimage.cpp191
-rw-r--r--tests/auto/declarative/qmlgraphicsborderimage/data/colors-round.sci7
-rw-r--r--tests/auto/declarative/qmlgraphicsborderimage/data/colors.pngbin0 -> 1655 bytes
-rw-r--r--tests/auto/declarative/qmlgraphicsborderimage/data/invalid.sci7
-rw-r--r--tests/auto/declarative/qmlgraphicsborderimage/qmlgraphicsborderimage.pro9
-rw-r--r--tests/auto/declarative/qmlgraphicsborderimage/tst_qmlgraphicsborderimage.cpp351
-rw-r--r--tests/auto/declarative/qmlgraphicsflickable/data/flickable01.qml4
-rw-r--r--tests/auto/declarative/qmlgraphicsflickable/data/flickable02.qml14
-rw-r--r--tests/auto/declarative/qmlgraphicsflickable/data/flickable03.qml14
-rw-r--r--tests/auto/declarative/qmlgraphicsflickable/data/flickable04.qml16
-rw-r--r--tests/auto/declarative/qmlgraphicsflickable/qmlgraphicsflickable.pro8
-rw-r--r--tests/auto/declarative/qmlgraphicsflickable/tst_qmlgraphicsflickable.cpp145
-rw-r--r--tests/auto/declarative/qmlgraphicsflipable/data/test-flipable.qml9
-rw-r--r--tests/auto/declarative/qmlgraphicsflipable/qmlgraphicsflipable.pro8
-rw-r--r--tests/auto/declarative/qmlgraphicsflipable/tst_qmlgraphicsflipable.cpp113
-rw-r--r--tests/auto/declarative/qmlgraphicsgridview/data/gridview-initCurrent.qml51
-rw-r--r--tests/auto/declarative/qmlgraphicsgridview/data/gridview.qml50
-rw-r--r--tests/auto/declarative/qmlgraphicsgridview/data/gridview2.qml26
-rw-r--r--tests/auto/declarative/qmlgraphicsgridview/data/gridview3.qml6
-rw-r--r--tests/auto/declarative/qmlgraphicsgridview/qmlgraphicsgridview.pro8
-rw-r--r--tests/auto/declarative/qmlgraphicsgridview/tst_qmlgraphicsgridview.cpp989
-rw-r--r--tests/auto/declarative/qmlgraphicsimage/data/colors.pngbin0 -> 1655 bytes
-rw-r--r--tests/auto/declarative/qmlgraphicsimage/qmlgraphicsimage.pro9
-rw-r--r--tests/auto/declarative/qmlgraphicsimage/tst_qmlgraphicsimage.cpp247
-rw-r--r--tests/auto/declarative/qmlgraphicsitem/data/keynavigation.qml39
-rw-r--r--tests/auto/declarative/qmlgraphicsitem/data/keys.qml18
-rw-r--r--tests/auto/declarative/qmlgraphicsitem/qmlgraphicsitem.pro7
-rw-r--r--tests/auto/declarative/qmlgraphicsitem/tst_qmlgraphicsitem.cpp271
-rw-r--r--tests/auto/declarative/qmlgraphicslistview/data/itemlist.qml43
-rw-r--r--tests/auto/declarative/qmlgraphicslistview/data/listview-enforcerange.qml55
-rw-r--r--tests/auto/declarative/qmlgraphicslistview/data/listview-initCurrent.qml50
-rw-r--r--tests/auto/declarative/qmlgraphicslistview/data/listview-sections.qml59
-rw-r--r--tests/auto/declarative/qmlgraphicslistview/data/listview.qml119
-rw-r--r--tests/auto/declarative/qmlgraphicslistview/qmlgraphicslistview.pro8
-rw-r--r--tests/auto/declarative/qmlgraphicslistview/tst_qmlgraphicslistview.cpp1378
-rw-r--r--tests/auto/declarative/qmlgraphicsloader/data/NoResize.qml7
-rw-r--r--tests/auto/declarative/qmlgraphicsloader/data/Rect120x60.qml6
-rw-r--r--tests/auto/declarative/qmlgraphicsloader/data/SetSourceComponent.qml6
-rw-r--r--tests/auto/declarative/qmlgraphicsloader/data/SizeToItem.qml6
-rw-r--r--tests/auto/declarative/qmlgraphicsloader/data/SizeToLoader.qml7
-rw-r--r--tests/auto/declarative/qmlgraphicsloader/qmlgraphicsloader.pro11
-rw-r--r--tests/auto/declarative/qmlgraphicsloader/tst_qmlgraphicsloader.cpp376
-rw-r--r--tests/auto/declarative/qmlgraphicsparticles/data/particle.pngbin0 -> 262 bytes
-rw-r--r--tests/auto/declarative/qmlgraphicsparticles/data/particles.qml15
-rw-r--r--tests/auto/declarative/qmlgraphicsparticles/qmlgraphicsparticles.pro8
-rw-r--r--tests/auto/declarative/qmlgraphicsparticles/tst_qmlgraphicsparticles.cpp125
-rw-r--r--tests/auto/declarative/qmlgraphicspathview/data/datamodel.qml36
-rw-r--r--tests/auto/declarative/qmlgraphicspathview/data/path.qml14
-rw-r--r--tests/auto/declarative/qmlgraphicspathview/data/pathview.qml66
-rw-r--r--tests/auto/declarative/qmlgraphicspathview/data/pathview1.qml4
-rw-r--r--tests/auto/declarative/qmlgraphicspathview/data/pathview2.qml57
-rw-r--r--tests/auto/declarative/qmlgraphicspathview/data/pathview3.qml57
-rw-r--r--tests/auto/declarative/qmlgraphicspathview/qmlgraphicspathview.pro8
-rw-r--r--tests/auto/declarative/qmlgraphicspathview/tst_qmlgraphicspathview.cpp494
-rw-r--r--tests/auto/declarative/qmlgraphicspositioners/data/grid-animated.qml60
-rw-r--r--tests/auto/declarative/qmlgraphicspositioners/data/grid-spacing.qml40
-rw-r--r--tests/auto/declarative/qmlgraphicspositioners/data/grid.qml39
-rw-r--r--tests/auto/declarative/qmlgraphicspositioners/data/horizontal-animated.qml40
-rw-r--r--tests/auto/declarative/qmlgraphicspositioners/data/horizontal-spacing.qml27
-rw-r--r--tests/auto/declarative/qmlgraphicspositioners/data/horizontal.qml26
-rw-r--r--tests/auto/declarative/qmlgraphicspositioners/data/repeater.qml20
-rw-r--r--tests/auto/declarative/qmlgraphicspositioners/data/vertical-animated.qml40
-rw-r--r--tests/auto/declarative/qmlgraphicspositioners/data/vertical-spacing.qml27
-rw-r--r--tests/auto/declarative/qmlgraphicspositioners/data/vertical.qml26
-rw-r--r--tests/auto/declarative/qmlgraphicspositioners/qmlgraphicspositioners.pro7
-rw-r--r--tests/auto/declarative/qmlgraphicspositioners/tst_qmlgraphicspositioners.cpp428
-rw-r--r--tests/auto/declarative/qmlgraphicsrepeater/data/intmodel.qml29
-rw-r--r--tests/auto/declarative/qmlgraphicsrepeater/data/itemlist.qml49
-rw-r--r--tests/auto/declarative/qmlgraphicsrepeater/data/objlist.qml21
-rw-r--r--tests/auto/declarative/qmlgraphicsrepeater/data/repeater.qml28
-rw-r--r--tests/auto/declarative/qmlgraphicsrepeater/data/repeater2.qml35
-rw-r--r--tests/auto/declarative/qmlgraphicsrepeater/qmlgraphicsrepeater.pro8
-rw-r--r--tests/auto/declarative/qmlgraphicsrepeater/tst_qmlgraphicsrepeater.cpp354
-rw-r--r--tests/auto/declarative/qmlgraphicstext/qmlgraphicstext.pro5
-rw-r--r--tests/auto/declarative/qmlgraphicstext/tst_qmlgraphicstext.cpp844
-rw-r--r--tests/auto/declarative/qmlgraphicstextedit/data/cursorTest.qml8
-rw-r--r--tests/auto/declarative/qmlgraphicstextedit/data/http/ErrItem.qml7
-rw-r--r--tests/auto/declarative/qmlgraphicstextedit/data/http/NormItem.qml6
-rw-r--r--tests/auto/declarative/qmlgraphicstextedit/data/http/cursorHttpTest.qml22
-rw-r--r--tests/auto/declarative/qmlgraphicstextedit/data/http/cursorHttpTestFail1.qml18
-rw-r--r--tests/auto/declarative/qmlgraphicstextedit/data/http/cursorHttpTestFail2.qml18
-rw-r--r--tests/auto/declarative/qmlgraphicstextedit/data/http/cursorHttpTestPass.qml18
-rw-r--r--tests/auto/declarative/qmlgraphicstextedit/data/httpfail/FailItem.qml5
-rw-r--r--tests/auto/declarative/qmlgraphicstextedit/data/httpslow/WaitItem.qml5
-rw-r--r--tests/auto/declarative/qmlgraphicstextedit/data/navigation.qml23
-rw-r--r--tests/auto/declarative/qmlgraphicstextedit/data/readOnly.qml12
-rw-r--r--tests/auto/declarative/qmlgraphicstextedit/qmlgraphicstextedit.pro9
-rw-r--r--tests/auto/declarative/qmlgraphicstextedit/tst_qmlgraphicstextedit.cpp791
-rw-r--r--tests/auto/declarative/qmlgraphicstextinput/data/cursorTest.qml8
-rw-r--r--tests/auto/declarative/qmlgraphicstextinput/data/masks.qml7
-rw-r--r--tests/auto/declarative/qmlgraphicstextinput/data/maxLength.qml7
-rw-r--r--tests/auto/declarative/qmlgraphicstextinput/data/navigation.qml23
-rw-r--r--tests/auto/declarative/qmlgraphicstextinput/data/readOnly.qml12
-rw-r--r--tests/auto/declarative/qmlgraphicstextinput/data/validators.qml23
-rw-r--r--tests/auto/declarative/qmlgraphicstextinput/qmlgraphicstextinput.pro8
-rw-r--r--tests/auto/declarative/qmlgraphicstextinput/tst_qmlgraphicstextinput.cpp639
-rw-r--r--tests/auto/declarative/qmlgraphicswebview/data/basic.html17
-rw-r--r--tests/auto/declarative/qmlgraphicswebview/data/basic.icobin0 -> 318 bytes
-rw-r--r--tests/auto/declarative/qmlgraphicswebview/data/basic.pngbin0 -> 3961 bytes
-rw-r--r--tests/auto/declarative/qmlgraphicswebview/data/basic.qml5
-rw-r--r--tests/auto/declarative/qmlgraphicswebview/data/elements.html14
-rw-r--r--tests/auto/declarative/qmlgraphicswebview/data/elements.qml7
-rw-r--r--tests/auto/declarative/qmlgraphicswebview/data/forward.html12
-rw-r--r--tests/auto/declarative/qmlgraphicswebview/data/javaScript.html11
-rw-r--r--tests/auto/declarative/qmlgraphicswebview/data/javaScript.qml11
-rw-r--r--tests/auto/declarative/qmlgraphicswebview/data/loadError.qml5
-rw-r--r--tests/auto/declarative/qmlgraphicswebview/data/newwindows.html16
-rw-r--r--tests/auto/declarative/qmlgraphicswebview/data/newwindows.qml32
-rw-r--r--tests/auto/declarative/qmlgraphicswebview/data/pixelCache.html10
-rw-r--r--tests/auto/declarative/qmlgraphicswebview/data/pixelCache.qml6
-rw-r--r--tests/auto/declarative/qmlgraphicswebview/data/sethtml.qml5
-rw-r--r--tests/auto/declarative/qmlgraphicswebview/qmlgraphicswebview.pro10
-rw-r--r--tests/auto/declarative/qmlgraphicswebview/testtypes.cpp49
-rw-r--r--tests/auto/declarative/qmlgraphicswebview/testtypes.h64
-rw-r--r--tests/auto/declarative/qmlgraphicswebview/tst_qmlgraphicswebview.cpp389
-rw-r--r--tests/auto/declarative/qmlinfo/data/NestedObject.qml8
-rw-r--r--tests/auto/declarative/qmlinfo/data/nestedQmlObject.qml8
-rw-r--r--tests/auto/declarative/qmlinfo/data/qmlObject.qml8
-rw-r--r--tests/auto/declarative/qmlinfo/qmlinfo.pro7
-rw-r--r--tests/auto/declarative/qmlinfo/tst_qmlinfo.cpp139
-rw-r--r--tests/auto/declarative/qmlinstruction/qmlinstruction.pro6
-rw-r--r--tests/auto/declarative/qmlinstruction/tst_qmlinstruction.cpp603
-rw-r--r--tests/auto/declarative/qmllanguage/data/Alias.qml8
-rw-r--r--tests/auto/declarative/qmllanguage/data/Alias2.qml9
-rw-r--r--tests/auto/declarative/qmllanguage/data/Alias3.qml12
-rw-r--r--tests/auto/declarative/qmllanguage/data/Alias4.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/ComponentComposite.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/CompositeType.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/CompositeType2.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/CompositeType3.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/CompositeType4.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/DynamicPropertiesNestedType.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/HelperAlias.qml9
-rw-r--r--tests/auto/declarative/qmllanguage/data/I18n.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/I18nType30.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/MyComponent.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/MyCompositeValueSource.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/MyContainerComponent.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/NestedAlias.qml14
-rw-r--r--tests/auto/declarative/qmllanguage/data/NestedErrorsType.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/OnCompletedType.qml8
-rw-r--r--tests/auto/declarative/qmllanguage/data/alias.1.qml8
-rw-r--r--tests/auto/declarative/qmllanguage/data/alias.2.qml8
-rw-r--r--tests/auto/declarative/qmllanguage/data/alias.3.qml10
-rw-r--r--tests/auto/declarative/qmllanguage/data/alias.4.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/alias.5.qml13
-rw-r--r--tests/auto/declarative/qmllanguage/data/alias.6.qml8
-rw-r--r--tests/auto/declarative/qmllanguage/data/alias.7.qml14
-rw-r--r--tests/auto/declarative/qmllanguage/data/alias.8.qml9
-rw-r--r--tests/auto/declarative/qmllanguage/data/alias.9.qml9
-rw-r--r--tests/auto/declarative/qmllanguage/data/assignBasicTypes.qml29
-rw-r--r--tests/auto/declarative/qmllanguage/data/assignCompositeToType.qml18
-rw-r--r--tests/auto/declarative/qmllanguage/data/assignLiteralSignalProperty.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/assignObjectToSignal.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/assignObjectToVariant.qml7
-rw-r--r--tests/auto/declarative/qmllanguage/data/assignQmlComponent.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/assignSignal.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/assignTypeExtremes.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/attachedProperties.qml8
-rw-r--r--tests/auto/declarative/qmllanguage/data/autoComponentCreation.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/component.1.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/component.1.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/component.2.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/component.2.qml9
-rw-r--r--tests/auto/declarative/qmllanguage/data/component.3.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/component.3.qml9
-rw-r--r--tests/auto/declarative/qmllanguage/data/component.4.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/component.4.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/component.5.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/component.5.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/component.6.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/component.6.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/componentCompositeType.qml8
-rw-r--r--tests/auto/declarative/qmllanguage/data/cppnamespace.2.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/cppnamespace.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/crash2.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/customParserIdNotAllowed.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/customParserIdNotAllowed.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/customParserTypes.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/customVariantTypes.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/declaredPropertyValues.qml8
-rw-r--r--tests/auto/declarative/qmllanguage/data/defaultGrouped.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/defaultGrouped.qml10
-rw-r--r--tests/auto/declarative/qmllanguage/data/defaultPropertyListOrder.qml29
-rw-r--r--tests/auto/declarative/qmllanguage/data/doubleSignal.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/doubleSignal.qml7
-rw-r--r--tests/auto/declarative/qmllanguage/data/duplicateIDs.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/duplicateIDs.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/dynamicObject.1.qml8
-rw-r--r--tests/auto/declarative/qmllanguage/data/dynamicObjectProperties.qml13
-rw-r--r--tests/auto/declarative/qmllanguage/data/dynamicProperties.qml14
-rw-r--r--tests/auto/declarative/qmllanguage/data/dynamicPropertiesNested.qml9
-rw-r--r--tests/auto/declarative/qmllanguage/data/dynamicSignalsAndSlots.qml10
-rw-r--r--tests/auto/declarative/qmllanguage/data/empty.errors.txt2
-rw-r--r--tests/auto/declarative/qmllanguage/data/empty.qml0
-rw-r--r--tests/auto/declarative/qmllanguage/data/emptySignal.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/emptySignal.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/failingComponent.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/failingComponentTest.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/fakeDotProperty.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/fakeDotProperty.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/finalOverride.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/finalOverride.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/i18nDeclaredPropertyNames.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/i18nDeclaredPropertyUse.qml3
-rw-r--r--tests/auto/declarative/qmllanguage/data/i18nNameSpace.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/i18nScript.qml12
-rw-r--r--tests/auto/declarative/qmllanguage/data/i18nStrings.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/i18nType.qml1
-rw-r--r--tests/auto/declarative/qmllanguage/data/idProperty.qml8
-rw-r--r--tests/auto/declarative/qmllanguage/data/importNamespaceConflict.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/importNamespaceConflict.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/importVersionMissingBuiltIn.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/importVersionMissingBuiltIn.qml7
-rw-r--r--tests/auto/declarative/qmllanguage/data/importVersionMissingInstalled.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/importVersionMissingInstalled.qml3
-rw-r--r--tests/auto/declarative/qmllanguage/data/inlineQmlComponents.qml10
-rw-r--r--tests/auto/declarative/qmllanguage/data/interfaceProperty.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/interfaceQList.qml7
-rw-r--r--tests/auto/declarative/qmllanguage/data/interfaceQmlList.qml7
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.1.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.1.qml7
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.10.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.10.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.11.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.11.qml7
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.2.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.2.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.3.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.3.qml8
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.4.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.4.qml7
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.5.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.5.qml7
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.6.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.6.qml7
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.7.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.7.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.8.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.8.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.9.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.9.qml7
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.1.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.1.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.2.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.2.qml7
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.3.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.3.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.4.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.4.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.5.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.5.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.6.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.6.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.7.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.7.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidID.2.errors.txt2
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidID.2.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidID.3.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidID.3.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidID.4.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidID.4.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidID.5.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidID.5.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidID.6.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidID.6.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidID.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidID.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidImportID.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidImportID.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidRoot.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/invalidRoot.qml2
-rw-r--r--tests/auto/declarative/qmllanguage/data/lib/com/nokia/installedtest/InstalledTest.qml2
-rw-r--r--tests/auto/declarative/qmllanguage/data/lib/com/nokia/installedtest/InstalledTest2.qml2
-rw-r--r--tests/auto/declarative/qmllanguage/data/lib/com/nokia/installedtest/PrivateType.qml2
-rw-r--r--tests/auto/declarative/qmllanguage/data/lib/com/nokia/installedtest/qmldir4
-rw-r--r--tests/auto/declarative/qmllanguage/data/listAssignment.1.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/listAssignment.1.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/listAssignment.2.errors.txt2
-rw-r--r--tests/auto/declarative/qmllanguage/data/listAssignment.2.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/listAssignment.3.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/listAssignment.3.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/listItemDeleteSelf.qml38
-rw-r--r--tests/auto/declarative/qmllanguage/data/listProperties.qml9
-rw-r--r--tests/auto/declarative/qmllanguage/data/missingObject.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/missingObject.qml1
-rw-r--r--tests/auto/declarative/qmllanguage/data/missingSignal.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/missingSignal.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/missingValueTypeProperty.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/missingValueTypeProperty.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/nestedErrors.errors.txt2
-rw-r--r--tests/auto/declarative/qmllanguage/data/nestedErrors.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/nonexistantProperty.1.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/nonexistantProperty.1.qml2
-rw-r--r--tests/auto/declarative/qmllanguage/data/nonexistantProperty.2.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/nonexistantProperty.2.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/nonexistantProperty.3.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/nonexistantProperty.3.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/nonexistantProperty.4.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/nonexistantProperty.4.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/nonexistantProperty.5.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/nonexistantProperty.5.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/nonexistantProperty.6.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/nonexistantProperty.6.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/nullDotProperty.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/nullDotProperty.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/objectValueTypeProperty.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/objectValueTypeProperty.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/onCompleted.qml17
-rw-r--r--tests/auto/declarative/qmllanguage/data/property.1.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/property.1.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/property.2.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/property.2.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/property.3.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/property.3.qml7
-rw-r--r--tests/auto/declarative/qmllanguage/data/property.4.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/property.4.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/property.5.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/property.5.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/propertyValueSource.2.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/propertyValueSource.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/qmlAttachedPropertiesObjectMethod.1.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/qmlAttachedPropertiesObjectMethod.2.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/readOnly.1.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/readOnly.1.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/readOnly.2.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/readOnly.2.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/readOnly.3.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/readOnly.3.qml8
-rw-r--r--tests/auto/declarative/qmllanguage/data/rootAsQmlComponent.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.1.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.1.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.10.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.10.qml9
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.11.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.11.qml7
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.12.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.12.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.2.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.2.qml7
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.3.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.3.qml7
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.4.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.4.qml8
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.5.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.5.qml9
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.6.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.6.qml11
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.7.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.7.qml11
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.8.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.8.qml9
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.9.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/script.9.qml7
-rw-r--r--tests/auto/declarative/qmllanguage/data/scriptString.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/signal.1.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/signal.1.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/signal.2.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/signal.2.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/signal.3.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/signal.3.qml6
-rw-r--r--tests/auto/declarative/qmllanguage/data/simpleBindings.qml18
-rw-r--r--tests/auto/declarative/qmllanguage/data/simpleContainer.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/simpleObject.qml2
-rw-r--r--tests/auto/declarative/qmllanguage/data/subdir/Test.qml2
-rw-r--r--tests/auto/declarative/qmllanguage/data/subdir/subsubdir/SubTest.qml2
-rw-r--r--tests/auto/declarative/qmllanguage/data/test.js0
-rw-r--r--tests/auto/declarative/qmllanguage/data/test2.js0
-rw-r--r--tests/auto/declarative/qmllanguage/data/unregisteredObject.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/unregisteredObject.qml2
-rw-r--r--tests/auto/declarative/qmllanguage/data/unsupportedProperty.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/unsupportedProperty.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/valueTypes.qml13
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.1.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.1.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.10.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.10.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.11.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.11.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.12.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.12.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.13.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.13.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.14.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.14.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.15.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.15.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.2.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.2.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.3.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.3.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.4.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.4.qml4
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.5.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.5.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.6.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.6.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.7.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.7.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.8.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.8.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.9.errors.txt1
-rw-r--r--tests/auto/declarative/qmllanguage/data/wrongType.9.qml5
-rw-r--r--tests/auto/declarative/qmllanguage/qmllanguage.pro14
-rw-r--r--tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/LocalInternal.qml3
-rw-r--r--tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/Test.qml2
-rw-r--r--tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/TestLocal.qml1
-rw-r--r--tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/TestSubDir.qml2
-rw-r--r--tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/pics/blue.pngbin0 -> 84 bytes
-rw-r--r--tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/qmldir3
-rw-r--r--tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/subdir/SubTest.qml3
-rw-r--r--tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/subdir/qmldir1
-rw-r--r--tests/auto/declarative/qmllanguage/testtypes.cpp59
-rw-r--r--tests/auto/declarative/qmllanguage/testtypes.h548
-rw-r--r--tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp1396
-rw-r--r--tests/auto/declarative/qmllist/qmllist.pro5
-rw-r--r--tests/auto/declarative/qmllist/tst_qmllist.cpp78
-rw-r--r--tests/auto/declarative/qmllistaccessor/qmllistaccessor.pro5
-rw-r--r--tests/auto/declarative/qmllistaccessor/tst_qmllistaccessor.cpp452
-rw-r--r--tests/auto/declarative/qmllistmodel/qmllistmodel.pro6
-rw-r--r--tests/auto/declarative/qmllistmodel/tst_qmllistmodel.cpp283
-rw-r--r--tests/auto/declarative/qmlmetaproperty/qmlmetaproperty.pro5
-rw-r--r--tests/auto/declarative/qmlmetaproperty/tst_qmlmetaproperty.cpp1123
-rw-r--r--tests/auto/declarative/qmlmetatype/qmlmetatype.pro6
-rw-r--r--tests/auto/declarative/qmlmetatype/tst_qmlmetatype.cpp436
-rw-r--r--tests/auto/declarative/qmlmoduleplugin/plugin.qml3
-rw-r--r--tests/auto/declarative/qmlmoduleplugin/plugin/plugin.cpp84
-rw-r--r--tests/auto/declarative/qmlmoduleplugin/plugin/plugin.pro5
-rw-r--r--tests/auto/declarative/qmlmoduleplugin/qmlmoduleplugin.pro7
-rw-r--r--tests/auto/declarative/qmlmoduleplugin/tst_qmlmoduleplugin.cpp117
-rw-r--r--tests/auto/declarative/qmlmoduleplugin/tst_qmlmoduleplugin.pro4
-rw-r--r--tests/auto/declarative/qmlnumberformatter/qmlnumberformatter.pro5
-rw-r--r--tests/auto/declarative/qmlnumberformatter/tst_qmlnumberformatter.cpp222
-rw-r--r--tests/auto/declarative/qmlpixmapcache/data/exists.pngbin0 -> 2738 bytes
-rw-r--r--tests/auto/declarative/qmlpixmapcache/data/exists1.pngbin0 -> 2738 bytes
-rw-r--r--tests/auto/declarative/qmlpixmapcache/data/exists2.pngbin0 -> 2738 bytes
-rw-r--r--tests/auto/declarative/qmlpixmapcache/qmlpixmapcache.pro9
-rw-r--r--tests/auto/declarative/qmlpixmapcache/tst_qmlpixmapcache.cpp282
-rw-r--r--tests/auto/declarative/qmlpropertymap/qmlpropertymap.pro5
-rw-r--r--tests/auto/declarative/qmlpropertymap/tst_qmlpropertymap.cpp171
-rw-r--r--tests/auto/declarative/qmlqt/data/closestangle.qml12
-rw-r--r--tests/auto/declarative/qmlqt/data/consoleLog.qml8
-rw-r--r--tests/auto/declarative/qmlqt/data/createComponent.qml23
-rw-r--r--tests/auto/declarative/qmlqt/data/createComponentData.qml5
-rw-r--r--tests/auto/declarative/qmlqt/data/createQmlObject.qml31
-rw-r--r--tests/auto/declarative/qmlqt/data/darker.qml11
-rw-r--r--tests/auto/declarative/qmlqt/data/enums.qml9
-rw-r--r--tests/auto/declarative/qmlqt/data/hsla.qml11
-rw-r--r--tests/auto/declarative/qmlqt/data/lighter.qml10
-rw-r--r--tests/auto/declarative/qmlqt/data/md5.qml6
-rw-r--r--tests/auto/declarative/qmlqt/data/point.qml9
-rw-r--r--tests/auto/declarative/qmlqt/data/rect.qml9
-rw-r--r--tests/auto/declarative/qmlqt/data/rgba.qml10
-rw-r--r--tests/auto/declarative/qmlqt/data/size.qml11
-rw-r--r--tests/auto/declarative/qmlqt/data/tint.qml9
-rw-r--r--tests/auto/declarative/qmlqt/data/vector.qml8
-rw-r--r--tests/auto/declarative/qmlqt/qmlqt.pro9
-rw-r--r--tests/auto/declarative/qmlqt/tst_qmlqt.cpp369
-rw-r--r--tests/auto/declarative/qmlspringfollow/data/springfollow1.qml4
-rw-r--r--tests/auto/declarative/qmlspringfollow/data/springfollow2.qml8
-rw-r--r--tests/auto/declarative/qmlspringfollow/data/springfollow3.qml8
-rw-r--r--tests/auto/declarative/qmlspringfollow/qmlspringfollow.pro8
-rw-r--r--tests/auto/declarative/qmlspringfollow/tst_qmlspringfollow.cpp137
-rw-r--r--tests/auto/declarative/qmlstates/data/ExtendedRectangle.qml19
-rw-r--r--tests/auto/declarative/qmlstates/data/anchorChanges.qml23
-rw-r--r--tests/auto/declarative/qmlstates/data/anchorChanges2.qml21
-rw-r--r--tests/auto/declarative/qmlstates/data/anchorChanges3.qml29
-rw-r--r--tests/auto/declarative/qmlstates/data/anchorChanges4.qml22
-rw-r--r--tests/auto/declarative/qmlstates/data/anchorChanges5.qml22
-rw-r--r--tests/auto/declarative/qmlstates/data/autoStateAtStartupRestoreBug.qml18
-rw-r--r--tests/auto/declarative/qmlstates/data/basicBinding.qml12
-rw-r--r--tests/auto/declarative/qmlstates/data/basicBinding2.qml12
-rw-r--r--tests/auto/declarative/qmlstates/data/basicBinding3.qml13
-rw-r--r--tests/auto/declarative/qmlstates/data/basicBinding4.qml17
-rw-r--r--tests/auto/declarative/qmlstates/data/basicChanges.qml10
-rw-r--r--tests/auto/declarative/qmlstates/data/basicChanges2.qml15
-rw-r--r--tests/auto/declarative/qmlstates/data/basicChanges3.qml15
-rw-r--r--tests/auto/declarative/qmlstates/data/basicExtension.qml16
-rw-r--r--tests/auto/declarative/qmlstates/data/deleting.qml11
-rw-r--r--tests/auto/declarative/qmlstates/data/deletingState.qml13
-rw-r--r--tests/auto/declarative/qmlstates/data/explicit.qml15
-rw-r--r--tests/auto/declarative/qmlstates/data/fakeExtension.qml16
-rw-r--r--tests/auto/declarative/qmlstates/data/illegalTempState.qml21
-rw-r--r--tests/auto/declarative/qmlstates/data/legalTempState.qml23
-rw-r--r--tests/auto/declarative/qmlstates/data/nonExistantProp.qml11
-rw-r--r--tests/auto/declarative/qmlstates/data/parentChange.qml37
-rw-r--r--tests/auto/declarative/qmlstates/data/parentChange2.qml31
-rw-r--r--tests/auto/declarative/qmlstates/data/parentChange3.qml42
-rw-r--r--tests/auto/declarative/qmlstates/data/parentChange4.qml30
-rw-r--r--tests/auto/declarative/qmlstates/data/parentChange5.qml30
-rw-r--r--tests/auto/declarative/qmlstates/data/propertyErrors.qml10
-rw-r--r--tests/auto/declarative/qmlstates/data/restoreEntryValues.qml14
-rw-r--r--tests/auto/declarative/qmlstates/data/script.qml10
-rw-r--r--tests/auto/declarative/qmlstates/data/signalOverride.qml18
-rw-r--r--tests/auto/declarative/qmlstates/data/signalOverride2.qml9
-rw-r--r--tests/auto/declarative/qmlstates/data/signalOverrideCrash.qml15
-rw-r--r--tests/auto/declarative/qmlstates/qmlstates.pro8
-rw-r--r--tests/auto/declarative/qmlstates/tst_qmlstates.cpp887
-rw-r--r--tests/auto/declarative/qmlsystempalette/qmlsystempalette.pro5
-rw-r--r--tests/auto/declarative/qmlsystempalette/tst_qmlsystempalette.cpp187
-rw-r--r--tests/auto/declarative/qmltimer/qmltimer.pro7
-rw-r--r--tests/auto/declarative/qmltimer/tst_qmltimer.cpp285
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/autoBindingRemoval.2.qml9
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/autoBindingRemoval.3.qml10
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/autoBindingRemoval.qml9
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/bindingAssignment.qml7
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/bindingConflict.qml8
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/bindingRead.qml5
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/bindingVariantCopy.qml13
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/deletedObject.js13
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/deletedObject.qml12
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/font_read.qml18
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/font_write.2.qml6
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/font_write.3.qml7
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/font_write.qml16
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/point_read.qml7
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/point_write.qml6
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/pointf_read.qml8
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/pointf_write.qml6
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/rect_read.qml10
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/rect_write.qml9
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/rectf_read.qml10
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/rectf_write.qml9
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/scriptAccess.qml9
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/scriptVariantCopy.qml14
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/size_read.qml8
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/size_write.qml7
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/sizef_read.qml9
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/sizef_write.qml6
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/staticAssignment.qml5
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/valueInterceptors.qml8
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/valueSources.qml5
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/vector3d_read.qml9
-rw-r--r--tests/auto/declarative/qmlvaluetypes/data/vector3d_write.qml8
-rw-r--r--tests/auto/declarative/qmlvaluetypes/qmlvaluetypes.pro10
-rw-r--r--tests/auto/declarative/qmlvaluetypes/testtypes.cpp45
-rw-r--r--tests/auto/declarative/qmlvaluetypes/testtypes.h152
-rw-r--r--tests/auto/declarative/qmlvaluetypes/tst_qmlvaluetypes.cpp588
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/abort.expect10
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/abort.qml42
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/abort.reply2
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/abort_opened.qml58
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/abort_unsent.qml54
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/attr.qml80
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/attr.xml1
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/callbackException.qml25
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/cdata.qml135
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/cdata.xml2
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/constructor.qml14
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/defaultState.qml30
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/document.qml58
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/document.xml3
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/domExceptionCodes.qml60
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/element.qml147
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/element.xml1
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/getAllResponseHeaders.qml65
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/getAllResponseHeaders_args.qml23
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/getAllResponseHeaders_sent.qml20
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/getAllResponseHeaders_unsent.qml16
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader.expect7
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader.qml75
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader.reply7
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader_args.qml23
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader_sent.qml20
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader_unsent.qml16
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/instanceStateValues.qml33
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/invalidMethodUsage.qml160
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/open.qml53
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/open_arg_count.1.qml18
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/open_arg_count.2.qml18
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/open_invalid_method.qml16
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/open_network.expect7
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/open_network.reply2
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/open_network.wait0
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/open_sync.qml17
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/open_user.qml53
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/open_username.qml54
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/redirectError.qml23
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/redirectRecur.qml23
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/redirects.qml22
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/redirecttarget.html1
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/responseText.qml52
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/responseXML_invalid.qml24
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/seconddocument.html1
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/send_alreadySent.qml27
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/send_data.1.expect10
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/send_data.1.qml21
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/send_data.2.qml23
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/send_data.3.qml23
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/send_data.4.expect10
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/send_data.4.qml23
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/send_data.5.qml23
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/send_data.6.expect10
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/send_data.6.qml21
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/send_data.7.qml23
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/send_data.reply2
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/send_ignoreData.qml26
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/send_ignoreData.reply2
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/send_ignoreData_GET.expect7
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/send_ignoreData_PUT.expect7
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/send_unsent.qml16
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader.expect9
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader.qml28
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader.reply2
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader_args.qml18
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader_illegalName.qml57
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader_sent.qml31
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader_unsent.qml17
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/staticStateValues.qml24
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/status.200.reply2
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/status.404.reply2
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/status.expect7
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/status.qml77
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/statusText.qml77
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/testdocument.html1
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/text.qml131
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/data/text.xml1
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/qmlxmlhttprequest.pro13
-rw-r--r--tests/auto/declarative/qmlxmlhttprequest/tst_qmlxmlhttprequest.cpp1315
-rw-r--r--tests/auto/declarative/qmlxmllistmodel/data/model.qml10
-rw-r--r--tests/auto/declarative/qmlxmllistmodel/data/model.xml54
-rw-r--r--tests/auto/declarative/qmlxmllistmodel/data/model2.qml11
-rw-r--r--tests/auto/declarative/qmlxmllistmodel/data/recipes.qml10
-rw-r--r--tests/auto/declarative/qmlxmllistmodel/data/recipes.xml90
-rw-r--r--tests/auto/declarative/qmlxmllistmodel/data/roleErrors.qml10
-rw-r--r--tests/auto/declarative/qmlxmllistmodel/data/unique.qml8
-rw-r--r--tests/auto/declarative/qmlxmllistmodel/qmlxmllistmodel.pro11
-rw-r--r--tests/auto/declarative/qmlxmllistmodel/tst_qmlxmllistmodel.cpp203
-rw-r--r--tests/auto/declarative/qpacketprotocol/qpacketprotocol.pro7
-rw-r--r--tests/auto/declarative/qpacketprotocol/tst_qpacketprotocol.cpp271
-rwxr-xr-xtests/auto/declarative/runall.sh30
-rw-r--r--tests/auto/declarative/shared/debugutil.cpp176
-rw-r--r--tests/auto/declarative/shared/debugutil_p.h145
-rw-r--r--tests/auto/declarative/shared/testhttpserver.cpp323
-rw-r--r--tests/auto/declarative/shared/testhttpserver.h93
-rw-r--r--tests/auto/declarative/sql/data/README3
-rw-r--r--tests/auto/declarative/sql/data/changeversion.js53
-rw-r--r--tests/auto/declarative/sql/data/creation-a.js18
-rw-r--r--tests/auto/declarative/sql/data/creation.js14
-rw-r--r--tests/auto/declarative/sql/data/error-a.js20
-rw-r--r--tests/auto/declarative/sql/data/error-b.js13
-rw-r--r--tests/auto/declarative/sql/data/error-creation.js12
-rw-r--r--tests/auto/declarative/sql/data/error-notransaction.js15
-rw-r--r--tests/auto/declarative/sql/data/error-outsidetransaction.js17
-rw-r--r--tests/auto/declarative/sql/data/iteration-forwardonly.js29
-rw-r--r--tests/auto/declarative/sql/data/iteration.js28
-rw-r--r--tests/auto/declarative/sql/data/readonly-error.js27
-rw-r--r--tests/auto/declarative/sql/data/readonly.js24
-rw-r--r--tests/auto/declarative/sql/data/reopen1.js14
-rw-r--r--tests/auto/declarative/sql/data/reopen2.js16
-rw-r--r--tests/auto/declarative/sql/data/selection-bindnames.js26
-rw-r--r--tests/auto/declarative/sql/data/selection.js26
-rw-r--r--tests/auto/declarative/sql/sql.pro9
-rw-r--r--tests/auto/declarative/sql/tst_sql.cpp237
-rw-r--r--tests/auto/declarative/visual/ListView/basic1.qml27
-rw-r--r--tests/auto/declarative/visual/ListView/basic2.qml31
-rw-r--r--tests/auto/declarative/visual/ListView/basic3.qml29
-rw-r--r--tests/auto/declarative/visual/ListView/basic4.qml33
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/basic1.qml159
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/basic2.qml187
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/basic3.qml147
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/basic4.qml171
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/itemlist.0.pngbin0 -> 961 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/itemlist.1.pngbin0 -> 972 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/itemlist.2.pngbin0 -> 962 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/itemlist.3.pngbin0 -> 962 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/itemlist.4.pngbin0 -> 962 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/itemlist.5.pngbin0 -> 970 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/itemlist.6.pngbin0 -> 961 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/itemlist.qml2203
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/listview.0.pngbin0 -> 1510 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/listview.1.pngbin0 -> 1510 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/listview.10.pngbin0 -> 1588 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/listview.11.pngbin0 -> 1575 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/listview.12.pngbin0 -> 1502 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/listview.13.pngbin0 -> 1583 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/listview.14.pngbin0 -> 1681 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/listview.15.pngbin0 -> 1524 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/listview.16.pngbin0 -> 1510 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/listview.17.pngbin0 -> 1510 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/listview.18.pngbin0 -> 1510 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/listview.19.pngbin0 -> 1510 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/listview.2.pngbin0 -> 1627 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/listview.3.pngbin0 -> 1524 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/listview.4.pngbin0 -> 1678 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/listview.5.pngbin0 -> 1510 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/listview.6.pngbin0 -> 1573 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/listview.7.pngbin0 -> 1670 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/listview.8.pngbin0 -> 1658 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/listview.9.pngbin0 -> 1510 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data-MAC/listview.qml3079
-rw-r--r--tests/auto/declarative/visual/ListView/data-X11/basic1.qml159
-rw-r--r--tests/auto/declarative/visual/ListView/data-X11/basic2.qml187
-rw-r--r--tests/auto/declarative/visual/ListView/data-X11/basic3.qml147
-rw-r--r--tests/auto/declarative/visual/ListView/data-X11/basic4.qml171
-rw-r--r--tests/auto/declarative/visual/ListView/data/basic1.qml159
-rw-r--r--tests/auto/declarative/visual/ListView/data/basic2.qml187
-rw-r--r--tests/auto/declarative/visual/ListView/data/basic3.qml147
-rw-r--r--tests/auto/declarative/visual/ListView/data/basic4.qml171
-rw-r--r--tests/auto/declarative/visual/ListView/data/itemlist.0.pngbin0 -> 961 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/itemlist.1.pngbin0 -> 972 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/itemlist.2.pngbin0 -> 962 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/itemlist.3.pngbin0 -> 962 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/itemlist.4.pngbin0 -> 962 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/itemlist.5.pngbin0 -> 970 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/itemlist.6.pngbin0 -> 961 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/itemlist.qml2203
-rw-r--r--tests/auto/declarative/visual/ListView/data/listview.0.pngbin0 -> 1510 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/listview.1.pngbin0 -> 1510 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/listview.10.pngbin0 -> 1588 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/listview.11.pngbin0 -> 1575 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/listview.12.pngbin0 -> 1502 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/listview.13.pngbin0 -> 1583 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/listview.14.pngbin0 -> 1681 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/listview.15.pngbin0 -> 1524 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/listview.16.pngbin0 -> 1510 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/listview.17.pngbin0 -> 1510 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/listview.18.pngbin0 -> 1510 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/listview.19.pngbin0 -> 1510 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/listview.2.pngbin0 -> 1656 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/listview.3.pngbin0 -> 1524 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/listview.4.pngbin0 -> 1678 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/listview.5.pngbin0 -> 1510 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/listview.6.pngbin0 -> 1573 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/listview.7.pngbin0 -> 1669 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/listview.8.pngbin0 -> 1658 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/listview.9.pngbin0 -> 1510 bytes
-rw-r--r--tests/auto/declarative/visual/ListView/data/listview.qml3079
-rw-r--r--tests/auto/declarative/visual/ListView/itemlist.qml40
-rw-r--r--tests/auto/declarative/visual/ListView/listview.qml81
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.0.pngbin0 -> 714 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.1.pngbin0 -> 798 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.10.pngbin0 -> 773 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.11.pngbin0 -> 773 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.12.pngbin0 -> 754 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.13.pngbin0 -> 742 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.14.pngbin0 -> 733 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.15.pngbin0 -> 712 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.16.pngbin0 -> 730 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.17.pngbin0 -> 730 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.18.pngbin0 -> 730 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.19.pngbin0 -> 744 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.2.pngbin0 -> 757 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.20.pngbin0 -> 754 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.21.pngbin0 -> 721 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.22.pngbin0 -> 732 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.3.pngbin0 -> 813 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.4.pngbin0 -> 756 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.5.pngbin0 -> 752 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.6.pngbin0 -> 752 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.7.pngbin0 -> 774 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.8.pngbin0 -> 774 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.9.pngbin0 -> 754 bytes
-rw-r--r--tests/auto/declarative/visual/Package_Views/data/packageviews.qml3751
-rw-r--r--tests/auto/declarative/visual/Package_Views/packageviews.qml89
-rw-r--r--tests/auto/declarative/visual/animation/bindinganimation/bindinganimation.qml40
-rw-r--r--tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.0.pngbin0 -> 817 bytes
-rw-r--r--tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.1.pngbin0 -> 815 bytes
-rw-r--r--tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.2.pngbin0 -> 817 bytes
-rw-r--r--tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.3.pngbin0 -> 815 bytes
-rw-r--r--tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.4.pngbin0 -> 813 bytes
-rw-r--r--tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.5.pngbin0 -> 815 bytes
-rw-r--r--tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.6.pngbin0 -> 817 bytes
-rw-r--r--tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.qml1655
-rw-r--r--tests/auto/declarative/visual/animation/colorAnimation/colorAnimation.qml41
-rw-r--r--tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.0.pngbin0 -> 610 bytes
-rw-r--r--tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.1.pngbin0 -> 610 bytes
-rw-r--r--tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.2.pngbin0 -> 610 bytes
-rw-r--r--tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.qml951
-rw-r--r--tests/auto/declarative/visual/animation/easing/data/easing.0.pngbin0 -> 3393 bytes
-rw-r--r--tests/auto/declarative/visual/animation/easing/data/easing.1.pngbin0 -> 3381 bytes
-rw-r--r--tests/auto/declarative/visual/animation/easing/data/easing.2.pngbin0 -> 3101 bytes
-rw-r--r--tests/auto/declarative/visual/animation/easing/data/easing.3.pngbin0 -> 16542 bytes
-rw-r--r--tests/auto/declarative/visual/animation/easing/data/easing.qml779
-rw-r--r--tests/auto/declarative/visual/animation/easing/easing.qml193
-rw-r--r--tests/auto/declarative/visual/animation/easing/pics/qtlogo.pngbin0 -> 2738 bytes
-rw-r--r--tests/auto/declarative/visual/animation/parallelAnimation/data/parallelAnimation.0.pngbin0 -> 774 bytes
-rw-r--r--tests/auto/declarative/visual/animation/parallelAnimation/data/parallelAnimation.1.pngbin0 -> 762 bytes
-rw-r--r--tests/auto/declarative/visual/animation/parallelAnimation/data/parallelAnimation.2.pngbin0 -> 773 bytes
-rw-r--r--tests/auto/declarative/visual/animation/parallelAnimation/data/parallelAnimation.qml463
-rw-r--r--tests/auto/declarative/visual/animation/parallelAnimation/parallelAnimation.qml43
-rw-r--r--tests/auto/declarative/visual/animation/parentAction/data/parentAction.0.pngbin0 -> 1652 bytes
-rw-r--r--tests/auto/declarative/visual/animation/parentAction/data/parentAction.1.pngbin0 -> 1492 bytes
-rw-r--r--tests/auto/declarative/visual/animation/parentAction/data/parentAction.2.pngbin0 -> 1424 bytes
-rw-r--r--tests/auto/declarative/visual/animation/parentAction/data/parentAction.3.pngbin0 -> 1583 bytes
-rw-r--r--tests/auto/declarative/visual/animation/parentAction/data/parentAction.4.pngbin0 -> 1640 bytes
-rw-r--r--tests/auto/declarative/visual/animation/parentAction/data/parentAction.5.pngbin0 -> 1640 bytes
-rw-r--r--tests/auto/declarative/visual/animation/parentAction/data/parentAction.qml1207
-rw-r--r--tests/auto/declarative/visual/animation/parentAction/parentAction.qml55
-rw-r--r--tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.0.pngbin0 -> 3211 bytes
-rw-r--r--tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.1.pngbin0 -> 3214 bytes
-rw-r--r--tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.2.pngbin0 -> 3209 bytes
-rw-r--r--tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.3.pngbin0 -> 3211 bytes
-rw-r--r--tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.4.pngbin0 -> 3214 bytes
-rw-r--r--tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.5.pngbin0 -> 3214 bytes
-rw-r--r--tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.qml1619
-rw-r--r--tests/auto/declarative/visual/animation/pauseAnimation/pauseAnimation.qml29
-rw-r--r--tests/auto/declarative/visual/animation/pauseAnimation/pics/qtlogo.pngbin0 -> 2738 bytes
-rw-r--r--tests/auto/declarative/visual/animation/propertyAction/data/propertyAction.0.pngbin0 -> 1418 bytes
-rw-r--r--tests/auto/declarative/visual/animation/propertyAction/data/propertyAction.1.pngbin0 -> 1430 bytes
-rw-r--r--tests/auto/declarative/visual/animation/propertyAction/data/propertyAction.2.pngbin0 -> 1431 bytes
-rw-r--r--tests/auto/declarative/visual/animation/propertyAction/data/propertyAction.qml939
-rw-r--r--tests/auto/declarative/visual/animation/propertyAction/propertyAction.qml34
-rw-r--r--tests/auto/declarative/visual/animation/reanchor/data/reanchor.0.pngbin0 -> 622 bytes
-rw-r--r--tests/auto/declarative/visual/animation/reanchor/data/reanchor.1.pngbin0 -> 626 bytes
-rw-r--r--tests/auto/declarative/visual/animation/reanchor/data/reanchor.2.pngbin0 -> 622 bytes
-rw-r--r--tests/auto/declarative/visual/animation/reanchor/data/reanchor.3.pngbin0 -> 622 bytes
-rw-r--r--tests/auto/declarative/visual/animation/reanchor/data/reanchor.4.pngbin0 -> 632 bytes
-rw-r--r--tests/auto/declarative/visual/animation/reanchor/data/reanchor.5.pngbin0 -> 622 bytes
-rw-r--r--tests/auto/declarative/visual/animation/reanchor/data/reanchor.6.pngbin0 -> 622 bytes
-rw-r--r--tests/auto/declarative/visual/animation/reanchor/data/reanchor.7.pngbin0 -> 622 bytes
-rw-r--r--tests/auto/declarative/visual/animation/reanchor/data/reanchor.8.pngbin0 -> 634 bytes
-rw-r--r--tests/auto/declarative/visual/animation/reanchor/data/reanchor.qml2471
-rw-r--r--tests/auto/declarative/visual/animation/reanchor/reanchor.qml68
-rw-r--r--tests/auto/declarative/visual/animation/scriptAction/data/scriptAction.0.pngbin0 -> 1418 bytes
-rw-r--r--tests/auto/declarative/visual/animation/scriptAction/data/scriptAction.1.pngbin0 -> 1431 bytes
-rw-r--r--tests/auto/declarative/visual/animation/scriptAction/data/scriptAction.qml535
-rw-r--r--tests/auto/declarative/visual/animation/scriptAction/scriptAction.qml35
-rw-r--r--tests/auto/declarative/visual/fillmode/data/fillmode.0.pngbin0 -> 26099 bytes
-rw-r--r--tests/auto/declarative/visual/fillmode/data/fillmode.qml279
-rw-r--r--tests/auto/declarative/visual/fillmode/face.pngbin0 -> 905 bytes
-rw-r--r--tests/auto/declarative/visual/fillmode/fillmode.qml16
-rw-r--r--tests/auto/declarative/visual/focusscope/data-MAC/test.0.pngbin0 -> 14875 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-MAC/test.1.pngbin0 -> 14875 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-MAC/test.2.pngbin0 -> 14863 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-MAC/test.3.pngbin0 -> 14877 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-MAC/test.4.pngbin0 -> 14877 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-MAC/test.5.pngbin0 -> 14877 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-MAC/test.qml1599
-rw-r--r--tests/auto/declarative/visual/focusscope/data-MAC/test2.0.pngbin0 -> 5375 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-MAC/test2.1.pngbin0 -> 5375 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-MAC/test2.qml607
-rw-r--r--tests/auto/declarative/visual/focusscope/data-MAC/test3.0.pngbin0 -> 12749 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-MAC/test3.1.pngbin0 -> 12667 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-MAC/test3.2.pngbin0 -> 12373 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-MAC/test3.3.pngbin0 -> 12150 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-MAC/test3.4.pngbin0 -> 11944 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-MAC/test3.5.pngbin0 -> 12150 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-MAC/test3.6.pngbin0 -> 12373 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-MAC/test3.7.pngbin0 -> 12667 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-MAC/test3.8.pngbin0 -> 12749 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-MAC/test3.9.pngbin0 -> 12710 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-MAC/test3.qml2879
-rw-r--r--tests/auto/declarative/visual/focusscope/data-X11/test.0.pngbin0 -> 11501 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-X11/test.1.pngbin0 -> 11501 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-X11/test.2.pngbin0 -> 11486 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-X11/test.3.pngbin0 -> 11500 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-X11/test.4.pngbin0 -> 11500 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-X11/test.5.pngbin0 -> 11500 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-X11/test.qml1599
-rw-r--r--tests/auto/declarative/visual/focusscope/data-X11/test2.0.pngbin0 -> 4656 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-X11/test2.1.pngbin0 -> 4656 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-X11/test2.qml607
-rw-r--r--tests/auto/declarative/visual/focusscope/data-X11/test3.0.pngbin0 -> 10093 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-X11/test3.1.pngbin0 -> 10051 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-X11/test3.2.pngbin0 -> 9812 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-X11/test3.3.pngbin0 -> 9625 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-X11/test3.4.pngbin0 -> 9458 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-X11/test3.5.pngbin0 -> 9645 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-X11/test3.6.pngbin0 -> 9812 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-X11/test3.7.pngbin0 -> 10051 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-X11/test3.8.pngbin0 -> 10087 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-X11/test3.9.pngbin0 -> 10072 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data-X11/test3.qml2879
-rw-r--r--tests/auto/declarative/visual/focusscope/data/test.0.pngbin0 -> 14836 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data/test.1.pngbin0 -> 14836 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data/test.2.pngbin0 -> 14821 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data/test.3.pngbin0 -> 14833 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data/test.4.pngbin0 -> 14833 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data/test.5.pngbin0 -> 14833 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data/test.qml1599
-rw-r--r--tests/auto/declarative/visual/focusscope/data/test2.0.pngbin0 -> 5359 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data/test2.1.pngbin0 -> 5359 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data/test2.qml607
-rw-r--r--tests/auto/declarative/visual/focusscope/data/test3.0.pngbin0 -> 12616 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data/test3.1.pngbin0 -> 12538 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data/test3.2.pngbin0 -> 12257 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data/test3.3.pngbin0 -> 12035 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data/test3.4.pngbin0 -> 11877 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data/test3.5.pngbin0 -> 12046 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data/test3.6.pngbin0 -> 12257 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data/test3.7.pngbin0 -> 12538 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data/test3.8.pngbin0 -> 12616 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data/test3.9.pngbin0 -> 12581 bytes
-rw-r--r--tests/auto/declarative/visual/focusscope/data/test3.qml2879
-rw-r--r--tests/auto/declarative/visual/focusscope/test.qml76
-rw-r--r--tests/auto/declarative/visual/focusscope/test2.qml40
-rw-r--r--tests/auto/declarative/visual/focusscope/test3.qml52
-rw-r--r--tests/auto/declarative/visual/qfxwebview/autosize/autosize.qml60
-rw-r--r--tests/auto/declarative/visual/qfxwebview/autosize/data-X11/autosize.0.pngbin0 -> 6886 bytes
-rw-r--r--tests/auto/declarative/visual/qfxwebview/autosize/data-X11/autosize.qml83
-rw-r--r--tests/auto/declarative/visual/qfxwebview/autosize/data/autosize.0.pngbin0 -> 6886 bytes
-rw-r--r--tests/auto/declarative/visual/qfxwebview/autosize/data/autosize.qml83
-rw-r--r--tests/auto/declarative/visual/qmleasefollow/data/easefollow.0.pngbin0 -> 1305 bytes
-rw-r--r--tests/auto/declarative/visual/qmleasefollow/data/easefollow.1.pngbin0 -> 1306 bytes
-rw-r--r--tests/auto/declarative/visual/qmleasefollow/data/easefollow.2.pngbin0 -> 1305 bytes
-rw-r--r--tests/auto/declarative/visual/qmleasefollow/data/easefollow.3.pngbin0 -> 1303 bytes
-rw-r--r--tests/auto/declarative/visual/qmleasefollow/data/easefollow.4.pngbin0 -> 1303 bytes
-rw-r--r--tests/auto/declarative/visual/qmleasefollow/data/easefollow.5.pngbin0 -> 1305 bytes
-rw-r--r--tests/auto/declarative/visual/qmleasefollow/data/easefollow.6.pngbin0 -> 1306 bytes
-rw-r--r--tests/auto/declarative/visual/qmleasefollow/data/easefollow.qml1807
-rw-r--r--tests/auto/declarative/visual/qmleasefollow/easefollow.qml40
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/animated-smooth.qml55
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/animated.qml55
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/borders.qml18
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/content/MyBorderImage.qml38
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/content/bw.pngbin0 -> 1357 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/content/colors-round.sci7
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/content/colors-stretch.sci5
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/content/colors.pngbin0 -> 1655 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.0.pngbin0 -> 61731 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.1.pngbin0 -> 98912 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.2.pngbin0 -> 48780 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.3.pngbin0 -> 32431 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.4.pngbin0 -> 35835 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.5.pngbin0 -> 79428 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.6.pngbin0 -> 45928 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.qml1823
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.0.pngbin0 -> 23684 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.1.pngbin0 -> 29115 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.2.pngbin0 -> 27580 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.3.pngbin0 -> 14822 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.4.pngbin0 -> 21356 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.5.pngbin0 -> 31143 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.6.pngbin0 -> 26468 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.7.pngbin0 -> 16225 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.qml2091
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.0.pngbin0 -> 23029 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.1.pngbin0 -> 23029 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.2.pngbin0 -> 23029 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.3.pngbin0 -> 23029 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.4.pngbin0 -> 23029 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.qml1359
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-horizontal.0.pngbin0 -> 1427 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-horizontal.1.pngbin0 -> 1357 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-horizontal.2.pngbin0 -> 1405 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-horizontal.3.pngbin0 -> 1427 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-horizontal.qml1199
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.0.pngbin0 -> 1951 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.1.pngbin0 -> 1951 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.10.pngbin0 -> 1952 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.11.pngbin0 -> 1930 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.12.pngbin0 -> 1974 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.13.pngbin0 -> 1961 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.14.pngbin0 -> 1959 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.15.pngbin0 -> 1937 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.16.pngbin0 -> 1618 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.17.pngbin0 -> 1952 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.18.pngbin0 -> 1952 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.19.pngbin0 -> 1930 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.2.pngbin0 -> 1976 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.20.pngbin0 -> 1930 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.21.pngbin0 -> 1947 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.22.pngbin0 -> 1941 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.23.pngbin0 -> 1951 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.24.png0
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.3.pngbin0 -> 1987 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.4.pngbin0 -> 1947 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.5.pngbin0 -> 1975 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.6.pngbin0 -> 1928 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.7.pngbin0 -> 1928 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.8.pngbin0 -> 1928 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.9.pngbin0 -> 1928 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.qml7037
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/flickable-horizontal.qml37
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflickable/flickable-vertical.qml91
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.0.pngbin0 -> 1090 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.1.pngbin0 -> 1134 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.2.pngbin0 -> 961 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.3.pngbin0 -> 1076 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.4.pngbin0 -> 1134 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.5.pngbin0 -> 969 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.qml1623
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsflipable/test-flipable.qml79
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.0.pngbin0 -> 1303 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.1.pngbin0 -> 1317 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.2.pngbin0 -> 1318 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.3.pngbin0 -> 1306 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.4.pngbin0 -> 1308 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.5.pngbin0 -> 1303 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.6.pngbin0 -> 1323 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.7.pngbin0 -> 1325 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.8.pngbin0 -> 1346 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.9.pngbin0 -> 1303 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.qml2859
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.0.pngbin0 -> 1310 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.1.pngbin0 -> 1322 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.10.pngbin0 -> 1313 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.2.pngbin0 -> 1341 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.3.pngbin0 -> 1368 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.4.pngbin0 -> 1319 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.5.pngbin0 -> 1352 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.6.pngbin0 -> 1309 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.7.pngbin0 -> 1347 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.8.pngbin0 -> 1310 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.9.pngbin0 -> 1354 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.qml2479
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/gridview.qml51
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsgridview/gridview2.qml58
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsparticles/data/particles.0.pngbin0 -> 10219 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsparticles/data/particles.1.pngbin0 -> 13469 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsparticles/data/particles.2.pngbin0 -> 14051 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsparticles/data/particles.qml775
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsparticles/particles.qml54
-rw-r--r--tests/auto/declarative/visual/qmlgraphicsparticles/star.pngbin0 -> 262 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.0.pngbin0 -> 2263 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.1.pngbin0 -> 2329 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.2.pngbin0 -> 2279 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.3.pngbin0 -> 2263 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.4.pngbin0 -> 2263 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.5.pngbin0 -> 2308 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.6.pngbin0 -> 2280 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.qml2303
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.0.pngbin0 -> 2321 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.1.pngbin0 -> 2380 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.2.pngbin0 -> 2315 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.3.pngbin0 -> 2372 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.4.pngbin0 -> 2327 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.qml1495
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspathview/test-pathview-2.qml62
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspathview/test-pathview.qml62
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.0.pngbin0 -> 1429 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.1.pngbin0 -> 1433 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.2.pngbin0 -> 1431 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.3.pngbin0 -> 1428 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.4.pngbin0 -> 1432 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.5.pngbin0 -> 1434 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.qml1603
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspositioners/data/repeater.0.pngbin0 -> 2790 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspositioners/data/repeater.qml339
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspositioners/dynamic.qml65
-rw-r--r--tests/auto/declarative/visual/qmlgraphicspositioners/repeater.qml15
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/baseline/data-X11/parentanchor.qml131
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/baseline/data/parentanchor.qml131
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/baseline/parentanchor.qml14
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide.0.pngbin0 -> 2276 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide.qml279
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide2.0.pngbin0 -> 4818 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide2.1.pngbin0 -> 4089 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide2.2.pngbin0 -> 3128 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide2.3.pngbin0 -> 1963 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide2.qml991
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/multilength.0.pngbin0 -> 736 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/multilength.qml303
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/data-X11/elide.0.pngbin0 -> 1002 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/data-X11/elide.qml279
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/data-X11/multilength.0.pngbin0 -> 596 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/data-X11/multilength.qml303
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide.0.pngbin0 -> 1604 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide.qml279
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide2.0.pngbin0 -> 4818 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide2.1.pngbin0 -> 4089 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide2.2.pngbin0 -> 3128 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide2.3.pngbin0 -> 1963 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide2.qml991
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/elide.qml31
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/elide2.qml12
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/elide/multilength.qml19
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/font/data-MAC/plaintext.0.pngbin0 -> 103018 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/font/data-MAC/plaintext.qml351
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/font/data-MAC/richtext.0.pngbin0 -> 136492 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/font/data-MAC/richtext.qml359
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/font/data/plaintext.0.pngbin0 -> 94120 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/font/data/plaintext.qml351
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/font/data/richtext.0.pngbin0 -> 121122 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/font/data/richtext.qml359
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/font/plaintext.qml85
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstext/font/richtext.qml85
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/cursorDelegate.qml35
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.0.pngbin0 -> 793 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.1.pngbin0 -> 795 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.2.pngbin0 -> 803 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.3.pngbin0 -> 805 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.4.pngbin0 -> 805 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.5.pngbin0 -> 805 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.6.pngbin0 -> 799 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.7.pngbin0 -> 799 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.8.pngbin0 -> 803 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.qml3555
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/qt-669.0.pngbin0 -> 365 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/qt-669.1.pngbin0 -> 365 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/qt-669.2.pngbin0 -> 366 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/qt-669.3.pngbin0 -> 362 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/qt-669.qml1371
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.0.pngbin0 -> 1110 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.1.pngbin0 -> 1110 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.2.pngbin0 -> 1110 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.3.pngbin0 -> 1110 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.4.pngbin0 -> 1110 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.5.pngbin0 -> 1110 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.6.pngbin0 -> 1110 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.qml2467
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.0.pngbin0 -> 3322 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.1.pngbin0 -> 3323 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.2.pngbin0 -> 3325 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.3.pngbin0 -> 3332 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.4.pngbin0 -> 3329 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.5.pngbin0 -> 3818 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.6.pngbin0 -> 3333 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.7.pngbin0 -> 3332 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.8.pngbin0 -> 3347 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.qml3555
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/qt-669.0.pngbin0 -> 4802 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/qt-669.1.pngbin0 -> 4804 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/qt-669.2.pngbin0 -> 4801 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/qt-669.3.pngbin0 -> 4791 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/qt-669.qml1371
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.0.pngbin0 -> 1110 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.1.pngbin0 -> 1110 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.2.pngbin0 -> 1110 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.3.pngbin0 -> 1110 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.4.pngbin0 -> 1110 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.5.pngbin0 -> 1110 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.6.pngbin0 -> 1110 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.qml2467
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/qt-669.qml19
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextedit/wrap.qml21
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/cursorDelegate.qml35
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.0.pngbin0 -> 793 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.1.pngbin0 -> 796 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.2.pngbin0 -> 804 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.3.pngbin0 -> 805 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.4.pngbin0 -> 805 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.5.pngbin0 -> 805 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.6.pngbin0 -> 801 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.7.pngbin0 -> 802 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.8.pngbin0 -> 802 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.qml3379
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.0.pngbin0 -> 999 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.1.pngbin0 -> 1880 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.2.pngbin0 -> 2962 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.3.pngbin0 -> 2827 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.4.pngbin0 -> 2827 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.qml1043
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/hAlign.0.pngbin0 -> 1245 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/hAlign.qml107
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.0.pngbin0 -> 3314 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.1.pngbin0 -> 3377 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.2.pngbin0 -> 3323 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.3.pngbin0 -> 3325 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.4.pngbin0 -> 3322 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.5.pngbin0 -> 3322 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.6.pngbin0 -> 3326 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.7.pngbin0 -> 3814 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.8.pngbin0 -> 3324 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.qml3379
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.0.pngbin0 -> 999 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.1.pngbin0 -> 1880 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.2.pngbin0 -> 2962 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.3.pngbin0 -> 2827 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.4.pngbin0 -> 2827 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.qml1043
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data/hAlign.0.pngbin0 -> 1245 bytes
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/data/hAlign.qml107
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/echoMode.qml10
-rw-r--r--tests/auto/declarative/visual/qmlgraphicstextinput/hAlign.qml39
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/drag.0.pngbin0 -> 1563 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/drag.1.pngbin0 -> 1570 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/drag.2.pngbin0 -> 1553 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/drag.3.pngbin0 -> 1563 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/drag.4.pngbin0 -> 1569 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/drag.5.pngbin0 -> 1569 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/drag.6.pngbin0 -> 1566 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/drag.7.pngbin0 -> 1566 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/drag.8.pngbin0 -> 1567 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/drag.qml5207
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.0.pngbin0 -> 471 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.1.pngbin0 -> 474 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.10.pngbin0 -> 479 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.11.pngbin0 -> 479 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.12.pngbin0 -> 479 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.13.pngbin0 -> 479 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.14.pngbin0 -> 479 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.15.pngbin0 -> 479 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.16.pngbin0 -> 1454 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.17.pngbin0 -> 1454 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.18.pngbin0 -> 1454 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.19.pngbin0 -> 1454 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.2.pngbin0 -> 474 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.20.pngbin0 -> 1454 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.21.pngbin0 -> 1454 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.22.pngbin0 -> 1454 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.3.pngbin0 -> 474 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.4.pngbin0 -> 481 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.5.pngbin0 -> 481 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.6.pngbin0 -> 481 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.7.pngbin0 -> 481 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.8.pngbin0 -> 479 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.9.pngbin0 -> 479 bytes
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.qml5867
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/drag.qml21
-rw-r--r--tests/auto/declarative/visual/qmlmouseregion/mouseregion.qml124
-rw-r--r--tests/auto/declarative/visual/qmlspringfollow/clock.qml64
-rw-r--r--tests/auto/declarative/visual/qmlspringfollow/content/background.pngbin0 -> 46895 bytes
-rwxr-xr-xtests/auto/declarative/visual/qmlspringfollow/content/center.pngbin0 -> 765 bytes
-rwxr-xr-xtests/auto/declarative/visual/qmlspringfollow/content/clock.pngbin0 -> 20653 bytes
-rwxr-xr-xtests/auto/declarative/visual/qmlspringfollow/content/hour.pngbin0 -> 625 bytes
-rwxr-xr-xtests/auto/declarative/visual/qmlspringfollow/content/minute.pngbin0 -> 625 bytes
-rwxr-xr-xtests/auto/declarative/visual/qmlspringfollow/content/second.pngbin0 -> 303 bytes
-rw-r--r--tests/auto/declarative/visual/qmlspringfollow/data/clock.0.pngbin0 -> 17294 bytes
-rw-r--r--tests/auto/declarative/visual/qmlspringfollow/data/clock.1.pngbin0 -> 17394 bytes
-rw-r--r--tests/auto/declarative/visual/qmlspringfollow/data/clock.2.pngbin0 -> 17524 bytes
-rw-r--r--tests/auto/declarative/visual/qmlspringfollow/data/clock.3.pngbin0 -> 17572 bytes
-rw-r--r--tests/auto/declarative/visual/qmlspringfollow/data/clock.qml1135
-rw-r--r--tests/auto/declarative/visual/qmlspringfollow/data/follow.0.pngbin0 -> 959 bytes
-rw-r--r--tests/auto/declarative/visual/qmlspringfollow/data/follow.1.pngbin0 -> 1244 bytes
-rw-r--r--tests/auto/declarative/visual/qmlspringfollow/data/follow.10.pngbin0 -> 1299 bytes
-rw-r--r--tests/auto/declarative/visual/qmlspringfollow/data/follow.2.pngbin0 -> 1224 bytes
-rw-r--r--tests/auto/declarative/visual/qmlspringfollow/data/follow.3.pngbin0 -> 1243 bytes
-rw-r--r--tests/auto/declarative/visual/qmlspringfollow/data/follow.4.pngbin0 -> 1230 bytes
-rw-r--r--tests/auto/declarative/visual/qmlspringfollow/data/follow.5.pngbin0 -> 1231 bytes
-rw-r--r--tests/auto/declarative/visual/qmlspringfollow/data/follow.6.pngbin0 -> 1239 bytes
-rw-r--r--tests/auto/declarative/visual/qmlspringfollow/data/follow.7.pngbin0 -> 1241 bytes
-rw-r--r--tests/auto/declarative/visual/qmlspringfollow/data/follow.8.pngbin0 -> 1237 bytes
-rw-r--r--tests/auto/declarative/visual/qmlspringfollow/data/follow.9.pngbin0 -> 1229 bytes
-rw-r--r--tests/auto/declarative/visual/qmlspringfollow/data/follow.qml1763
-rw-r--r--tests/auto/declarative/visual/qmlspringfollow/follow.qml71
-rw-r--r--tests/auto/declarative/visual/rect/GradientRect.qml25
-rw-r--r--tests/auto/declarative/visual/rect/MyRect.qml21
-rw-r--r--tests/auto/declarative/visual/rect/data/rect-painting.0.pngbin0 -> 29725 bytes
-rw-r--r--tests/auto/declarative/visual/rect/data/rect-painting.qml287
-rw-r--r--tests/auto/declarative/visual/rect/rect-painting.qml55
-rw-r--r--tests/auto/declarative/visual/repeater/basic1.qml27
-rw-r--r--tests/auto/declarative/visual/repeater/basic2.qml31
-rw-r--r--tests/auto/declarative/visual/repeater/basic3.qml29
-rw-r--r--tests/auto/declarative/visual/repeater/basic4.qml33
-rw-r--r--tests/auto/declarative/visual/repeater/data-MAC/basic1.0.pngbin0 -> 1550 bytes
-rw-r--r--tests/auto/declarative/visual/repeater/data-MAC/basic1.qml323
-rw-r--r--tests/auto/declarative/visual/repeater/data-MAC/basic2.0.pngbin0 -> 1550 bytes
-rw-r--r--tests/auto/declarative/visual/repeater/data-MAC/basic2.qml331
-rw-r--r--tests/auto/declarative/visual/repeater/data-MAC/basic3.0.pngbin0 -> 1550 bytes
-rw-r--r--tests/auto/declarative/visual/repeater/data-MAC/basic3.qml347
-rw-r--r--tests/auto/declarative/visual/repeater/data-MAC/basic4.0.pngbin0 -> 1550 bytes
-rw-r--r--tests/auto/declarative/visual/repeater/data-MAC/basic4.qml419
-rw-r--r--tests/auto/declarative/visual/repeater/data-X11/basic1.0.pngbin0 -> 1354 bytes
-rw-r--r--tests/auto/declarative/visual/repeater/data-X11/basic1.qml323
-rw-r--r--tests/auto/declarative/visual/repeater/data-X11/basic2.0.pngbin0 -> 1354 bytes
-rw-r--r--tests/auto/declarative/visual/repeater/data-X11/basic2.qml331
-rw-r--r--tests/auto/declarative/visual/repeater/data-X11/basic3.0.pngbin0 -> 1354 bytes
-rw-r--r--tests/auto/declarative/visual/repeater/data-X11/basic3.qml347
-rw-r--r--tests/auto/declarative/visual/repeater/data-X11/basic4.0.pngbin0 -> 1354 bytes
-rw-r--r--tests/auto/declarative/visual/repeater/data-X11/basic4.qml419
-rw-r--r--tests/auto/declarative/visual/repeater/data/basic1.0.pngbin0 -> 1513 bytes
-rw-r--r--tests/auto/declarative/visual/repeater/data/basic1.qml323
-rw-r--r--tests/auto/declarative/visual/repeater/data/basic2.0.pngbin0 -> 1513 bytes
-rw-r--r--tests/auto/declarative/visual/repeater/data/basic2.qml331
-rw-r--r--tests/auto/declarative/visual/repeater/data/basic3.0.pngbin0 -> 1513 bytes
-rw-r--r--tests/auto/declarative/visual/repeater/data/basic3.qml347
-rw-r--r--tests/auto/declarative/visual/repeater/data/basic4.0.pngbin0 -> 1513 bytes
-rw-r--r--tests/auto/declarative/visual/repeater/data/basic4.qml419
-rw-r--r--tests/auto/declarative/visual/selftest_noimages/data/selftest_noimages.qml470
-rw-r--r--tests/auto/declarative/visual/selftest_noimages/selftest_noimages.qml9
-rw-r--r--tests/auto/declarative/visual/tst_visual.cpp370
-rw-r--r--tests/auto/declarative/visual/visual.pro7
-rw-r--r--tests/auto/declarative/visual/webview/embedding/data/nesting.0.pngbin0 -> 5659 bytes
-rw-r--r--tests/auto/declarative/visual/webview/embedding/data/nesting.qml363
-rw-r--r--tests/auto/declarative/visual/webview/embedding/egg.qml26
-rw-r--r--tests/auto/declarative/visual/webview/embedding/nesting.html9
-rw-r--r--tests/auto/declarative/visual/webview/embedding/nesting.qml8
-rw-r--r--tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.0.pngbin0 -> 7999 bytes
-rw-r--r--tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.1.pngbin0 -> 8020 bytes
-rw-r--r--tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.2.pngbin0 -> 8143 bytes
-rw-r--r--tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.3.pngbin0 -> 8158 bytes
-rw-r--r--tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.4.pngbin0 -> 8284 bytes
-rw-r--r--tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.5.pngbin0 -> 8284 bytes
-rw-r--r--tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.6.pngbin0 -> 8284 bytes
-rw-r--r--tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.7.pngbin0 -> 8284 bytes
-rw-r--r--tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.8.pngbin0 -> 8284 bytes
-rw-r--r--tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.qml3759
-rw-r--r--tests/auto/declarative/visual/webview/javascript/data/windowObjects.0.pngbin0 -> 7991 bytes
-rw-r--r--tests/auto/declarative/visual/webview/javascript/data/windowObjects.1.pngbin0 -> 7991 bytes
-rw-r--r--tests/auto/declarative/visual/webview/javascript/data/windowObjects.2.pngbin0 -> 7643 bytes
-rw-r--r--tests/auto/declarative/visual/webview/javascript/data/windowObjects.3.pngbin0 -> 7733 bytes
-rw-r--r--tests/auto/declarative/visual/webview/javascript/data/windowObjects.4.pngbin0 -> 8116 bytes
-rw-r--r--tests/auto/declarative/visual/webview/javascript/data/windowObjects.qml2643
-rw-r--r--tests/auto/declarative/visual/webview/javascript/evaluateJavaScript.qml31
-rw-r--r--tests/auto/declarative/visual/webview/javascript/test-objects.html12
-rw-r--r--tests/auto/declarative/visual/webview/javascript/windowObjects.qml26
-rw-r--r--tests/auto/declarative/visual/webview/settings/data/fontFamily.0.pngbin0 -> 3774 bytes
-rw-r--r--tests/auto/declarative/visual/webview/settings/data/fontFamily.qml395
-rw-r--r--tests/auto/declarative/visual/webview/settings/data/fontSize.0.pngbin0 -> 32180 bytes
-rw-r--r--tests/auto/declarative/visual/webview/settings/data/fontSize.qml339
-rw-r--r--tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.0.pngbin0 -> 6609 bytes
-rw-r--r--tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.1.pngbin0 -> 6609 bytes
-rw-r--r--tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.qml595
-rw-r--r--tests/auto/declarative/visual/webview/settings/data/setFontFamily.0.pngbin0 -> 12132 bytes
-rw-r--r--tests/auto/declarative/visual/webview/settings/data/setFontFamily.qml351
-rw-r--r--tests/auto/declarative/visual/webview/settings/fontFamily.qml16
-rw-r--r--tests/auto/declarative/visual/webview/settings/fontSize.qml70
-rw-r--r--tests/auto/declarative/visual/webview/settings/noAutoLoadImages.qml20
-rw-r--r--tests/auto/declarative/visual/webview/settings/qtlogo.pngbin0 -> 2738 bytes
-rw-r--r--tests/auto/declarative/visual/webview/settings/setFontFamily.qml10
-rw-r--r--tests/auto/declarative/visual/webview/settings/tarzeau_ocr_a.ttfbin0 -> 24544 bytes
-rw-r--r--tests/auto/declarative/visual/webview/settings/test-img.html6
-rw-r--r--tests/auto/declarative/visual/webview/settings/test.html9
-rw-r--r--tests/auto/declarative/visual/webview/zooming/data/pageWidth.qml227
-rw-r--r--tests/auto/declarative/visual/webview/zooming/data/renderControl.0.pngbin0 -> 7589 bytes
-rw-r--r--tests/auto/declarative/visual/webview/zooming/data/renderControl.qml415
-rw-r--r--tests/auto/declarative/visual/webview/zooming/data/resolution.0.pngbin0 -> 6275 bytes
-rw-r--r--tests/auto/declarative/visual/webview/zooming/data/resolution.1.pngbin0 -> 3553 bytes
-rw-r--r--tests/auto/declarative/visual/webview/zooming/data/resolution.2.pngbin0 -> 5838 bytes
-rw-r--r--tests/auto/declarative/visual/webview/zooming/data/resolution.3.pngbin0 -> 8005 bytes
-rw-r--r--tests/auto/declarative/visual/webview/zooming/data/resolution.4.pngbin0 -> 6087 bytes
-rw-r--r--tests/auto/declarative/visual/webview/zooming/data/resolution.qml1319
-rw-r--r--tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.0.pngbin0 -> 5589 bytes
-rw-r--r--tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.1.pngbin0 -> 6848 bytes
-rw-r--r--tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.qml655
-rw-r--r--tests/auto/declarative/visual/webview/zooming/data/zooming.0.pngbin0 -> 735 bytes
-rw-r--r--tests/auto/declarative/visual/webview/zooming/data/zooming.1.pngbin0 -> 735 bytes
-rw-r--r--tests/auto/declarative/visual/webview/zooming/data/zooming.2.pngbin0 -> 735 bytes
-rw-r--r--tests/auto/declarative/visual/webview/zooming/data/zooming.3.pngbin0 -> 735 bytes
-rw-r--r--tests/auto/declarative/visual/webview/zooming/data/zooming.qml2115
-rw-r--r--tests/auto/declarative/visual/webview/zooming/pageWidth.qml9
-rw-r--r--tests/auto/declarative/visual/webview/zooming/qtlogo.pngbin0 -> 2738 bytes
-rw-r--r--tests/auto/declarative/visual/webview/zooming/renderControl.html7
-rw-r--r--tests/auto/declarative/visual/webview/zooming/renderControl.qml20
-rw-r--r--tests/auto/declarative/visual/webview/zooming/resolution.html6
-rw-r--r--tests/auto/declarative/visual/webview/zooming/resolution.qml16
-rw-r--r--tests/auto/declarative/visual/webview/zooming/zoomTextOnly.html7
-rw-r--r--tests/auto/declarative/visual/webview/zooming/zoomTextOnly.qml14
-rw-r--r--tests/auto/declarative/visual/webview/zooming/zooming.html6
-rw-r--r--tests/auto/declarative/visual/webview/zooming/zooming.qml17
1508 files changed, 175059 insertions, 0 deletions
diff --git a/tests/auto/declarative/.gitignore b/tests/auto/declarative/.gitignore
new file mode 100644
index 0000000..d937eb4
--- /dev/null
+++ b/tests/auto/declarative/.gitignore
@@ -0,0 +1,4 @@
+tst_*
+!tst_*.*
+tst_*.debug
+tst_*~
diff --git a/tests/auto/declarative/declarative.pro b/tests/auto/declarative/declarative.pro
new file mode 100644
index 0000000..8773026
--- /dev/null
+++ b/tests/auto/declarative/declarative.pro
@@ -0,0 +1,65 @@
+TEMPLATE = subdirs
+SUBDIRS += \
+ graphicswidgets \ # Cover
+ layouts \ # Cover
+ parserstress \ # Cover
+ qmetaobjectbuilder \ # Cover
+ qmlanimations \ # Cover
+ qmlbehaviors \ # Cover
+ qmlbinding \ # Cover
+ qmlconnection \ # Cover
+ qmlcontext \ # Cover
+ qmldatetimeformatter \ # Cover
+ qmldebug \ # Cover
+ qmldebugclient \ # Cover
+ qmldebugservice \ # Cover
+ qmldom \ # Cover
+ qmleasefollow \ # Cover
+ qmlecmascript \ # Cover
+ qmlengine \ # Cover
+ qmlerror \ # Cover
+ qmlfontloader \ # Cover
+ qmlgraphicsanchors \ # Cover
+ qmlgraphicsanimatedimage \ # Cover
+ qmlgraphicsimage \ # Cover
+ qmlgraphicsborderimage \ # Cover
+ qmlgraphicsflickable \ # Cover
+ qmlgraphicsflipable \ # Cover
+ qmlgraphicsgridview \ # Cover
+ qmlgraphicsitem \ # Cover
+ qmlgraphicslistview \ # Cover
+ qmlgraphicsloader \ # Cover
+ qmlgraphicsparticles \ # Cover
+ qmlgraphicspathview \ # Cover
+ qmlgraphicspositioners \ # Cover
+ qmlgraphicstext \ # Cover
+ qmlgraphicstextedit \ # Cover
+ qmlgraphicstextinput \ # Cover
+ qmlgraphicswebview \ # Cover
+ qmlinfo \ # Cover
+ qmlinstruction \ # Cover
+ qmllanguage \ # Cover
+ qmllist \ # Cover
+ qmllistaccessor \ # Cover
+ qmllistmodel \ # Cover
+ qmlmetaproperty \ # Cover
+ qmlmetatype \ # Cover
+ qmlnumberformatter \ # Cover
+ qmlpixmapcache \ # Cover
+ qmlpropertymap \ # Cover
+ qmlqt \ # Cover
+ qmlspringfollow \ # Cover
+ qmlstates \ # Cover
+ qmlsystempalette \ # Cover
+ qmltimer \ # Cover
+ qmlxmllistmodel \ # Cover
+ qpacketprotocol \ # Cover
+ qmlgraphicsrepeater \ # Cover
+ qmlvaluetypes \ # Cover
+ qmlxmlhttprequest \ # Cover
+ sql # Cover
+
+
+# Tests which should run in Pulse
+PULSE_TESTS = $$SUBDIRS
+
diff --git a/tests/auto/declarative/examples/data/dummytest.qml b/tests/auto/declarative/examples/data/dummytest.qml
new file mode 100644
index 0000000..b20e907
--- /dev/null
+++ b/tests/auto/declarative/examples/data/dummytest.qml
@@ -0,0 +1,6 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame { msec: 0 }
+ Frame { msec: 10 }
+}
diff --git a/tests/auto/declarative/examples/data/webbrowser/webbrowser.qml b/tests/auto/declarative/examples/data/webbrowser/webbrowser.qml
new file mode 100644
index 0000000..d31787b
--- /dev/null
+++ b/tests/auto/declarative/examples/data/webbrowser/webbrowser.qml
@@ -0,0 +1,6 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame { msec: 0 }
+ Frame { msec: 2000 }
+}
diff --git a/tests/auto/declarative/examples/examples.pro b/tests/auto/declarative/examples/examples.pro
new file mode 100644
index 0000000..b9bcd28
--- /dev/null
+++ b/tests/auto/declarative/examples/examples.pro
@@ -0,0 +1,5 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_examples.cpp
diff --git a/tests/auto/declarative/examples/tst_examples.cpp b/tests/auto/declarative/examples/tst_examples.cpp
new file mode 100644
index 0000000..fa4526a1
--- /dev/null
+++ b/tests/auto/declarative/examples/tst_examples.cpp
@@ -0,0 +1,201 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QLibraryInfo>
+#include <QDir>
+#include <QProcess>
+#include <QDebug>
+
+class tst_examples : public QObject
+{
+ Q_OBJECT
+public:
+ tst_examples();
+
+private slots:
+ void examples_data();
+ void examples();
+
+ void namingConvention();
+private:
+ QString qmlviewer;
+ QStringList excludedDirs;
+
+ void namingConvention(const QDir &);
+ QStringList findQmlFiles(const QDir &);
+};
+
+tst_examples::tst_examples()
+{
+ QString binaries = QLibraryInfo::location(QLibraryInfo::BinariesPath);
+
+#if defined(Q_WS_MAC)
+ qmlviewer = QDir(binaries).absoluteFilePath("qmlviewer.app/Contents/MacOS/qmlviewer");
+#elif defined(Q_WS_WIN)
+ qmlviewer = QDir(binaries).absoluteFilePath("qmlviewer.exe");
+#else
+ qmlviewer = QDir(binaries).absoluteFilePath("qmlviewer");
+#endif
+
+
+ // Add directories you want excluded here
+ excludedDirs << "examples/declarative/extending";
+ excludedDirs << "examples/declarative/plugins";
+}
+
+/*
+This tests that the demos and examples follow the naming convention required
+to have them tested by the examples() test.
+*/
+void tst_examples::namingConvention(const QDir &d)
+{
+ for (int ii = 0; ii < excludedDirs.count(); ++ii) {
+ QString s = QDir::toNativeSeparators(excludedDirs.at(ii));
+ if (d.absolutePath().endsWith(s))
+ return;
+ }
+
+ QStringList files = d.entryList(QStringList() << QLatin1String("*.qml"),
+ QDir::Files);
+
+ bool seenQml = !files.isEmpty();
+ bool seenLowercase = false;
+
+ foreach (const QString &file, files) {
+ if (file.at(0).isLower())
+ seenLowercase = true;
+ }
+
+ if (!seenQml) {
+ QStringList dirs = d.entryList(QDir::Dirs | QDir::NoDotAndDotDot |
+ QDir::NoSymLinks);
+ foreach (const QString &dir, dirs) {
+ QDir sub = d;
+ sub.cd(dir);
+ namingConvention(sub);
+ }
+ } else if(!seenLowercase) {
+ QTest::qFail(QString("Directory " + d.absolutePath() + " violates naming convention").toLatin1().constData(), __FILE__, __LINE__);
+ }
+}
+
+void tst_examples::namingConvention()
+{
+ QString examples = QLibraryInfo::location(QLibraryInfo::ExamplesPath);
+ QString demos = QLibraryInfo::location(QLibraryInfo::DemosPath);
+
+ namingConvention(QDir(examples));
+ namingConvention(QDir(demos));
+}
+
+QStringList tst_examples::findQmlFiles(const QDir &d)
+{
+ for (int ii = 0; ii < excludedDirs.count(); ++ii) {
+ QString s = QDir::toNativeSeparators(excludedDirs.at(ii));
+ if (d.absolutePath().endsWith(s))
+ return QStringList();
+ }
+
+ QStringList rv;
+
+ QStringList files = d.entryList(QStringList() << QLatin1String("*.qml"),
+ QDir::Files);
+ foreach (const QString &file, files) {
+ if (file.at(0).isLower()) {
+ rv << d.absoluteFilePath(file);
+ }
+ }
+
+ QStringList dirs = d.entryList(QDir::Dirs | QDir::NoDotAndDotDot |
+ QDir::NoSymLinks);
+ foreach (const QString &dir, dirs) {
+ QDir sub = d;
+ sub.cd(dir);
+ rv << findQmlFiles(sub);
+ }
+
+ return rv;
+}
+
+/*
+This test runs all the examples in the declarative UI source tree and ensures
+that they start and exit cleanly.
+
+Examples are any .qml files under the examples/ or demos/ directory that start
+with a lower case letter.
+*/
+void tst_examples::examples_data()
+{
+ QTest::addColumn<QString>("file");
+
+ QString examples = QLibraryInfo::location(QLibraryInfo::ExamplesPath);
+ QString demos = QLibraryInfo::location(QLibraryInfo::DemosPath);
+
+ QStringList files;
+ files << findQmlFiles(QDir(examples));
+ files << findQmlFiles(QDir(demos));
+
+ foreach (const QString &file, files)
+ QTest::newRow(file.toLatin1().constData()) << file;
+}
+
+void tst_examples::examples()
+{
+ QFETCH(QString, file);
+
+ QFileInfo fi(file);
+ QFileInfo dir(fi.path());
+ QString script = "data/"+dir.baseName()+"/"+fi.baseName();
+ QFileInfo testdata(script+".qml");
+ QStringList arguments;
+ arguments << "-script" << (testdata.exists() ? script : QLatin1String("data/dummytest"))
+ << "-scriptopts" << "play,testerror,exitoncomplete,exitonfailure"
+ << file;
+ QProcess p;
+ p.start(qmlviewer, arguments);
+ QVERIFY(p.waitForFinished());
+ QCOMPARE(p.exitStatus(), QProcess::NormalExit);
+ QCOMPARE(p.exitCode(), 0);
+}
+
+QTEST_MAIN(tst_examples)
+
+#include "tst_examples.moc"
diff --git a/tests/auto/declarative/graphicswidgets/data/graphicswidgets.qml b/tests/auto/declarative/graphicswidgets/data/graphicswidgets.qml
new file mode 100644
index 0000000..70fafd6
--- /dev/null
+++ b/tests/auto/declarative/graphicswidgets/data/graphicswidgets.qml
@@ -0,0 +1,57 @@
+import Qt 4.6
+
+QGraphicsView {
+ objectName: "GView"
+ size: "800x600"
+
+ QGraphicsScene {
+ objectName: "GScene"
+ sceneRect: "0,0,500x300"
+
+ QGraphicsWidget {
+ layout: QGraphicsLinearLayout {
+ orientation: Qt.Horizontal
+ QGraphicsWidget {
+ layout: QGraphicsLinearLayout {
+ spacing: 10; orientation: Qt.Vertical
+ LayoutItem {
+ QGraphicsLinearLayout.stretchFactor: 1
+ objectName: "left"
+ minimumSize: "100x100"
+ maximumSize: "300x300"
+ preferredSize: "100x100"
+ Rectangle { objectName: "yellowRect"; color: "yellow"; anchors.fill: parent }
+ }
+ LayoutItem {
+ QGraphicsLinearLayout.stretchFactor: 10
+ objectName: "left"
+ minimumSize: "100x100"
+ maximumSize: "300x300"
+ preferredSize: "100x100"
+ Rectangle { objectName: "yellowRect"; color: "blue"; anchors.fill: parent }
+ }
+ }
+ }
+ QGraphicsWidget {
+ layout: QGraphicsLinearLayout {
+ spacing: 10; orientation: Qt.Vertical
+ LayoutItem {
+ objectName: "left"
+ minimumSize: "100x100"
+ maximumSize: "300x300"
+ preferredSize: "100x100"
+ Rectangle { objectName: "yellowRect"; color: "red"; anchors.fill: parent }
+ }
+ LayoutItem {
+ objectName: "left"
+ minimumSize: "100x100"
+ maximumSize: "300x300"
+ preferredSize: "100x100"
+ Rectangle { objectName: "yellowRect"; color: "green"; anchors.fill: parent }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/graphicswidgets/graphicswidgets.pro b/tests/auto/declarative/graphicswidgets/graphicswidgets.pro
new file mode 100644
index 0000000..712c34c
--- /dev/null
+++ b/tests/auto/declarative/graphicswidgets/graphicswidgets.pro
@@ -0,0 +1,8 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative gui
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_graphicswidgets.cpp
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/graphicswidgets/tst_graphicswidgets.cpp b/tests/auto/declarative/graphicswidgets/tst_graphicswidgets.cpp
new file mode 100644
index 0000000..1bb8c14
--- /dev/null
+++ b/tests/auto/declarative/graphicswidgets/tst_graphicswidgets.cpp
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QFile>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <private/graphicswidgets_p.h>
+
+class tst_graphicswidgets : public QObject
+
+{
+ Q_OBJECT
+public:
+ tst_graphicswidgets();
+
+private slots:
+ void widgets();
+};
+
+tst_graphicswidgets::tst_graphicswidgets()
+{
+}
+
+void tst_graphicswidgets::widgets()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/graphicswidgets.qml"));
+ QGraphicsView *obj = qobject_cast<QGraphicsView*>(c.create());
+
+ QVERIFY(obj != 0);
+ QVERIFY(obj->scene() != 0);
+ QList<QObject*> list;
+ QVERIFY(obj->scene()->children() != list);
+ delete obj;
+}
+
+QTEST_MAIN(tst_graphicswidgets)
+
+#include "tst_graphicswidgets.moc"
diff --git a/tests/auto/declarative/layouts/data/layouts.qml b/tests/auto/declarative/layouts/data/layouts.qml
new file mode 100644
index 0000000..00d785d
--- /dev/null
+++ b/tests/auto/declarative/layouts/data/layouts.qml
@@ -0,0 +1,33 @@
+import Qt 4.6
+
+Item {
+ id: resizable
+ width:300
+ height:300
+
+ GraphicsObjectContainer {
+ anchors.fill: parent
+ synchronizedResizing: true
+
+ QGraphicsWidget {
+
+ layout: QGraphicsLinearLayout {
+ spacing: 0
+ LayoutItem {
+ objectName: "left"
+ minimumSize: "100x100"
+ maximumSize: "300x300"
+ preferredSize: "100x100"
+ Rectangle { objectName: "yellowRect"; color: "yellow"; anchors.fill: parent }
+ }
+ LayoutItem {
+ objectName: "right"
+ minimumSize: "100x100"
+ maximumSize: "400x400"
+ preferredSize: "200x200"
+ Rectangle { objectName: "greenRect"; color: "green"; anchors.fill: parent }
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/layouts/layouts.pro b/tests/auto/declarative/layouts/layouts.pro
new file mode 100644
index 0000000..f38e155
--- /dev/null
+++ b/tests/auto/declarative/layouts/layouts.pro
@@ -0,0 +1,7 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+SOURCES += tst_layouts.cpp
+macx:CONFIG -= app_bundle
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/layouts/tst_layouts.cpp b/tests/auto/declarative/layouts/tst_layouts.cpp
new file mode 100644
index 0000000..0f832bf
--- /dev/null
+++ b/tests/auto/declarative/layouts/tst_layouts.cpp
@@ -0,0 +1,148 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtTest/QtTest>
+#include <private/qlistmodelinterface_p.h>
+#include <qmlview.h>
+#include <private/qmlgraphicslayoutitem_p.h>
+#include <qmlexpression.h>
+#include <QStyle>
+
+class tst_QmlGraphicsLayouts : public QObject
+{
+ Q_OBJECT
+public:
+ tst_QmlGraphicsLayouts();
+
+private slots:
+ void test_qml();//GraphicsLayout set up in Qml
+ void test_cpp();//GraphicsLayout set up in C++
+
+private:
+ QmlView *createView(const QString &filename);
+};
+
+tst_QmlGraphicsLayouts::tst_QmlGraphicsLayouts()
+{
+}
+
+void tst_QmlGraphicsLayouts::test_qml()
+{
+ QmlView *canvas = createView(SRCDIR "/data/layouts.qml");
+
+ canvas->execute();
+ qApp->processEvents();
+ QmlGraphicsLayoutItem *left = static_cast<QmlGraphicsLayoutItem*>(canvas->root()->findChild<QmlGraphicsItem*>("left"));
+ QVERIFY(left != 0);
+
+ QmlGraphicsLayoutItem *right = static_cast<QmlGraphicsLayoutItem*>(canvas->root()->findChild<QmlGraphicsItem*>("right"));
+ QVERIFY(right != 0);
+
+ qreal l = QApplication::style()->pixelMetric(QStyle::PM_LayoutLeftMargin);
+ qreal r = QApplication::style()->pixelMetric(QStyle::PM_LayoutRightMargin);
+ qreal t = QApplication::style()->pixelMetric(QStyle::PM_LayoutTopMargin);
+ qreal b = QApplication::style()->pixelMetric(QStyle::PM_LayoutBottomMargin);
+ QVERIFY2(l == r && r == t && t == b, "Test assumes equal margins.");
+ qreal gvMargin = l;
+ //Preferred Size
+ canvas->root()->setWidth(300 + 2*gvMargin);
+ canvas->root()->setHeight(300 + 2*gvMargin);
+
+ QCOMPARE(left->x(), gvMargin);
+ QCOMPARE(left->y(), gvMargin);
+ QCOMPARE(left->width(), 100.0);
+ QCOMPARE(left->height(), 300.0);
+
+ QCOMPARE(right->x(), 100.0 + gvMargin);
+ QCOMPARE(right->y(), 0.0 + gvMargin);
+ QCOMPARE(right->width(), 200.0);
+ QCOMPARE(right->height(), 300.0);
+
+ //Minimum Size
+ canvas->root()->setWidth(10+2*gvMargin);
+ canvas->root()->setHeight(10+2*gvMargin);
+
+ QCOMPARE(left->x(), gvMargin);
+ QCOMPARE(left->width(), 100.0);
+ QCOMPARE(left->height(), 100.0);
+
+ QCOMPARE(right->x(), 100.0 + gvMargin);
+ QCOMPARE(right->width(), 100.0);
+ QCOMPARE(right->height(), 100.0);
+
+ //Between preferred and Maximum Size
+ /*Note that if set to maximum size (or above) GraphicsLinearLayout behavior
+ is to shrink them down to preferred size. So the exact maximum size can't
+ be used*/
+ canvas->root()->setWidth(670 + 2*gvMargin);
+ canvas->root()->setHeight(300 + 2*gvMargin);
+
+ QCOMPARE(left->x(), gvMargin);
+ QCOMPARE(left->width(), 270.0);
+ QCOMPARE(left->height(), 300.0);
+
+ QCOMPARE(right->x(), 270.0 + gvMargin);
+ QCOMPARE(right->width(), 400.0);
+ QCOMPARE(right->height(), 300.0);
+
+ delete canvas;
+}
+
+void tst_QmlGraphicsLayouts::test_cpp()
+{
+ //TODO: Waiting on QT-2407 to write this test
+}
+
+QmlView *tst_QmlGraphicsLayouts::createView(const QString &filename)
+{
+ QmlView *canvas = new QmlView(0);
+
+ QFile file(filename);
+ file.open(QFile::ReadOnly);
+ QString qml = file.readAll();
+ canvas->setQml(qml, filename);
+
+ return canvas;
+}
+
+
+QTEST_MAIN(tst_QmlGraphicsLayouts)
+
+#include "tst_layouts.moc"
diff --git a/tests/auto/declarative/parserstress/parserstress.pro b/tests/auto/declarative/parserstress/parserstress.pro
new file mode 100644
index 0000000..48f147a
--- /dev/null
+++ b/tests/auto/declarative/parserstress/parserstress.pro
@@ -0,0 +1,7 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_parserstress.cpp
+
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/parserstress/tst_parserstress.cpp b/tests/auto/declarative/parserstress/tst_parserstress.cpp
new file mode 100644
index 0000000..a607bb3
--- /dev/null
+++ b/tests/auto/declarative/parserstress/tst_parserstress.cpp
@@ -0,0 +1,151 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qtest.h>
+#include <QmlEngine>
+#include <QmlComponent>
+#include <QDebug>
+#include <QDir>
+#include <QFile>
+
+class tst_parserstress : public QObject
+{
+ Q_OBJECT
+public:
+ tst_parserstress() {}
+
+private slots:
+ void ecmascript_data();
+ void ecmascript();
+
+private:
+ static QStringList findJSFiles(const QDir &);
+ QmlEngine engine;
+};
+
+QStringList tst_parserstress::findJSFiles(const QDir &d)
+{
+ QStringList rv;
+
+ QStringList files = d.entryList(QStringList() << QLatin1String("*.js"),
+ QDir::Files);
+ foreach (const QString &file, files) {
+ if (file == "browser.js")
+ continue;
+ rv << d.absoluteFilePath(file);
+ }
+
+ QStringList dirs = d.entryList(QDir::Dirs | QDir::NoDotAndDotDot |
+ QDir::NoSymLinks);
+ foreach (const QString &dir, dirs) {
+ QDir sub = d;
+ sub.cd(dir);
+ rv << findJSFiles(sub);
+ }
+
+ return rv;
+}
+
+void tst_parserstress::ecmascript_data()
+{
+ QDir dir(SRCDIR);
+ dir.cdUp();
+ dir.cdUp();
+ dir.cd("qscriptjstestsuite");
+ dir.cd("tests");
+
+ QStringList files = findJSFiles(dir);
+
+ QTest::addColumn<QString>("file");
+ foreach (const QString &file, files) {
+ QTest::newRow(qPrintable(file)) << file;
+ }
+}
+
+void tst_parserstress::ecmascript()
+{
+ QFETCH(QString, file);
+
+ QFile f(file);
+ QVERIFY(f.open(QIODevice::ReadOnly));
+
+ QByteArray data = f.readAll();
+
+ QVERIFY(!data.isEmpty());
+
+ QString dataStr = QString::fromUtf8(data);
+
+ QString qml = "import Qt 4.6\n";
+ qml+= "\n";
+ qml+= "QtObject {\n";
+ qml+= " property int test\n";
+ qml+= " test: {\n";
+ qml+= dataStr + "\n";
+ qml+= " return 1;\n";
+ qml+= " }\n";
+ qml+= " Script {\n";
+ qml+= " function stress() {\n";
+ qml+= dataStr;
+ qml+= " }\n";
+ qml+= " }\n";
+ qml+= "}\n";
+
+ QByteArray qmlData = qml.toUtf8();
+
+ QmlComponent component(&engine);
+ component.setData(qmlData, QUrl::fromLocalFile(SRCDIR + QString("/dummy.qml")));
+ QSet<QString> failingTests;
+ failingTests << "uc-003.js" << "uc-005.js" << "regress-352044-02-n.js"
+ << "regress-334158.js" << "regress-58274.js" << "dowhile-006.js" << "dowhile-005.js";
+ QFileInfo info(file);
+ foreach (const QString &failing, failingTests) {
+ if (info.fileName().endsWith(failing)) {
+ QEXPECT_FAIL("", "QTBUG-8108", Continue);
+ break;
+ }
+ }
+ QVERIFY(!component.isError());
+}
+
+
+QTEST_MAIN(tst_parserstress)
+
+#include "tst_parserstress.moc"
diff --git a/tests/auto/declarative/qmetaobjectbuilder/qmetaobjectbuilder.pro b/tests/auto/declarative/qmetaobjectbuilder/qmetaobjectbuilder.pro
new file mode 100644
index 0000000..94ffe4b
--- /dev/null
+++ b/tests/auto/declarative/qmetaobjectbuilder/qmetaobjectbuilder.pro
@@ -0,0 +1,7 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+macx:CONFIG -= app_bundle
+
+SOURCES += \
+ tst_qmetaobjectbuilder.cpp
+
diff --git a/tests/auto/declarative/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp b/tests/auto/declarative/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp
new file mode 100644
index 0000000..b82372a
--- /dev/null
+++ b/tests/auto/declarative/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp
@@ -0,0 +1,1258 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/QtTest>
+#include <QtCore/qlocale.h>
+#include <private/qmetaobjectbuilder_p.h>
+
+class tst_QMetaObjectBuilder : public QObject
+{
+ Q_OBJECT
+public:
+ tst_QMetaObjectBuilder() {}
+ ~tst_QMetaObjectBuilder() {}
+
+private slots:
+ void mocVersionCheck();
+ void create();
+ void className();
+ void superClass();
+ void flags();
+ void method();
+ void slot();
+ void signal();
+ void constructor();
+ void property();
+ void notifySignal();
+ void enumerator();
+ void classInfo();
+ void relatedMetaObject();
+ void staticMetacall();
+ void copyMetaObject();
+ void serialize();
+ void removeNotifySignal();
+
+private:
+ static bool checkForSideEffects
+ (const QMetaObjectBuilder& builder,
+ QMetaObjectBuilder::AddMembers members);
+ static bool sameMetaObject
+ (const QMetaObject *meta1, const QMetaObject *meta2);
+};
+
+// Dummy class that has something of every type of thing moc can generate.
+class SomethingOfEverything : public QObject
+{
+ Q_OBJECT
+ Q_CLASSINFO("ci_foo", "ABC")
+ Q_CLASSINFO("ci_bar", "DEF")
+ Q_PROPERTY(QString prop READ prop WRITE setProp NOTIFY propChanged)
+ Q_PROPERTY(QString prop2 READ prop WRITE setProp)
+ Q_PROPERTY(SomethingEnum eprop READ eprop)
+ Q_PROPERTY(SomethingFlagEnum fprop READ fprop)
+ Q_PROPERTY(QLocale::Language language READ language)
+ Q_ENUMS(SomethingEnum)
+ Q_FLAGS(SomethingFlagEnum)
+public:
+ Q_INVOKABLE SomethingOfEverything() {}
+ ~SomethingOfEverything() {}
+
+ enum SomethingEnum
+ {
+ GHI,
+ JKL = 10
+ };
+
+ enum SomethingFlagEnum
+ {
+ XYZ = 1,
+ UVW = 8
+ };
+
+ Q_INVOKABLE Q_SCRIPTABLE void method1() {}
+
+ QString prop() const { return QString(); }
+ void setProp(const QString& v) { Q_UNUSED(v); }
+
+ SomethingOfEverything::SomethingEnum eprop() const { return GHI; }
+ SomethingOfEverything::SomethingFlagEnum fprop() const { return XYZ; }
+ QLocale::Language language() const { return QLocale::English; }
+
+public slots:
+ void slot1(const QString&) {}
+ void slot2(int, const QString&) {}
+
+private slots:
+ void slot3() {}
+
+protected slots:
+ Q_SCRIPTABLE void slot4(int) {}
+ void slot5(int a, const QString& b) { Q_UNUSED(a); Q_UNUSED(b); }
+
+signals:
+ void sig1();
+ void sig2(int x, const QString& y);
+ void propChanged(const QString&);
+};
+
+void tst_QMetaObjectBuilder::mocVersionCheck()
+{
+ // This test will fail when the moc version number is changed.
+ // It is intended as a reminder to also update QMetaObjectBuilder
+ // whenenver moc changes. Once QMetaObjectBuilder has been
+ // updated, this test can be changed to check for the next version.
+ QEXPECT_FAIL("", "QT-2918", Continue);
+ QCOMPARE(int(QObject::staticMetaObject.d.data[0]), 4);
+ QEXPECT_FAIL("", "QT-2918", Continue);
+ QCOMPARE(int(staticMetaObject.d.data[0]), 4);
+}
+
+void tst_QMetaObjectBuilder::create()
+{
+ QMetaObjectBuilder builder;
+ QVERIFY(builder.className().isEmpty());
+ QVERIFY(builder.superClass() == &QObject::staticMetaObject);
+ QCOMPARE(builder.methodCount(), 0);
+ QCOMPARE(builder.constructorCount(), 0);
+ QCOMPARE(builder.propertyCount(), 0);
+ QCOMPARE(builder.enumeratorCount(), 0);
+ QCOMPARE(builder.classInfoCount(), 0);
+ QCOMPARE(builder.relatedMetaObjectCount(), 0);
+ QVERIFY(builder.staticMetacallFunction() == 0);
+}
+
+void tst_QMetaObjectBuilder::className()
+{
+ QMetaObjectBuilder builder;
+
+ // Change the class name.
+ builder.setClassName("Foo");
+ QCOMPARE(builder.className(), QByteArray("Foo"));
+
+ // Change it again.
+ builder.setClassName("Bar");
+ QCOMPARE(builder.className(), QByteArray("Bar"));
+
+ // Clone the class name off a static QMetaObject.
+ builder.addMetaObject(&QObject::staticMetaObject, QMetaObjectBuilder::ClassName);
+ QCOMPARE(builder.className(), QByteArray("QObject"));
+
+ // Check that nothing else changed.
+ QVERIFY(checkForSideEffects(builder, QMetaObjectBuilder::ClassName));
+}
+
+void tst_QMetaObjectBuilder::superClass()
+{
+ QMetaObjectBuilder builder;
+
+ // Change the super class.
+ builder.setSuperClass(&QObject::staticMetaObject);
+ QVERIFY(builder.superClass() == &QObject::staticMetaObject);
+
+ // Change it again.
+ builder.setSuperClass(&staticMetaObject);
+ QVERIFY(builder.superClass() == &staticMetaObject);
+
+ // Clone the super class off a static QMetaObject.
+ builder.addMetaObject(&QObject::staticMetaObject, QMetaObjectBuilder::SuperClass);
+ QVERIFY(builder.superClass() == 0);
+ builder.addMetaObject(&staticMetaObject, QMetaObjectBuilder::SuperClass);
+ QVERIFY(builder.superClass() == staticMetaObject.superClass());
+
+ // Check that nothing else changed.
+ QVERIFY(checkForSideEffects(builder, QMetaObjectBuilder::SuperClass));
+}
+
+void tst_QMetaObjectBuilder::flags()
+{
+ QMetaObjectBuilder builder;
+
+ // Check default
+ QVERIFY(builder.flags() == 0);
+
+ // Set flags
+ builder.setFlags(QMetaObjectBuilder::DynamicMetaObject);
+ QVERIFY(builder.flags() == QMetaObjectBuilder::DynamicMetaObject);
+}
+
+void tst_QMetaObjectBuilder::method()
+{
+ QMetaObjectBuilder builder;
+
+ // Check null method
+ QMetaMethodBuilder nullMethod;
+ QCOMPARE(nullMethod.signature(), QByteArray());
+ QVERIFY(nullMethod.methodType() == QMetaMethod::Method);
+ QVERIFY(nullMethod.returnType().isEmpty());
+ QVERIFY(nullMethod.parameterNames().isEmpty());
+ QVERIFY(nullMethod.tag().isEmpty());
+ QVERIFY(nullMethod.access() == QMetaMethod::Public);
+ QCOMPARE(nullMethod.attributes(), 0);
+ QCOMPARE(nullMethod.index(), 0);
+
+ // Add a method and check its attributes.
+ QMetaMethodBuilder method1 = builder.addMethod("foo(const QString&, int)");
+ QCOMPARE(method1.signature(), QByteArray("foo(QString,int)"));
+ QVERIFY(method1.methodType() == QMetaMethod::Method);
+ QVERIFY(method1.returnType().isEmpty());
+ QVERIFY(method1.parameterNames().isEmpty());
+ QVERIFY(method1.tag().isEmpty());
+ QVERIFY(method1.access() == QMetaMethod::Public);
+ QCOMPARE(method1.attributes(), 0);
+ QCOMPARE(method1.index(), 0);
+ QCOMPARE(builder.methodCount(), 1);
+
+ // Add another method and check again.
+ QMetaMethodBuilder method2 = builder.addMethod("bar(QString)", "int");
+ QCOMPARE(method2.signature(), QByteArray("bar(QString)"));
+ QVERIFY(method2.methodType() == QMetaMethod::Method);
+ QCOMPARE(method2.returnType(), QByteArray("int"));
+ QVERIFY(method2.parameterNames().isEmpty());
+ QVERIFY(method2.tag().isEmpty());
+ QVERIFY(method2.access() == QMetaMethod::Public);
+ QCOMPARE(method2.attributes(), 0);
+ QCOMPARE(method2.index(), 1);
+ QCOMPARE(builder.methodCount(), 2);
+
+ // Perform index-based lookup.
+ QCOMPARE(builder.indexOfMethod("foo(const QString&, int)"), 0);
+ QCOMPARE(builder.indexOfMethod("bar(QString)"), 1);
+ QCOMPARE(builder.indexOfMethod("baz()"), -1);
+
+ // Modify the attributes on method1.
+ method1.setReturnType("int");
+ method1.setParameterNames(QList<QByteArray>() << "a" << "b");
+ method1.setTag("tag");
+ method1.setAccess(QMetaMethod::Private);
+ method1.setAttributes(42);
+
+ // Check that method1 is changed, but method2 is not.
+ QCOMPARE(method1.signature(), QByteArray("foo(QString,int)"));
+ QVERIFY(method1.methodType() == QMetaMethod::Method);
+ QCOMPARE(method1.returnType(), QByteArray("int"));
+ QCOMPARE(method1.parameterNames(), QList<QByteArray>() << "a" << "b");
+ QCOMPARE(method1.tag(), QByteArray("tag"));
+ QVERIFY(method1.access() == QMetaMethod::Private);
+ QCOMPARE(method1.attributes(), 42);
+ QCOMPARE(method1.index(), 0);
+ QCOMPARE(method2.signature(), QByteArray("bar(QString)"));
+ QVERIFY(method2.methodType() == QMetaMethod::Method);
+ QCOMPARE(method2.returnType(), QByteArray("int"));
+ QVERIFY(method2.parameterNames().isEmpty());
+ QVERIFY(method2.tag().isEmpty());
+ QVERIFY(method2.access() == QMetaMethod::Public);
+ QCOMPARE(method2.attributes(), 0);
+ QCOMPARE(method2.index(), 1);
+ QCOMPARE(builder.methodCount(), 2);
+
+ // Modify the attributes on method2.
+ method2.setReturnType("QString");
+ method2.setParameterNames(QList<QByteArray>() << "c");
+ method2.setTag("Q_FOO");
+ method2.setAccess(QMetaMethod::Protected);
+ method2.setAttributes(24);
+
+ // This time check that only method2 changed.
+ QCOMPARE(method1.signature(), QByteArray("foo(QString,int)"));
+ QVERIFY(method1.methodType() == QMetaMethod::Method);
+ QCOMPARE(method1.returnType(), QByteArray("int"));
+ QCOMPARE(method1.parameterNames(), QList<QByteArray>() << "a" << "b");
+ QCOMPARE(method1.tag(), QByteArray("tag"));
+ QVERIFY(method1.access() == QMetaMethod::Private);
+ QCOMPARE(method1.attributes(), 42);
+ QCOMPARE(method1.index(), 0);
+ QCOMPARE(method2.signature(), QByteArray("bar(QString)"));
+ QVERIFY(method2.methodType() == QMetaMethod::Method);
+ QCOMPARE(method2.returnType(), QByteArray("QString"));
+ QCOMPARE(method2.parameterNames(), QList<QByteArray>() << "c");
+ QCOMPARE(method2.tag(), QByteArray("Q_FOO"));
+ QVERIFY(method2.access() == QMetaMethod::Protected);
+ QCOMPARE(method2.attributes(), 24);
+ QCOMPARE(method2.index(), 1);
+ QCOMPARE(builder.methodCount(), 2);
+
+ // Remove method1 and check that method2 becomes index 0.
+ builder.removeMethod(0);
+ QCOMPARE(builder.methodCount(), 1);
+ method2 = builder.method(0);
+ QCOMPARE(method2.signature(), QByteArray("bar(QString)"));
+ QVERIFY(method2.methodType() == QMetaMethod::Method);
+ QCOMPARE(method2.returnType(), QByteArray("QString"));
+ QCOMPARE(method2.parameterNames(), QList<QByteArray>() << "c");
+ QCOMPARE(method2.tag(), QByteArray("Q_FOO"));
+ QVERIFY(method2.access() == QMetaMethod::Protected);
+ QCOMPARE(method2.attributes(), 24);
+ QCOMPARE(method2.index(), 0);
+
+ // Perform index-based lookup again.
+ QCOMPARE(builder.indexOfMethod("foo(const QString&, int)"), -1);
+ QCOMPARE(builder.indexOfMethod("bar(QString)"), 0);
+ QCOMPARE(builder.indexOfMethod("baz()"), -1);
+ QCOMPARE(builder.method(0).signature(), QByteArray("bar(QString)"));
+ QCOMPARE(builder.method(9).signature(), QByteArray());
+
+ // Check that nothing else changed.
+ QVERIFY(checkForSideEffects(builder, QMetaObjectBuilder::Methods));
+}
+
+void tst_QMetaObjectBuilder::slot()
+{
+ QMetaObjectBuilder builder;
+
+ // Add a slot and check its attributes.
+ QMetaMethodBuilder method1 = builder.addSlot("foo(const QString&, int)");
+ QCOMPARE(method1.signature(), QByteArray("foo(QString,int)"));
+ QVERIFY(method1.methodType() == QMetaMethod::Slot);
+ QVERIFY(method1.returnType().isEmpty());
+ QVERIFY(method1.parameterNames().isEmpty());
+ QVERIFY(method1.tag().isEmpty());
+ QVERIFY(method1.access() == QMetaMethod::Public);
+ QCOMPARE(method1.attributes(), 0);
+ QCOMPARE(method1.index(), 0);
+ QCOMPARE(builder.methodCount(), 1);
+
+ // Add another slot and check again.
+ QMetaMethodBuilder method2 = builder.addSlot("bar(QString)");
+ QCOMPARE(method2.signature(), QByteArray("bar(QString)"));
+ QVERIFY(method2.methodType() == QMetaMethod::Slot);
+ QVERIFY(method2.returnType().isEmpty());
+ QVERIFY(method2.parameterNames().isEmpty());
+ QVERIFY(method2.tag().isEmpty());
+ QVERIFY(method2.access() == QMetaMethod::Public);
+ QCOMPARE(method2.attributes(), 0);
+ QCOMPARE(method2.index(), 1);
+ QCOMPARE(builder.methodCount(), 2);
+
+ // Perform index-based lookup
+ QCOMPARE(builder.indexOfSlot("foo(const QString &, int)"), 0);
+ QCOMPARE(builder.indexOfSlot("bar(QString)"), 1);
+ QCOMPARE(builder.indexOfSlot("baz()"), -1);
+
+ // Check that nothing else changed.
+ QVERIFY(checkForSideEffects(builder, QMetaObjectBuilder::Methods));
+}
+
+void tst_QMetaObjectBuilder::signal()
+{
+ QMetaObjectBuilder builder;
+
+ // Add a signal and check its attributes.
+ QMetaMethodBuilder method1 = builder.addSignal("foo(const QString&, int)");
+ QCOMPARE(method1.signature(), QByteArray("foo(QString,int)"));
+ QVERIFY(method1.methodType() == QMetaMethod::Signal);
+ QVERIFY(method1.returnType().isEmpty());
+ QVERIFY(method1.parameterNames().isEmpty());
+ QVERIFY(method1.tag().isEmpty());
+ QVERIFY(method1.access() == QMetaMethod::Protected);
+ QCOMPARE(method1.attributes(), 0);
+ QCOMPARE(method1.index(), 0);
+ QCOMPARE(builder.methodCount(), 1);
+
+ // Add another signal and check again.
+ QMetaMethodBuilder method2 = builder.addSignal("bar(QString)");
+ QCOMPARE(method2.signature(), QByteArray("bar(QString)"));
+ QVERIFY(method2.methodType() == QMetaMethod::Signal);
+ QVERIFY(method2.returnType().isEmpty());
+ QVERIFY(method2.parameterNames().isEmpty());
+ QVERIFY(method2.tag().isEmpty());
+ QVERIFY(method2.access() == QMetaMethod::Protected);
+ QCOMPARE(method2.attributes(), 0);
+ QCOMPARE(method2.index(), 1);
+ QCOMPARE(builder.methodCount(), 2);
+
+ // Perform index-based lookup
+ QCOMPARE(builder.indexOfSignal("foo(const QString &, int)"), 0);
+ QCOMPARE(builder.indexOfSignal("bar(QString)"), 1);
+ QCOMPARE(builder.indexOfSignal("baz()"), -1);
+
+ // Check that nothing else changed.
+ QVERIFY(checkForSideEffects(builder, QMetaObjectBuilder::Methods));
+}
+
+void tst_QMetaObjectBuilder::constructor()
+{
+ QMetaObjectBuilder builder;
+
+ // Add a constructor and check its attributes.
+ QMetaMethodBuilder ctor1 = builder.addConstructor("foo(const QString&, int)");
+ QCOMPARE(ctor1.signature(), QByteArray("foo(QString,int)"));
+ QVERIFY(ctor1.methodType() == QMetaMethod::Constructor);
+ QVERIFY(ctor1.returnType().isEmpty());
+ QVERIFY(ctor1.parameterNames().isEmpty());
+ QVERIFY(ctor1.tag().isEmpty());
+ QVERIFY(ctor1.access() == QMetaMethod::Public);
+ QCOMPARE(ctor1.attributes(), 0);
+ QCOMPARE(ctor1.index(), 0);
+ QCOMPARE(builder.constructorCount(), 1);
+
+ // Add another constructor and check again.
+ QMetaMethodBuilder ctor2 = builder.addConstructor("bar(QString)");
+ QCOMPARE(ctor2.signature(), QByteArray("bar(QString)"));
+ QVERIFY(ctor2.methodType() == QMetaMethod::Constructor);
+ QVERIFY(ctor2.returnType().isEmpty());
+ QVERIFY(ctor2.parameterNames().isEmpty());
+ QVERIFY(ctor2.tag().isEmpty());
+ QVERIFY(ctor2.access() == QMetaMethod::Public);
+ QCOMPARE(ctor2.attributes(), 0);
+ QCOMPARE(ctor2.index(), 1);
+ QCOMPARE(builder.constructorCount(), 2);
+
+ // Perform index-based lookup.
+ QCOMPARE(builder.indexOfConstructor("foo(const QString&, int)"), 0);
+ QCOMPARE(builder.indexOfConstructor("bar(QString)"), 1);
+ QCOMPARE(builder.indexOfConstructor("baz()"), -1);
+ QCOMPARE(builder.constructor(1).signature(), QByteArray("bar(QString)"));
+ QCOMPARE(builder.constructor(9).signature(), QByteArray());
+
+ // Modify the attributes on ctor1.
+ ctor1.setReturnType("int");
+ ctor1.setParameterNames(QList<QByteArray>() << "a" << "b");
+ ctor1.setTag("tag");
+ ctor1.setAccess(QMetaMethod::Private);
+ ctor1.setAttributes(42);
+
+ // Check that ctor1 is changed, but ctor2 is not.
+ QCOMPARE(ctor1.signature(), QByteArray("foo(QString,int)"));
+ QVERIFY(ctor1.methodType() == QMetaMethod::Constructor);
+ QCOMPARE(ctor1.returnType(), QByteArray("int"));
+ QCOMPARE(ctor1.parameterNames(), QList<QByteArray>() << "a" << "b");
+ QCOMPARE(ctor1.tag(), QByteArray("tag"));
+ QVERIFY(ctor1.access() == QMetaMethod::Private);
+ QCOMPARE(ctor1.attributes(), 42);
+ QCOMPARE(ctor1.index(), 0);
+ QCOMPARE(ctor2.signature(), QByteArray("bar(QString)"));
+ QVERIFY(ctor2.methodType() == QMetaMethod::Constructor);
+ QVERIFY(ctor2.returnType().isEmpty());
+ QVERIFY(ctor2.parameterNames().isEmpty());
+ QVERIFY(ctor2.tag().isEmpty());
+ QVERIFY(ctor2.access() == QMetaMethod::Public);
+ QCOMPARE(ctor2.attributes(), 0);
+ QCOMPARE(ctor2.index(), 1);
+ QCOMPARE(builder.constructorCount(), 2);
+
+ // Modify the attributes on ctor2.
+ ctor2.setReturnType("QString");
+ ctor2.setParameterNames(QList<QByteArray>() << "c");
+ ctor2.setTag("Q_FOO");
+ ctor2.setAccess(QMetaMethod::Protected);
+ ctor2.setAttributes(24);
+
+ // This time check that only ctor2 changed.
+ QCOMPARE(ctor1.signature(), QByteArray("foo(QString,int)"));
+ QVERIFY(ctor1.methodType() == QMetaMethod::Constructor);
+ QCOMPARE(ctor1.returnType(), QByteArray("int"));
+ QCOMPARE(ctor1.parameterNames(), QList<QByteArray>() << "a" << "b");
+ QCOMPARE(ctor1.tag(), QByteArray("tag"));
+ QVERIFY(ctor1.access() == QMetaMethod::Private);
+ QCOMPARE(ctor1.attributes(), 42);
+ QCOMPARE(ctor1.index(), 0);
+ QCOMPARE(ctor2.signature(), QByteArray("bar(QString)"));
+ QVERIFY(ctor2.methodType() == QMetaMethod::Constructor);
+ QCOMPARE(ctor2.returnType(), QByteArray("QString"));
+ QCOMPARE(ctor2.parameterNames(), QList<QByteArray>() << "c");
+ QCOMPARE(ctor2.tag(), QByteArray("Q_FOO"));
+ QVERIFY(ctor2.access() == QMetaMethod::Protected);
+ QCOMPARE(ctor2.attributes(), 24);
+ QCOMPARE(ctor2.index(), 1);
+ QCOMPARE(builder.constructorCount(), 2);
+
+ // Remove ctor1 and check that ctor2 becomes index 0.
+ builder.removeConstructor(0);
+ QCOMPARE(builder.constructorCount(), 1);
+ ctor2 = builder.constructor(0);
+ QCOMPARE(ctor2.signature(), QByteArray("bar(QString)"));
+ QVERIFY(ctor2.methodType() == QMetaMethod::Constructor);
+ QCOMPARE(ctor2.returnType(), QByteArray("QString"));
+ QCOMPARE(ctor2.parameterNames(), QList<QByteArray>() << "c");
+ QCOMPARE(ctor2.tag(), QByteArray("Q_FOO"));
+ QVERIFY(ctor2.access() == QMetaMethod::Protected);
+ QCOMPARE(ctor2.attributes(), 24);
+ QCOMPARE(ctor2.index(), 0);
+
+ // Perform index-based lookup again.
+ QCOMPARE(builder.indexOfConstructor("foo(const QString&, int)"), -1);
+ QCOMPARE(builder.indexOfConstructor("bar(QString)"), 0);
+ QCOMPARE(builder.indexOfConstructor("baz()"), -1);
+
+ // Add constructor from prototype
+ QMetaMethod prototype = SomethingOfEverything::staticMetaObject.constructor(0);
+ QMetaMethodBuilder prototypeConstructor = builder.addMethod(prototype);
+ QCOMPARE(builder.constructorCount(), 2);
+
+ QCOMPARE(prototypeConstructor.signature(), QByteArray("SomethingOfEverything()"));
+ QVERIFY(prototypeConstructor.methodType() == QMetaMethod::Constructor);
+ QCOMPARE(prototypeConstructor.returnType(), QByteArray());
+ QVERIFY(prototypeConstructor.access() == QMetaMethod::Public);
+ QCOMPARE(prototypeConstructor.index(), 1);
+
+ // Check that nothing else changed.
+ QVERIFY(checkForSideEffects(builder, QMetaObjectBuilder::Constructors));
+}
+
+void tst_QMetaObjectBuilder::property()
+{
+ QMetaObjectBuilder builder;
+
+ // Null property builder
+ QMetaPropertyBuilder nullProp;
+ QCOMPARE(nullProp.name(), QByteArray());
+ QCOMPARE(nullProp.type(), QByteArray());
+ QVERIFY(!nullProp.hasNotifySignal());
+ QVERIFY(!nullProp.isReadable());
+ QVERIFY(!nullProp.isWritable());
+ QVERIFY(!nullProp.isResettable());
+ QVERIFY(!nullProp.isDesignable());
+ QVERIFY(!nullProp.isScriptable());
+ QVERIFY(!nullProp.isStored());
+ QVERIFY(!nullProp.isEditable());
+ QVERIFY(!nullProp.isUser());
+ QVERIFY(!nullProp.hasStdCppSet());
+ QVERIFY(!nullProp.isEnumOrFlag());
+ QVERIFY(!nullProp.isDynamic());
+ QCOMPARE(nullProp.index(), 0);
+
+ // Add a property and check its attributes.
+ QMetaPropertyBuilder prop1 = builder.addProperty("foo", "const QString &");
+ QCOMPARE(prop1.name(), QByteArray("foo"));
+ QCOMPARE(prop1.type(), QByteArray("QString"));
+ QVERIFY(!prop1.hasNotifySignal());
+ QVERIFY(prop1.isReadable());
+ QVERIFY(prop1.isWritable());
+ QVERIFY(!prop1.isResettable());
+ QVERIFY(!prop1.isDesignable());
+ QVERIFY(!prop1.isScriptable());
+ QVERIFY(!prop1.isStored());
+ QVERIFY(!prop1.isEditable());
+ QVERIFY(!prop1.isUser());
+ QVERIFY(!prop1.hasStdCppSet());
+ QVERIFY(!prop1.isEnumOrFlag());
+ QVERIFY(!prop1.isDynamic());
+ QCOMPARE(prop1.index(), 0);
+ QCOMPARE(builder.propertyCount(), 1);
+
+ // Add another property and check again.
+ QMetaPropertyBuilder prop2 = builder.addProperty("bar", "int");
+ QCOMPARE(prop2.name(), QByteArray("bar"));
+ QCOMPARE(prop2.type(), QByteArray("int"));
+ QVERIFY(!prop2.hasNotifySignal());
+ QVERIFY(prop2.isReadable());
+ QVERIFY(prop2.isWritable());
+ QVERIFY(!prop2.isResettable());
+ QVERIFY(!prop2.isDesignable());
+ QVERIFY(!prop2.isScriptable());
+ QVERIFY(!prop2.isStored());
+ QVERIFY(!prop2.isEditable());
+ QVERIFY(!prop2.isUser());
+ QVERIFY(!prop2.hasStdCppSet());
+ QVERIFY(!prop2.isEnumOrFlag());
+ QVERIFY(!prop2.isDynamic());
+ QCOMPARE(prop2.index(), 1);
+ QCOMPARE(builder.propertyCount(), 2);
+
+ // Perform index-based lookup.
+ QCOMPARE(builder.indexOfProperty("foo"), 0);
+ QCOMPARE(builder.indexOfProperty("bar"), 1);
+ QCOMPARE(builder.indexOfProperty("baz"), -1);
+ QCOMPARE(builder.property(1).name(), QByteArray("bar"));
+ QCOMPARE(builder.property(9).name(), QByteArray());
+
+ // Modify the attributes on prop1.
+ prop1.setReadable(false);
+ prop1.setWritable(false);
+ prop1.setResettable(true);
+ prop1.setDesignable(true);
+ prop1.setScriptable(true);
+ prop1.setStored(true);
+ prop1.setEditable(true);
+ prop1.setUser(true);
+ prop1.setStdCppSet(true);
+ prop1.setEnumOrFlag(true);
+ prop1.setDynamic(true);
+
+ // Check that prop1 is changed, but prop2 is not.
+ QCOMPARE(prop1.name(), QByteArray("foo"));
+ QCOMPARE(prop1.type(), QByteArray("QString"));
+ QVERIFY(!prop1.isReadable());
+ QVERIFY(!prop1.isWritable());
+ QVERIFY(prop1.isResettable());
+ QVERIFY(prop1.isDesignable());
+ QVERIFY(prop1.isScriptable());
+ QVERIFY(prop1.isStored());
+ QVERIFY(prop1.isEditable());
+ QVERIFY(prop1.isUser());
+ QVERIFY(prop1.hasStdCppSet());
+ QVERIFY(prop1.isEnumOrFlag());
+ QVERIFY(prop1.isDynamic());
+ QVERIFY(prop2.isReadable());
+ QVERIFY(prop2.isWritable());
+ QCOMPARE(prop2.name(), QByteArray("bar"));
+ QCOMPARE(prop2.type(), QByteArray("int"));
+ QVERIFY(!prop2.isResettable());
+ QVERIFY(!prop2.isDesignable());
+ QVERIFY(!prop2.isScriptable());
+ QVERIFY(!prop2.isStored());
+ QVERIFY(!prop2.isEditable());
+ QVERIFY(!prop2.isUser());
+ QVERIFY(!prop2.hasStdCppSet());
+ QVERIFY(!prop2.isEnumOrFlag());
+ QVERIFY(!prop2.isDynamic());
+
+ // Remove prop1 and check that prop2 becomes index 0.
+ builder.removeProperty(0);
+ QCOMPARE(builder.propertyCount(), 1);
+ prop2 = builder.property(0);
+ QCOMPARE(prop2.name(), QByteArray("bar"));
+ QCOMPARE(prop2.type(), QByteArray("int"));
+ QVERIFY(!prop2.isResettable());
+ QVERIFY(!prop2.isDesignable());
+ QVERIFY(!prop2.isScriptable());
+ QVERIFY(!prop2.isStored());
+ QVERIFY(!prop2.isEditable());
+ QVERIFY(!prop2.isUser());
+ QVERIFY(!prop2.hasStdCppSet());
+ QVERIFY(!prop2.isEnumOrFlag());
+ QVERIFY(!prop2.isDynamic());
+ QCOMPARE(prop2.index(), 0);
+
+ // Perform index-based lookup again.
+ QCOMPARE(builder.indexOfProperty("foo"), -1);
+ QCOMPARE(builder.indexOfProperty("bar"), 0);
+ QCOMPARE(builder.indexOfProperty("baz"), -1);
+
+ // Check for side-effects between the flags on prop2.
+ // Setting a flag to true shouldn't set any of the others to true.
+ // This checks for cut-and-paste bugs in the implementation where
+ // the flag code was pasted but the flag name was not changed.
+#define CLEAR_FLAGS() \
+ do { \
+ prop2.setReadable(false); \
+ prop2.setWritable(false); \
+ prop2.setResettable(false); \
+ prop2.setDesignable(false); \
+ prop2.setScriptable(false); \
+ prop2.setStored(false); \
+ prop2.setEditable(false); \
+ prop2.setUser(false); \
+ prop2.setStdCppSet(false); \
+ prop2.setEnumOrFlag(false); \
+ prop2.setDynamic(false); \
+ } while (0)
+#define COUNT_FLAGS() \
+ ((prop2.isReadable() ? 1 : 0) + \
+ (prop2.isWritable() ? 1 : 0) + \
+ (prop2.isResettable() ? 1 : 0) + \
+ (prop2.isDesignable() ? 1 : 0) + \
+ (prop2.isScriptable() ? 1 : 0) + \
+ (prop2.isStored() ? 1 : 0) + \
+ (prop2.isEditable() ? 1 : 0) + \
+ (prop2.isUser() ? 1 : 0) + \
+ (prop2.hasStdCppSet() ? 1 : 0) + \
+ (prop2.isEnumOrFlag() ? 1 : 0) + \
+ (prop2.isDynamic() ? 1 : 0))
+#define CHECK_FLAG(setFunc,isFunc) \
+ do { \
+ CLEAR_FLAGS(); \
+ QCOMPARE(COUNT_FLAGS(), 0); \
+ prop2.setFunc(true); \
+ QVERIFY(prop2.isFunc()); \
+ QCOMPARE(COUNT_FLAGS(), 1); \
+ } while (0)
+ CHECK_FLAG(setReadable, isReadable);
+ CHECK_FLAG(setWritable, isWritable);
+ CHECK_FLAG(setResettable, isResettable);
+ CHECK_FLAG(setDesignable, isDesignable);
+ CHECK_FLAG(setScriptable, isScriptable);
+ CHECK_FLAG(setStored, isStored);
+ CHECK_FLAG(setEditable, isEditable);
+ CHECK_FLAG(setUser, isUser);
+ CHECK_FLAG(setStdCppSet, hasStdCppSet);
+ CHECK_FLAG(setEnumOrFlag, isEnumOrFlag);
+ CHECK_FLAG(setDynamic, isDynamic);
+
+ // Check that nothing else changed.
+ QVERIFY(checkForSideEffects(builder, QMetaObjectBuilder::Properties));
+
+ // Add property from prototype
+ QMetaProperty prototype = SomethingOfEverything::staticMetaObject.property(1);
+ QVERIFY(prototype.name() == QByteArray("prop"));
+ QMetaPropertyBuilder prototypeProp = builder.addProperty(prototype);
+ QCOMPARE(prototypeProp.name(), QByteArray("prop"));
+ QVERIFY(prototypeProp.hasNotifySignal());
+ QCOMPARE(prototypeProp.notifySignal().signature(), QByteArray("propChanged(QString)"));
+ QCOMPARE(builder.methodCount(), 1);
+ QCOMPARE(builder.method(0).signature(), QByteArray("propChanged(QString)"));
+}
+
+void tst_QMetaObjectBuilder::notifySignal()
+{
+ QMetaObjectBuilder builder;
+
+ QMetaPropertyBuilder prop = builder.addProperty("foo", "const QString &");
+ builder.addSlot("setFoo(QString)");
+ QMetaMethodBuilder notify = builder.addSignal("fooChanged(QString)");
+
+ QVERIFY(!prop.hasNotifySignal());
+ QCOMPARE(prop.notifySignal().index(), 0);
+
+ prop.setNotifySignal(notify);
+ QVERIFY(prop.hasNotifySignal());
+ QCOMPARE(prop.notifySignal().index(), 1);
+
+ prop.setNotifySignal(QMetaMethodBuilder());
+ QVERIFY(!prop.hasNotifySignal());
+ QCOMPARE(prop.notifySignal().index(), 0);
+
+ prop.setNotifySignal(notify);
+ prop.removeNotifySignal();
+ QVERIFY(!prop.hasNotifySignal());
+ QCOMPARE(prop.notifySignal().index(), 0);
+
+ QCOMPARE(builder.methodCount(), 2);
+ QCOMPARE(builder.propertyCount(), 1);
+
+ // Check that nothing else changed except methods and properties.
+ QVERIFY(checkForSideEffects
+ (builder, QMetaObjectBuilder::Methods | QMetaObjectBuilder::Properties));
+}
+
+void tst_QMetaObjectBuilder::enumerator()
+{
+ QMetaObjectBuilder builder;
+
+ // Add an enumerator and check its attributes.
+ QMetaEnumBuilder enum1 = builder.addEnumerator("foo");
+ QCOMPARE(enum1.name(), QByteArray("foo"));
+ QVERIFY(!enum1.isFlag());
+ QCOMPARE(enum1.keyCount(), 0);
+ QCOMPARE(enum1.index(), 0);
+ QCOMPARE(builder.enumeratorCount(), 1);
+
+ // Add another enumerator and check again.
+ QMetaEnumBuilder enum2 = builder.addEnumerator("bar");
+ QCOMPARE(enum2.name(), QByteArray("bar"));
+ QVERIFY(!enum2.isFlag());
+ QCOMPARE(enum2.keyCount(), 0);
+ QCOMPARE(enum2.index(), 1);
+ QCOMPARE(builder.enumeratorCount(), 2);
+
+ // Perform index-based lookup.
+ QCOMPARE(builder.indexOfEnumerator("foo"), 0);
+ QCOMPARE(builder.indexOfEnumerator("bar"), 1);
+ QCOMPARE(builder.indexOfEnumerator("baz"), -1);
+ QCOMPARE(builder.enumerator(1).name(), QByteArray("bar"));
+ QCOMPARE(builder.enumerator(9).name(), QByteArray());
+
+ // Modify the attributes on enum1.
+ enum1.setIsFlag(true);
+ QCOMPARE(enum1.addKey("ABC", 0), 0);
+ QCOMPARE(enum1.addKey("DEF", 1), 1);
+ QCOMPARE(enum1.addKey("GHI", -1), 2);
+
+ // Check that enum1 is changed, but enum2 is not.
+ QCOMPARE(enum1.name(), QByteArray("foo"));
+ QVERIFY(enum1.isFlag());
+ QCOMPARE(enum1.keyCount(), 3);
+ QCOMPARE(enum1.index(), 0);
+ QCOMPARE(enum1.key(0), QByteArray("ABC"));
+ QCOMPARE(enum1.key(1), QByteArray("DEF"));
+ QCOMPARE(enum1.key(2), QByteArray("GHI"));
+ QCOMPARE(enum1.key(3), QByteArray());
+ QCOMPARE(enum1.value(0), 0);
+ QCOMPARE(enum1.value(1), 1);
+ QCOMPARE(enum1.value(2), -1);
+ QCOMPARE(enum2.name(), QByteArray("bar"));
+ QVERIFY(!enum2.isFlag());
+ QCOMPARE(enum2.keyCount(), 0);
+ QCOMPARE(enum2.index(), 1);
+
+ // Modify the attributes on enum2.
+ enum2.setIsFlag(true);
+ QCOMPARE(enum2.addKey("XYZ", 10), 0);
+ QCOMPARE(enum2.addKey("UVW", 19), 1);
+
+ // This time check that only method2 changed.
+ QCOMPARE(enum1.name(), QByteArray("foo"));
+ QVERIFY(enum1.isFlag());
+ QCOMPARE(enum1.keyCount(), 3);
+ QCOMPARE(enum1.index(), 0);
+ QCOMPARE(enum1.key(0), QByteArray("ABC"));
+ QCOMPARE(enum1.key(1), QByteArray("DEF"));
+ QCOMPARE(enum1.key(2), QByteArray("GHI"));
+ QCOMPARE(enum1.key(3), QByteArray());
+ QCOMPARE(enum1.value(0), 0);
+ QCOMPARE(enum1.value(1), 1);
+ QCOMPARE(enum1.value(2), -1);
+ QCOMPARE(enum2.name(), QByteArray("bar"));
+ QVERIFY(enum2.isFlag());
+ QCOMPARE(enum2.keyCount(), 2);
+ QCOMPARE(enum2.index(), 1);
+ QCOMPARE(enum2.key(0), QByteArray("XYZ"));
+ QCOMPARE(enum2.key(1), QByteArray("UVW"));
+ QCOMPARE(enum2.key(2), QByteArray());
+ QCOMPARE(enum2.value(0), 10);
+ QCOMPARE(enum2.value(1), 19);
+
+ // Remove enum1 key
+ enum1.removeKey(2);
+ QCOMPARE(enum1.name(), QByteArray("foo"));
+ QVERIFY(enum1.isFlag());
+ QCOMPARE(enum1.keyCount(), 2);
+ QCOMPARE(enum1.index(), 0);
+ QCOMPARE(enum1.key(0), QByteArray("ABC"));
+ QCOMPARE(enum1.key(1), QByteArray("DEF"));
+ QCOMPARE(enum1.key(2), QByteArray());
+ QCOMPARE(enum1.value(0), 0);
+ QCOMPARE(enum1.value(1), 1);
+ QCOMPARE(enum1.value(2), -1);
+ QCOMPARE(enum2.name(), QByteArray("bar"));
+ QVERIFY(enum2.isFlag());
+ QCOMPARE(enum2.keyCount(), 2);
+ QCOMPARE(enum2.index(), 1);
+ QCOMPARE(enum2.key(0), QByteArray("XYZ"));
+ QCOMPARE(enum2.key(1), QByteArray("UVW"));
+ QCOMPARE(enum2.key(2), QByteArray());
+ QCOMPARE(enum2.value(0), 10);
+ QCOMPARE(enum2.value(1), 19);
+
+ // Remove enum1 and check that enum2 becomes index 0.
+ builder.removeEnumerator(0);
+ QCOMPARE(builder.enumeratorCount(), 1);
+ enum2 = builder.enumerator(0);
+ QCOMPARE(enum2.name(), QByteArray("bar"));
+ QVERIFY(enum2.isFlag());
+ QCOMPARE(enum2.keyCount(), 2);
+ QCOMPARE(enum2.index(), 0);
+ QCOMPARE(enum2.key(0), QByteArray("XYZ"));
+ QCOMPARE(enum2.key(1), QByteArray("UVW"));
+ QCOMPARE(enum2.key(2), QByteArray());
+ QCOMPARE(enum2.value(0), 10);
+ QCOMPARE(enum2.value(1), 19);
+
+ // Perform index-based lookup again.
+ QCOMPARE(builder.indexOfEnumerator("foo"), -1);
+ QCOMPARE(builder.indexOfEnumerator("bar"), 0);
+ QCOMPARE(builder.indexOfEnumerator("baz"), -1);
+
+ // Check that nothing else changed.
+ QVERIFY(checkForSideEffects(builder, QMetaObjectBuilder::Enumerators));
+}
+
+void tst_QMetaObjectBuilder::classInfo()
+{
+ QMetaObjectBuilder builder;
+
+ // Add two items of class information and check their attributes.
+ QCOMPARE(builder.addClassInfo("foo", "value1"), 0);
+ QCOMPARE(builder.addClassInfo("bar", "value2"), 1);
+ QCOMPARE(builder.classInfoName(0), QByteArray("foo"));
+ QCOMPARE(builder.classInfoValue(0), QByteArray("value1"));
+ QCOMPARE(builder.classInfoName(1), QByteArray("bar"));
+ QCOMPARE(builder.classInfoValue(1), QByteArray("value2"));
+ QCOMPARE(builder.classInfoName(9), QByteArray());
+ QCOMPARE(builder.classInfoValue(9), QByteArray());
+ QCOMPARE(builder.classInfoCount(), 2);
+
+ // Perform index-based lookup.
+ QCOMPARE(builder.indexOfClassInfo("foo"), 0);
+ QCOMPARE(builder.indexOfClassInfo("bar"), 1);
+ QCOMPARE(builder.indexOfClassInfo("baz"), -1);
+
+ // Remove the first one and check again.
+ builder.removeClassInfo(0);
+ QCOMPARE(builder.classInfoName(0), QByteArray("bar"));
+ QCOMPARE(builder.classInfoValue(0), QByteArray("value2"));
+ QCOMPARE(builder.classInfoCount(), 1);
+
+ // Perform index-based lookup again.
+ QCOMPARE(builder.indexOfClassInfo("foo"), -1);
+ QCOMPARE(builder.indexOfClassInfo("bar"), 0);
+ QCOMPARE(builder.indexOfClassInfo("baz"), -1);
+
+ // Check that nothing else changed.
+ QVERIFY(checkForSideEffects(builder, QMetaObjectBuilder::ClassInfos));
+}
+
+void tst_QMetaObjectBuilder::relatedMetaObject()
+{
+ QMetaObjectBuilder builder;
+
+ // Add two related meta objects and check their attributes.
+ QCOMPARE(builder.addRelatedMetaObject(&QObject::staticMetaObject), 0);
+ QCOMPARE(builder.addRelatedMetaObject(&staticMetaObject), 1);
+ QVERIFY(builder.relatedMetaObject(0) == &QObject::staticMetaObject);
+ QVERIFY(builder.relatedMetaObject(1) == &staticMetaObject);
+ QCOMPARE(builder.relatedMetaObjectCount(), 2);
+
+ // Remove the first one and check again.
+ builder.removeRelatedMetaObject(0);
+ QVERIFY(builder.relatedMetaObject(0) == &staticMetaObject);
+ QCOMPARE(builder.relatedMetaObjectCount(), 1);
+
+ // Check that nothing else changed.
+ QVERIFY(checkForSideEffects(builder, QMetaObjectBuilder::RelatedMetaObjects));
+}
+
+static int smetacall(QMetaObject::Call, int, void **)
+{
+ return 0;
+}
+
+void tst_QMetaObjectBuilder::staticMetacall()
+{
+ QMetaObjectBuilder builder;
+ QVERIFY(!builder.staticMetacallFunction());
+ builder.setStaticMetacallFunction(smetacall);
+ QVERIFY(builder.staticMetacallFunction() == smetacall);
+ QVERIFY(checkForSideEffects(builder, QMetaObjectBuilder::StaticMetacall));
+}
+
+// Copy the entire contents of a static QMetaObject and then check
+// that QMetaObjectBuilder will produce an exact copy as output.
+void tst_QMetaObjectBuilder::copyMetaObject()
+{
+ QMetaObjectBuilder builder(&QObject::staticMetaObject);
+ QMetaObject *meta = builder.toMetaObject();
+ QVERIFY(sameMetaObject(meta, &QObject::staticMetaObject));
+ qFree(meta);
+
+ QMetaObjectBuilder builder2(&staticMetaObject);
+ meta = builder2.toMetaObject();
+ QVERIFY(sameMetaObject(meta, &staticMetaObject));
+ qFree(meta);
+
+ QMetaObjectBuilder builder3(&SomethingOfEverything::staticMetaObject);
+ meta = builder3.toMetaObject();
+ QVERIFY(sameMetaObject(meta, &SomethingOfEverything::staticMetaObject));
+ qFree(meta);
+}
+
+// Serialize and deserialize a meta object and check that
+// it round-trips to the exact same value.
+void tst_QMetaObjectBuilder::serialize()
+{
+ // Full QMetaObjectBuilder
+ {
+ QMetaObjectBuilder builder(&SomethingOfEverything::staticMetaObject);
+ QMetaObject *meta = builder.toMetaObject();
+
+ QByteArray data;
+ QDataStream stream(&data, QIODevice::WriteOnly | QIODevice::Append);
+ builder.serialize(stream);
+
+ QMetaObjectBuilder builder2;
+ QDataStream stream2(data);
+ QMap<QByteArray, const QMetaObject *> references;
+ references.insert(QByteArray("QLocale"), &QLocale::staticMetaObject);
+ builder2.deserialize(stream2, references);
+ builder2.setStaticMetacallFunction(builder.staticMetacallFunction());
+ QMetaObject *meta2 = builder2.toMetaObject();
+
+ QVERIFY(sameMetaObject(meta, meta2));
+ qFree(meta);
+ qFree(meta2);
+ }
+
+ // Partial QMetaObjectBuilder
+ {
+ QMetaObjectBuilder builder;
+ builder.setClassName("Test");
+ builder.addProperty("foo", "int");
+
+ QByteArray data;
+ QDataStream stream(&data, QIODevice::WriteOnly | QIODevice::Append);
+ builder.serialize(stream);
+
+ QMetaObjectBuilder builder2;
+ QDataStream stream2(data);
+ builder2.deserialize(stream2, QMap<QByteArray, const QMetaObject *>());
+
+ QCOMPARE(builder.superClass(), builder2.superClass());
+ QCOMPARE(builder.className(), builder2.className());
+ QCOMPARE(builder.propertyCount(), builder2.propertyCount());
+ QCOMPARE(builder.property(0).name(), builder2.property(0).name());
+ QCOMPARE(builder.property(0).type(), builder2.property(0).type());
+ }
+}
+
+// Check that removing a method updates notify signals appropriately
+void tst_QMetaObjectBuilder::removeNotifySignal()
+{
+ QMetaObjectBuilder builder;
+
+ QMetaMethodBuilder method1 = builder.addSignal("foo(const QString&, int)");
+ QMetaMethodBuilder method2 = builder.addSignal("bar(QString)");
+
+ // Setup property
+ QMetaPropertyBuilder prop = builder.addProperty("prop", "const QString &");
+ prop.setNotifySignal(method2);
+ QVERIFY(prop.hasNotifySignal());
+ QCOMPARE(prop.notifySignal().index(), 1);
+
+ // Remove non-notify signal
+ builder.removeMethod(0);
+ QVERIFY(prop.hasNotifySignal());
+ QCOMPARE(prop.notifySignal().index(), 0);
+
+ // Remove notify signal
+ builder.removeMethod(0);
+ QVERIFY(!prop.hasNotifySignal());
+}
+
+// Check that the only changes to a "builder" relative to the default
+// state is specified by "members".
+bool tst_QMetaObjectBuilder::checkForSideEffects
+ (const QMetaObjectBuilder& builder,
+ QMetaObjectBuilder::AddMembers members)
+{
+ if ((members & QMetaObjectBuilder::ClassName) == 0) {
+ if (!builder.className().isEmpty())
+ return false;
+ }
+
+ if ((members & QMetaObjectBuilder::SuperClass) == 0) {
+ if (builder.superClass() != &QObject::staticMetaObject)
+ return false;
+ }
+
+ if ((members & QMetaObjectBuilder::Methods) == 0) {
+ if (builder.methodCount() != 0)
+ return false;
+ }
+
+ if ((members & QMetaObjectBuilder::Constructors) == 0) {
+ if (builder.constructorCount() != 0)
+ return false;
+ }
+
+ if ((members & QMetaObjectBuilder::Properties) == 0) {
+ if (builder.propertyCount() != 0)
+ return false;
+ }
+
+ if ((members & QMetaObjectBuilder::Enumerators) == 0) {
+ if (builder.enumeratorCount() != 0)
+ return false;
+ }
+
+ if ((members & QMetaObjectBuilder::ClassInfos) == 0) {
+ if (builder.classInfoCount() != 0)
+ return false;
+ }
+
+ if ((members & QMetaObjectBuilder::RelatedMetaObjects) == 0) {
+ if (builder.relatedMetaObjectCount() != 0)
+ return false;
+ }
+
+ if ((members & QMetaObjectBuilder::StaticMetacall) == 0) {
+ if (builder.staticMetacallFunction() != 0)
+ return false;
+ }
+
+ return true;
+}
+
+static bool sameMethod(const QMetaMethod& method1, const QMetaMethod& method2)
+{
+ if (QByteArray(method1.signature()) != QByteArray(method2.signature()))
+ return false;
+
+ if (QByteArray(method1.typeName()) != QByteArray(method2.typeName()))
+ return false;
+
+ if (method1.parameterNames() != method2.parameterNames())
+ return false;
+
+ if (QByteArray(method1.tag()) != QByteArray(method2.tag()))
+ return false;
+
+ if (method1.access() != method2.access())
+ return false;
+
+ if (method1.methodType() != method2.methodType())
+ return false;
+
+ if (method1.attributes() != method2.attributes())
+ return false;
+
+ return true;
+}
+
+static bool sameProperty(const QMetaProperty& prop1, const QMetaProperty& prop2)
+{
+ if (QByteArray(prop1.name()) != QByteArray(prop2.name()))
+ return false;
+
+ if (QByteArray(prop1.typeName()) != QByteArray(prop2.typeName()))
+ return false;
+
+ if (prop1.isReadable() != prop2.isReadable() ||
+ prop1.isWritable() != prop2.isWritable() ||
+ prop1.isResettable() != prop2.isResettable() ||
+ prop1.isDesignable() != prop2.isDesignable() ||
+ prop1.isScriptable() != prop2.isScriptable() ||
+ prop1.isStored() != prop2.isStored() ||
+ prop1.isEditable() != prop2.isEditable() ||
+ prop1.isUser() != prop2.isUser() ||
+ prop1.isFlagType() != prop2.isFlagType() ||
+ prop1.isEnumType() != prop2.isEnumType() ||
+ prop1.hasNotifySignal() != prop2.hasNotifySignal() ||
+ prop1.hasStdCppSet() != prop2.hasStdCppSet())
+ return false;
+
+ if (prop1.hasNotifySignal()) {
+ if (prop1.notifySignalIndex() != prop2.notifySignalIndex())
+ return false;
+ }
+
+ return true;
+}
+
+static bool sameEnumerator(const QMetaEnum& enum1, const QMetaEnum& enum2)
+{
+ if (QByteArray(enum1.name()) != QByteArray(enum2.name()))
+ return false;
+
+ if (enum1.isFlag() != enum2.isFlag())
+ return false;
+
+ if (enum1.keyCount() != enum2.keyCount())
+ return false;
+
+ for (int index = 0; index < enum1.keyCount(); ++index) {
+ if (QByteArray(enum1.key(index)) != QByteArray(enum2.key(index)))
+ return false;
+ if (enum1.value(index) != enum2.value(index))
+ return false;
+ }
+
+ if (QByteArray(enum1.scope()) != QByteArray(enum2.scope()))
+ return false;
+
+ return true;
+}
+
+// Determine if two meta objects are identical.
+bool tst_QMetaObjectBuilder::sameMetaObject
+ (const QMetaObject *meta1, const QMetaObject *meta2)
+{
+ int index;
+
+ if (strcmp(meta1->className(), meta2->className()) != 0)
+ return false;
+
+ if (meta1->superClass() != meta2->superClass())
+ return false;
+
+ if (meta1->constructorCount() != meta2->constructorCount() ||
+ meta1->methodCount() != meta2->methodCount() ||
+ meta1->enumeratorCount() != meta2->enumeratorCount() ||
+ meta1->propertyCount() != meta2->propertyCount() ||
+ meta1->classInfoCount() != meta2->classInfoCount())
+ return false;
+
+ for (index = 0; index < meta1->constructorCount(); ++index) {
+ if (!sameMethod(meta1->constructor(index), meta2->constructor(index)))
+ return false;
+ }
+
+ for (index = 0; index < meta1->methodCount(); ++index) {
+ if (!sameMethod(meta1->method(index), meta2->method(index)))
+ return false;
+ }
+
+ for (index = 0; index < meta1->propertyCount(); ++index) {
+ if (!sameProperty(meta1->property(index), meta2->property(index)))
+ return false;
+ }
+
+ for (index = 0; index < meta1->enumeratorCount(); ++index) {
+ if (!sameEnumerator(meta1->enumerator(index), meta2->enumerator(index)))
+ return false;
+ }
+
+ for (index = 0; index < meta1->classInfoCount(); ++index) {
+ if (QByteArray(meta1->classInfo(index).name()) !=
+ QByteArray(meta2->classInfo(index).name()))
+ return false;
+ if (QByteArray(meta1->classInfo(index).value()) !=
+ QByteArray(meta2->classInfo(index).value()))
+ return false;
+ }
+
+ const QMetaObject **objects1 = 0;
+ const QMetaObject **objects2 = 0;
+ if (meta1->d.data[0] == meta2->d.data[0] && meta1->d.data[0] >= 2) {
+ QMetaObjectExtraData *extra1 = (QMetaObjectExtraData *)(meta1->d.extradata);
+ QMetaObjectExtraData *extra2 = (QMetaObjectExtraData *)(meta2->d.extradata);
+ if (extra1 && !extra2)
+ return false;
+ if (extra2 && !extra1)
+ return false;
+ if (extra1 && extra2) {
+ if (extra1->static_metacall != extra2->static_metacall)
+ return false;
+ objects1 = extra1->objects;
+ objects2 = extra1->objects;
+ }
+ } else if (meta1->d.data[0] == meta2->d.data[0] && meta1->d.data[0] == 1) {
+ objects1 = (const QMetaObject **)(meta1->d.extradata);
+ objects2 = (const QMetaObject **)(meta2->d.extradata);
+ }
+ if (objects1 && !objects2)
+ return false;
+ if (objects2 && !objects1)
+ return false;
+ if (objects1 && objects2) {
+ while (*objects1 != 0 && *objects2 != 0) {
+ if (*objects1 != *objects2)
+ return false;
+ ++objects1;
+ ++objects2;
+ }
+ }
+
+ return true;
+}
+
+QTEST_MAIN(tst_QMetaObjectBuilder)
+
+#include "tst_qmetaobjectbuilder.moc"
diff --git a/tests/auto/declarative/qmlanimations/data/attached.qml b/tests/auto/declarative/qmlanimations/data/attached.qml
new file mode 100644
index 0000000..0fb6f8c
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/attached.qml
@@ -0,0 +1,34 @@
+import Qt 4.6
+
+Rectangle {
+ width: 180; height: 200;
+
+ Component {
+ id: delegate
+ Rectangle {
+ id: wrapper
+ width: 180; height: 200
+ color: "blue"
+
+ states: State {
+ name: "otherState"
+ PropertyChanges { target: wrapper; color: "green" }
+ }
+
+ transitions: Transition {
+ PropertyAction { target: wrapper; property: "ListView.delayRemove"; value: true }
+ ScriptAction { script: console.log(ListView.delayRemove ? "on" : "off") }
+ }
+
+ Component.onCompleted: {
+ console.log(ListView.delayRemove ? "on" : "off");
+ wrapper.state = "otherState"
+ }
+ }
+ }
+
+ ListView {
+ model: 1
+ delegate: delegate
+ }
+}
diff --git a/tests/auto/declarative/qmlanimations/data/badproperty1.qml b/tests/auto/declarative/qmlanimations/data/badproperty1.qml
new file mode 100644
index 0000000..d31cae9
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/badproperty1.qml
@@ -0,0 +1,21 @@
+import Qt 4.6
+
+Rectangle {
+ id: wrapper
+ width: 240
+ height: 320
+ Rectangle {
+ id: myRect
+ color: "red"
+ width: 50; height: 50
+ x: 100; y: 100
+ }
+ states: State {
+ name: "state1"
+ PropertyChanges { target: myRect; border.color: "blue" }
+ }
+ transitions: Transition {
+ ColorAnimation { target: myRect; to: "red"; property: "border.colr"; duration: 1000 }
+ }
+ Component.onCompleted: if (wrapper.state == "state1") wrapper.state = ""; else wrapper.state = "state1";
+}
diff --git a/tests/auto/declarative/qmlanimations/data/badproperty2.qml b/tests/auto/declarative/qmlanimations/data/badproperty2.qml
new file mode 100644
index 0000000..3b8b111
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/badproperty2.qml
@@ -0,0 +1,21 @@
+import Qt 4.6
+
+Rectangle {
+ id: wrapper
+ width: 240
+ height: 320
+ Rectangle {
+ id: myRect
+ color: "red"
+ width: 50; height: 50
+ x: 100; y: 100
+ }
+ states: State {
+ name: "state1"
+ PropertyChanges { target: myRect; border.color: "blue" }
+ }
+ transitions: Transition {
+ ColorAnimation { target: myRect; to: "red"; property: "border"; duration: 1000 }
+ }
+ Component.onCompleted: if (wrapper.state == "state1") wrapper.state = ""; else wrapper.state = "state1";
+}
diff --git a/tests/auto/declarative/qmlanimations/data/badtype1.qml b/tests/auto/declarative/qmlanimations/data/badtype1.qml
new file mode 100644
index 0000000..6381df3
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/badtype1.qml
@@ -0,0 +1,12 @@
+import Qt 4.6
+
+Rectangle {
+ width: 240
+ height: 320
+ Rectangle {
+ color: "red"
+ width: 50; height: 50
+ x: 100; y: 100
+ x: PropertyAnimation { from: "blue"; to: "green"; }
+ }
+}
diff --git a/tests/auto/declarative/qmlanimations/data/badtype2.qml b/tests/auto/declarative/qmlanimations/data/badtype2.qml
new file mode 100644
index 0000000..8d57e41
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/badtype2.qml
@@ -0,0 +1,12 @@
+import Qt 4.6
+
+Rectangle {
+ width: 240
+ height: 320
+ Rectangle {
+ color: "red"
+ width: 50; height: 50
+ x: 100; y: 100
+ x: NumberAnimation { from: "blue"; to: "green"; }
+ }
+}
diff --git a/tests/auto/declarative/qmlanimations/data/badtype3.qml b/tests/auto/declarative/qmlanimations/data/badtype3.qml
new file mode 100644
index 0000000..c4867c3
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/badtype3.qml
@@ -0,0 +1,12 @@
+import Qt 4.6
+
+Rectangle {
+ width: 240
+ height: 320
+ Rectangle {
+ color: "red"
+ color: ColorAnimation { from: 10; to: 15; }
+ width: 50; height: 50
+ x: 100; y: 100
+ }
+}
diff --git a/tests/auto/declarative/qmlanimations/data/badtype4.qml b/tests/auto/declarative/qmlanimations/data/badtype4.qml
new file mode 100644
index 0000000..a4cf265
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/badtype4.qml
@@ -0,0 +1,27 @@
+import Qt 4.6
+
+Rectangle {
+ id: wrapper
+ width: 240
+ height: 320
+ Rectangle {
+ id: myRect
+ objectName: "MyRect"
+ color: "red"
+ width: 50; height: 50
+ x: 100; y: 100
+ MouseRegion {
+ anchors.fill: parent
+ onClicked: if (wrapper.state == "state1") wrapper.state = ""; else wrapper.state = "state1";
+ }
+ }
+ states: State {
+ name: "state1"
+ PropertyChanges { target: myRect; x: 200; color: "blue" }
+ }
+ transitions: Transition {
+ //comment out each in turn to make sure each only animates the relevant property
+ ColorAnimation { matchProperties: "x,color"; duration: 1000 } //x is real, color is color
+ NumberAnimation { matchProperties: "x,color"; duration: 1000 } //x is real, color is color
+ }
+}
diff --git a/tests/auto/declarative/qmlanimations/data/dotproperty.qml b/tests/auto/declarative/qmlanimations/data/dotproperty.qml
new file mode 100644
index 0000000..369491f
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/dotproperty.qml
@@ -0,0 +1,24 @@
+import Qt 4.6
+
+Rectangle {
+ id: wrapper
+ width: 240
+ height: 320
+ Rectangle {
+ id: myRect
+ color: "red"
+ width: 50; height: 50
+ x: 100; y: 100
+ MouseRegion {
+ anchors.fill: parent
+ onClicked: if (wrapper.state == "state1") wrapper.state = ""; else wrapper.state = "state1";
+ }
+ }
+ states: State {
+ name: "state1"
+ PropertyChanges { target: myRect; border.color: "blue" }
+ }
+ transitions: Transition {
+ ColorAnimation { matchProperties: "border.color"; duration: 1000 }
+ }
+}
diff --git a/tests/auto/declarative/qmlanimations/data/mixedtype1.qml b/tests/auto/declarative/qmlanimations/data/mixedtype1.qml
new file mode 100644
index 0000000..87f4f16
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/mixedtype1.qml
@@ -0,0 +1,25 @@
+import Qt 4.6
+
+Rectangle {
+ id: wrapper
+ width: 240
+ height: 320
+ Rectangle {
+ id: myRect
+ objectName: "MyRect"
+ color: "red"
+ width: 50; height: 50
+ x: 100; y: 100
+ MouseRegion {
+ anchors.fill: parent
+ onClicked: if (wrapper.state == "state1") wrapper.state = ""; else wrapper.state = "state1";
+ }
+ }
+ states: State {
+ name: "state1"
+ PropertyChanges { target: myRect; x: 200; border.width: 10 }
+ }
+ transitions: Transition {
+ PropertyAnimation { matchProperties: "x,border.width"; duration: 1000 } //x is real, border.width is int
+ }
+}
diff --git a/tests/auto/declarative/qmlanimations/data/mixedtype2.qml b/tests/auto/declarative/qmlanimations/data/mixedtype2.qml
new file mode 100644
index 0000000..d555abd
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/mixedtype2.qml
@@ -0,0 +1,25 @@
+import Qt 4.6
+
+Rectangle {
+ id: wrapper
+ width: 240
+ height: 320
+ Rectangle {
+ id: myRect
+ objectName: "MyRect"
+ color: "red"
+ width: 50; height: 50
+ x: 100; y: 100
+ MouseRegion {
+ anchors.fill: parent
+ onClicked: if (wrapper.state == "state1") wrapper.state = ""; else wrapper.state = "state1";
+ }
+ }
+ states: State {
+ name: "state1"
+ PropertyChanges { target: myRect; x: 200; color: "blue" }
+ }
+ transitions: Transition {
+ PropertyAnimation { matchProperties: "x,color"; duration: 1000 } //x is real, color is color
+ }
+}
diff --git a/tests/auto/declarative/qmlanimations/data/properties.qml b/tests/auto/declarative/qmlanimations/data/properties.qml
new file mode 100644
index 0000000..7e73f57
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/properties.qml
@@ -0,0 +1,14 @@
+import Qt 4.6
+
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: theRect
+ objectName: "TheRect"
+ color: "red"
+ width: 50; height: 50
+ x: 100; y: 100
+ x: NumberAnimation { to: 200 }
+ }
+}
diff --git a/tests/auto/declarative/qmlanimations/data/properties2.qml b/tests/auto/declarative/qmlanimations/data/properties2.qml
new file mode 100644
index 0000000..86568ca
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/properties2.qml
@@ -0,0 +1,14 @@
+import Qt 4.6
+
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: theRect
+ objectName: "TheRect"
+ color: "red"
+ width: 50; height: 50
+ x: 100; y: 100
+ x: NumberAnimation { matchTargets: theRect; matchProperties: "x"; to: 200; }
+ }
+}
diff --git a/tests/auto/declarative/qmlanimations/data/properties3.qml b/tests/auto/declarative/qmlanimations/data/properties3.qml
new file mode 100644
index 0000000..ff08885
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/properties3.qml
@@ -0,0 +1,14 @@
+import Qt 4.6
+
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: theRect
+ objectName: "TheRect"
+ color: "red"
+ width: 50; height: 50
+ x: 100; y: 100
+ x: NumberAnimation { target: theRect; property: "x"; to: 300; }
+ }
+}
diff --git a/tests/auto/declarative/qmlanimations/data/properties4.qml b/tests/auto/declarative/qmlanimations/data/properties4.qml
new file mode 100644
index 0000000..dab7e5f
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/properties4.qml
@@ -0,0 +1,14 @@
+import Qt 4.6
+
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: theRect
+ objectName: "TheRect"
+ color: "red"
+ width: 50; height: 50
+ x: 100; y: 100
+ x: NumberAnimation { target: theRect; property: "y"; to: 200; }
+ }
+}
diff --git a/tests/auto/declarative/qmlanimations/data/properties5.qml b/tests/auto/declarative/qmlanimations/data/properties5.qml
new file mode 100644
index 0000000..56e0be8
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/properties5.qml
@@ -0,0 +1,14 @@
+import Qt 4.6
+
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: theRect
+ objectName: "TheRect"
+ color: "red"
+ width: 50; height: 50
+ x: 100; y: 100
+ x: NumberAnimation { matchTargets: theRect; matchProperties: "y"; to: 200; }
+ }
+}
diff --git a/tests/auto/declarative/qmlanimations/data/propertiesTransition.qml b/tests/auto/declarative/qmlanimations/data/propertiesTransition.qml
new file mode 100644
index 0000000..75603b9
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/propertiesTransition.qml
@@ -0,0 +1,29 @@
+import Qt 4.6
+
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: theRect
+ objectName: "TheRect"
+ color: "red"
+ width: 50; height: 50
+ x: 100; y: 100
+ }
+
+ states: State {
+ name: "moved"
+ PropertyChanges {
+ target: theRect
+ x: 200
+ }
+ }
+ transitions: Transition {
+ NumberAnimation { matchTargets: theRect; matchProperties: "x" }
+ }
+
+ MouseRegion {
+ anchors.fill: parent
+ onClicked: parent.state = "moved"
+ }
+}
diff --git a/tests/auto/declarative/qmlanimations/data/propertiesTransition2.qml b/tests/auto/declarative/qmlanimations/data/propertiesTransition2.qml
new file mode 100644
index 0000000..ae59157
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/propertiesTransition2.qml
@@ -0,0 +1,29 @@
+import Qt 4.6
+
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: theRect
+ objectName: "TheRect"
+ color: "red"
+ width: 50; height: 50
+ x: 100; y: 100
+ }
+
+ states: State {
+ name: "moved"
+ PropertyChanges {
+ target: theRect
+ x: 200
+ }
+ }
+ transitions: Transition {
+ NumberAnimation { target: theRect; property: "y"; to: 200 }
+ }
+
+ MouseRegion {
+ anchors.fill: parent
+ onClicked: parent.state = "moved"
+ }
+}
diff --git a/tests/auto/declarative/qmlanimations/data/propertiesTransition3.qml b/tests/auto/declarative/qmlanimations/data/propertiesTransition3.qml
new file mode 100644
index 0000000..eedba7b
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/propertiesTransition3.qml
@@ -0,0 +1,29 @@
+import Qt 4.6
+
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: theRect
+ objectName: "TheRect"
+ color: "red"
+ width: 50; height: 50
+ x: 100; y: 100
+ }
+
+ states: State {
+ name: "moved"
+ PropertyChanges {
+ target: theRect
+ x: 200
+ }
+ }
+ transitions: Transition {
+ NumberAnimation { matchTargets: theRect; matchProperties: "y" }
+ }
+
+ MouseRegion {
+ anchors.fill: parent
+ onClicked: parent.state = "moved"
+ }
+}
diff --git a/tests/auto/declarative/qmlanimations/data/propertiesTransition4.qml b/tests/auto/declarative/qmlanimations/data/propertiesTransition4.qml
new file mode 100644
index 0000000..301f796
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/propertiesTransition4.qml
@@ -0,0 +1,29 @@
+import Qt 4.6
+
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: theRect
+ objectName: "TheRect"
+ color: "red"
+ width: 50; height: 50
+ x: 100; y: 100
+ }
+
+ states: State {
+ name: "moved"
+ PropertyChanges {
+ target: theRect
+ x: 200
+ }
+ }
+ transitions: Transition {
+ NumberAnimation { target: theRect; matchProperties: "x" }
+ }
+
+ MouseRegion {
+ anchors.fill: parent
+ onClicked: parent.state = "moved"
+ }
+}
diff --git a/tests/auto/declarative/qmlanimations/data/propertiesTransition5.qml b/tests/auto/declarative/qmlanimations/data/propertiesTransition5.qml
new file mode 100644
index 0000000..565c519
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/propertiesTransition5.qml
@@ -0,0 +1,29 @@
+import Qt 4.6
+
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: theRect
+ objectName: "TheRect"
+ color: "red"
+ width: 50; height: 50
+ x: 100; y: 100
+ }
+
+ states: State {
+ name: "moved"
+ PropertyChanges {
+ target: theRect
+ x: 200
+ }
+ }
+ transitions: Transition {
+ NumberAnimation { matchTargets: theRect; property: "x" }
+ }
+
+ MouseRegion {
+ anchors.fill: parent
+ onClicked: parent.state = "moved"
+ }
+}
diff --git a/tests/auto/declarative/qmlanimations/data/propertiesTransition6.qml b/tests/auto/declarative/qmlanimations/data/propertiesTransition6.qml
new file mode 100644
index 0000000..b541dab
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/propertiesTransition6.qml
@@ -0,0 +1,29 @@
+import Qt 4.6
+
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: theRect
+ objectName: "TheRect"
+ color: "red"
+ width: 50; height: 50
+ x: 100; y: 100
+ }
+
+ states: State {
+ name: "moved"
+ PropertyChanges {
+ target: theRect
+ x: 200
+ }
+ }
+ transitions: Transition {
+ NumberAnimation { matchTargets: theItem; matchProperties: "x" }
+ }
+
+ MouseRegion {
+ anchors.fill: parent
+ onClicked: parent.state = "moved"
+ }
+}
diff --git a/tests/auto/declarative/qmlanimations/data/valuesource.qml b/tests/auto/declarative/qmlanimations/data/valuesource.qml
new file mode 100644
index 0000000..c35063d
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/valuesource.qml
@@ -0,0 +1,14 @@
+import Qt 4.6
+
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: rect
+ objectName: "MyRect"
+ color: "red"
+ width: 50; height: 50
+ x: 100; y: 100
+ x: NumberAnimation { id: anim; objectName: "MyAnim"; to: 200 }
+ }
+}
diff --git a/tests/auto/declarative/qmlanimations/data/valuesource2.qml b/tests/auto/declarative/qmlanimations/data/valuesource2.qml
new file mode 100644
index 0000000..1a60542
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/data/valuesource2.qml
@@ -0,0 +1,14 @@
+import Qt 4.6
+
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: rect
+ objectName: "MyRect"
+ color: "red"
+ width: 50; height: 50
+ x: 100; y: 100
+ x: NumberAnimation { id: anim; objectName: "MyAnim"; running: false; to: 200 }
+ }
+}
diff --git a/tests/auto/declarative/qmlanimations/qmlanimations.pro b/tests/auto/declarative/qmlanimations/qmlanimations.pro
new file mode 100644
index 0000000..447fb0f
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/qmlanimations.pro
@@ -0,0 +1,6 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+SOURCES += tst_qmlanimations.cpp
+macx:CONFIG -= app_bundle
+
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlanimations/tst_qmlanimations.cpp b/tests/auto/declarative/qmlanimations/tst_qmlanimations.cpp
new file mode 100644
index 0000000..17a1453
--- /dev/null
+++ b/tests/auto/declarative/qmlanimations/tst_qmlanimations.cpp
@@ -0,0 +1,611 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <QtDeclarative/qmlview.h>
+#include <private/qmlgraphicsrectangle_p.h>
+#include <private/qmlanimation_p.h>
+#include <QVariantAnimation>
+
+class tst_animations : public QObject
+{
+ Q_OBJECT
+public:
+ tst_animations() {}
+
+private slots:
+ void simpleProperty();
+ void simpleNumber();
+ void simpleColor();
+ void alwaysRunToEnd();
+ void complete();
+ void resume();
+ void dotProperty();
+ void badTypes();
+ void badProperties();
+ void mixedTypes();
+ void properties();
+ void propertiesTransition();
+ void easingStringConversion();
+ void invalidDuration();
+ void attached();
+ void propertyValueSourceDefaultStart();
+};
+
+#define QTIMED_COMPARE(lhs, rhs) do { \
+ for (int ii = 0; ii < 5; ++ii) { \
+ if (lhs == rhs) \
+ break; \
+ QTest::qWait(50); \
+ } \
+ QCOMPARE(lhs, rhs); \
+} while (false)
+
+void tst_animations::simpleProperty()
+{
+ QmlGraphicsRectangle rect;
+ QmlPropertyAnimation animation;
+ animation.setTarget(&rect);
+ animation.setProperty("pos");
+ animation.setTo(QPointF(200,200));
+ QVERIFY(animation.target() == &rect);
+ QVERIFY(animation.property() == "pos");
+ QVERIFY(animation.to().toPointF() == QPointF(200,200));
+ animation.start();
+ QVERIFY(animation.isRunning());
+ QTest::qWait(animation.duration());
+ QTIMED_COMPARE(rect.pos(), QPointF(200,200));
+
+ rect.setPos(0,0);
+ animation.start();
+ animation.pause();
+ QVERIFY(animation.isRunning());
+ QVERIFY(animation.isPaused());
+ animation.setCurrentTime(125);
+ QVERIFY(animation.currentTime() == 125);
+ QCOMPARE(rect.pos(), QPointF(100,100));
+}
+
+void tst_animations::simpleNumber()
+{
+ QmlGraphicsRectangle rect;
+ QmlNumberAnimation animation;
+ animation.setTarget(&rect);
+ animation.setProperty("x");
+ animation.setTo(200);
+ QVERIFY(animation.target() == &rect);
+ QVERIFY(animation.property() == "x");
+ QVERIFY(animation.to() == 200);
+ animation.start();
+ QVERIFY(animation.isRunning());
+ QTest::qWait(animation.duration());
+ QTIMED_COMPARE(rect.x(), qreal(200));
+
+ rect.setX(0);
+ animation.start();
+ animation.pause();
+ QVERIFY(animation.isRunning());
+ QVERIFY(animation.isPaused());
+ animation.setCurrentTime(125);
+ QVERIFY(animation.currentTime() == 125);
+ QCOMPARE(rect.x(), qreal(100));
+}
+
+void tst_animations::simpleColor()
+{
+ QmlGraphicsRectangle rect;
+ QmlColorAnimation animation;
+ animation.setTarget(&rect);
+ animation.setProperty("color");
+ animation.setTo(QColor("red"));
+ QVERIFY(animation.target() == &rect);
+ QVERIFY(animation.property() == "color");
+ QVERIFY(animation.to() == QColor("red"));
+ animation.start();
+ QVERIFY(animation.isRunning());
+ QTest::qWait(animation.duration());
+ QTIMED_COMPARE(rect.color(), QColor("red"));
+
+ rect.setColor(QColor("blue"));
+ animation.start();
+ animation.pause();
+ QVERIFY(animation.isRunning());
+ QVERIFY(animation.isPaused());
+ animation.setCurrentTime(125);
+ QVERIFY(animation.currentTime() == 125);
+ QCOMPARE(rect.color(), QColor::fromRgbF(0.498039, 0, 0.498039, 1));
+
+ rect.setColor(QColor("green"));
+ animation.setFrom(QColor("blue"));
+ QVERIFY(animation.from() == QColor("blue"));
+ animation.restart();
+ QCOMPARE(rect.color(), QColor("blue"));
+ QVERIFY(animation.isRunning());
+ animation.setCurrentTime(125);
+ QCOMPARE(rect.color(), QColor::fromRgbF(0.498039, 0, 0.498039, 1));
+}
+
+void tst_animations::alwaysRunToEnd()
+{
+ QmlGraphicsRectangle rect;
+ QmlPropertyAnimation animation;
+ animation.setTarget(&rect);
+ animation.setProperty("x");
+ animation.setTo(200);
+ animation.setDuration(1000);
+ animation.setRepeat(true);
+ animation.setAlwaysRunToEnd(true);
+ QVERIFY(animation.repeat() == true);
+ QVERIFY(animation.alwaysRunToEnd() == true);
+ animation.start();
+ QTest::qWait(1500);
+ animation.stop();
+ QVERIFY(rect.x() != qreal(200));
+ QTest::qWait(500);
+ QTIMED_COMPARE(rect.x(), qreal(200));
+}
+
+void tst_animations::complete()
+{
+ QmlGraphicsRectangle rect;
+ QmlPropertyAnimation animation;
+ animation.setTarget(&rect);
+ animation.setProperty("x");
+ animation.setFrom(1);
+ animation.setTo(200);
+ animation.setDuration(500);
+ QVERIFY(animation.from() == 1);
+ animation.start();
+ QTest::qWait(50);
+ animation.stop();
+ QVERIFY(rect.x() != qreal(200));
+ animation.start();
+ QTest::qWait(50);
+ QVERIFY(animation.isRunning());
+ animation.complete();
+ QCOMPARE(rect.x(), qreal(200));
+}
+
+void tst_animations::resume()
+{
+ QmlGraphicsRectangle rect;
+ QmlPropertyAnimation animation;
+ animation.setTarget(&rect);
+ animation.setProperty("x");
+ animation.setFrom(10);
+ animation.setTo(200);
+ animation.setDuration(500);
+ QVERIFY(animation.from() == 10);
+
+ animation.start();
+ QTest::qWait(50);
+ animation.pause();
+ qreal x = rect.x();
+ QVERIFY(x != qreal(200));
+ QVERIFY(animation.isRunning());
+ QVERIFY(animation.isPaused());
+
+ animation.resume();
+ QVERIFY(animation.isRunning());
+ QVERIFY(!animation.isPaused());
+ QTest::qWait(50);
+ animation.stop();
+ QVERIFY(rect.x() > x);
+}
+
+void tst_animations::dotProperty()
+{
+ QmlGraphicsRectangle rect;
+ QmlNumberAnimation animation;
+ animation.setTarget(&rect);
+ animation.setProperty("border.width");
+ animation.setTo(10);
+ animation.start();
+ QTest::qWait(animation.duration()+50);
+ QTIMED_COMPARE(rect.border()->width(), 10);
+
+ rect.border()->setWidth(0);
+ animation.start();
+ animation.pause();
+ animation.setCurrentTime(125);
+ QVERIFY(animation.currentTime() == 125);
+ QCOMPARE(rect.border()->width(), 5);
+}
+
+void tst_animations::badTypes()
+{
+ //don't crash
+ {
+ QmlView *view = new QmlView;
+ view->setUrl(QUrl::fromLocalFile(SRCDIR "/data/badtype1.qml"));
+
+ view->execute();
+ qApp->processEvents();
+
+ delete view;
+ }
+
+ //make sure we get a compiler error
+ {
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/badtype2.qml"));
+ QTest::ignoreMessage(QtWarningMsg, "QmlComponent: Component is not ready");
+ c.create();
+
+ QVERIFY(c.errors().count() == 1);
+ QCOMPARE(c.errors().at(0).description(), QLatin1String("Invalid property assignment: double expected"));
+ }
+
+ //make sure we get a compiler error
+ {
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/badtype3.qml"));
+ QTest::ignoreMessage(QtWarningMsg, "QmlComponent: Component is not ready");
+ c.create();
+
+ QVERIFY(c.errors().count() == 1);
+ QCOMPARE(c.errors().at(0).description(), QLatin1String("Invalid property assignment: color expected"));
+ }
+
+ //don't crash
+ {
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/badtype4.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ rect->setState("state1");
+ QTest::qWait(1000 + 50);
+ QmlGraphicsRectangle *myRect = rect->findChild<QmlGraphicsRectangle*>("MyRect");
+ QVERIFY(myRect);
+ QCOMPARE(myRect->x(),qreal(200));
+ }
+}
+
+void tst_animations::badProperties()
+{
+ //make sure we get a runtime error
+ {
+ QmlEngine engine;
+
+ QmlComponent c1(&engine, QUrl::fromLocalFile(SRCDIR "/data/badproperty1.qml"));
+ QByteArray message = "QML ColorAnimation (" + QUrl::fromLocalFile(SRCDIR "/data/badproperty1.qml").toString().toUtf8() + ":18:9) Cannot animate non-existant property \"border.colr\"";
+ QTest::ignoreMessage(QtWarningMsg, message);
+ QTest::ignoreMessage(QtWarningMsg, message); // why twice?
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c1.create());
+ QVERIFY(rect);
+
+ QmlComponent c2(&engine, QUrl::fromLocalFile(SRCDIR "/data/badproperty2.qml"));
+ message = "QML ColorAnimation (" + QUrl::fromLocalFile(SRCDIR "/data/badproperty2.qml").toString().toUtf8() + ":18:9) Cannot animate read-only property \"border\"";
+ QTest::ignoreMessage(QtWarningMsg, message);
+ QTest::ignoreMessage(QtWarningMsg, message); // why twice?
+ rect = qobject_cast<QmlGraphicsRectangle*>(c2.create());
+ QVERIFY(rect);
+
+ //### should we warn here are well?
+ //rect->setState("state1");
+ }
+}
+
+//test animating mixed types with property animation in a transition
+//for example, int + real; color + real; etc
+void tst_animations::mixedTypes()
+{
+ //assumes border.width stats a real -- not real robust
+ {
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/mixedtype1.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ rect->setState("state1");
+ QTest::qWait(500);
+ QmlGraphicsRectangle *myRect = rect->findChild<QmlGraphicsRectangle*>("MyRect");
+ QVERIFY(myRect);
+
+ //rather inexact -- is there a better way?
+ QVERIFY(myRect->x() > 100 && myRect->x() < 200);
+ QVERIFY(myRect->border()->width() > 1 && myRect->border()->width() < 10);
+ }
+
+ {
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/mixedtype2.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ rect->setState("state1");
+ QTest::qWait(500);
+ QmlGraphicsRectangle *myRect = rect->findChild<QmlGraphicsRectangle*>("MyRect");
+ QVERIFY(myRect);
+
+ //rather inexact -- is there a better way?
+ QVERIFY(myRect->x() > 100 && myRect->x() < 200);
+ QVERIFY(myRect->color() != QColor("red") && myRect->color() != QColor("blue"));
+ }
+}
+
+void tst_animations::properties()
+{
+ const int waitDuration = 300;
+ {
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/properties.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ QmlGraphicsRectangle *myRect = rect->findChild<QmlGraphicsRectangle*>("TheRect");
+ QVERIFY(myRect);
+ QTest::qWait(waitDuration);
+ QTIMED_COMPARE(myRect->x(),qreal(200));
+ }
+
+ {
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/properties2.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ QmlGraphicsRectangle *myRect = rect->findChild<QmlGraphicsRectangle*>("TheRect");
+ QVERIFY(myRect);
+ QTest::qWait(waitDuration);
+ QTIMED_COMPARE(myRect->x(),qreal(200));
+ }
+
+ {
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/properties3.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ QmlGraphicsRectangle *myRect = rect->findChild<QmlGraphicsRectangle*>("TheRect");
+ QVERIFY(myRect);
+ QTest::qWait(waitDuration);
+ QTIMED_COMPARE(myRect->x(),qreal(300));
+ }
+
+ {
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/properties4.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ QmlGraphicsRectangle *myRect = rect->findChild<QmlGraphicsRectangle*>("TheRect");
+ QVERIFY(myRect);
+ QTest::qWait(waitDuration);
+ QTIMED_COMPARE(myRect->y(),qreal(200));
+ QTIMED_COMPARE(myRect->x(),qreal(100));
+ }
+
+ {
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/properties5.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ QmlGraphicsRectangle *myRect = rect->findChild<QmlGraphicsRectangle*>("TheRect");
+ QVERIFY(myRect);
+ QTest::qWait(waitDuration);
+ QEXPECT_FAIL("", "QTBUG-8072", Continue);
+ QTIMED_COMPARE(myRect->x(),qreal(100));
+ QTIMED_COMPARE(myRect->y(),qreal(100));
+ }
+}
+
+void tst_animations::propertiesTransition()
+{
+ const int waitDuration = 300;
+ {
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/propertiesTransition.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ rect->setState("moved");
+ QmlGraphicsRectangle *myRect = rect->findChild<QmlGraphicsRectangle*>("TheRect");
+ QVERIFY(myRect);
+ QTest::qWait(waitDuration);
+ QTIMED_COMPARE(myRect->x(),qreal(200));
+ }
+
+ {
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/propertiesTransition2.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ QmlGraphicsRectangle *myRect = rect->findChild<QmlGraphicsRectangle*>("TheRect");
+ QVERIFY(myRect);
+ rect->setState("moved");
+ QCOMPARE(myRect->x(),qreal(200));
+ QCOMPARE(myRect->y(),qreal(100));
+ QTest::qWait(waitDuration);
+ QTIMED_COMPARE(myRect->y(),qreal(200));
+ }
+
+ {
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/propertiesTransition3.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ QmlGraphicsRectangle *myRect = rect->findChild<QmlGraphicsRectangle*>("TheRect");
+ QVERIFY(myRect);
+ QTest::ignoreMessage(QtWarningMsg, "QML NumberAnimation (" + QUrl::fromLocalFile(SRCDIR "/data/propertiesTransition4.qml").toString().toUtf8() + ":22:9) matchTargets/matchProperties/exclude and target/property are mutually exclusive.");
+ rect->setState("moved");
+ QCOMPARE(myRect->x(),qreal(200));
+ }
+
+ {
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/propertiesTransition4.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ QmlGraphicsRectangle *myRect = rect->findChild<QmlGraphicsRectangle*>("TheRect");
+ QVERIFY(myRect);
+ QTest::ignoreMessage(QtWarningMsg, "QML NumberAnimation (" + QUrl::fromLocalFile(SRCDIR "/data/propertiesTransition5.qml").toString().toUtf8() + ":22:9) matchTargets/matchProperties/exclude and target/property are mutually exclusive.");
+ rect->setState("moved");
+ QCOMPARE(myRect->x(),qreal(200));
+ }
+
+ {
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/propertiesTransition5.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ //### should output warning at some point -- theItem doesn't exist
+ QmlGraphicsRectangle *myRect = rect->findChild<QmlGraphicsRectangle*>("TheRect");
+ QVERIFY(myRect);
+ rect->setState("moved");
+ QCOMPARE(myRect->x(),qreal(200));
+ }
+}
+
+void tst_animations::easingStringConversion()
+{
+ QmlNumberAnimation *animation = new QmlNumberAnimation;
+ animation->setEasing("easeInOutQuad");
+ QCOMPARE(animation->easing(),QLatin1String("easeInOutQuad"));
+ QCOMPARE(static_cast<QVariantAnimation*>(((QmlAbstractAnimation*)animation)->qtAnimation())->easingCurve(), QEasingCurve(QEasingCurve::InOutQuad));
+
+ animation->setEasing("OutQuad");
+ QCOMPARE(static_cast<QVariantAnimation*>(((QmlAbstractAnimation*)animation)->qtAnimation())->easingCurve(), QEasingCurve(QEasingCurve::OutQuad));
+
+ animation->setEasing("easeOutBounce(amplitude: 5)");
+ QCOMPARE(static_cast<QVariantAnimation*>(((QmlAbstractAnimation*)animation)->qtAnimation())->easingCurve().type(), QEasingCurve::OutBounce);
+ QCOMPARE(static_cast<QVariantAnimation*>(((QmlAbstractAnimation*)animation)->qtAnimation())->easingCurve().amplitude(), qreal(5));
+
+ animation->setEasing("easeOutElastic(amplitude: 5, period: 3)");
+ QCOMPARE(static_cast<QVariantAnimation*>(((QmlAbstractAnimation*)animation)->qtAnimation())->easingCurve().type(), QEasingCurve::OutElastic);
+ QCOMPARE(static_cast<QVariantAnimation*>(((QmlAbstractAnimation*)animation)->qtAnimation())->easingCurve().amplitude(), qreal(5));
+ QCOMPARE(static_cast<QVariantAnimation*>(((QmlAbstractAnimation*)animation)->qtAnimation())->easingCurve().period(), qreal(3));
+
+ animation->setEasing("easeInOutBack(overshoot: 2)");
+ QCOMPARE(static_cast<QVariantAnimation*>(((QmlAbstractAnimation*)animation)->qtAnimation())->easingCurve().type(), QEasingCurve::InOutBack);
+ QCOMPARE(static_cast<QVariantAnimation*>(((QmlAbstractAnimation*)animation)->qtAnimation())->easingCurve().overshoot(), qreal(2));
+
+ QTest::ignoreMessage(QtWarningMsg, "QML NumberAnimation (unknown location) Unmatched parenthesis in easing function \"easeInOutBack(overshoot: 2\"");
+ animation->setEasing("easeInOutBack(overshoot: 2");
+ QCOMPARE(static_cast<QVariantAnimation*>(((QmlAbstractAnimation*)animation)->qtAnimation())->easingCurve().type(), QEasingCurve::Linear);
+
+ QTest::ignoreMessage(QtWarningMsg, "QML NumberAnimation (unknown location) Easing function \"InOutBack(overshoot: 2)\" must start with \"ease\"");
+ animation->setEasing("InOutBack(overshoot: 2)");
+ QCOMPARE(static_cast<QVariantAnimation*>(((QmlAbstractAnimation*)animation)->qtAnimation())->easingCurve().type(), QEasingCurve::Linear);
+
+ QTest::ignoreMessage(QtWarningMsg, "QML NumberAnimation (unknown location) Unknown easing curve \"NonExistantEase\"");
+ animation->setEasing("NonExistantEase");
+ QCOMPARE(static_cast<QVariantAnimation*>(((QmlAbstractAnimation*)animation)->qtAnimation())->easingCurve().type(), QEasingCurve::Linear);
+
+ QTest::ignoreMessage(QtWarningMsg, "QML NumberAnimation (unknown location) Improperly specified parameter in easing function \"easeInOutElastic(amplitude 5)\"");
+ animation->setEasing("easeInOutElastic(amplitude 5)");
+ QCOMPARE(static_cast<QVariantAnimation*>(((QmlAbstractAnimation*)animation)->qtAnimation())->easingCurve().type(), QEasingCurve::InOutElastic);
+
+ QTest::ignoreMessage(QtWarningMsg, "QML NumberAnimation (unknown location) Improperly specified parameter in easing function \"easeInOutElastic(amplitude: yes)\"");
+ animation->setEasing("easeInOutElastic(amplitude: yes)");
+ QCOMPARE(static_cast<QVariantAnimation*>(((QmlAbstractAnimation*)animation)->qtAnimation())->easingCurve().type(), QEasingCurve::InOutElastic);
+ QVERIFY(static_cast<QVariantAnimation*>(((QmlAbstractAnimation*)animation)->qtAnimation())->easingCurve().amplitude() != qreal(5));
+
+ QTest::ignoreMessage(QtWarningMsg, "QML NumberAnimation (unknown location) Unknown easing parameter \"nonexistantproperty\"");
+ animation->setEasing("easeOutQuad(nonexistantproperty: 12)");
+ QCOMPARE(static_cast<QVariantAnimation*>(((QmlAbstractAnimation*)animation)->qtAnimation())->easingCurve().type(), QEasingCurve::OutQuad);
+
+ delete animation;
+}
+
+void tst_animations::invalidDuration()
+{
+ QmlPropertyAnimation *animation = new QmlPropertyAnimation;
+ QTest::ignoreMessage(QtWarningMsg, "QML PropertyAnimation (unknown location) Cannot set a duration of < 0");
+ animation->setDuration(-1);
+ QCOMPARE(animation->duration(), 250);
+
+ QmlPauseAnimation *pauseAnimation = new QmlPauseAnimation;
+ QTest::ignoreMessage(QtWarningMsg, "QML PauseAnimation (unknown location) Cannot set a duration of < 0");
+ pauseAnimation->setDuration(-1);
+ QCOMPARE(pauseAnimation->duration(), 250);
+}
+
+void tst_animations::attached()
+{
+ QmlEngine engine;
+
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/attached.qml"));
+ QTest::ignoreMessage(QtDebugMsg, "off");
+ QTest::ignoreMessage(QtDebugMsg, "on");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+}
+
+void tst_animations::propertyValueSourceDefaultStart()
+{
+ {
+ QmlEngine engine;
+
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/valuesource.qml"));
+
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ QmlAbstractAnimation *myAnim = rect->findChild<QmlAbstractAnimation*>("MyAnim");
+ QVERIFY(myAnim);
+ QVERIFY(myAnim->isRunning());
+ }
+
+ {
+ QmlEngine engine;
+
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/valuesource2.qml"));
+
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ QmlAbstractAnimation *myAnim = rect->findChild<QmlAbstractAnimation*>("MyAnim");
+ QVERIFY(myAnim);
+ QVERIFY(myAnim->isRunning() == false);
+ }
+}
+
+QTEST_MAIN(tst_animations)
+
+#include "tst_qmlanimations.moc"
diff --git a/tests/auto/declarative/qmlbehaviors/data/binding.qml b/tests/auto/declarative/qmlbehaviors/data/binding.qml
new file mode 100644
index 0000000..e0c3321
--- /dev/null
+++ b/tests/auto/declarative/qmlbehaviors/data/binding.qml
@@ -0,0 +1,26 @@
+import Qt 4.6
+Rectangle {
+ width: 400
+ height: 400
+ property real basex : 0
+ property real movedx: 200
+ Rectangle {
+ id: rect
+ objectName: "MyRect"
+ width: 100; height: 100; color: "green"
+ x: basex
+ x: Behavior { NumberAnimation { duration: 200; } }
+ }
+ MouseRegion {
+ id: clicker
+ anchors.fill: parent
+ }
+ states: State {
+ name: "moved"
+ when: clicker.pressed
+ PropertyChanges {
+ target: rect
+ x: movedx
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlbehaviors/data/color.qml b/tests/auto/declarative/qmlbehaviors/data/color.qml
new file mode 100644
index 0000000..6598703
--- /dev/null
+++ b/tests/auto/declarative/qmlbehaviors/data/color.qml
@@ -0,0 +1,24 @@
+import Qt 4.6
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: rect
+ objectName: "MyRect"
+ width: 100; height: 100;
+ color: "green"
+ color: Behavior { ColorAnimation { duration: 200; } }
+ }
+ MouseRegion {
+ id: clicker
+ anchors.fill: parent
+ }
+ states: State {
+ name: "red"
+ when: clicker.pressed
+ PropertyChanges {
+ target: rect
+ color: "red"
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlbehaviors/data/cpptrigger.qml b/tests/auto/declarative/qmlbehaviors/data/cpptrigger.qml
new file mode 100644
index 0000000..ba507c4
--- /dev/null
+++ b/tests/auto/declarative/qmlbehaviors/data/cpptrigger.qml
@@ -0,0 +1,11 @@
+import Qt 4.6
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: rect
+ objectName: "MyRect"
+ width: 100; height: 100; color: "green"
+ x: Behavior { NumberAnimation { duration: 200; } }
+ }
+}
diff --git a/tests/auto/declarative/qmlbehaviors/data/disabled.qml b/tests/auto/declarative/qmlbehaviors/data/disabled.qml
new file mode 100644
index 0000000..e7b8d51
--- /dev/null
+++ b/tests/auto/declarative/qmlbehaviors/data/disabled.qml
@@ -0,0 +1,27 @@
+import Qt 4.6
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: rect
+ objectName: "MyRect"
+ width: 100; height: 100; color: "green"
+ x: Behavior {
+ objectName: "MyBehavior";
+ enabled: false
+ NumberAnimation { duration: 200; }
+ }
+ }
+ MouseRegion {
+ id: clicker
+ anchors.fill: parent
+ }
+ states: State {
+ name: "moved"
+ when: clicker.pressed
+ PropertyChanges {
+ target: rect
+ x: 200
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlbehaviors/data/empty.qml b/tests/auto/declarative/qmlbehaviors/data/empty.qml
new file mode 100644
index 0000000..412e26c
--- /dev/null
+++ b/tests/auto/declarative/qmlbehaviors/data/empty.qml
@@ -0,0 +1,23 @@
+import Qt 4.6
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: rect
+ objectName: "MyRect"
+ width: 100; height: 100; color: "green"
+ x: Behavior {}
+ }
+ MouseRegion {
+ id: clicker
+ anchors.fill: parent
+ }
+ states: State {
+ name: "moved"
+ when: clicker.pressed
+ PropertyChanges {
+ target: rect
+ x: 200
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlbehaviors/data/groupProperty.qml b/tests/auto/declarative/qmlbehaviors/data/groupProperty.qml
new file mode 100644
index 0000000..4f127c1
--- /dev/null
+++ b/tests/auto/declarative/qmlbehaviors/data/groupProperty.qml
@@ -0,0 +1,23 @@
+import Qt 4.6
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: rect
+ objectName: "MyRect"
+ width: 100; height: 100; color: "green"
+ pos: Behavior { PropertyAnimation { duration: 200; } }
+ }
+ MouseRegion {
+ id: clicker
+ anchors.fill: parent
+ }
+ states: State {
+ name: "moved"
+ when: clicker.pressed
+ PropertyChanges {
+ target: rect
+ pos: Qt.point(200,0);
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlbehaviors/data/groupProperty2.qml b/tests/auto/declarative/qmlbehaviors/data/groupProperty2.qml
new file mode 100644
index 0000000..19d70b6
--- /dev/null
+++ b/tests/auto/declarative/qmlbehaviors/data/groupProperty2.qml
@@ -0,0 +1,23 @@
+import Qt 4.6
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: rect
+ objectName: "MyRect"
+ width: 100; height: 100; color: "green"
+ pos.x: Behavior { NumberAnimation { duration: 200; } }
+ }
+ MouseRegion {
+ id: clicker
+ anchors.fill: parent
+ }
+ states: State {
+ name: "moved"
+ when: clicker.pressed
+ PropertyChanges {
+ target: rect
+ pos.x: 200;
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlbehaviors/data/loop.qml b/tests/auto/declarative/qmlbehaviors/data/loop.qml
new file mode 100644
index 0000000..5f2c057
--- /dev/null
+++ b/tests/auto/declarative/qmlbehaviors/data/loop.qml
@@ -0,0 +1,19 @@
+import Qt 4.6
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: rect
+ objectName: "MyRect"
+ width: 100; height: 100; color: "green"
+ x: Behavior { NumberAnimation { duration: 200; } }
+ onXChanged: x = 100;
+ }
+ states: State {
+ name: "moved"
+ PropertyChanges {
+ target: rect
+ x: 200
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlbehaviors/data/nonSelecting.qml b/tests/auto/declarative/qmlbehaviors/data/nonSelecting.qml
new file mode 100644
index 0000000..ba36d93
--- /dev/null
+++ b/tests/auto/declarative/qmlbehaviors/data/nonSelecting.qml
@@ -0,0 +1,26 @@
+import Qt 4.6
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: rect
+ objectName: "MyRect"
+ width: 100; height: 100; color: "green"
+ x: Behavior {
+ objectName: "MyBehavior";
+ NumberAnimation { target: rect; property: "x"; duration: 200; }
+ }
+ }
+ MouseRegion {
+ id: clicker
+ anchors.fill: parent
+ }
+ states: State {
+ name: "moved"
+ when: clicker.pressed
+ PropertyChanges {
+ target: rect
+ x: 200
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlbehaviors/data/nonSelecting2.qml b/tests/auto/declarative/qmlbehaviors/data/nonSelecting2.qml
new file mode 100644
index 0000000..e9849eb
--- /dev/null
+++ b/tests/auto/declarative/qmlbehaviors/data/nonSelecting2.qml
@@ -0,0 +1,26 @@
+import Qt 4.6
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: rect
+ objectName: "MyRect"
+ width: 100; height: 100; color: "green"
+ x: Behavior {
+ objectName: "MyBehavior";
+ NumberAnimation { matchTargets: rect; matchProperties: "y"; duration: 200; }
+ }
+ }
+ MouseRegion {
+ id: clicker
+ anchors.fill: parent
+ }
+ states: State {
+ name: "moved"
+ when: clicker.pressed
+ PropertyChanges {
+ target: rect
+ x: 200
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlbehaviors/data/parent.qml b/tests/auto/declarative/qmlbehaviors/data/parent.qml
new file mode 100644
index 0000000..4f4911b
--- /dev/null
+++ b/tests/auto/declarative/qmlbehaviors/data/parent.qml
@@ -0,0 +1,28 @@
+import Qt 4.6
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: rect
+ objectName: "MyRect"
+ width: 100; height: 100; color: "green"
+ parent: Behavior {
+ SequentialAnimation {
+ PauseAnimation { duration: 200 }
+ PropertyAction {}
+ }
+ }
+ }
+ Item {
+ id: newParent
+ objectName: "NewParent"
+ x: 100
+ }
+ states: State {
+ name: "reparented"
+ PropertyChanges {
+ target: rect
+ parent: newParent
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlbehaviors/data/reassignedAnimation.qml b/tests/auto/declarative/qmlbehaviors/data/reassignedAnimation.qml
new file mode 100644
index 0000000..693a595
--- /dev/null
+++ b/tests/auto/declarative/qmlbehaviors/data/reassignedAnimation.qml
@@ -0,0 +1,27 @@
+import Qt 4.6
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: rect
+ objectName: "MyRect"
+ width: 100; height: 100; color: "green"
+ x: Behavior {
+ objectName: "MyBehavior"
+ NumberAnimation { duration: 200 }
+ NumberAnimation { duration: 1000 }
+ }
+ }
+ MouseRegion {
+ id: clicker
+ anchors.fill: parent
+ }
+ states: State {
+ name: "moved"
+ when: clicker.pressed
+ PropertyChanges {
+ target: rect
+ x: 200
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlbehaviors/data/scripttrigger.qml b/tests/auto/declarative/qmlbehaviors/data/scripttrigger.qml
new file mode 100644
index 0000000..4383a0b
--- /dev/null
+++ b/tests/auto/declarative/qmlbehaviors/data/scripttrigger.qml
@@ -0,0 +1,16 @@
+import Qt 4.6
+Rectangle {
+ width: 400
+ height: 400
+
+ onColorChanged: {
+ rect.x = 200
+ }
+
+ Rectangle {
+ id: rect
+ objectName: "MyRect"
+ width: 100; height: 100; color: "green"
+ x: Behavior { NumberAnimation { duration: 200; } }
+ }
+}
diff --git a/tests/auto/declarative/qmlbehaviors/data/simple.qml b/tests/auto/declarative/qmlbehaviors/data/simple.qml
new file mode 100644
index 0000000..37c3915
--- /dev/null
+++ b/tests/auto/declarative/qmlbehaviors/data/simple.qml
@@ -0,0 +1,26 @@
+import Qt 4.6
+Rectangle {
+ width: 400
+ height: 400
+ Rectangle {
+ id: rect
+ objectName: "MyRect"
+ width: 100; height: 100; color: "green"
+ x: Behavior {
+ objectName: "MyBehavior";
+ NumberAnimation { duration: 200; }
+ }
+ }
+ MouseRegion {
+ id: clicker
+ anchors.fill: parent
+ }
+ states: State {
+ name: "moved"
+ when: clicker.pressed
+ PropertyChanges {
+ target: rect
+ x: 200
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlbehaviors/qmlbehaviors.pro b/tests/auto/declarative/qmlbehaviors/qmlbehaviors.pro
new file mode 100644
index 0000000..1e685ee
--- /dev/null
+++ b/tests/auto/declarative/qmlbehaviors/qmlbehaviors.pro
@@ -0,0 +1,6 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+SOURCES += tst_qmlbehaviors.cpp
+macx:CONFIG -= app_bundle
+
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlbehaviors/tst_qmlbehaviors.cpp b/tests/auto/declarative/qmlbehaviors/tst_qmlbehaviors.cpp
new file mode 100644
index 0000000..61023a2
--- /dev/null
+++ b/tests/auto/declarative/qmlbehaviors/tst_qmlbehaviors.cpp
@@ -0,0 +1,281 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <QtDeclarative/qmlview.h>
+#include <private/qmlgraphicsrectangle_p.h>
+#include <private/qmlbehavior_p.h>
+#include <private/qmlanimation_p.h>
+
+class tst_behaviors : public QObject
+{
+ Q_OBJECT
+public:
+ tst_behaviors() {}
+
+private slots:
+ void simpleBehavior();
+ void scriptTriggered();
+ void cppTriggered();
+ void loop();
+ void colorBehavior();
+ void parentBehavior();
+ void replaceBinding();
+ //void transitionOverrides();
+ void group();
+ void emptyBehavior();
+ void nonSelectingBehavior();
+ void reassignedAnimation();
+ void disabled();
+};
+
+void tst_behaviors::simpleBehavior()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/simple.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+ QVERIFY(qobject_cast<QmlBehavior*>(rect->findChild<QmlBehavior*>("MyBehavior"))->animation());
+
+ rect->setState("moved");
+ QTest::qWait(100);
+ qreal x = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect"))->x();
+ QVERIFY(x > 0 && x < 200); //i.e. the behavior has been triggered
+}
+
+void tst_behaviors::scriptTriggered()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/scripttrigger.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ rect->setColor(QColor("red"));
+ QTest::qWait(100);
+ qreal x = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect"))->x();
+ QVERIFY(x > 0 && x < 200); //i.e. the behavior has been triggered
+}
+
+void tst_behaviors::cppTriggered()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/cpptrigger.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ QmlGraphicsRectangle *innerRect = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect"));
+ QVERIFY(innerRect);
+
+ innerRect->setProperty("x", 200);
+ QTest::qWait(100);
+ qreal x = innerRect->x();
+ QVERIFY(x > 0 && x < 200); //i.e. the behavior has been triggered
+}
+
+void tst_behaviors::loop()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/loop.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ //don't crash
+ rect->setState("moved");
+}
+
+void tst_behaviors::colorBehavior()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/color.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ rect->setState("red");
+ QTest::qWait(100);
+ QColor color = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect"))->color();
+ QVERIFY(color != QColor("red") && color != QColor("green")); //i.e. the behavior has been triggered
+}
+
+void tst_behaviors::parentBehavior()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/parent.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ rect->setState("reparented");
+ QTest::qWait(100);
+ QmlGraphicsItem *newParent = rect->findChild<QmlGraphicsItem*>("NewParent");
+ QmlGraphicsItem *parent = rect->findChild<QmlGraphicsRectangle*>("MyRect")->parentItem();
+ QVERIFY(parent != newParent);
+ QTest::qWait(300);
+ parent = rect->findChild<QmlGraphicsRectangle*>("MyRect")->parentItem();
+ QVERIFY(parent == newParent);
+}
+
+void tst_behaviors::replaceBinding()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/binding.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ rect->setState("moved");
+ QTest::qWait(100);
+ QmlGraphicsRectangle *innerRect = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect"));
+ QVERIFY(innerRect);
+ qreal x = innerRect->x();
+ QVERIFY(x > 0 && x < 200); //i.e. the behavior has been triggered
+ QTest::qWait(300);
+ QCOMPARE(innerRect->x(), (qreal)200);
+ rect->setProperty("basex", 10);
+ QCOMPARE(innerRect->x(), (qreal)200);
+ rect->setProperty("movedx", 210);
+ QTest::qWait(300);
+ QCOMPARE(innerRect->x(), (qreal)210);
+
+ rect->setState("");
+ QTest::qWait(100);
+ x = innerRect->x();
+ QVERIFY(x > 10 && x < 210); //i.e. the behavior has been triggered
+ QTest::qWait(300);
+ QCOMPARE(innerRect->x(), (qreal)10);
+ rect->setProperty("movedx", 200);
+ QCOMPARE(innerRect->x(), (qreal)10);
+ rect->setProperty("basex", 20);
+ QTest::qWait(300);
+ QCOMPARE(innerRect->x(), (qreal)20);
+}
+
+void tst_behaviors::group()
+{
+ {
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/groupProperty.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ rect->setState("moved");
+ QTest::qWait(100);
+ qreal x = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect"))->x();
+ QVERIFY(x > 0 && x < 200); //i.e. the behavior has been triggered
+ }
+
+ {
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/groupProperty2.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ rect->setState("moved");
+ QTest::qWait(100);
+ qreal x = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect"))->x();
+ QVERIFY(x > 0 && x < 200); //i.e. the behavior has been triggered
+ }
+}
+
+void tst_behaviors::emptyBehavior()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/empty.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ rect->setState("moved");
+ qreal x = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect"))->x();
+ QCOMPARE(x, qreal(200)); //should change immediately
+}
+
+void tst_behaviors::nonSelectingBehavior()
+{
+ {
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/nonSelecting.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ rect->setState("moved");
+ qreal x = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect"))->x();
+ QCOMPARE(x, qreal(200)); //should change immediately
+ }
+
+ {
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/nonSelecting2.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+
+ rect->setState("moved");
+ qreal x = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect"))->x();
+ QCOMPARE(x, qreal(200)); //should change immediately
+ }
+}
+
+void tst_behaviors::reassignedAnimation()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/reassignedAnimation.qml"));
+ QTest::ignoreMessage(QtWarningMsg, QString("QML Behavior (" + QUrl::fromLocalFile(SRCDIR "/data/reassignedAnimation.qml").toString() + ":9:12) Can't change the animation assigned to a Behavior.").toUtf8().constData());
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+ QCOMPARE(qobject_cast<QmlNumberAnimation*>(
+ qobject_cast<QmlBehavior*>(
+ rect->findChild<QmlBehavior*>("MyBehavior"))->animation())->duration(), 200);
+}
+
+void tst_behaviors::disabled()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/disabled.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+ QVERIFY(rect);
+ QCOMPARE(rect->findChild<QmlBehavior*>("MyBehavior")->enabled(), false);
+
+ rect->setState("moved");
+ qreal x = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect"))->x();
+ QCOMPARE(x, qreal(200)); //should change immediately
+
+}
+
+QTEST_MAIN(tst_behaviors)
+
+#include "tst_qmlbehaviors.moc"
diff --git a/tests/auto/declarative/qmlbinding/data/test-binding.qml b/tests/auto/declarative/qmlbinding/data/test-binding.qml
new file mode 100644
index 0000000..e9101e4
--- /dev/null
+++ b/tests/auto/declarative/qmlbinding/data/test-binding.qml
@@ -0,0 +1,16 @@
+import Qt 4.6
+
+Rectangle {
+ id: screen
+ width: 320; height: 240
+ property string text
+ property bool changeColor: false
+
+ Text { id: s1; text: "Hello" }
+ Rectangle { id: r1; width: 1; height: 1; color: "yellow" }
+ Rectangle { id: r2; width: 1; height: 1; color: "red" }
+
+ Binding { target: screen; property: "text"; value: s1.text; objectName: "binding1" }
+ Binding { target: screen; property: "color"; value: r1.color }
+ Binding { target: screen; property: "color"; when: screen.changeColor == true; value: r2.color }
+}
diff --git a/tests/auto/declarative/qmlbinding/data/test-binding2.qml b/tests/auto/declarative/qmlbinding/data/test-binding2.qml
new file mode 100644
index 0000000..ea20c16
--- /dev/null
+++ b/tests/auto/declarative/qmlbinding/data/test-binding2.qml
@@ -0,0 +1,16 @@
+import Qt 4.6
+
+Rectangle {
+ id: screen
+ width: 320; height: 240
+ property string text
+ property bool changeColor: false
+
+ Text { id: s1; text: "Hello" }
+ Rectangle { id: r1; width: 1; height: 1; color: "yellow" }
+ Rectangle { id: r2; width: 1; height: 1; color: "red" }
+
+ Binding { target: screen; property: "text"; value: s1.text }
+ Binding { target: screen; property: "color"; value: r1.color }
+ Binding { target: screen; property: "color"; value: r2.color; when: screen.changeColor == true }
+}
diff --git a/tests/auto/declarative/qmlbinding/qmlbinding.pro b/tests/auto/declarative/qmlbinding/qmlbinding.pro
new file mode 100644
index 0000000..dfaca91
--- /dev/null
+++ b/tests/auto/declarative/qmlbinding/qmlbinding.pro
@@ -0,0 +1,8 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative gui
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlbinding.cpp
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlbinding/tst_qmlbinding.cpp b/tests/auto/declarative/qmlbinding/tst_qmlbinding.cpp
new file mode 100644
index 0000000..19f4d77
--- /dev/null
+++ b/tests/auto/declarative/qmlbinding/tst_qmlbinding.cpp
@@ -0,0 +1,107 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <private/qmlbind_p.h>
+#include <private/qmlgraphicsrectangle_p.h>
+#include "../../../shared/util.h"
+
+class tst_qmlbinding : public QObject
+
+{
+ Q_OBJECT
+public:
+ tst_qmlbinding();
+
+private slots:
+ void binding();
+ void whenAfterValue();
+
+private:
+ QmlEngine engine;
+};
+
+tst_qmlbinding::tst_qmlbinding()
+{
+}
+
+void tst_qmlbinding::binding()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/test-binding.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+
+ QVERIFY(rect != 0);
+ QCOMPARE(rect->color(), QColor("yellow"));
+ QCOMPARE(rect->property("text").toString(), QString("Hello"));
+
+ rect->setProperty("changeColor", true);
+ QCOMPARE(rect->color(), QColor("red"));
+
+ QmlBind *binding = qobject_cast<QmlBind*>(rect->findChild<QmlBind*>("binding1"));
+ QVERIFY(binding != 0);
+ QCOMPARE(binding->object(), rect);
+ QCOMPARE(binding->property(), QLatin1String("text"));
+ QCOMPARE(binding->value().toString(), QLatin1String("Hello"));
+
+ delete rect;
+}
+
+void tst_qmlbinding::whenAfterValue()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/test-binding2.qml"));
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create());
+
+ QVERIFY(rect != 0);
+ QCOMPARE(rect->color(), QColor("yellow"));
+ QCOMPARE(rect->property("text").toString(), QString("Hello"));
+
+ rect->setProperty("changeColor", true);
+ QCOMPARE(rect->color(), QColor("red"));
+
+ delete rect;
+}
+
+QTEST_MAIN(tst_qmlbinding)
+
+#include "tst_qmlbinding.moc"
diff --git a/tests/auto/declarative/qmlconnection/data/test-connection.qml b/tests/auto/declarative/qmlconnection/data/test-connection.qml
new file mode 100644
index 0000000..9534621
--- /dev/null
+++ b/tests/auto/declarative/qmlconnection/data/test-connection.qml
@@ -0,0 +1,10 @@
+import Qt 4.6
+
+Item {
+ id: screen; width: 50
+
+ property bool tested: false
+ signal testMe
+
+ Connection { sender: screen; signal: "widthChanged()"; script: screen.tested = true }
+}
diff --git a/tests/auto/declarative/qmlconnection/data/test-connection2.qml b/tests/auto/declarative/qmlconnection/data/test-connection2.qml
new file mode 100644
index 0000000..65fe23a
--- /dev/null
+++ b/tests/auto/declarative/qmlconnection/data/test-connection2.qml
@@ -0,0 +1,3 @@
+import Qt 4.6
+
+Connection { id: connection; sender: connection; signal: "widthChanged()"; script: 1 == 1 }
diff --git a/tests/auto/declarative/qmlconnection/data/test-connection3.qml b/tests/auto/declarative/qmlconnection/data/test-connection3.qml
new file mode 100644
index 0000000..32133f9
--- /dev/null
+++ b/tests/auto/declarative/qmlconnection/data/test-connection3.qml
@@ -0,0 +1,3 @@
+import Qt 4.6
+
+Connection {}
diff --git a/tests/auto/declarative/qmlconnection/data/trimming.qml b/tests/auto/declarative/qmlconnection/data/trimming.qml
new file mode 100644
index 0000000..c27dc46
--- /dev/null
+++ b/tests/auto/declarative/qmlconnection/data/trimming.qml
@@ -0,0 +1,10 @@
+import Qt 4.6
+
+Item {
+ id: screen; width: 50
+
+ property string tested
+ signal testMe(int param1, string param2)
+
+ Connection { sender: screen; signal: "testMe(param1, param2)"; script: screen.tested = param2 + param1 }
+}
diff --git a/tests/auto/declarative/qmlconnection/qmlconnection.pro b/tests/auto/declarative/qmlconnection/qmlconnection.pro
new file mode 100644
index 0000000..3d46fa6
--- /dev/null
+++ b/tests/auto/declarative/qmlconnection/qmlconnection.pro
@@ -0,0 +1,8 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative gui
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlconnection.cpp
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlconnection/tst_qmlconnection.cpp b/tests/auto/declarative/qmlconnection/tst_qmlconnection.cpp
new file mode 100644
index 0000000..b3c04f1
--- /dev/null
+++ b/tests/auto/declarative/qmlconnection/tst_qmlconnection.cpp
@@ -0,0 +1,139 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <private/qmlconnection_p.h>
+#include <private/qmlgraphicsitem_p.h>
+#include "../../../shared/util.h"
+#include <QtDeclarative/qmlscriptstring.h>
+
+class tst_qmlconnection : public QObject
+
+{
+ Q_OBJECT
+public:
+ tst_qmlconnection();
+
+private slots:
+ void defaultValues();
+ void properties();
+ void connection();
+ void trimming();
+
+private:
+ QmlEngine engine;
+};
+
+tst_qmlconnection::tst_qmlconnection()
+{
+}
+
+void tst_qmlconnection::defaultValues()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/test-connection3.qml"));
+ QmlConnection *item = qobject_cast<QmlConnection*>(c.create());
+
+ QVERIFY(item != 0);
+ QVERIFY(item->signalSender() == 0);
+ QCOMPARE(item->script().script(), QString());
+ QCOMPARE(item->signal(), QString());
+
+ delete item;
+}
+
+void tst_qmlconnection::properties()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/test-connection2.qml"));
+ QmlConnection *item = qobject_cast<QmlConnection*>(c.create());
+
+ QVERIFY(item != 0);
+
+ QVERIFY(item != 0);
+ QVERIFY(item->signalSender() == item);
+ QCOMPARE(item->script().script(), QString("1 == 1"));
+ QCOMPARE(item->signal(), QString("widthChanged()"));
+
+ delete item;
+}
+
+void tst_qmlconnection::connection()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/test-connection.qml"));
+ QmlGraphicsItem *item = qobject_cast<QmlGraphicsItem*>(c.create());
+
+ QVERIFY(item != 0);
+
+ QCOMPARE(item->property("tested").toBool(), false);
+ QCOMPARE(item->width(), 50.);
+ emit item->setWidth(100.);
+ QCOMPARE(item->width(), 100.);
+ QCOMPARE(item->property("tested").toBool(), true);
+
+ delete item;
+}
+
+void tst_qmlconnection::trimming()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/trimming.qml"));
+ QmlGraphicsItem *item = qobject_cast<QmlGraphicsItem*>(c.create());
+
+ QVERIFY(item != 0);
+
+ QCOMPARE(item->property("tested").toString(), QString(""));
+ int index = item->metaObject()->indexOfSignal("testMe(int,QString)");
+ QMetaMethod method = item->metaObject()->method(index);
+ method.invoke(item,
+ Qt::DirectConnection,
+ Q_ARG(int, 5),
+ Q_ARG(QString, "worked"));
+ QCOMPARE(item->property("tested").toString(), QString("worked5"));
+
+ delete item;
+}
+
+QTEST_MAIN(tst_qmlconnection)
+
+#include "tst_qmlconnection.moc"
diff --git a/tests/auto/declarative/qmlcontext/qmlcontext.pro b/tests/auto/declarative/qmlcontext/qmlcontext.pro
new file mode 100644
index 0000000..9e66429
--- /dev/null
+++ b/tests/auto/declarative/qmlcontext/qmlcontext.pro
@@ -0,0 +1,6 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+SOURCES += tst_qmlcontext.cpp
+macx:CONFIG -= app_bundle
+
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlcontext/tst_qmlcontext.cpp b/tests/auto/declarative/qmlcontext/tst_qmlcontext.cpp
new file mode 100644
index 0000000..f82f202
--- /dev/null
+++ b/tests/auto/declarative/qmlcontext/tst_qmlcontext.cpp
@@ -0,0 +1,434 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qtest.h>
+#include <QDebug>
+#include <QmlEngine>
+#include <QmlContext>
+#include <QmlComponent>
+#include <QmlExpression>
+
+class tst_qmlcontext : public QObject
+{
+ Q_OBJECT
+public:
+ tst_qmlcontext() {}
+
+private slots:
+ void baseUrl();
+ void resolvedUrl();
+ void engineMethod();
+ void parentContext();
+ void setContextProperty();
+ void addDefaultObject();
+ void destruction();
+
+private:
+ QmlEngine engine;
+};
+
+void tst_qmlcontext::baseUrl()
+{
+ QmlContext ctxt(&engine);
+
+ QCOMPARE(ctxt.baseUrl(), QUrl());
+
+ ctxt.setBaseUrl(QUrl("http://www.nokia.com/"));
+
+ QCOMPARE(ctxt.baseUrl(), QUrl("http://www.nokia.com/"));
+}
+
+void tst_qmlcontext::resolvedUrl()
+{
+ // Relative to the component
+ {
+ QmlContext ctxt(&engine);
+ ctxt.setBaseUrl(QUrl("http://www.nokia.com/"));
+
+ QCOMPARE(ctxt.resolvedUrl(QUrl("main.qml")), QUrl("http://www.nokia.com/main.qml"));
+ }
+
+ // Relative to a parent
+ {
+ QmlContext ctxt(&engine);
+ ctxt.setBaseUrl(QUrl("http://www.nokia.com/"));
+
+ QmlContext ctxt2(&ctxt);
+ QCOMPARE(ctxt2.resolvedUrl(QUrl("main2.qml")), QUrl("http://www.nokia.com/main2.qml"));
+ }
+
+ // Relative to the engine
+ {
+ QmlContext ctxt(&engine);
+ QCOMPARE(ctxt.resolvedUrl(QUrl("main.qml")), engine.baseUrl().resolved(QUrl("main.qml")));
+ }
+
+ // Relative to a deleted parent
+ {
+ QmlContext *ctxt = new QmlContext(&engine);
+ ctxt->setBaseUrl(QUrl("http://www.nokia.com/"));
+
+ QmlContext ctxt2(ctxt);
+ QCOMPARE(ctxt2.resolvedUrl(QUrl("main2.qml")), QUrl("http://www.nokia.com/main2.qml"));
+
+ delete ctxt; ctxt = 0;
+
+ QCOMPARE(ctxt2.resolvedUrl(QUrl("main2.qml")), QUrl());
+ }
+
+ // Absolute
+ {
+ QmlContext ctxt(&engine);
+
+ QCOMPARE(ctxt.resolvedUrl(QUrl("http://www.nokia.com/main2.qml")), QUrl("http://www.nokia.com/main2.qml"));
+ QCOMPARE(ctxt.resolvedUrl(QUrl("file:///main2.qml")), QUrl("file:///main2.qml"));
+ }
+}
+
+void tst_qmlcontext::engineMethod()
+{
+ QmlEngine *engine = new QmlEngine;
+
+ QmlContext ctxt(engine);
+ QmlContext ctxt2(&ctxt);
+ QmlContext ctxt3(&ctxt2);
+ QmlContext ctxt4(&ctxt2);
+
+ QCOMPARE(ctxt.engine(), engine);
+ QCOMPARE(ctxt2.engine(), engine);
+ QCOMPARE(ctxt3.engine(), engine);
+ QCOMPARE(ctxt4.engine(), engine);
+
+ delete engine; engine = 0;
+
+ QCOMPARE(ctxt.engine(), engine);
+ QCOMPARE(ctxt2.engine(), engine);
+ QCOMPARE(ctxt3.engine(), engine);
+ QCOMPARE(ctxt4.engine(), engine);
+}
+
+void tst_qmlcontext::parentContext()
+{
+ QmlEngine *engine = new QmlEngine;
+
+ QCOMPARE(engine->rootContext()->parentContext(), (QmlContext *)0);
+
+ QmlContext *ctxt = new QmlContext(engine);
+ QmlContext *ctxt2 = new QmlContext(ctxt);
+ QmlContext *ctxt3 = new QmlContext(ctxt2);
+ QmlContext *ctxt4 = new QmlContext(ctxt2);
+ QmlContext *ctxt5 = new QmlContext(ctxt);
+ QmlContext *ctxt6 = new QmlContext(engine);
+ QmlContext *ctxt7 = new QmlContext(engine->rootContext());
+
+ QCOMPARE(ctxt->parentContext(), engine->rootContext());
+ QCOMPARE(ctxt2->parentContext(), ctxt);
+ QCOMPARE(ctxt3->parentContext(), ctxt2);
+ QCOMPARE(ctxt4->parentContext(), ctxt2);
+ QCOMPARE(ctxt5->parentContext(), ctxt);
+ QCOMPARE(ctxt6->parentContext(), engine->rootContext());
+ QCOMPARE(ctxt7->parentContext(), engine->rootContext());
+
+ delete ctxt2; ctxt2 = 0;
+
+ QCOMPARE(ctxt->parentContext(), engine->rootContext());
+ QCOMPARE(ctxt3->parentContext(), ctxt2);
+ QCOMPARE(ctxt4->parentContext(), ctxt2);
+ QCOMPARE(ctxt5->parentContext(), ctxt);
+ QCOMPARE(ctxt6->parentContext(), engine->rootContext());
+ QCOMPARE(ctxt7->parentContext(), engine->rootContext());
+
+ delete engine; engine = 0;
+
+ QCOMPARE(ctxt->parentContext(), (QmlContext *)0);
+ QCOMPARE(ctxt3->parentContext(), ctxt2);
+ QCOMPARE(ctxt4->parentContext(), ctxt2);
+ QCOMPARE(ctxt5->parentContext(), ctxt);
+ QCOMPARE(ctxt6->parentContext(), (QmlContext *)0);
+ QCOMPARE(ctxt7->parentContext(), (QmlContext *)0);
+
+ delete ctxt7;
+ delete ctxt6;
+ delete ctxt5;
+ delete ctxt4;
+ delete ctxt3;
+ delete ctxt;
+}
+
+class TestObject : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int a READ a NOTIFY aChanged)
+ Q_PROPERTY(int b READ b NOTIFY bChanged)
+ Q_PROPERTY(int c READ c NOTIFY cChanged)
+
+public:
+ TestObject() : _a(10), _b(10), _c(10) {}
+
+ int a() const { return _a; }
+ void setA(int a) { _a = a; emit aChanged(); }
+
+ int b() const { return _b; }
+ void setB(int b) { _b = b; emit bChanged(); }
+
+ int c() const { return _c; }
+ void setC(int c) { _c = c; emit cChanged(); }
+
+signals:
+ void aChanged();
+ void bChanged();
+ void cChanged();
+
+private:
+ int _a;
+ int _b;
+ int _c;
+};
+
+class TestObject2 : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int b READ b NOTIFY bChanged)
+
+public:
+ TestObject2() : _b(10) {}
+
+ int b() const { return _b; }
+ void setB(int b) { _b = b; emit bChanged(); }
+
+signals:
+ void bChanged();
+
+private:
+ int _b;
+};
+
+#define TEST_CONTEXT_PROPERTY(ctxt, name, value) \
+{ \
+ QmlComponent component(&engine); \
+ component.setData("import Qt 4.6; QtObject { property var test: " #name " }", QUrl()); \
+\
+ QObject *obj = component.create(ctxt); \
+\
+ QCOMPARE(obj->property("test"), value); \
+\
+ delete obj; \
+}
+
+void tst_qmlcontext::setContextProperty()
+{
+ QmlContext ctxt(&engine);
+ QmlContext ctxt2(&ctxt);
+
+ TestObject obj1;
+ obj1.setA(3345);
+ TestObject obj2;
+ obj2.setA(-19);
+
+ // Static context properties
+ ctxt.setContextProperty("a", QVariant(10));
+ ctxt.setContextProperty("b", QVariant(9));
+ ctxt2.setContextProperty("d", &obj2);
+ ctxt2.setContextProperty("b", QVariant(19));
+ ctxt2.setContextProperty("c", QVariant(QString("Hello World!")));
+ ctxt.setContextProperty("d", &obj1);
+ ctxt.setContextProperty("e", &obj1);
+
+ TEST_CONTEXT_PROPERTY(&ctxt2, a, QVariant(10));
+ TEST_CONTEXT_PROPERTY(&ctxt2, b, QVariant(19));
+ TEST_CONTEXT_PROPERTY(&ctxt2, c, QVariant(QString("Hello World!")));
+ TEST_CONTEXT_PROPERTY(&ctxt2, d.a, QVariant(-19));
+ TEST_CONTEXT_PROPERTY(&ctxt2, e.a, QVariant(3345));
+
+ ctxt.setContextProperty("a", QVariant(13));
+ ctxt.setContextProperty("b", QVariant(4));
+ ctxt2.setContextProperty("b", QVariant(8));
+ ctxt2.setContextProperty("c", QVariant(QString("Hi World!")));
+ ctxt2.setContextProperty("d", &obj1);
+ obj1.setA(12);
+
+ TEST_CONTEXT_PROPERTY(&ctxt2, a, QVariant(13));
+ TEST_CONTEXT_PROPERTY(&ctxt2, b, QVariant(8));
+ TEST_CONTEXT_PROPERTY(&ctxt2, c, QVariant(QString("Hi World!")));
+ TEST_CONTEXT_PROPERTY(&ctxt2, d.a, QVariant(12));
+ TEST_CONTEXT_PROPERTY(&ctxt2, e.a, QVariant(12));
+
+ // Changes in context properties
+ {
+ QmlComponent component(&engine);
+ component.setData("import Qt 4.6; QtObject { property var test: a }", QUrl());
+
+ QObject *obj = component.create(&ctxt2);
+
+ QCOMPARE(obj->property("test"), QVariant(13));
+ ctxt.setContextProperty("a", QVariant(19));
+ QCOMPARE(obj->property("test"), QVariant(19));
+
+ delete obj;
+ }
+ {
+ QmlComponent component(&engine);
+ component.setData("import Qt 4.6; QtObject { property var test: b }", QUrl());
+
+ QObject *obj = component.create(&ctxt2);
+
+ QCOMPARE(obj->property("test"), QVariant(8));
+ ctxt.setContextProperty("b", QVariant(5));
+ QCOMPARE(obj->property("test"), QVariant(8));
+ ctxt2.setContextProperty("b", QVariant(1912));
+ QCOMPARE(obj->property("test"), QVariant(1912));
+
+ delete obj;
+ }
+ {
+ QmlComponent component(&engine);
+ component.setData("import Qt 4.6; QtObject { property var test: e.a }", QUrl());
+
+ QObject *obj = component.create(&ctxt2);
+
+ QCOMPARE(obj->property("test"), QVariant(12));
+ obj1.setA(13);
+ QCOMPARE(obj->property("test"), QVariant(13));
+
+ delete obj;
+ }
+
+ // New context properties
+ {
+ QmlComponent component(&engine);
+ component.setData("import Qt 4.6; QtObject { property var test: a }", QUrl());
+
+ QObject *obj = component.create(&ctxt2);
+
+ QCOMPARE(obj->property("test"), QVariant(19));
+ ctxt2.setContextProperty("a", QVariant(1945));
+ QCOMPARE(obj->property("test"), QVariant(1945));
+
+ delete obj;
+ }
+
+ // Setting an object-variant context property
+ {
+ QmlComponent component(&engine);
+ component.setData("import Qt 4.6; QtObject { id: root; property int a: 10; property int test: ctxtProp.a; property var obj: root; }", QUrl());
+
+ QmlContext ctxt(engine.rootContext());
+ ctxt.setContextProperty("ctxtProp", QVariant());
+
+ QTest::ignoreMessage(QtWarningMsg, "<Unknown File>:1: TypeError: Result of expression 'ctxtProp' [undefined] is not an object.");
+ QObject *obj = component.create(&ctxt);
+
+ QVariant v = obj->property("obj");
+
+ ctxt.setContextProperty("ctxtProp", v);
+
+ QCOMPARE(obj->property("test"), QVariant(10));
+
+ delete obj;
+ }
+}
+
+void tst_qmlcontext::addDefaultObject()
+{
+ QmlContext ctxt(&engine);
+
+ TestObject to;
+ TestObject2 to2;
+
+ to.setA(2);
+ to.setB(192);
+ to.setC(18);
+ to2.setB(111999);
+
+ ctxt.addDefaultObject(&to2);
+ ctxt.addDefaultObject(&to);
+ ctxt.setContextProperty("c", QVariant(9));
+
+ // Static context properties
+ TEST_CONTEXT_PROPERTY(&ctxt, a, QVariant(2));
+ TEST_CONTEXT_PROPERTY(&ctxt, b, QVariant(111999));
+ TEST_CONTEXT_PROPERTY(&ctxt, c, QVariant(9));
+
+ to.setA(12);
+ to.setB(100);
+ to.setC(7);
+ to2.setB(1612);
+ ctxt.setContextProperty("c", QVariant(3));
+
+ TEST_CONTEXT_PROPERTY(&ctxt, a, QVariant(12));
+ TEST_CONTEXT_PROPERTY(&ctxt, b, QVariant(1612));
+ TEST_CONTEXT_PROPERTY(&ctxt, c, QVariant(3));
+
+ // Changes in context properties
+ {
+ QmlComponent component(&engine);
+ component.setData("import Qt 4.6; QtObject { property var test: a }", QUrl());
+
+ QObject *obj = component.create(&ctxt);
+
+ QCOMPARE(obj->property("test"), QVariant(12));
+ to.setA(14);
+ QCOMPARE(obj->property("test"), QVariant(14));
+
+ delete obj;
+ }
+}
+
+void tst_qmlcontext::destruction()
+{
+ QmlContext *ctxt = new QmlContext(&engine);
+
+ QObject obj;
+ QmlEngine::setContextForObject(&obj, ctxt);
+ QmlExpression expr(ctxt, "a", 0);
+
+ QCOMPARE(ctxt, QmlEngine::contextForObject(&obj));
+ QCOMPARE(ctxt, expr.context());
+
+ delete ctxt; ctxt = 0;
+
+ QCOMPARE(ctxt, QmlEngine::contextForObject(&obj));
+ QCOMPARE(ctxt, expr.context());
+}
+
+QTEST_MAIN(tst_qmlcontext)
+
+#include "tst_qmlcontext.moc"
diff --git a/tests/auto/declarative/qmldatetimeformatter/qmldatetimeformatter.pro b/tests/auto/declarative/qmldatetimeformatter/qmldatetimeformatter.pro
new file mode 100644
index 0000000..2b1947d
--- /dev/null
+++ b/tests/auto/declarative/qmldatetimeformatter/qmldatetimeformatter.pro
@@ -0,0 +1,5 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmldatetimeformatter.cpp
diff --git a/tests/auto/declarative/qmldatetimeformatter/tst_qmldatetimeformatter.cpp b/tests/auto/declarative/qmldatetimeformatter/tst_qmldatetimeformatter.cpp
new file mode 100644
index 0000000..2ce6186
--- /dev/null
+++ b/tests/auto/declarative/qmldatetimeformatter/tst_qmldatetimeformatter.cpp
@@ -0,0 +1,150 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <private/qmldatetimeformatter_p.h>
+#include <QDebug>
+
+class tst_datetimeformatter : public QObject
+{
+ Q_OBJECT
+public:
+ tst_datetimeformatter() {}
+
+private slots:
+ void date();
+ void time();
+ void dateTime();
+};
+
+void tst_datetimeformatter::date()
+{
+ QmlEngine engine;
+ QmlComponent formatterComponent(&engine);
+ formatterComponent.setData(QByteArray("import Qt 4.6\n DateTimeFormatter { date: \"2008-12-24\" }"),
+ QUrl::fromLocalFile(""));
+ QmlDateTimeFormatter *formatter = qobject_cast<QmlDateTimeFormatter*>(formatterComponent.create());
+ if(formatterComponent.isError())
+ qDebug() << formatterComponent.errors();
+ QVERIFY(formatter != 0);
+
+ QDate date(2008,12,24);
+ QCOMPARE(formatter->date(), date);
+ QCOMPARE(formatter->dateTime().date(), date);
+ QCOMPARE(formatter->dateText(),date.toString(Qt::SystemLocaleShortDate));
+
+ formatter->setLongStyle(true);
+ QVERIFY(formatter->longStyle());
+ QCOMPARE(formatter->dateText(),date.toString(Qt::SystemLocaleLongDate));
+
+ formatter->setDateFormat("ddd MMMM d yy");
+ QCOMPARE(formatter->dateFormat(), QLatin1String("ddd MMMM d yy"));
+ QCOMPARE(formatter->dateText(),date.toString("ddd MMMM d yy"));
+
+ QVERIFY(formatter->timeText().isEmpty());
+ QVERIFY(formatter->dateTimeText().isEmpty());
+
+ delete formatter;
+}
+
+void tst_datetimeformatter::time()
+{
+ QmlEngine engine;
+ QmlComponent formatterComponent(&engine);
+ formatterComponent.setData("import Qt 4.6\n DateTimeFormatter { time: \"14:15:38.200\" }", QUrl::fromLocalFile(""));
+ QmlDateTimeFormatter *formatter = qobject_cast<QmlDateTimeFormatter*>(formatterComponent.create());
+ if(formatterComponent.isError())
+ qDebug() << formatterComponent.errors();
+ QVERIFY(formatter != 0);
+
+ QTime time(14,15,38,200);
+
+ QCOMPARE(formatter->time(),time);
+ QCOMPARE(formatter->dateTime().time(),time);
+
+ QCOMPARE(formatter->timeText(),time.toString(Qt::SystemLocaleShortDate));
+
+ formatter->setLongStyle(true);
+ QCOMPARE(formatter->timeText(),time.toString(Qt::SystemLocaleLongDate));
+
+ formatter->setTimeFormat("H:m:s a");
+ QCOMPARE(formatter->timeFormat(), QLatin1String("H:m:s a"));
+ QCOMPARE(formatter->timeText(),time.toString("H:m:s a"));
+
+ formatter->setTimeFormat("hh:mm:ss.zzz");
+ QCOMPARE(formatter->timeText(),time.toString("hh:mm:ss.zzz"));
+
+ QVERIFY(formatter->dateText().isEmpty());
+ QVERIFY(formatter->dateTimeText().isEmpty());
+
+ delete formatter;
+}
+
+void tst_datetimeformatter::dateTime()
+{
+ QmlEngine engine;
+ QmlComponent formatterComponent(&engine);
+ formatterComponent.setData("import Qt 4.6\n DateTimeFormatter { dateTime: \"1978-03-04T09:13:54\" }", QUrl::fromLocalFile(""));
+ QmlDateTimeFormatter *formatter = qobject_cast<QmlDateTimeFormatter*>(formatterComponent.create());
+ if(formatterComponent.isError())
+ qDebug() << formatterComponent.errors();
+ QVERIFY(formatter != 0);
+
+ QDateTime dateTime(QDate(1978,03,04),QTime(9,13,54));
+ QCOMPARE(formatter->dateTime(),dateTime);
+ QCOMPARE(formatter->date(),dateTime.date());
+ QCOMPARE(formatter->time(),dateTime.time());
+ QCOMPARE(formatter->dateTimeText(),dateTime.toString(Qt::SystemLocaleShortDate));
+
+ formatter->setLongStyle(true);
+ QCOMPARE(formatter->dateTimeText(),dateTime.toString(Qt::SystemLocaleLongDate));
+
+ formatter->setDateTimeFormat("M/d/yy H:m:s a");
+ QCOMPARE(formatter->dateTimeFormat(), QLatin1String("M/d/yy H:m:s a"));
+ QCOMPARE(formatter->dateTimeText(),dateTime.toString("M/d/yy H:m:s a"));
+
+ delete formatter;
+}
+
+QTEST_MAIN(tst_datetimeformatter)
+
+#include "tst_qmldatetimeformatter.moc"
diff --git a/tests/auto/declarative/qmldebug/qmldebug.pro b/tests/auto/declarative/qmldebug/qmldebug.pro
new file mode 100644
index 0000000..f79829d
--- /dev/null
+++ b/tests/auto/declarative/qmldebug/qmldebug.pro
@@ -0,0 +1,7 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += network declarative
+macx:CONFIG -= app_bundle
+
+HEADERS += ../shared/debugutil_p.h
+SOURCES += tst_qmldebug.cpp \
+ ../shared/debugutil.cpp
diff --git a/tests/auto/declarative/qmldebug/tst_qmldebug.cpp b/tests/auto/declarative/qmldebug/tst_qmldebug.cpp
new file mode 100644
index 0000000..82e74ce
--- /dev/null
+++ b/tests/auto/declarative/qmldebug/tst_qmldebug.cpp
@@ -0,0 +1,833 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QSignalSpy>
+#include <QTimer>
+#include <QHostAddress>
+#include <QDebug>
+#include <QThread>
+
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcontext.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <QtDeclarative/qmlexpression.h>
+#include <QtDeclarative/qmlmetatype.h>
+#include <QtDeclarative/qmlmetaproperty.h>
+#include <QtDeclarative/qmlbinding.h>
+
+#include <private/qmldebug_p.h>
+#include <private/qmlenginedebug_p.h>
+#include <private/qmldebugclient_p.h>
+#include <private/qmldebugservice_p.h>
+#include <private/qmlgraphicsrectangle_p.h>
+
+#include "../shared/debugutil_p.h"
+
+Q_DECLARE_METATYPE(QmlDebugWatch::State)
+
+
+class tst_QmlDebug : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QmlDebug(QmlDebugTestData *data)
+ {
+ m_conn = data->conn;
+ m_engine = data->engine;
+ m_rootItem = data->items[0];
+ }
+
+private:
+ QmlDebugObjectReference findRootObject();
+ QmlDebugPropertyReference findProperty(const QList<QmlDebugPropertyReference> &props, const QString &name) const;
+ void waitForQuery(QmlDebugQuery *query);
+
+ void recursiveObjectTest(QObject *o, const QmlDebugObjectReference &oref, bool recursive) const;
+
+ void recursiveCompareObjects(const QmlDebugObjectReference &a, const QmlDebugObjectReference &b) const;
+ void recursiveCompareContexts(const QmlDebugContextReference &a, const QmlDebugContextReference &b) const;
+ void compareProperties(const QmlDebugPropertyReference &a, const QmlDebugPropertyReference &b) const;
+
+ QmlDebugConnection *m_conn;
+ QmlEngineDebug *m_dbg;
+ QmlEngine *m_engine;
+ QmlGraphicsItem *m_rootItem;
+
+private slots:
+ void initTestCase();
+
+ void watch_property();
+ void watch_object();
+ void watch_expression();
+ void watch_expression_data();
+ void watch_context();
+ void watch_file();
+
+ void queryAvailableEngines();
+ void queryRootContexts();
+ void queryObject();
+ void queryObject_data();
+ void queryExpressionResult();
+ void queryExpressionResult_data();
+
+ void tst_QmlDebugFileReference();
+ void tst_QmlDebugEngineReference();
+ void tst_QmlDebugObjectReference();
+ void tst_QmlDebugContextReference();
+ void tst_QmlDebugPropertyReference();
+};
+
+QmlDebugObjectReference tst_QmlDebug::findRootObject()
+{
+ QmlDebugEnginesQuery *q_engines = m_dbg->queryAvailableEngines(this);
+ waitForQuery(q_engines);
+
+ if (q_engines->engines().count() == 0)
+ return QmlDebugObjectReference();
+ QmlDebugRootContextQuery *q_context = m_dbg->queryRootContexts(q_engines->engines()[0].debugId(), this);
+ waitForQuery(q_context);
+
+ if (q_context->rootContext().objects().count() == 0)
+ return QmlDebugObjectReference();
+ QmlDebugObjectQuery *q_obj = m_dbg->queryObject(q_context->rootContext().objects()[0], this);
+ waitForQuery(q_obj);
+
+ QmlDebugObjectReference result = q_obj->object();
+
+ delete q_engines;
+ delete q_context;
+ delete q_obj;
+
+ return result;
+}
+
+QmlDebugPropertyReference tst_QmlDebug::findProperty(const QList<QmlDebugPropertyReference> &props, const QString &name) const
+{
+ foreach(const QmlDebugPropertyReference &p, props) {
+ if (p.name() == name)
+ return p;
+ }
+ return QmlDebugPropertyReference();
+}
+
+void tst_QmlDebug::waitForQuery(QmlDebugQuery *query)
+{
+ QVERIFY(query);
+ QCOMPARE(query->parent(), this);
+ QVERIFY(query->state() == QmlDebugQuery::Waiting);
+ if (!QmlDebugTest::waitForSignal(query, SIGNAL(stateChanged(QmlDebugQuery::State))))
+ QFAIL("query timed out");
+}
+
+void tst_QmlDebug::recursiveObjectTest(QObject *o, const QmlDebugObjectReference &oref, bool recursive) const
+{
+ const QMetaObject *meta = o->metaObject();
+
+ QmlType *type = QmlMetaType::qmlType(o->metaObject());
+ QString className = type ? type->qmlTypeName() : QString();
+ className = className.mid(className.lastIndexOf(QLatin1Char('/'))+1);
+
+ QCOMPARE(oref.debugId(), QmlDebugService::idForObject(o));
+ QCOMPARE(oref.name(), o->objectName());
+ QCOMPARE(oref.className(), className);
+ QCOMPARE(oref.contextDebugId(), QmlDebugService::idForObject(qmlContext(o)));
+
+ const QObjectList &children = o->children();
+ for (int i=0; i<children.count(); i++) {
+ QObject *child = children[i];
+ if (!qmlContext(child))
+ continue;
+ int debugId = QmlDebugService::idForObject(child);
+ QVERIFY(debugId >= 0);
+
+ QmlDebugObjectReference cref;
+ foreach (const QmlDebugObjectReference &ref, oref.children()) {
+ if (ref.debugId() == debugId) {
+ cref = ref;
+ break;
+ }
+ }
+ QVERIFY(cref.debugId() >= 0);
+
+ if (recursive)
+ recursiveObjectTest(child, cref, true);
+ }
+
+ foreach (const QmlDebugPropertyReference &p, oref.properties()) {
+ QCOMPARE(p.objectDebugId(), QmlDebugService::idForObject(o));
+
+ // signal properties are fake - they are generated from QmlBoundSignal children
+ if (p.name().startsWith("on") && p.name().length() > 2 && p.name()[2].isUpper()) {
+ QVERIFY(p.value().toString().startsWith('{') && p.value().toString().endsWith('}'));
+ QVERIFY(p.valueTypeName().isEmpty());
+ QVERIFY(p.binding().isEmpty());
+ QVERIFY(!p.hasNotifySignal());
+ continue;
+ }
+
+ QMetaProperty pmeta = meta->property(meta->indexOfProperty(p.name().toUtf8().constData()));
+
+ QCOMPARE(p.name(), QString::fromUtf8(pmeta.name()));
+
+ if (pmeta.type() < QVariant::UserType) // TODO test complex types
+ QCOMPARE(p.value(), pmeta.read(o));
+
+ if (p.name() == "parent")
+ QVERIFY(p.valueTypeName() == "QGraphicsObject*" || p.valueTypeName() == "QmlGraphicsItem*");
+ else
+ QCOMPARE(p.valueTypeName(), QString::fromUtf8(pmeta.typeName()));
+
+ QmlAbstractBinding *binding = QmlMetaProperty(o, p.name()).binding();
+ if (binding)
+ QCOMPARE(binding->expression(), p.binding());
+
+ QCOMPARE(p.hasNotifySignal(), pmeta.hasNotifySignal());
+
+ QVERIFY(pmeta.isValid());
+ }
+}
+
+void tst_QmlDebug::recursiveCompareObjects(const QmlDebugObjectReference &a, const QmlDebugObjectReference &b) const
+{
+ QCOMPARE(a.debugId(), b.debugId());
+ QCOMPARE(a.className(), b.className());
+ QCOMPARE(a.name(), b.name());
+ QCOMPARE(a.contextDebugId(), b.contextDebugId());
+
+ QCOMPARE(a.source().url(), b.source().url());
+ QCOMPARE(a.source().lineNumber(), b.source().lineNumber());
+ QCOMPARE(a.source().columnNumber(), b.source().columnNumber());
+
+ QCOMPARE(a.properties().count(), b.properties().count());
+ QCOMPARE(a.children().count(), b.children().count());
+
+ QList<QmlDebugPropertyReference> aprops = a.properties();
+ QList<QmlDebugPropertyReference> bprops = b.properties();
+
+ for (int i=0; i<aprops.count(); i++)
+ compareProperties(aprops[i], bprops[i]);
+
+ for (int i=0; i<a.children().count(); i++)
+ recursiveCompareObjects(a.children()[i], b.children()[i]);
+}
+
+void tst_QmlDebug::recursiveCompareContexts(const QmlDebugContextReference &a, const QmlDebugContextReference &b) const
+{
+ QCOMPARE(a.debugId(), b.debugId());
+ QCOMPARE(a.name(), b.name());
+ QCOMPARE(a.objects().count(), b.objects().count());
+ QCOMPARE(a.contexts().count(), b.contexts().count());
+
+ for (int i=0; i<a.objects().count(); i++)
+ recursiveCompareObjects(a.objects()[i], b.objects()[i]);
+
+ for (int i=0; i<a.contexts().count(); i++)
+ recursiveCompareContexts(a.contexts()[i], b.contexts()[i]);
+}
+
+void tst_QmlDebug::compareProperties(const QmlDebugPropertyReference &a, const QmlDebugPropertyReference &b) const
+{
+ QCOMPARE(a.objectDebugId(), b.objectDebugId());
+ QCOMPARE(a.name(), b.name());
+ QCOMPARE(a.value(), b.value());
+ QCOMPARE(a.valueTypeName(), b.valueTypeName());
+ QCOMPARE(a.binding(), b.binding());
+ QCOMPARE(a.hasNotifySignal(), b.hasNotifySignal());
+}
+
+void tst_QmlDebug::initTestCase()
+{
+ m_dbg = new QmlEngineDebug(m_conn, this);
+
+ qRegisterMetaType<QmlDebugWatch::State>();
+}
+
+void tst_QmlDebug::watch_property()
+{
+ QmlDebugObjectReference obj = findRootObject();
+ QmlDebugPropertyReference prop = findProperty(obj.properties(), "width");
+
+ QmlDebugPropertyWatch *watch;
+
+ QmlEngineDebug unconnected(0);
+ watch = unconnected.addWatch(prop, this);
+ QCOMPARE(watch->state(), QmlDebugWatch::Dead);
+ delete watch;
+
+ watch = m_dbg->addWatch(QmlDebugPropertyReference(), this);
+ QVERIFY(QmlDebugTest::waitForSignal(watch, SIGNAL(stateChanged(QmlDebugWatch::State))));
+ QCOMPARE(watch->state(), QmlDebugWatch::Inactive);
+ delete watch;
+
+ watch = m_dbg->addWatch(prop, this);
+ QCOMPARE(watch->state(), QmlDebugWatch::Waiting);
+ QCOMPARE(watch->objectDebugId(), obj.debugId());
+ QCOMPARE(watch->name(), prop.name());
+
+ QSignalSpy spy(watch, SIGNAL(valueChanged(QByteArray,QVariant)));
+
+ int origWidth = m_rootItem->property("width").toInt();
+ m_rootItem->setProperty("width", origWidth*2);
+
+ // stateChanged() is received before valueChanged()
+ QVERIFY(QmlDebugTest::waitForSignal(watch, SIGNAL(stateChanged(QmlDebugWatch::State))));
+ QCOMPARE(watch->state(), QmlDebugWatch::Active);
+ QCOMPARE(spy.count(), 1);
+
+ m_dbg->removeWatch(watch);
+ delete watch;
+
+ // restore original value and verify spy doesn't get additional signal since watch has been removed
+ m_rootItem->setProperty("width", origWidth);
+ QTest::qWait(100);
+ QCOMPARE(spy.count(), 1);
+
+ QCOMPARE(spy.at(0).at(0).value<QByteArray>(), prop.name().toUtf8());
+ QCOMPARE(spy.at(0).at(1).value<QVariant>(), qVariantFromValue(origWidth*2));
+}
+
+void tst_QmlDebug::watch_object()
+{
+ QmlDebugEnginesQuery *q_engines = m_dbg->queryAvailableEngines(this);
+ waitForQuery(q_engines);
+
+ Q_ASSERT(q_engines->engines().count() > 0);
+ QmlDebugRootContextQuery *q_context = m_dbg->queryRootContexts(q_engines->engines()[0].debugId(), this);
+ waitForQuery(q_context);
+
+ Q_ASSERT(q_context->rootContext().objects().count() > 0);
+ QmlDebugObjectQuery *q_obj = m_dbg->queryObject(q_context->rootContext().objects()[0], this);
+ waitForQuery(q_obj);
+
+ QmlDebugObjectReference obj = q_obj->object();
+
+ delete q_engines;
+ delete q_context;
+ delete q_obj;
+
+ QmlDebugWatch *watch;
+
+ QmlEngineDebug unconnected(0);
+ watch = unconnected.addWatch(obj, this);
+ QCOMPARE(watch->state(), QmlDebugWatch::Dead);
+ delete watch;
+
+ watch = m_dbg->addWatch(QmlDebugObjectReference(), this);
+ QVERIFY(QmlDebugTest::waitForSignal(watch, SIGNAL(stateChanged(QmlDebugWatch::State))));
+ QCOMPARE(watch->state(), QmlDebugWatch::Inactive);
+ delete watch;
+
+ watch = m_dbg->addWatch(obj, this);
+ QCOMPARE(watch->state(), QmlDebugWatch::Waiting);
+ QCOMPARE(watch->objectDebugId(), obj.debugId());
+
+ QSignalSpy spy(watch, SIGNAL(valueChanged(QByteArray,QVariant)));
+
+ int origWidth = m_rootItem->property("width").toInt();
+ int origHeight = m_rootItem->property("height").toInt();
+ m_rootItem->setProperty("width", origWidth*2);
+ m_rootItem->setProperty("height", origHeight*2);
+
+ // stateChanged() is received before any valueChanged() signals
+ QVERIFY(QmlDebugTest::waitForSignal(watch, SIGNAL(stateChanged(QmlDebugWatch::State))));
+ QCOMPARE(watch->state(), QmlDebugWatch::Active);
+ QVERIFY(spy.count() > 0);
+
+ int newWidth = -1;
+ int newHeight = -1;
+ for (int i=0; i<spy.count(); i++) {
+ const QVariantList &values = spy[i];
+ if (values[0].value<QByteArray>() == "width")
+ newWidth = values[1].value<QVariant>().toInt();
+ else if (values[0].value<QByteArray>() == "height")
+ newHeight = values[1].value<QVariant>().toInt();
+
+ }
+
+ m_dbg->removeWatch(watch);
+ delete watch;
+
+ // since watch has been removed, restoring the original values should not trigger a valueChanged()
+ spy.clear();
+ m_rootItem->setProperty("width", origWidth);
+ m_rootItem->setProperty("height", origHeight);
+ QTest::qWait(100);
+ QCOMPARE(spy.count(), 0);
+
+ QCOMPARE(newWidth, origWidth * 2);
+ QCOMPARE(newHeight, origHeight * 2);
+}
+
+void tst_QmlDebug::watch_expression()
+{
+ QFETCH(QString, expr);
+ QFETCH(int, increment);
+ QFETCH(int, incrementCount);
+
+ int origWidth = m_rootItem->property("width").toInt();
+
+ QmlDebugObjectReference obj = findRootObject();
+
+ QmlDebugObjectExpressionWatch *watch;
+
+ QmlEngineDebug unconnected(0);
+ watch = unconnected.addWatch(obj, expr, this);
+ QCOMPARE(watch->state(), QmlDebugWatch::Dead);
+ delete watch;
+
+ watch = m_dbg->addWatch(QmlDebugObjectReference(), expr, this);
+ QVERIFY(QmlDebugTest::waitForSignal(watch, SIGNAL(stateChanged(QmlDebugWatch::State))));
+ QCOMPARE(watch->state(), QmlDebugWatch::Inactive);
+ delete watch;
+
+ watch = m_dbg->addWatch(obj, expr, this);
+ QCOMPARE(watch->state(), QmlDebugWatch::Waiting);
+ QCOMPARE(watch->objectDebugId(), obj.debugId());
+ QCOMPARE(watch->expression(), expr);
+
+ QSignalSpy spyState(watch, SIGNAL(stateChanged(QmlDebugWatch::State)));
+
+ QSignalSpy spy(watch, SIGNAL(valueChanged(QByteArray,QVariant)));
+ int expectedSpyCount = incrementCount + 1; // should also get signal with expression's initial value
+
+ int width = origWidth;
+ for (int i=0; i<incrementCount+1; i++) {
+ if (i > 0) {
+ width += increment;
+ m_rootItem->setProperty("width", width);
+ }
+ if (!QmlDebugTest::waitForSignal(watch, SIGNAL(valueChanged(QByteArray,QVariant))))
+ QFAIL("Did not receive valueChanged() for expression");
+ }
+
+ if (spyState.count() == 0)
+ QVERIFY(QmlDebugTest::waitForSignal(watch, SIGNAL(stateChanged(QmlDebugWatch::State))));
+ QCOMPARE(spyState.count(), 1);
+ QCOMPARE(watch->state(), QmlDebugWatch::Active);
+
+ m_dbg->removeWatch(watch);
+ delete watch;
+
+ // restore original value and verify spy doesn't get a signal since watch has been removed
+ m_rootItem->setProperty("width", origWidth);
+ QTest::qWait(100);
+ QCOMPARE(spy.count(), expectedSpyCount);
+
+ width = origWidth + increment;
+ for (int i=0; i<spy.count(); i++) {
+ QCOMPARE(spy.at(i).at(1).value<QVariant>().toInt(), width);
+ width += increment;
+ }
+}
+
+void tst_QmlDebug::watch_expression_data()
+{
+ QTest::addColumn<QString>("expr");
+ QTest::addColumn<int>("increment");
+ QTest::addColumn<int>("incrementCount");
+
+ QTest::newRow("width") << "width" << 0 << 0;
+ QTest::newRow("width+10") << "width + 10" << 10 << 5;
+}
+
+void tst_QmlDebug::watch_context()
+{
+ QmlDebugContextReference c;
+ QTest::ignoreMessage(QtWarningMsg, "QmlEngineDebug::addWatch(): Not implemented");
+ QVERIFY(!m_dbg->addWatch(c, QString(), this));
+}
+
+void tst_QmlDebug::watch_file()
+{
+ QmlDebugFileReference f;
+ QTest::ignoreMessage(QtWarningMsg, "QmlEngineDebug::addWatch(): Not implemented");
+ QVERIFY(!m_dbg->addWatch(f, this));
+}
+
+void tst_QmlDebug::queryAvailableEngines()
+{
+ QmlDebugEnginesQuery *q_engines;
+
+ QmlEngineDebug unconnected(0);
+ q_engines = unconnected.queryAvailableEngines(0);
+ QCOMPARE(q_engines->state(), QmlDebugQuery::Error);
+ delete q_engines;
+
+ q_engines = m_dbg->queryAvailableEngines(this);
+ delete q_engines;
+
+ q_engines = m_dbg->queryAvailableEngines(this);
+ QVERIFY(q_engines->engines().isEmpty());
+ waitForQuery(q_engines);
+
+ // TODO test multiple engines
+ QList<QmlDebugEngineReference> engines = q_engines->engines();
+ QCOMPARE(engines.count(), 1);
+
+ foreach(const QmlDebugEngineReference &e, engines) {
+ QCOMPARE(e.debugId(), QmlDebugService::idForObject(m_engine));
+ QCOMPARE(e.name(), m_engine->objectName());
+ }
+
+ delete q_engines;
+}
+
+void tst_QmlDebug::queryRootContexts()
+{
+ QmlDebugEnginesQuery *q_engines = m_dbg->queryAvailableEngines(this);
+ waitForQuery(q_engines);
+ int engineId = q_engines->engines()[0].debugId();
+
+ QmlDebugRootContextQuery *q_context;
+
+ QmlEngineDebug unconnected(0);
+ q_context = unconnected.queryRootContexts(engineId, this);
+ QCOMPARE(q_context->state(), QmlDebugQuery::Error);
+ delete q_context;
+
+ q_context = m_dbg->queryRootContexts(engineId, this);
+ delete q_context;
+
+ q_context = m_dbg->queryRootContexts(engineId, this);
+ waitForQuery(q_context);
+
+ QmlContext *actualContext = m_engine->rootContext();
+ QmlDebugContextReference context = q_context->rootContext();
+ QCOMPARE(context.debugId(), QmlDebugService::idForObject(actualContext));
+ QCOMPARE(context.name(), actualContext->objectName());
+
+ QCOMPARE(context.objects().count(), 2); // 2 qml component objects created for context in main()
+
+ // root context query sends only root object data - it doesn't fill in
+ // the children or property info
+ QCOMPARE(context.objects()[0].properties().count(), 0);
+ QCOMPARE(context.objects()[0].children().count(), 0);
+
+ QCOMPARE(context.contexts().count(), 1);
+ QVERIFY(context.contexts()[0].debugId() >= 0);
+ QCOMPARE(context.contexts()[0].name(), QString("tst_QmlDebug_childContext"));
+
+ delete q_engines;
+ delete q_context;
+}
+
+void tst_QmlDebug::queryObject()
+{
+ QFETCH(bool, recursive);
+
+ QmlDebugEnginesQuery *q_engines = m_dbg->queryAvailableEngines(this);
+ waitForQuery(q_engines);
+
+ QmlDebugRootContextQuery *q_context = m_dbg->queryRootContexts(q_engines->engines()[0].debugId(), this);
+ waitForQuery(q_context);
+ QmlDebugObjectReference rootObject = q_context->rootContext().objects()[0];
+
+ QmlDebugObjectQuery *q_obj = 0;
+
+ QmlEngineDebug unconnected(0);
+ q_obj = recursive ? unconnected.queryObjectRecursive(rootObject, this) : unconnected.queryObject(rootObject, this);
+ QCOMPARE(q_obj->state(), QmlDebugQuery::Error);
+ delete q_obj;
+
+ q_obj = recursive ? m_dbg->queryObjectRecursive(rootObject, this) : m_dbg->queryObject(rootObject, this);
+ delete q_obj;
+
+ q_obj = recursive ? m_dbg->queryObjectRecursive(rootObject, this) : m_dbg->queryObject(rootObject, this);
+ waitForQuery(q_obj);
+
+ QmlDebugObjectReference obj = q_obj->object();
+
+ delete q_engines;
+ delete q_context;
+ delete q_obj;
+
+ // check source as defined in main()
+ QmlDebugFileReference source = obj.source();
+ QCOMPARE(source.url(), QUrl::fromLocalFile(""));
+ QCOMPARE(source.lineNumber(), 2);
+ QCOMPARE(source.columnNumber(), 1);
+
+ // generically test all properties, children and childrens' properties
+ recursiveObjectTest(m_rootItem, obj, recursive);
+
+ if (recursive) {
+ foreach(const QmlDebugObjectReference &child, obj.children())
+ QVERIFY(child.properties().count() > 0);
+
+ QmlDebugObjectReference rect;
+ QmlDebugObjectReference text;
+ foreach (const QmlDebugObjectReference &child, obj.children()) {
+ if (child.className() == "Rectangle")
+ rect = child;
+ else if (child.className() == "Text")
+ text = child;
+ }
+
+ // test specific property values
+ QCOMPARE(findProperty(rect.properties(), "width").value(), qVariantFromValue(500));
+ QCOMPARE(findProperty(rect.properties(), "height").value(), qVariantFromValue(600));
+ QCOMPARE(findProperty(rect.properties(), "color").value(), qVariantFromValue(QColor("blue")));
+
+ QCOMPARE(findProperty(text.properties(), "color").value(), qVariantFromValue(QColor("blue")));
+
+ } else {
+ foreach(const QmlDebugObjectReference &child, obj.children())
+ QCOMPARE(child.properties().count(), 0);
+ }
+}
+
+void tst_QmlDebug::queryObject_data()
+{
+ QTest::addColumn<bool>("recursive");
+
+ QTest::newRow("non-recursive") << false;
+ QTest::newRow("recursive") << true;
+}
+
+void tst_QmlDebug::queryExpressionResult()
+{
+ QFETCH(QString, expr);
+ QFETCH(QVariant, result);
+
+ QmlDebugEnginesQuery *q_engines = m_dbg->queryAvailableEngines(this);
+ waitForQuery(q_engines); // check immediate deletion is ok
+
+ QmlDebugRootContextQuery *q_context = m_dbg->queryRootContexts(q_engines->engines()[0].debugId(), this);
+ waitForQuery(q_context);
+ int objectId = q_context->rootContext().objects()[0].debugId();
+
+ QmlDebugExpressionQuery *q_expr;
+
+ QmlEngineDebug unconnected(0);
+ q_expr = unconnected.queryExpressionResult(objectId, expr, this);
+ QCOMPARE(q_expr->state(), QmlDebugQuery::Error);
+ delete q_expr;
+
+ q_expr = m_dbg->queryExpressionResult(objectId, expr, this);
+ delete q_expr;
+
+ q_expr = m_dbg->queryExpressionResult(objectId, expr, this);
+ QCOMPARE(q_expr->expression(), expr);
+ waitForQuery(q_expr);
+
+ QCOMPARE(q_expr->result(), result);
+
+ delete q_engines;
+ delete q_context;
+ delete q_expr;
+}
+
+void tst_QmlDebug::queryExpressionResult_data()
+{
+ QTest::addColumn<QString>("expr");
+ QTest::addColumn<QVariant>("result");
+
+ QTest::newRow("width + 50") << "width + 50" << qVariantFromValue(60);
+ QTest::newRow("blueRect.width") << "blueRect.width" << qVariantFromValue(500);
+ QTest::newRow("bad expr") << "aeaef" << qVariantFromValue(QString("<undefined>"));
+}
+
+void tst_QmlDebug::tst_QmlDebugFileReference()
+{
+ QmlDebugFileReference ref;
+ QVERIFY(ref.url().isEmpty());
+ QCOMPARE(ref.lineNumber(), -1);
+ QCOMPARE(ref.columnNumber(), -1);
+
+ ref.setUrl(QUrl("http://test"));
+ QCOMPARE(ref.url(), QUrl("http://test"));
+ ref.setLineNumber(1);
+ QCOMPARE(ref.lineNumber(), 1);
+ ref.setColumnNumber(1);
+ QCOMPARE(ref.columnNumber(), 1);
+
+ QmlDebugFileReference copy(ref);
+ QmlDebugFileReference copyAssign;
+ copyAssign = ref;
+ foreach (const QmlDebugFileReference &r, (QList<QmlDebugFileReference>() << copy << copyAssign)) {
+ QCOMPARE(r.url(), ref.url());
+ QCOMPARE(r.lineNumber(), ref.lineNumber());
+ QCOMPARE(r.columnNumber(), ref.columnNumber());
+ }
+}
+
+void tst_QmlDebug::tst_QmlDebugEngineReference()
+{
+ QmlDebugEngineReference ref;
+ QCOMPARE(ref.debugId(), -1);
+ QVERIFY(ref.name().isEmpty());
+
+ ref = QmlDebugEngineReference(1);
+ QCOMPARE(ref.debugId(), 1);
+ QVERIFY(ref.name().isEmpty());
+
+ QmlDebugEnginesQuery *q_engines = m_dbg->queryAvailableEngines(this);
+ waitForQuery(q_engines);
+ ref = q_engines->engines()[0];
+ delete q_engines;
+
+ QmlDebugEngineReference copy(ref);
+ QmlDebugEngineReference copyAssign;
+ copyAssign = ref;
+ foreach (const QmlDebugEngineReference &r, (QList<QmlDebugEngineReference>() << copy << copyAssign)) {
+ QCOMPARE(r.debugId(), ref.debugId());
+ QCOMPARE(r.name(), ref.name());
+ }
+}
+
+void tst_QmlDebug::tst_QmlDebugObjectReference()
+{
+ QmlDebugObjectReference ref;
+ QCOMPARE(ref.debugId(), -1);
+ QCOMPARE(ref.className(), QString());
+ QCOMPARE(ref.name(), QString());
+ QCOMPARE(ref.contextDebugId(), -1);
+ QVERIFY(ref.properties().isEmpty());
+ QVERIFY(ref.children().isEmpty());
+
+ QmlDebugFileReference source = ref.source();
+ QVERIFY(source.url().isEmpty());
+ QVERIFY(source.lineNumber() < 0);
+ QVERIFY(source.columnNumber() < 0);
+
+ ref = QmlDebugObjectReference(1);
+ QCOMPARE(ref.debugId(), 1);
+
+ QmlDebugObjectReference rootObject = findRootObject();
+ QmlDebugObjectQuery *query = m_dbg->queryObjectRecursive(rootObject, this);
+ waitForQuery(query);
+ ref = query->object();
+ delete query;
+
+ QVERIFY(ref.debugId() >= 0);
+
+ QmlDebugObjectReference copy(ref);
+ QmlDebugObjectReference copyAssign;
+ copyAssign = ref;
+ foreach (const QmlDebugObjectReference &r, (QList<QmlDebugObjectReference>() << copy << copyAssign))
+ recursiveCompareObjects(r, ref);
+}
+
+void tst_QmlDebug::tst_QmlDebugContextReference()
+{
+ QmlDebugContextReference ref;
+ QCOMPARE(ref.debugId(), -1);
+ QVERIFY(ref.name().isEmpty());
+ QVERIFY(ref.objects().isEmpty());
+ QVERIFY(ref.contexts().isEmpty());
+
+ QmlDebugEnginesQuery *q_engines = m_dbg->queryAvailableEngines(this);
+ waitForQuery(q_engines);
+ QmlDebugRootContextQuery *q_context = m_dbg->queryRootContexts(q_engines->engines()[0].debugId(), this);
+ waitForQuery(q_context);
+
+ ref = q_context->rootContext();
+ delete q_engines;
+ delete q_context;
+ QVERIFY(ref.debugId() >= 0);
+
+ QmlDebugContextReference copy(ref);
+ QmlDebugContextReference copyAssign;
+ copyAssign = ref;
+ foreach (const QmlDebugContextReference &r, (QList<QmlDebugContextReference>() << copy << copyAssign))
+ recursiveCompareContexts(r, ref);
+}
+
+void tst_QmlDebug::tst_QmlDebugPropertyReference()
+{
+ QmlDebugObjectReference rootObject = findRootObject();
+ QmlDebugObjectQuery *query = m_dbg->queryObject(rootObject, this);
+ waitForQuery(query);
+ QmlDebugObjectReference obj = query->object();
+ delete query;
+
+ QmlDebugPropertyReference ref = findProperty(obj.properties(), "scale");
+ QVERIFY(ref.objectDebugId() > 0);
+ QVERIFY(!ref.name().isEmpty());
+ QVERIFY(!ref.value().isNull());
+ QVERIFY(!ref.valueTypeName().isEmpty());
+ QVERIFY(!ref.binding().isEmpty());
+ QVERIFY(ref.hasNotifySignal());
+
+ QmlDebugPropertyReference copy(ref);
+ QmlDebugPropertyReference copyAssign;
+ copyAssign = ref;
+ foreach (const QmlDebugPropertyReference &r, (QList<QmlDebugPropertyReference>() << copy << copyAssign))
+ compareProperties(r, ref);
+}
+
+
+class tst_QmlDebug_Factory : public QmlTestFactory
+{
+public:
+ QObject *createTest(QmlDebugTestData *data)
+ {
+ QmlContext *c = new QmlContext(data->engine->rootContext());
+ c->setObjectName("tst_QmlDebug_childContext");
+ return new tst_QmlDebug(data);
+ }
+};
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ QList<QByteArray> qml;
+ qml << "import Qt 4.6\n"
+ "Item {"
+ "width: 10; height: 20; scale: blueRect.scale;"
+ "Rectangle { id: blueRect; width: 500; height: 600; color: \"blue\"; }"
+ "Text { color: blueRect.color; }"
+ "MouseRegion {"
+ "onEntered: { console.log('hello') }"
+ "}"
+ "}";
+ // add second component to test multiple root contexts
+ qml << "import Qt 4.6\n"
+ "Item {}";
+ tst_QmlDebug_Factory factory;
+ return QmlDebugTest::runTests(&factory, qml);
+}
+
+//QTEST_MAIN(tst_QmlDebug)
+
+#include "tst_qmldebug.moc"
diff --git a/tests/auto/declarative/qmldebugclient/qmldebugclient.pro b/tests/auto/declarative/qmldebugclient/qmldebugclient.pro
new file mode 100644
index 0000000..36aa818
--- /dev/null
+++ b/tests/auto/declarative/qmldebugclient/qmldebugclient.pro
@@ -0,0 +1,7 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += network declarative
+macx:CONFIG -= app_bundle
+
+HEADERS += ../shared/debugutil_p.h
+SOURCES += tst_qmldebugclient.cpp \
+ ../shared/debugutil.cpp
diff --git a/tests/auto/declarative/qmldebugclient/tst_qmldebugclient.cpp b/tests/auto/declarative/qmldebugclient/tst_qmldebugclient.cpp
new file mode 100644
index 0000000..4ee0837
--- /dev/null
+++ b/tests/auto/declarative/qmldebugclient/tst_qmldebugclient.cpp
@@ -0,0 +1,157 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QSignalSpy>
+#include <QTimer>
+#include <QHostAddress>
+#include <QDebug>
+#include <QThread>
+
+#include <QtDeclarative/qmlengine.h>
+
+#include <private/qmldebug_p.h>
+#include <private/qmlenginedebug_p.h>
+#include <private/qmldebugclient_p.h>
+#include <private/qmldebugservice_p.h>
+
+#include "../shared/debugutil_p.h"
+
+class tst_QmlDebugClient : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QmlDebugClient(QmlDebugTestData *data)
+ {
+ m_conn = data->conn;
+ }
+
+ QmlDebugConnection *m_conn;
+
+private slots:
+ void name();
+ void isEnabled();
+ void setEnabled();
+ void isConnected();
+ void sendMessage();
+};
+
+void tst_QmlDebugClient::name()
+{
+ QString name = "tst_QmlDebugClient::name()";
+
+ QmlDebugClient client(name, m_conn);
+ QCOMPARE(client.name(), name);
+}
+
+void tst_QmlDebugClient::isEnabled()
+{
+ QmlDebugClient client("tst_QmlDebugClient::isEnabled()", m_conn);
+ QCOMPARE(client.isEnabled(), false);
+}
+
+void tst_QmlDebugClient::setEnabled()
+{
+ QmlDebugTestService service("tst_QmlDebugClient::setEnabled()");
+ QmlDebugTestClient client("tst_QmlDebugClient::setEnabled()", m_conn);
+
+ QCOMPARE(service.isEnabled(), false);
+
+ client.setEnabled(true);
+ QCOMPARE(client.isEnabled(), true);
+ QmlDebugTest::waitForSignal(&service, SIGNAL(enabledStateChanged()));
+ QCOMPARE(service.isEnabled(), true);
+
+ client.setEnabled(false);
+ QCOMPARE(client.isEnabled(), false);
+ QmlDebugTest::waitForSignal(&service, SIGNAL(enabledStateChanged()));
+ QCOMPARE(service.isEnabled(), false);
+}
+
+void tst_QmlDebugClient::isConnected()
+{
+ QmlDebugClient client1("tst_QmlDebugClient::isConnected() A", m_conn);
+ QCOMPARE(client1.isConnected(), true);
+
+ QmlDebugConnection conn;
+ QmlDebugClient client2("tst_QmlDebugClient::isConnected() B", &conn);
+ QCOMPARE(client2.isConnected(), false);
+
+ QmlDebugClient client3("tst_QmlDebugClient::isConnected() C", 0);
+ QCOMPARE(client3.isConnected(), false);
+
+ // duplicate plugin name
+ QTest::ignoreMessage(QtWarningMsg, "QmlDebugClient: Conflicting plugin name \"tst_QmlDebugClient::isConnected() A\" ");
+ QmlDebugClient client4("tst_QmlDebugClient::isConnected() A", m_conn);
+ QCOMPARE(client4.isConnected(), false);
+}
+
+void tst_QmlDebugClient::sendMessage()
+{
+ QmlDebugTestService service("tst_QmlDebugClient::sendMessage()");
+ QmlDebugTestClient client("tst_QmlDebugClient::sendMessage()", m_conn);
+
+ QByteArray msg = "hello!";
+
+ client.sendMessage(msg);
+ QByteArray resp = client.waitForResponse();
+ QCOMPARE(resp, msg);
+}
+
+
+class tst_QmlDebugClient_Factory : public QmlTestFactory
+{
+public:
+ QObject *createTest(QmlDebugTestData *data) { return new tst_QmlDebugClient(data); }
+};
+
+
+// This does not use QTEST_MAIN because the test has to be created and run
+// in a separate thread.
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ tst_QmlDebugClient_Factory factory;
+ return QmlDebugTest::runTests(&factory);
+}
+
+#include "tst_qmldebugclient.moc"
diff --git a/tests/auto/declarative/qmldebugservice/qmldebugservice.pro b/tests/auto/declarative/qmldebugservice/qmldebugservice.pro
new file mode 100644
index 0000000..9995f1f
--- /dev/null
+++ b/tests/auto/declarative/qmldebugservice/qmldebugservice.pro
@@ -0,0 +1,7 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += network declarative
+macx:CONFIG -= app_bundle
+
+HEADERS += ../shared/debugutil_p.h
+SOURCES += tst_qmldebugservice.cpp \
+ ../shared/debugutil.cpp
diff --git a/tests/auto/declarative/qmldebugservice/tst_qmldebugservice.cpp b/tests/auto/declarative/qmldebugservice/tst_qmldebugservice.cpp
new file mode 100644
index 0000000..4e7bc27
--- /dev/null
+++ b/tests/auto/declarative/qmldebugservice/tst_qmldebugservice.cpp
@@ -0,0 +1,189 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QSignalSpy>
+#include <QTimer>
+#include <QHostAddress>
+#include <QDebug>
+#include <QThread>
+
+#include <QtDeclarative/qmlengine.h>
+
+#include <private/qmldebug_p.h>
+#include <private/qmlenginedebug_p.h>
+#include <private/qmldebugclient_p.h>
+#include <private/qmldebugservice_p.h>
+
+#include "../shared/debugutil_p.h"
+
+class tst_QmlDebugService : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QmlDebugService(QmlDebugTestData *data)
+ {
+ m_conn = data->conn;
+ }
+
+ QmlDebugConnection *m_conn;
+
+private slots:
+ void name();
+ void isEnabled();
+ void enabledChanged();
+ void sendMessage();
+ void idForObject();
+ void objectForId();
+ void objectToString();
+};
+
+void tst_QmlDebugService::name()
+{
+ QString name = "tst_QmlDebugService::name()";
+
+ QmlDebugService service(name);
+ QCOMPARE(service.name(), name);
+}
+
+void tst_QmlDebugService::isEnabled()
+{
+ QmlDebugTestService service("tst_QmlDebugService::isEnabled()", m_conn);
+ QCOMPARE(service.isEnabled(), false);
+
+ QmlDebugTestClient client("tst_QmlDebugService::isEnabled()", m_conn);
+ client.setEnabled(true);
+ QmlDebugTest::waitForSignal(&service, SIGNAL(enabledStateChanged()));
+ QCOMPARE(service.isEnabled(), true);
+
+ QTest::ignoreMessage(QtWarningMsg, "QmlDebugService: Conflicting plugin name \"tst_QmlDebugService::isEnabled()\" ");
+ QmlDebugService duplicate("tst_QmlDebugService::isEnabled()", m_conn);
+ QCOMPARE(duplicate.isEnabled(), false);
+}
+
+void tst_QmlDebugService::enabledChanged()
+{
+ QmlDebugTestService service("tst_QmlDebugService::enabledChanged()");
+ QmlDebugTestClient client("tst_QmlDebugService::enabledChanged()", m_conn);
+
+ QCOMPARE(service.enabled, false);
+
+ client.setEnabled(true);
+ QmlDebugTest::waitForSignal(&service, SIGNAL(enabledStateChanged()));
+ QCOMPARE(service.enabled, true);
+}
+
+void tst_QmlDebugService::sendMessage()
+{
+ QmlDebugTestService service("tst_QmlDebugService::sendMessage()");
+ QmlDebugTestClient client("tst_QmlDebugService::sendMessage()", m_conn);
+
+ QByteArray msg = "hello!";
+
+ client.sendMessage(msg);
+ QByteArray resp = client.waitForResponse();
+ QCOMPARE(resp, msg);
+}
+
+void tst_QmlDebugService::idForObject()
+{
+ QCOMPARE(QmlDebugService::idForObject(0), -1);
+
+ QObject *objA = new QObject;
+
+ int idA = QmlDebugService::idForObject(objA);
+ QVERIFY(idA >= 0);
+ QCOMPARE(QmlDebugService::objectForId(idA), objA);
+
+ int idAA = QmlDebugService::idForObject(objA);
+ QCOMPARE(idAA, idA);
+
+ QObject *objB = new QObject;
+ int idB = QmlDebugService::idForObject(objB);
+ QVERIFY(idB != idA);
+ QCOMPARE(QmlDebugService::objectForId(idB), objB);
+
+ delete objA;
+ delete objB;
+}
+
+void tst_QmlDebugService::objectForId()
+{
+ QCOMPARE(QmlDebugService::objectForId(-1), static_cast<QObject*>(0));
+ QCOMPARE(QmlDebugService::objectForId(1), static_cast<QObject*>(0));
+
+ QObject *obj = new QObject;
+ int id = QmlDebugService::idForObject(obj);
+ QCOMPARE(QmlDebugService::objectForId(id), obj);
+
+ delete obj;
+ QCOMPARE(QmlDebugService::objectForId(id), static_cast<QObject*>(0));
+}
+
+void tst_QmlDebugService::objectToString()
+{
+ QCOMPARE(QmlDebugService::objectToString(0), QString("NULL"));
+
+ QObject *obj = new QObject;
+ QCOMPARE(QmlDebugService::objectToString(obj), QString("QObject: <unnamed>"));
+
+ obj->setObjectName("Hello");
+ QCOMPARE(QmlDebugService::objectToString(obj), QString("QObject: Hello"));
+}
+
+
+class tst_QmlDebugService_Factory : public QmlTestFactory
+{
+public:
+ QObject *createTest(QmlDebugTestData *data) { return new tst_QmlDebugService(data); }
+};
+
+// This does not use QTEST_MAIN because the test has to be created and run
+// in a separate thread.
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ tst_QmlDebugService_Factory factory;
+ return QmlDebugTest::runTests(&factory);
+}
+
+#include "tst_qmldebugservice.moc"
diff --git a/tests/auto/declarative/qmldom/data/MyComponent.qml b/tests/auto/declarative/qmldom/data/MyComponent.qml
new file mode 100644
index 0000000..1472f01
--- /dev/null
+++ b/tests/auto/declarative/qmldom/data/MyComponent.qml
@@ -0,0 +1,4 @@
+import Qt 4.6
+
+Item {
+}
diff --git a/tests/auto/declarative/qmldom/data/MyItem.qml b/tests/auto/declarative/qmldom/data/MyItem.qml
new file mode 100644
index 0000000..1472f01
--- /dev/null
+++ b/tests/auto/declarative/qmldom/data/MyItem.qml
@@ -0,0 +1,4 @@
+import Qt 4.6
+
+Item {
+}
diff --git a/tests/auto/declarative/qmldom/data/importdir/Bar.qml b/tests/auto/declarative/qmldom/data/importdir/Bar.qml
new file mode 100644
index 0000000..2d1a4a3
--- /dev/null
+++ b/tests/auto/declarative/qmldom/data/importdir/Bar.qml
@@ -0,0 +1,2 @@
+import Qt 4.6
+
diff --git a/tests/auto/declarative/qmldom/data/importlib/sublib/qmldir/Foo.qml b/tests/auto/declarative/qmldom/data/importlib/sublib/qmldir/Foo.qml
new file mode 100644
index 0000000..2d1a4a3
--- /dev/null
+++ b/tests/auto/declarative/qmldom/data/importlib/sublib/qmldir/Foo.qml
@@ -0,0 +1,2 @@
+import Qt 4.6
+
diff --git a/tests/auto/declarative/qmldom/data/top.qml b/tests/auto/declarative/qmldom/data/top.qml
new file mode 100644
index 0000000..2681993
--- /dev/null
+++ b/tests/auto/declarative/qmldom/data/top.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+MyComponent {
+ width: 100
+ height: 100
+}
diff --git a/tests/auto/declarative/qmldom/qmldom.pro b/tests/auto/declarative/qmldom/qmldom.pro
new file mode 100644
index 0000000..7ff317d
--- /dev/null
+++ b/tests/auto/declarative/qmldom/qmldom.pro
@@ -0,0 +1,7 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmldom.cpp
+
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmldom/tst_qmldom.cpp b/tests/auto/declarative/qmldom/tst_qmldom.cpp
new file mode 100644
index 0000000..ce35130
--- /dev/null
+++ b/tests/auto/declarative/qmldom/tst_qmldom.cpp
@@ -0,0 +1,1313 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <QtDeclarative/qmldom.h>
+
+#include <QtCore/QDebug>
+#include <QtCore/QFile>
+
+class tst_qmldom : public QObject
+{
+ Q_OBJECT
+public:
+ tst_qmldom() {}
+
+private slots:
+ void loadSimple();
+ void loadProperties();
+ void loadGroupedProperties();
+ void loadChildObject();
+ void loadComposite();
+ void loadImports();
+ void loadErrors();
+ void loadSyntaxErrors();
+ void loadRemoteErrors();
+ void loadDynamicProperty();
+ void loadComponent();
+
+ void testValueSource();
+ void testValueInterceptor();
+
+ void object_dynamicProperty();
+ void object_property();
+ void object_url();
+
+ void copy();
+ void position();
+private:
+ QmlEngine engine;
+};
+
+
+void tst_qmldom::loadSimple()
+{
+ QByteArray qml = "import Qt 4.6\n"
+ "Item {}";
+
+ QmlDomDocument document;
+ QVERIFY(document.load(&engine, qml));
+ QVERIFY(document.errors().isEmpty());
+
+ QmlDomObject rootObject = document.rootObject();
+ QVERIFY(rootObject.isValid());
+ QVERIFY(!rootObject.isComponent());
+ QVERIFY(!rootObject.isCustomType());
+ QVERIFY(rootObject.objectType() == "Qt/Item");
+ QVERIFY(rootObject.objectTypeMajorVersion() == 4);
+ QVERIFY(rootObject.objectTypeMinorVersion() == 6);
+}
+
+// Test regular properties
+void tst_qmldom::loadProperties()
+{
+ QByteArray qml = "import Qt 4.6\n"
+ "Item { id : item; x : 300; visible : true }";
+
+ QmlDomDocument document;
+ QVERIFY(document.load(&engine, qml));
+
+ QmlDomObject rootObject = document.rootObject();
+ QVERIFY(rootObject.isValid());
+ QVERIFY(rootObject.objectId() == "item");
+ QCOMPARE(rootObject.properties().size(), 3);
+
+ QmlDomProperty xProperty = rootObject.property("x");
+ QVERIFY(xProperty.propertyName() == "x");
+ QCOMPARE(xProperty.propertyNameParts().count(), 1);
+ QVERIFY(xProperty.propertyNameParts().at(0) == "x");
+ QCOMPARE(xProperty.position(), 32);
+ QCOMPARE(xProperty.length(), 1);
+ QVERIFY(xProperty.value().isLiteral());
+ QVERIFY(xProperty.value().toLiteral().literal() == "300");
+
+ QmlDomProperty visibleProperty = rootObject.property("visible");
+ QVERIFY(visibleProperty.propertyName() == "visible");
+ QCOMPARE(visibleProperty.propertyNameParts().count(), 1);
+ QVERIFY(visibleProperty.propertyNameParts().at(0) == "visible");
+ QCOMPARE(visibleProperty.position(), 41);
+ QCOMPARE(visibleProperty.length(), 7);
+ QVERIFY(visibleProperty.value().isLiteral());
+ QVERIFY(visibleProperty.value().toLiteral().literal() == "true");
+}
+
+// Test grouped properties
+void tst_qmldom::loadGroupedProperties()
+{
+ {
+ QByteArray qml = "import Qt 4.6\n"
+ "Item { anchors.left: parent.left; anchors.right: parent.right }";
+
+ QmlDomDocument document;
+ QVERIFY(document.load(&engine, qml));
+
+ QmlDomObject rootItem = document.rootObject();
+ QVERIFY(rootItem.isValid());
+ QVERIFY(rootItem.properties().size() == 2);
+
+ // Order is not deterministic
+ QmlDomProperty p0 = rootItem.properties().at(0);
+ QmlDomProperty p1 = rootItem.properties().at(1);
+ QmlDomProperty leftProperty;
+ QmlDomProperty rightProperty;
+ if (p0.propertyName() == "anchors.left") {
+ leftProperty = p0;
+ rightProperty = p1;
+ } else {
+ leftProperty = p1;
+ rightProperty = p0;
+ }
+
+ QVERIFY(leftProperty.propertyName() == "anchors.left");
+ QCOMPARE(leftProperty.propertyNameParts().count(), 2);
+ QVERIFY(leftProperty.propertyNameParts().at(0) == "anchors");
+ QVERIFY(leftProperty.propertyNameParts().at(1) == "left");
+ QCOMPARE(leftProperty.position(), 21);
+ QCOMPARE(leftProperty.length(), 12);
+ QVERIFY(leftProperty.value().isBinding());
+ QVERIFY(leftProperty.value().toBinding().binding() == "parent.left");
+
+ QVERIFY(rightProperty.propertyName() == "anchors.right");
+ QCOMPARE(rightProperty.propertyNameParts().count(), 2);
+ QVERIFY(rightProperty.propertyNameParts().at(0) == "anchors");
+ QVERIFY(rightProperty.propertyNameParts().at(1) == "right");
+ QCOMPARE(rightProperty.position(), 48);
+ QCOMPARE(rightProperty.length(), 13);
+ QVERIFY(rightProperty.value().isBinding());
+ QVERIFY(rightProperty.value().toBinding().binding() == "parent.right");
+ }
+
+ {
+ QByteArray qml = "import Qt 4.6\n"
+ "Item { \n"
+ " anchors {\n"
+ " left: parent.left\n"
+ " right: parent.right\n"
+ " }\n"
+ "}";
+
+ QmlDomDocument document;
+ QVERIFY(document.load(&engine, qml));
+
+ QmlDomObject rootItem = document.rootObject();
+ QVERIFY(rootItem.isValid());
+ QVERIFY(rootItem.properties().size() == 2);
+
+ // Order is not deterministic
+ QmlDomProperty p0 = rootItem.properties().at(0);
+ QmlDomProperty p1 = rootItem.properties().at(1);
+ QmlDomProperty leftProperty;
+ QmlDomProperty rightProperty;
+ if (p0.propertyName() == "anchors.left") {
+ leftProperty = p0;
+ rightProperty = p1;
+ } else {
+ leftProperty = p1;
+ rightProperty = p0;
+ }
+
+ QVERIFY(leftProperty.propertyName() == "anchors.left");
+ QCOMPARE(leftProperty.propertyNameParts().count(), 2);
+ QVERIFY(leftProperty.propertyNameParts().at(0) == "anchors");
+ QVERIFY(leftProperty.propertyNameParts().at(1) == "left");
+ QCOMPARE(leftProperty.position(), 44);
+ QCOMPARE(leftProperty.length(), 4);
+ QVERIFY(leftProperty.value().isBinding());
+ QVERIFY(leftProperty.value().toBinding().binding() == "parent.left");
+
+ QVERIFY(rightProperty.propertyName() == "anchors.right");
+ QCOMPARE(rightProperty.propertyNameParts().count(), 2);
+ QVERIFY(rightProperty.propertyNameParts().at(0) == "anchors");
+ QVERIFY(rightProperty.propertyNameParts().at(1) == "right");
+ QCOMPARE(rightProperty.position(), 70);
+ QCOMPARE(rightProperty.length(), 5);
+ QVERIFY(rightProperty.value().isBinding());
+ QVERIFY(rightProperty.value().toBinding().binding() == "parent.right");
+ }
+
+}
+
+void tst_qmldom::loadChildObject()
+{
+ QByteArray qml = "import Qt 4.6\n"
+ "Item { Item {} }";
+
+ QmlDomDocument document;
+ QVERIFY(document.load(&engine, qml));
+
+ QmlDomObject rootItem = document.rootObject();
+ QVERIFY(rootItem.isValid());
+ QVERIFY(rootItem.properties().size() == 1);
+
+ QmlDomProperty listProperty = rootItem.properties().at(0);
+ QVERIFY(listProperty.isDefaultProperty());
+ QVERIFY(listProperty.value().isList());
+
+ QmlDomList list = listProperty.value().toList();
+ QVERIFY(list.values().size() == 1);
+
+ QmlDomObject childItem = list.values().first().toObject();
+ QVERIFY(childItem.isValid());
+ QVERIFY(childItem.objectType() == "Qt/Item");
+}
+
+void tst_qmldom::loadComposite()
+{
+ QFile file(SRCDIR "/data/top.qml");
+ QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text));
+
+ QmlDomDocument document;
+ QVERIFY(document.load(&engine, file.readAll(), QUrl::fromLocalFile(file.fileName())));
+ QVERIFY(document.errors().isEmpty());
+
+ QmlDomObject rootItem = document.rootObject();
+ QVERIFY(rootItem.isValid());
+ QCOMPARE(rootItem.objectType(), QByteArray("MyComponent"));
+ QCOMPARE(rootItem.properties().size(), 2);
+
+ QmlDomProperty widthProperty = rootItem.property("width");
+ QVERIFY(widthProperty.value().isLiteral());
+
+ QmlDomProperty heightProperty = rootItem.property("height");
+ QVERIFY(heightProperty.value().isLiteral());
+}
+
+void tst_qmldom::testValueSource()
+{
+ QByteArray qml = "import Qt 4.6\n"
+ "Rectangle { height: SpringFollow { spring: 1.4; damping: .15; source: Math.min(Math.max(-130, value*2.2 - 130), 133); }}";
+
+ QmlEngine freshEngine;
+ QmlDomDocument document;
+ QVERIFY(document.load(&freshEngine, qml));
+
+ QmlDomObject rootItem = document.rootObject();
+ QVERIFY(rootItem.isValid());
+ QmlDomProperty heightProperty = rootItem.properties().at(0);
+ QVERIFY(heightProperty.propertyName() == "height");
+ QVERIFY(heightProperty.value().isValueSource());
+
+ const QmlDomValueValueSource valueSource = heightProperty.value().toValueSource();
+ QmlDomObject valueSourceObject = valueSource.object();
+ QVERIFY(valueSourceObject.isValid());
+
+ QVERIFY(valueSourceObject.objectType() == "Qt/SpringFollow");
+
+ const QmlDomValue springValue = valueSourceObject.property("spring").value();
+ QVERIFY(!springValue.isInvalid());
+ QVERIFY(springValue.isLiteral());
+ QVERIFY(springValue.toLiteral().literal() == "1.4");
+
+ const QmlDomValue sourceValue = valueSourceObject.property("source").value();
+ QVERIFY(!sourceValue.isInvalid());
+ QVERIFY(sourceValue.isBinding());
+ QVERIFY(sourceValue.toBinding().binding() == "Math.min(Math.max(-130, value*2.2 - 130), 133)");
+}
+
+void tst_qmldom::testValueInterceptor()
+{
+ QByteArray qml = "import Qt 4.6\n"
+ "Rectangle { height: Behavior { NumberAnimation { duration: 100 } } }";
+
+ QmlEngine freshEngine;
+ QmlDomDocument document;
+ QVERIFY(document.load(&freshEngine, qml));
+
+ QmlDomObject rootItem = document.rootObject();
+ QVERIFY(rootItem.isValid());
+ QmlDomProperty heightProperty = rootItem.properties().at(0);
+ QVERIFY(heightProperty.propertyName() == "height");
+ QVERIFY(heightProperty.value().isValueInterceptor());
+
+ const QmlDomValueValueInterceptor valueInterceptor = heightProperty.value().toValueInterceptor();
+ QmlDomObject valueInterceptorObject = valueInterceptor.object();
+ QVERIFY(valueInterceptorObject.isValid());
+
+ QVERIFY(valueInterceptorObject.objectType() == "Qt/Behavior");
+
+ const QmlDomValue animationValue = valueInterceptorObject.property("animation").value();
+ QVERIFY(!animationValue.isInvalid());
+ QVERIFY(animationValue.isObject());
+}
+
+// Test QmlDomDocument::imports()
+void tst_qmldom::loadImports()
+{
+ QByteArray qml = "import Qt 4.6\n"
+ "import importlib.sublib 4.7\n"
+ "import importlib.sublib 4.6 as NewFoo\n"
+ "import 'import'\n"
+ "import 'import' as X\n"
+ "Item {}";
+
+ QmlEngine engine;
+ engine.addImportPath(SRCDIR "/data");
+ QmlDomDocument document;
+ QVERIFY(document.load(&engine, qml));
+
+ QCOMPARE(document.imports().size(), 5);
+
+ QmlDomImport import = document.imports().at(0);
+ QCOMPARE(import.type(), QmlDomImport::Library);
+ QCOMPARE(import.uri(), QLatin1String("Qt"));
+ QCOMPARE(import.qualifier(), QString());
+ QCOMPARE(import.version(), QLatin1String("4.6"));
+
+ import = document.imports().at(1);
+ QCOMPARE(import.type(), QmlDomImport::Library);
+ QCOMPARE(import.uri(), QLatin1String("importlib.sublib"));
+ QCOMPARE(import.qualifier(), QString());
+ QCOMPARE(import.version(), QLatin1String("4.7"));
+
+ import = document.imports().at(2);
+ QCOMPARE(import.type(), QmlDomImport::Library);
+ QCOMPARE(import.uri(), QLatin1String("importlib.sublib"));
+ QCOMPARE(import.qualifier(), QLatin1String("NewFoo"));
+ QCOMPARE(import.version(), QLatin1String("4.6"));
+
+ import = document.imports().at(3);
+ QCOMPARE(import.type(), QmlDomImport::File);
+ QCOMPARE(import.uri(), QLatin1String("import"));
+ QCOMPARE(import.qualifier(), QLatin1String(""));
+ QCOMPARE(import.version(), QLatin1String(""));
+
+ import = document.imports().at(4);
+ QCOMPARE(import.type(), QmlDomImport::File);
+ QCOMPARE(import.uri(), QLatin1String("import"));
+ QCOMPARE(import.qualifier(), QLatin1String("X"));
+ QCOMPARE(import.version(), QLatin1String(""));
+}
+
+// Test loading a file with errors
+void tst_qmldom::loadErrors()
+{
+ QByteArray qml = "import Qt 4.6\n"
+ "Item {\n"
+ " foo: 12\n"
+ "}";
+
+ QmlDomDocument document;
+ QVERIFY(false == document.load(&engine, qml));
+
+ QCOMPARE(document.errors().count(), 1);
+ QmlError error = document.errors().first();
+
+ QCOMPARE(error.url(), QUrl());
+ QCOMPARE(error.line(), 3);
+ QCOMPARE(error.column(), 3);
+ QCOMPARE(error.description(), QString("Cannot assign to non-existant property \"foo\""));
+}
+
+// Test loading a file with syntax errors
+void tst_qmldom::loadSyntaxErrors()
+{
+ QByteArray qml = "import Qt 4.6\n"
+ "asdf";
+
+ QmlDomDocument document;
+ QVERIFY(false == document.load(&engine, qml));
+
+ QCOMPARE(document.errors().count(), 1);
+ QmlError error = document.errors().first();
+
+ QCOMPARE(error.url(), QUrl());
+ QCOMPARE(error.line(), 2);
+ QCOMPARE(error.column(), 1);
+ QCOMPARE(error.description(), QString("Syntax error"));
+}
+
+// Test attempting to load a file with remote references
+void tst_qmldom::loadRemoteErrors()
+{
+ QByteArray qml = "import Qt 4.6\n"
+ "Item {\n"
+ " Script {\n"
+ " source: \"http://localhost/exampleQmlScript.js\""
+ " }\n"
+ "}";
+ QmlDomDocument document;
+ QVERIFY(false == document.load(&engine, qml));
+
+ QCOMPARE(document.errors().count(), 1);
+ QmlError error = document.errors().first();
+
+ QCOMPARE(error.url(), QUrl());
+ QCOMPARE(error.line(), -1);
+ QCOMPARE(error.column(), -1);
+ QCOMPARE(error.description(), QString("QmlDomDocument supports local types only"));
+}
+
+// Test dynamic property declarations
+void tst_qmldom::loadDynamicProperty()
+{
+ {
+ QByteArray qml = "import Qt 4.6\n"
+ "Item {\n"
+ " property int a\n"
+ " property bool b\n"
+ " property double c\n"
+ " property real d\n"
+ " property string e\n"
+ " property url f\n"
+ " property color g\n"
+ " property date h\n"
+ " property var i\n"
+ " property variant j\n"
+ " property QtObject k\n"
+ "}";
+
+ QmlDomDocument document;
+ QVERIFY(document.load(&engine, qml));
+
+ QmlDomObject rootObject = document.rootObject();
+ QVERIFY(rootObject.isValid());
+
+ QCOMPARE(rootObject.dynamicProperties().count(), 11);
+
+#define DP_TEST(index, name, type, test_position, test_length, propTypeName) \
+ { \
+ QmlDomDynamicProperty d = rootObject.dynamicProperties().at(index); \
+ QVERIFY(d.isValid()); \
+ QVERIFY(d.propertyName() == # name ); \
+ QVERIFY(d.propertyType() == type); \
+ QVERIFY(d.propertyTypeName() == propTypeName); \
+ QVERIFY(d.isDefaultProperty() == false); \
+ QVERIFY(d.defaultValue().isValid() == false); \
+ QCOMPARE(d.position(), test_position); \
+ QCOMPARE(d.length(), test_length); \
+ } \
+
+ DP_TEST(0, a, QVariant::Int, 25, 14, "int");
+ DP_TEST(1, b, QVariant::Bool, 44, 15, "bool");
+ DP_TEST(2, c, QVariant::Double, 64, 17, "double");
+ DP_TEST(3, d, QMetaType::QReal, 86, 15, "real");
+ DP_TEST(4, e, QVariant::String, 106, 17, "string");
+ DP_TEST(5, f, QVariant::Url, 128, 14, "url");
+ DP_TEST(6, g, QVariant::Color, 147, 16, "color");
+ DP_TEST(7, h, QVariant::Date, 168, 15, "date");
+ DP_TEST(8, i, qMetaTypeId<QVariant>(), 188, 14, "var");
+ DP_TEST(9, j, qMetaTypeId<QVariant>(), 207, 18, "variant");
+ DP_TEST(10, k, -1, 230, 19, "QtObject");
+ }
+
+ {
+ QByteArray qml = "import Qt 4.6\n"
+ "Item {\n"
+ " property int a: 12\n"
+ " property int b: a + 6\n"
+ " default property QtObject c\n"
+ "}\n";
+
+ QmlDomDocument document;
+ QVERIFY(document.load(&engine, qml));
+
+ QmlDomObject rootObject = document.rootObject();
+ QVERIFY(rootObject.isValid());
+
+ QCOMPARE(rootObject.dynamicProperties().count(), 3);
+
+ {
+ QmlDomDynamicProperty d = rootObject.dynamicProperties().at(0);
+ QVERIFY(d.isDefaultProperty() == false);
+ QVERIFY(d.defaultValue().isValid());
+ QVERIFY(d.defaultValue().propertyName() == "a");
+ QVERIFY(d.defaultValue().value().isLiteral());
+ }
+
+ {
+ QmlDomDynamicProperty d = rootObject.dynamicProperties().at(1);
+ QVERIFY(d.isDefaultProperty() == false);
+ QVERIFY(d.defaultValue().isValid());
+ QVERIFY(d.defaultValue().propertyName() == "b");
+ QVERIFY(d.defaultValue().value().isBinding());
+ }
+
+ {
+ QmlDomDynamicProperty d = rootObject.dynamicProperties().at(2);
+ QVERIFY(d.isDefaultProperty() == true);
+ QVERIFY(d.defaultValue().isValid() == false);
+ }
+ }
+}
+
+// Test inline components
+void tst_qmldom::loadComponent()
+{
+ // Explicit component
+ {
+ QByteArray qml = "import Qt 4.6\n"
+ "Item {\n"
+ " Component {\n"
+ " id: myComponent\n"
+ " Item {}\n"
+ " }\n"
+ "}";
+
+ QmlDomDocument document;
+ QVERIFY(document.load(&engine, qml));
+
+ QmlDomObject rootItem = document.rootObject();
+ QVERIFY(rootItem.isValid());
+ QVERIFY(rootItem.properties().size() == 1);
+
+ QmlDomProperty listProperty = rootItem.properties().at(0);
+ QVERIFY(listProperty.isDefaultProperty());
+ QVERIFY(listProperty.value().isList());
+
+ QmlDomList list = listProperty.value().toList();
+ QVERIFY(list.values().size() == 1);
+
+ QmlDomObject componentObject = list.values().first().toObject();
+ QVERIFY(componentObject.isValid());
+ QVERIFY(componentObject.objectClassName() == "Component");
+ QVERIFY(componentObject.isComponent());
+
+ QmlDomComponent component = componentObject.toComponent();
+ QVERIFY(component.isValid());
+ QVERIFY(component.objectType() == "Qt/Component");
+ QVERIFY(component.objectTypeMajorVersion() == 4);
+ QVERIFY(component.objectTypeMinorVersion() == 6);
+ QVERIFY(component.objectClassName() == "Component");
+ QVERIFY(component.objectId() == "myComponent");
+ QVERIFY(component.properties().isEmpty());
+ QVERIFY(component.dynamicProperties().isEmpty());
+ QVERIFY(component.isCustomType() == false);
+ QVERIFY(component.customTypeData() == "");
+ QVERIFY(component.isComponent());
+ QCOMPARE(component.position(), 25);
+ QCOMPARE(component.length(), 57);
+
+ QVERIFY(component.componentRoot().isValid());
+ QVERIFY(component.componentRoot().objectClassName() == "Item");
+ }
+
+ // Implicit component
+ {
+ QByteArray qml = "import Qt 4.6\n"
+ "ListView {\n"
+ " delegate: Item {}\n"
+ "}";
+
+ QmlDomDocument document;
+ QVERIFY(document.load(&engine, qml));
+
+ QmlDomObject rootItem = document.rootObject();
+ QVERIFY(rootItem.isValid());
+ QVERIFY(rootItem.properties().size() == 1);
+
+ QmlDomProperty delegate = rootItem.property("delegate");
+
+ QmlDomObject componentObject = delegate.value().toObject();
+ QVERIFY(componentObject.isValid());
+ QVERIFY(componentObject.objectClassName() == "Component");
+ QVERIFY(componentObject.isComponent());
+
+ QmlDomComponent component = componentObject.toComponent();
+ QVERIFY(component.isValid());
+ QVERIFY(component.objectType() == "Qt/Component");
+ QVERIFY(component.objectClassName() == "Component");
+ QVERIFY(component.objectId() == "");
+ QVERIFY(component.properties().isEmpty());
+ QVERIFY(component.dynamicProperties().isEmpty());
+ QVERIFY(component.isCustomType() == false);
+ QVERIFY(component.customTypeData() == "");
+ QVERIFY(component.isComponent());
+ QCOMPARE(component.position(), 39);
+ QCOMPARE(component.length(), 7);
+
+ QVERIFY(component.componentRoot().isValid());
+ QVERIFY(component.componentRoot().objectClassName() == "Item");
+ }
+}
+
+// Test QmlDomObject::dynamicProperty() method
+void tst_qmldom::object_dynamicProperty()
+{
+ // Invalid object
+ {
+ QmlDomObject object;
+ QVERIFY(object.dynamicProperty("").isValid() == false);
+ QVERIFY(object.dynamicProperty("foo").isValid() == false);
+ }
+
+
+ // Valid object, no dynamic properties
+ {
+ QByteArray qml = "import Qt 4.6\n"
+ "Item {}";
+
+ QmlDomDocument document;
+ QVERIFY(document.load(&engine, qml));
+
+ QmlDomObject rootObject = document.rootObject();
+ QVERIFY(rootObject.isValid());
+
+ QVERIFY(rootObject.dynamicProperty("").isValid() == false);
+ QVERIFY(rootObject.dynamicProperty("foo").isValid() == false);
+ }
+
+ // Valid object, dynamic properties
+ {
+ QByteArray qml = "import Qt 4.6\n"
+ "Item {\n"
+ " property int a\n"
+ "}";
+
+ QmlDomDocument document;
+ QVERIFY(document.load(&engine, qml));
+
+ QmlDomObject rootObject = document.rootObject();
+ QVERIFY(rootObject.isValid());
+
+ QVERIFY(rootObject.dynamicProperty("").isValid() == false);
+ QVERIFY(rootObject.dynamicProperty("foo").isValid() == false);
+
+ QmlDomDynamicProperty p = rootObject.dynamicProperty("a");
+ QVERIFY(p.isValid());
+ QVERIFY(p.propertyName() == "a");
+ QVERIFY(p.propertyType() == QVariant::Int);
+ QVERIFY(p.propertyTypeName() == "int");
+ QVERIFY(p.isDefaultProperty() == false);
+ QCOMPARE(p.position(), 25);
+ QCOMPARE(p.length(), 14);
+ }
+
+}
+
+// Test QmlObject::property() method
+void tst_qmldom::object_property()
+{
+ // Invalid object
+ {
+ QmlDomObject object;
+ QVERIFY(object.property("").isValid() == false);
+ QVERIFY(object.property("foo").isValid() == false);
+ }
+
+ // Valid object - no default
+ {
+ QByteArray qml = "import Qt 4.6\n"
+ "Item {\n"
+ " x: 10\n"
+ " y: 12\n"
+ "}\n";
+
+ QmlDomDocument document;
+ QVERIFY(document.load(&engine, qml));
+
+ QmlDomObject rootObject = document.rootObject();
+ QVERIFY(rootObject.isValid());
+
+ QVERIFY(rootObject.property("").isValid() == false);
+ QVERIFY(rootObject.property("foo").isValid() == false);
+
+ QmlDomProperty x = rootObject.property("x");
+ QVERIFY(x.isValid());
+ QVERIFY(x.propertyName() == "x");
+ QVERIFY(x.propertyNameParts().count() == 1);
+ QVERIFY(x.propertyNameParts().at(0) == "x");
+ QVERIFY(x.isDefaultProperty() == false);
+ QVERIFY(x.value().isLiteral());
+ QVERIFY(x.value().toLiteral().literal() == "10");
+ QCOMPARE(x.position(), 25);
+ QCOMPARE(x.length(), 1);
+
+ QmlDomProperty y = rootObject.property("y");
+ QVERIFY(y.isValid());
+ QVERIFY(y.propertyName() == "y");
+ QVERIFY(y.propertyNameParts().count() == 1);
+ QVERIFY(y.propertyNameParts().at(0) == "y");
+ QVERIFY(y.isDefaultProperty() == false);
+ QVERIFY(y.value().isLiteral());
+ QVERIFY(y.value().toLiteral().literal() == "12");
+ QCOMPARE(y.position(), 35);
+ QCOMPARE(y.length(), 1);
+ }
+
+ // Valid object - with default
+ {
+ QByteArray qml = "import Qt 4.6\n"
+ "Item {\n"
+ " x: 10\n"
+ " y: 12\n"
+ " Item {}\n"
+ "}\n";
+
+ QmlDomDocument document;
+ QVERIFY(document.load(&engine, qml));
+
+ QmlDomObject rootObject = document.rootObject();
+ QVERIFY(rootObject.isValid());
+
+ QVERIFY(rootObject.property("").isValid() == false);
+ QVERIFY(rootObject.property("foo").isValid() == false);
+
+ QmlDomProperty x = rootObject.property("x");
+ QVERIFY(x.isValid());
+ QVERIFY(x.propertyName() == "x");
+ QVERIFY(x.propertyNameParts().count() == 1);
+ QVERIFY(x.propertyNameParts().at(0) == "x");
+ QVERIFY(x.isDefaultProperty() == false);
+ QVERIFY(x.value().isLiteral());
+ QVERIFY(x.value().toLiteral().literal() == "10");
+ QCOMPARE(x.position(), 25);
+ QCOMPARE(x.length(), 1);
+
+ QmlDomProperty y = rootObject.property("y");
+ QVERIFY(y.isValid());
+ QVERIFY(y.propertyName() == "y");
+ QVERIFY(y.propertyNameParts().count() == 1);
+ QVERIFY(y.propertyNameParts().at(0) == "y");
+ QVERIFY(y.isDefaultProperty() == false);
+ QVERIFY(y.value().isLiteral());
+ QVERIFY(y.value().toLiteral().literal() == "12");
+ QCOMPARE(y.position(), 35);
+ QCOMPARE(y.length(), 1);
+
+ QmlDomProperty data = rootObject.property("data");
+ QVERIFY(data.isValid());
+ QVERIFY(data.propertyName() == "data");
+ QVERIFY(data.propertyNameParts().count() == 1);
+ QVERIFY(data.propertyNameParts().at(0) == "data");
+ QVERIFY(data.isDefaultProperty() == true);
+ QVERIFY(data.value().isList());
+ QCOMPARE(data.position(), 45);
+ QCOMPARE(data.length(), 0);
+ }
+}
+
+// Tests the QmlDomObject::url() method
+void tst_qmldom::object_url()
+{
+ // Invalid object
+ {
+ QmlDomObject object;
+ QCOMPARE(object.url(), QUrl());
+ }
+
+ // Valid builtin object
+ {
+ QByteArray qml = "import Qt 4.6\n"
+ "Item {}";
+
+ QmlDomDocument document;
+ QVERIFY(document.load(&engine, qml));
+
+ QmlDomObject rootObject = document.rootObject();
+ QVERIFY(rootObject.isValid());
+ QCOMPARE(rootObject.url(), QUrl());
+ }
+
+ // Valid composite object
+ {
+ QByteArray qml = "import Qt 4.6\n"
+ "MyItem {}";
+
+ QUrl myUrl = QUrl::fromLocalFile(SRCDIR "/data/main.qml");
+ QUrl subUrl = QUrl::fromLocalFile(SRCDIR "/data/MyItem.qml");
+
+ QmlDomDocument document;
+ QVERIFY(document.load(&engine, qml, myUrl));
+
+ QmlDomObject rootObject = document.rootObject();
+ QVERIFY(rootObject.isValid());
+ QCOMPARE(rootObject.url(), subUrl);
+ }
+}
+
+// Test copy constructors and operators
+void tst_qmldom::copy()
+{
+ QByteArray qml = "import Qt 4.6\n"
+ "MyItem {\n"
+ " id: myItem\n"
+ " property int a: 10\n"
+ " x: 10\n"
+ " y: x + 10\n"
+ " z: NumberAnimation {}\n"
+ " opacity: Behavior {}\n"
+ " Component {\n"
+ " Item{}\n"
+ " }\n"
+ " children: [ Item{}, Item{} ]\n"
+ "}\n";
+
+ QUrl myUrl = QUrl::fromLocalFile(SRCDIR "/data/main.qml");
+
+ QmlDomDocument document;
+ QVERIFY(document.load(&engine, qml, myUrl));
+
+ // QmlDomDocument
+ {
+ QmlDomDocument document2(document);
+ QmlDomDocument document3;
+ document3 = document;
+
+ QCOMPARE(document.imports().count(), document2.imports().count());
+ QCOMPARE(document.errors().count(), document2.errors().count());
+ QCOMPARE(document.rootObject().objectClassName(), document2.rootObject().objectClassName());
+
+ QCOMPARE(document.imports().count(), document3.imports().count());
+ QCOMPARE(document.errors().count(), document3.errors().count());
+ QCOMPARE(document.rootObject().objectClassName(), document3.rootObject().objectClassName());
+ }
+
+ // QmlDomImport
+ {
+ QCOMPARE(document.imports().count(), 1);
+ QmlDomImport import = document.imports().at(0);
+
+ QmlDomImport import2(import);
+ QmlDomImport import3;
+ import3 = import2;
+
+ QCOMPARE(import.type(), import2.type());
+ QCOMPARE(import.uri(), import2.uri());
+ QCOMPARE(import.version(), import2.version());
+ QCOMPARE(import.qualifier(), import2.qualifier());
+
+ QCOMPARE(import.type(), import3.type());
+ QCOMPARE(import.uri(), import3.uri());
+ QCOMPARE(import.version(), import3.version());
+ QCOMPARE(import.qualifier(), import3.qualifier());
+ }
+
+ // QmlDomObject
+ {
+ QmlDomObject object = document.rootObject();
+ QVERIFY(object.isValid());
+
+ QmlDomObject object2(object);
+ QmlDomObject object3;
+ object3 = object;
+
+ QCOMPARE(object.isValid(), object2.isValid());
+ QCOMPARE(object.objectType(), object2.objectType());
+ QCOMPARE(object.objectClassName(), object2.objectClassName());
+ QCOMPARE(object.objectTypeMajorVersion(), object2.objectTypeMajorVersion());
+ QCOMPARE(object.objectTypeMinorVersion(), object2.objectTypeMinorVersion());
+ QCOMPARE(object.objectId(), object2.objectId());
+ QCOMPARE(object.properties().count(), object2.properties().count());
+ QCOMPARE(object.dynamicProperties().count(), object2.dynamicProperties().count());
+ QCOMPARE(object.isCustomType(), object2.isCustomType());
+ QCOMPARE(object.customTypeData(), object2.customTypeData());
+ QCOMPARE(object.isComponent(), object2.isComponent());
+ QCOMPARE(object.position(), object2.position());
+ QCOMPARE(object.length(), object2.length());
+ QCOMPARE(object.url(), object2.url());
+
+ QCOMPARE(object.isValid(), object3.isValid());
+ QCOMPARE(object.objectType(), object3.objectType());
+ QCOMPARE(object.objectClassName(), object3.objectClassName());
+ QCOMPARE(object.objectTypeMajorVersion(), object3.objectTypeMajorVersion());
+ QCOMPARE(object.objectTypeMinorVersion(), object3.objectTypeMinorVersion());
+ QCOMPARE(object.objectId(), object3.objectId());
+ QCOMPARE(object.properties().count(), object3.properties().count());
+ QCOMPARE(object.dynamicProperties().count(), object3.dynamicProperties().count());
+ QCOMPARE(object.isCustomType(), object3.isCustomType());
+ QCOMPARE(object.customTypeData(), object3.customTypeData());
+ QCOMPARE(object.isComponent(), object3.isComponent());
+ QCOMPARE(object.position(), object3.position());
+ QCOMPARE(object.length(), object3.length());
+ QCOMPARE(object.url(), object3.url());
+ }
+
+ // QmlDomDynamicProperty
+ {
+ QmlDomObject object = document.rootObject();
+ QmlDomDynamicProperty property = object.dynamicProperty("a");
+
+ QmlDomDynamicProperty property2(property);
+ QmlDomDynamicProperty property3;
+ property3 = property;
+
+ QCOMPARE(property.isValid(), property2.isValid());
+ QCOMPARE(property.propertyName(), property2.propertyName());
+ QCOMPARE(property.propertyType(), property2.propertyType());
+ QCOMPARE(property.propertyTypeName(), property2.propertyTypeName());
+ QCOMPARE(property.isDefaultProperty(), property2.isDefaultProperty());
+ QCOMPARE(property.defaultValue().propertyName(), property2.defaultValue().propertyName());
+ QCOMPARE(property.position(), property2.position());
+ QCOMPARE(property.length(), property2.length());
+
+ QCOMPARE(property.isValid(), property3.isValid());
+ QCOMPARE(property.propertyName(), property3.propertyName());
+ QCOMPARE(property.propertyType(), property3.propertyType());
+ QCOMPARE(property.propertyTypeName(), property3.propertyTypeName());
+ QCOMPARE(property.isDefaultProperty(), property3.isDefaultProperty());
+ QCOMPARE(property.defaultValue().propertyName(), property3.defaultValue().propertyName());
+ QCOMPARE(property.position(), property3.position());
+ QCOMPARE(property.length(), property3.length());
+ }
+
+ // QmlDomProperty
+ {
+ QmlDomObject object = document.rootObject();
+ QmlDomProperty property = object.property("opacity");
+
+ QmlDomProperty property2(property);
+ QmlDomProperty property3;
+ property3 = property;
+
+ QCOMPARE(property.isValid(), property2.isValid());
+ QCOMPARE(property.propertyName(), property2.propertyName());
+ QCOMPARE(property.propertyNameParts(), property2.propertyNameParts());
+ QCOMPARE(property.isDefaultProperty(), property2.isDefaultProperty());
+ QCOMPARE(property.value().type(), property2.value().type());
+ QCOMPARE(property.position(), property2.position());
+ QCOMPARE(property.length(), property2.length());
+
+ QCOMPARE(property.isValid(), property3.isValid());
+ QCOMPARE(property.propertyName(), property3.propertyName());
+ QCOMPARE(property.propertyNameParts(), property3.propertyNameParts());
+ QCOMPARE(property.isDefaultProperty(), property3.isDefaultProperty());
+ QCOMPARE(property.value().type(), property3.value().type());
+ QCOMPARE(property.position(), property3.position());
+ QCOMPARE(property.length(), property3.length());
+ }
+
+ // QmlDomValueLiteral
+ {
+ QmlDomObject object = document.rootObject();
+ QmlDomProperty property = object.property("x");
+ QmlDomValueLiteral literal = property.value().toLiteral();
+ QCOMPARE(literal.literal(), QString("10"));
+
+ QmlDomValueLiteral literal2(literal);
+ QmlDomValueLiteral literal3;
+ literal3 = literal2;
+
+ QCOMPARE(literal2.literal(), QString("10"));
+ QCOMPARE(literal3.literal(), QString("10"));
+ }
+
+
+ // QmlDomValueBinding
+ {
+ QmlDomObject object = document.rootObject();
+ QmlDomProperty property = object.property("y");
+ QmlDomValueBinding binding = property.value().toBinding();
+ QCOMPARE(binding.binding(), QString("x + 10"));
+
+ QmlDomValueBinding binding2(binding);
+ QmlDomValueBinding binding3;
+ binding3 = binding2;
+
+ QCOMPARE(binding2.binding(), QString("x + 10"));
+ QCOMPARE(binding3.binding(), QString("x + 10"));
+ }
+
+ // QmlDomValueValueSource
+ {
+ QmlDomObject object = document.rootObject();
+ QmlDomProperty property = object.property("z");
+ QmlDomValueValueSource source = property.value().toValueSource();
+ QCOMPARE(source.object().objectClassName(), QByteArray("NumberAnimation"));
+
+ QmlDomValueValueSource source2(source);
+ QmlDomValueValueSource source3;
+ source3 = source;
+
+ QCOMPARE(source2.object().objectClassName(), QByteArray("NumberAnimation"));
+ QCOMPARE(source3.object().objectClassName(), QByteArray("NumberAnimation"));
+ }
+
+ // QmlDomValueValueInterceptor
+ {
+ QmlDomObject object = document.rootObject();
+ QmlDomProperty property = object.property("opacity");
+ QmlDomValueValueInterceptor interceptor = property.value().toValueInterceptor();
+ QCOMPARE(interceptor.object().objectClassName(), QByteArray("Behavior"));
+
+ QmlDomValueValueInterceptor interceptor2(interceptor);
+ QmlDomValueValueInterceptor interceptor3;
+ interceptor3 = interceptor;
+
+ QCOMPARE(interceptor2.object().objectClassName(), QByteArray("Behavior"));
+ QCOMPARE(interceptor3.object().objectClassName(), QByteArray("Behavior"));
+ }
+
+ // QmlDomComponent
+ {
+ QmlDomObject object = document.rootObject();
+ QmlDomProperty property = object.property("data");
+ QCOMPARE(property.value().toList().values().count(), 1);
+ QmlDomComponent component =
+ property.value().toList().values().at(0).toObject().toComponent();
+ QCOMPARE(component.componentRoot().objectClassName(), QByteArray("Item"));
+
+ QmlDomComponent component2(component);
+ QmlDomComponent component3;
+ component3 = component;
+
+ QCOMPARE(component.componentRoot().objectClassName(), component2.componentRoot().objectClassName());
+ QCOMPARE(component.isValid(), component2.isValid());
+ QCOMPARE(component.objectType(), component2.objectType());
+ QCOMPARE(component.objectClassName(), component2.objectClassName());
+ QCOMPARE(component.objectTypeMajorVersion(), component2.objectTypeMajorVersion());
+ QCOMPARE(component.objectTypeMinorVersion(), component2.objectTypeMinorVersion());
+ QCOMPARE(component.objectId(), component2.objectId());
+ QCOMPARE(component.properties().count(), component2.properties().count());
+ QCOMPARE(component.dynamicProperties().count(), component2.dynamicProperties().count());
+ QCOMPARE(component.isCustomType(), component2.isCustomType());
+ QCOMPARE(component.customTypeData(), component2.customTypeData());
+ QCOMPARE(component.isComponent(), component2.isComponent());
+ QCOMPARE(component.position(), component2.position());
+ QCOMPARE(component.length(), component2.length());
+ QCOMPARE(component.url(), component2.url());
+
+ QCOMPARE(component.componentRoot().objectClassName(), component3.componentRoot().objectClassName());
+ QCOMPARE(component.isValid(), component3.isValid());
+ QCOMPARE(component.objectType(), component3.objectType());
+ QCOMPARE(component.objectClassName(), component3.objectClassName());
+ QCOMPARE(component.objectTypeMajorVersion(), component3.objectTypeMajorVersion());
+ QCOMPARE(component.objectTypeMinorVersion(), component3.objectTypeMinorVersion());
+ QCOMPARE(component.objectId(), component3.objectId());
+ QCOMPARE(component.properties().count(), component3.properties().count());
+ QCOMPARE(component.dynamicProperties().count(), component3.dynamicProperties().count());
+ QCOMPARE(component.isCustomType(), component3.isCustomType());
+ QCOMPARE(component.customTypeData(), component3.customTypeData());
+ QCOMPARE(component.isComponent(), component3.isComponent());
+ QCOMPARE(component.position(), component3.position());
+ QCOMPARE(component.length(), component3.length());
+ QCOMPARE(component.url(), component3.url());
+ }
+
+ // QmlDomValue
+ {
+ QmlDomObject object = document.rootObject();
+ QmlDomProperty property = object.property("data");
+ QmlDomValue value = property.value();
+
+ QmlDomValue value2(value);
+ QmlDomValue value3;
+ value3 = value;
+
+ QCOMPARE(value.type(), value2.type());
+ QCOMPARE(value.isInvalid(), value2.isInvalid());
+ QCOMPARE(value.isLiteral(), value2.isLiteral());
+ QCOMPARE(value.isBinding(), value2.isBinding());
+ QCOMPARE(value.isValueSource(), value2.isValueSource());
+ QCOMPARE(value.isValueInterceptor(), value2.isValueInterceptor());
+ QCOMPARE(value.isObject(), value2.isObject());
+ QCOMPARE(value.isList(), value2.isList());
+ QCOMPARE(value.position(), value2.position());
+ QCOMPARE(value.length(), value2.length());
+
+ QCOMPARE(value.type(), value3.type());
+ QCOMPARE(value.isInvalid(), value3.isInvalid());
+ QCOMPARE(value.isLiteral(), value3.isLiteral());
+ QCOMPARE(value.isBinding(), value3.isBinding());
+ QCOMPARE(value.isValueSource(), value3.isValueSource());
+ QCOMPARE(value.isValueInterceptor(), value3.isValueInterceptor());
+ QCOMPARE(value.isObject(), value3.isObject());
+ QCOMPARE(value.isList(), value3.isList());
+ QCOMPARE(value.position(), value3.position());
+ QCOMPARE(value.length(), value3.length());
+ }
+ {
+ QmlDomObject object = document.rootObject();
+ QmlDomProperty property = object.property("x");
+ QmlDomValue value = property.value();
+
+ QmlDomValue value2(value);
+ QmlDomValue value3;
+ value3 = value;
+
+ QCOMPARE(value.type(), value2.type());
+ QCOMPARE(value.isInvalid(), value2.isInvalid());
+ QCOMPARE(value.isLiteral(), value2.isLiteral());
+ QCOMPARE(value.isBinding(), value2.isBinding());
+ QCOMPARE(value.isValueSource(), value2.isValueSource());
+ QCOMPARE(value.isValueInterceptor(), value2.isValueInterceptor());
+ QCOMPARE(value.isObject(), value2.isObject());
+ QCOMPARE(value.isList(), value2.isList());
+ QCOMPARE(value.position(), value2.position());
+ QCOMPARE(value.length(), value2.length());
+
+ QCOMPARE(value.type(), value3.type());
+ QCOMPARE(value.isInvalid(), value3.isInvalid());
+ QCOMPARE(value.isLiteral(), value3.isLiteral());
+ QCOMPARE(value.isBinding(), value3.isBinding());
+ QCOMPARE(value.isValueSource(), value3.isValueSource());
+ QCOMPARE(value.isValueInterceptor(), value3.isValueInterceptor());
+ QCOMPARE(value.isObject(), value3.isObject());
+ QCOMPARE(value.isList(), value3.isList());
+ QCOMPARE(value.position(), value3.position());
+ QCOMPARE(value.length(), value3.length());
+ }
+ {
+ QmlDomValue value;
+
+ QmlDomValue value2(value);
+ QmlDomValue value3;
+ value3 = value;
+
+ QCOMPARE(value.type(), value2.type());
+ QCOMPARE(value.isInvalid(), value2.isInvalid());
+ QCOMPARE(value.isLiteral(), value2.isLiteral());
+ QCOMPARE(value.isBinding(), value2.isBinding());
+ QCOMPARE(value.isValueSource(), value2.isValueSource());
+ QCOMPARE(value.isValueInterceptor(), value2.isValueInterceptor());
+ QCOMPARE(value.isObject(), value2.isObject());
+ QCOMPARE(value.isList(), value2.isList());
+ QCOMPARE(value.position(), value2.position());
+ QCOMPARE(value.length(), value2.length());
+
+ QCOMPARE(value.type(), value3.type());
+ QCOMPARE(value.isInvalid(), value3.isInvalid());
+ QCOMPARE(value.isLiteral(), value3.isLiteral());
+ QCOMPARE(value.isBinding(), value3.isBinding());
+ QCOMPARE(value.isValueSource(), value3.isValueSource());
+ QCOMPARE(value.isValueInterceptor(), value3.isValueInterceptor());
+ QCOMPARE(value.isObject(), value3.isObject());
+ QCOMPARE(value.isList(), value3.isList());
+ QCOMPARE(value.position(), value3.position());
+ QCOMPARE(value.length(), value3.length());
+ }
+
+ // QmlDomList
+ {
+ QmlDomObject object = document.rootObject();
+ QmlDomProperty property = object.property("children");
+ QmlDomList list = property.value().toList();
+ QCOMPARE(list.values().count(), 2);
+
+ QmlDomList list2(list);
+ QmlDomList list3;
+ list3 = list2;
+
+ QCOMPARE(list.values().count(), list2.values().count());
+ QCOMPARE(list.position(), list2.position());
+ QCOMPARE(list.length(), list2.length());
+ QCOMPARE(list.commaPositions(), list2.commaPositions());
+
+ QCOMPARE(list.values().count(), list3.values().count());
+ QCOMPARE(list.position(), list3.position());
+ QCOMPARE(list.length(), list3.length());
+ QCOMPARE(list.commaPositions(), list3.commaPositions());
+
+ }
+}
+
+// Tests the position/length of various elements
+void tst_qmldom::position()
+{
+ QByteArray qml = "import Qt 4.6\n"
+ /*14*/ "Item {\n"
+ /*21*/ " id: myItem\n"
+ /*36*/ " property int a: 10\n"
+ /*59*/ " x: 10\n"
+ /*69*/ " y: x + 10\n"
+ /*83*/ " z: NumberAnimation {}\n"
+ /*109*/ " opacity: Behavior {}\n"
+ /*134*/ " Component {\n"
+ /*150*/ " Item{}\n"
+ /*165*/ " }\n"
+ /*171*/ " children: [ Item{}, Item{} ]\n"
+ /*204*/ "}\n";
+
+
+ QmlDomDocument document;
+ QVERIFY(document.load(&engine, qml));
+
+ QmlDomObject root = document.rootObject();
+
+ // All QmlDomDynamicProperty
+ QmlDomDynamicProperty dynProp = root.dynamicProperty("a");
+ QCOMPARE(dynProp.position(), 40);
+ QCOMPARE(dynProp.length(), 18);
+
+ // All QmlDomProperty
+ QmlDomProperty x = root.property("x");
+ QCOMPARE(x.position(), 63);
+ QCOMPARE(x.length(), 1);
+
+ QmlDomProperty y = root.property("y");
+ QCOMPARE(y.position(), 73);
+ QCOMPARE(y.length(), 1);
+
+ QmlDomProperty z = root.property("z");
+ QCOMPARE(z.position(), 87);
+ QCOMPARE(z.length(), 1);
+
+ QmlDomProperty opacity = root.property("opacity");
+ QCOMPARE(opacity.position(), 113);
+ QCOMPARE(opacity.length(), 7);
+
+ QmlDomProperty data = root.property("data");
+ QCOMPARE(data.position(), 138);
+ QCOMPARE(data.length(), 0);
+
+ QmlDomProperty children = root.property("children");
+ QCOMPARE(children.position(), 175);
+ QCOMPARE(children.length(), 8);
+
+ QmlDomList dataList = data.value().toList();
+ QCOMPARE(dataList.values().count(), 1);
+ QmlDomList childrenList = children.value().toList();
+ QCOMPARE(childrenList.values().count(), 2);
+
+ // All QmlDomObject
+ QCOMPARE(root.position(), 14);
+ QCOMPARE(root.length(), 191);
+
+ QmlDomObject numberAnimation = z.value().toValueSource().object();
+ QCOMPARE(numberAnimation.position(), 90);
+ QCOMPARE(numberAnimation.length(), 18);
+
+ QmlDomObject behavior = opacity.value().toValueInterceptor().object();
+ QCOMPARE(behavior.position(), 122);
+ QCOMPARE(behavior.length(), 11);
+
+ QmlDomObject component = dataList.values().at(0).toObject();
+ QCOMPARE(component.position(), 138);
+ QCOMPARE(component.length(), 32);
+
+ QmlDomObject componentRoot = component.toComponent().componentRoot();
+ QCOMPARE(componentRoot.position(), 158);
+ QCOMPARE(componentRoot.length(), 6);
+
+ QmlDomObject child1 = childrenList.values().at(0).toObject();
+ QCOMPARE(child1.position(), 187);
+ QCOMPARE(child1.length(), 6);
+
+ QmlDomObject child2 = childrenList.values().at(1).toObject();
+ QCOMPARE(child2.position(), 195);
+ QCOMPARE(child2.length(), 6);
+
+ // All QmlDomValue
+ QmlDomValue xValue = x.value();
+ QCOMPARE(xValue.position(), 66);
+ QCOMPARE(xValue.length(), 2);
+
+ QmlDomValue yValue = y.value();
+ QCOMPARE(yValue.position(), 76);
+ QCOMPARE(yValue.length(), 6);
+
+ QmlDomValue zValue = z.value();
+ QCOMPARE(zValue.position(), 90);
+ QCOMPARE(zValue.length(), 18);
+
+ QmlDomValue opacityValue = opacity.value();
+ QCOMPARE(opacityValue.position(), 122);
+ QCOMPARE(opacityValue.length(), 11);
+
+ QmlDomValue dataValue = data.value();
+ QCOMPARE(dataValue.position(), 138);
+ QCOMPARE(dataValue.length(), 32);
+
+ QmlDomValue child1Value = childrenList.values().at(0);
+ QCOMPARE(child1Value.position(), 187);
+ QCOMPARE(child1Value.length(), 6);
+
+ QmlDomValue child2Value = childrenList.values().at(1);
+ QCOMPARE(child2Value.position(), 195);
+ QCOMPARE(child2Value.length(), 6);
+
+ // All QmlDomList
+ qWarning("QmlListValue position test required");
+}
+
+QTEST_MAIN(tst_qmldom)
+
+#include "tst_qmldom.moc"
diff --git a/tests/auto/declarative/qmleasefollow/data/easefollow1.qml b/tests/auto/declarative/qmleasefollow/data/easefollow1.qml
new file mode 100644
index 0000000..0cc19eb
--- /dev/null
+++ b/tests/auto/declarative/qmleasefollow/data/easefollow1.qml
@@ -0,0 +1,3 @@
+import Qt 4.6
+
+EaseFollow {}
diff --git a/tests/auto/declarative/qmleasefollow/data/easefollow2.qml b/tests/auto/declarative/qmleasefollow/data/easefollow2.qml
new file mode 100644
index 0000000..b65964e
--- /dev/null
+++ b/tests/auto/declarative/qmleasefollow/data/easefollow2.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+EaseFollow {
+ source: 10; duration: 300; enabled: true; reversingMode: EaseFollow.Immediate
+}
diff --git a/tests/auto/declarative/qmleasefollow/data/easefollow3.qml b/tests/auto/declarative/qmleasefollow/data/easefollow3.qml
new file mode 100644
index 0000000..f8886e9
--- /dev/null
+++ b/tests/auto/declarative/qmleasefollow/data/easefollow3.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+EaseFollow {
+ source: 10; velocity: 250; enabled: false; reversingMode: EaseFollow.Sync
+ maximumEasingTime: 150
+}
diff --git a/tests/auto/declarative/qmleasefollow/qmleasefollow.pro b/tests/auto/declarative/qmleasefollow/qmleasefollow.pro
new file mode 100644
index 0000000..4224a7e
--- /dev/null
+++ b/tests/auto/declarative/qmleasefollow/qmleasefollow.pro
@@ -0,0 +1,8 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative gui
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmleasefollow.cpp
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmleasefollow/tst_qmleasefollow.cpp b/tests/auto/declarative/qmleasefollow/tst_qmleasefollow.cpp
new file mode 100644
index 0000000..384ce25b
--- /dev/null
+++ b/tests/auto/declarative/qmleasefollow/tst_qmleasefollow.cpp
@@ -0,0 +1,122 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <private/qmleasefollow_p.h>
+#include <private/qmlvaluetype_p.h>
+#include "../../../shared/util.h"
+
+class tst_qmleasefollow : public QObject
+{
+ Q_OBJECT
+public:
+ tst_qmleasefollow();
+
+private slots:
+ void defaultValues();
+ void values();
+ void disabled();
+
+private:
+ QmlEngine engine;
+};
+
+tst_qmleasefollow::tst_qmleasefollow()
+{
+}
+
+void tst_qmleasefollow::defaultValues()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/easefollow1.qml"));
+ QmlEaseFollow *obj = qobject_cast<QmlEaseFollow*>(c.create());
+
+ QVERIFY(obj != 0);
+
+ QCOMPARE(obj->sourceValue(), 0.);
+ QCOMPARE(obj->velocity(), 200.);
+ QCOMPARE(obj->enabled(), true);
+ QCOMPARE(obj->duration(), -1.);
+ QCOMPARE(obj->maximumEasingTime(), -1.);
+ QCOMPARE(obj->reversingMode(), QmlEaseFollow::Eased);
+
+ delete obj;
+}
+
+void tst_qmleasefollow::values()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/easefollow2.qml"));
+ QmlEaseFollow *obj = qobject_cast<QmlEaseFollow*>(c.create());
+
+ QVERIFY(obj != 0);
+
+ QCOMPARE(obj->sourceValue(), 10.);
+ QCOMPARE(obj->velocity(), 200.);
+ QCOMPARE(obj->enabled(), true);
+ QCOMPARE(obj->duration(), 300.);
+ QCOMPARE(obj->maximumEasingTime(), -1.);
+ QCOMPARE(obj->reversingMode(), QmlEaseFollow::Immediate);
+
+ delete obj;
+}
+
+void tst_qmleasefollow::disabled()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/easefollow3.qml"));
+ QmlEaseFollow *obj = qobject_cast<QmlEaseFollow*>(c.create());
+
+ QVERIFY(obj != 0);
+
+ QCOMPARE(obj->sourceValue(), 10.);
+ QCOMPARE(obj->velocity(), 250.);
+ QCOMPARE(obj->enabled(), false);
+ QCOMPARE(obj->maximumEasingTime(), 150.);
+ QCOMPARE(obj->reversingMode(), QmlEaseFollow::Sync);
+
+ delete obj;
+}
+
+QTEST_MAIN(tst_qmleasefollow)
+
+#include "tst_qmleasefollow.moc"
diff --git a/tests/auto/declarative/qmlecmascript/data/ConstantsOverrideBindings.qml b/tests/auto/declarative/qmlecmascript/data/ConstantsOverrideBindings.qml
new file mode 100644
index 0000000..b4a702b
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/ConstantsOverrideBindings.qml
@@ -0,0 +1,6 @@
+import Qt.test 1.0
+
+MyQmlObject {
+ property int c1: 0
+ property int c2: c1
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/CustomObject.qml b/tests/auto/declarative/qmlecmascript/data/CustomObject.qml
new file mode 100644
index 0000000..691d9ec
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/CustomObject.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+QtObject {
+ property string greeting: "hello world"
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/MethodsObject.qml b/tests/auto/declarative/qmlecmascript/data/MethodsObject.qml
new file mode 100644
index 0000000..f51ca86
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/MethodsObject.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+QtObject {
+ function testFunction() { return 19; }
+ function testFunction2() { return 18; }
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/NestedTypeTransientErrors.qml b/tests/auto/declarative/qmlecmascript/data/NestedTypeTransientErrors.qml
new file mode 100644
index 0000000..7c32e56
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/NestedTypeTransientErrors.qml
@@ -0,0 +1,11 @@
+import Qt 4.6
+
+QtObject {
+ property int b: obj.prop.a
+
+ property var prop;
+ prop: QtObject {
+ property int a: 10
+ }
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/ScopeObject.qml b/tests/auto/declarative/qmlecmascript/data/ScopeObject.qml
new file mode 100644
index 0000000..b7bec63
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/ScopeObject.qml
@@ -0,0 +1,14 @@
+import Qt 4.6
+
+Item {
+ property int a: 3
+ property int binding: myFunction();
+ property int binding2: myCompFunction();
+
+ Script {
+ function myCompFunction() {
+ return a;
+ }
+ }
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/TypeForDynamicCreation.qml b/tests/auto/declarative/qmlecmascript/data/TypeForDynamicCreation.qml
new file mode 100644
index 0000000..56e0625
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/TypeForDynamicCreation.qml
@@ -0,0 +1,2 @@
+import Qt.test 1.0
+MyQmlObject{objectName:"objectThree"}
diff --git a/tests/auto/declarative/qmlecmascript/data/aliasPropertyAndBinding.qml b/tests/auto/declarative/qmlecmascript/data/aliasPropertyAndBinding.qml
new file mode 100644
index 0000000..5c3ea1f
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/aliasPropertyAndBinding.qml
@@ -0,0 +1,14 @@
+import Qt 4.6
+import Qt.test 1.0
+
+MyQmlObject {
+ property alias c1: myObject.c1
+ property int c2: 3
+ property int c3: c2
+ objectProperty: QtObject {
+ id: myObject
+ property int c1
+ }
+}
+
+
diff --git a/tests/auto/declarative/qmlecmascript/data/assignBasicTypes.2.qml b/tests/auto/declarative/qmlecmascript/data/assignBasicTypes.2.qml
new file mode 100644
index 0000000..db7f2b5
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/assignBasicTypes.2.qml
@@ -0,0 +1,26 @@
+import Qt.test 1.0
+
+MyTypeObject {
+ flagProperty: if(1) "FlagVal1 | FlagVal3"
+ enumProperty: if(1) "EnumVal2"
+ stringProperty: if(1) "Hello World!"
+ uintProperty: if(1) 10
+ intProperty: if(1) -19
+ realProperty: if(1) 23.2
+ doubleProperty: if(1) -19.7
+ floatProperty: if(1) 8.5
+ colorProperty: if(1) "red"
+ dateProperty: if(1) "1982-11-25"
+ timeProperty: if(1) "11:11:32"
+ dateTimeProperty: if(1) "2009-05-12T13:22:01"
+ pointProperty: if(1) "99,13"
+ pointFProperty: if(1) "-10.1,12.3"
+ sizeProperty: if(1) "99x13"
+ sizeFProperty: if(1) "0.1x0.2"
+ rectProperty: if(1) "9,7,100x200"
+ rectFProperty: if(1) "1000.1,-10.9,400x90.99"
+ boolProperty: if(1) true
+ variantProperty: if(1) "Hello World!"
+ vectorProperty: if(1) "10,1,2.2"
+ urlProperty: if(1) "main.qml"
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/assignBasicTypes.qml b/tests/auto/declarative/qmlecmascript/data/assignBasicTypes.qml
new file mode 100644
index 0000000..128db69
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/assignBasicTypes.qml
@@ -0,0 +1,29 @@
+import Qt.test 1.0
+import Qt 4.6
+
+MyTypeObject {
+ Component.onCompleted: {
+ flagProperty = "FlagVal1 | FlagVal3"
+ enumProperty = "EnumVal2"
+ stringProperty = "Hello World!"
+ uintProperty = 10
+ intProperty = -19
+ realProperty = 23.2
+ doubleProperty = -19.7
+ floatProperty = 8.5
+ colorProperty = "red"
+ dateProperty = "1982-11-25"
+ timeProperty = "11:11:32"
+ dateTimeProperty = "2009-05-12T13:22:01"
+ pointProperty = "99,13"
+ pointFProperty = "-10.1,12.3"
+ sizeProperty = "99x13"
+ sizeFProperty = "0.1x0.2"
+ rectProperty = "9,7,100x200"
+ rectFProperty = "1000.1,-10.9,400x90.99"
+ boolProperty = true
+ variantProperty = "Hello World!"
+ vectorProperty = "10,1,2.2"
+ urlProperty = "main.qml"
+ }
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/attachedProperty.qml b/tests/auto/declarative/qmlecmascript/data/attachedProperty.qml
new file mode 100644
index 0000000..061eda0
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/attachedProperty.qml
@@ -0,0 +1,11 @@
+import Qt.test 1.0
+import Qt.test 1.0 as Namespace
+
+MyQmlObject {
+ id: me
+ property int a: MyQmlObject.value
+ property int b: Namespace.MyQmlObject.value
+ property int c: me.Namespace.MyQmlObject.value
+ property int d: me.Namespace.MyQmlObject.value
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/bindingLoop.qml b/tests/auto/declarative/qmlecmascript/data/bindingLoop.qml
new file mode 100644
index 0000000..80545cf
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/bindingLoop.qml
@@ -0,0 +1,14 @@
+import Qt.test 1.0
+
+MyQmlContainer {
+ children : [
+ MyQmlObject {
+ id: object1
+ stringProperty: "hello" + object2.stringProperty
+ },
+ MyQmlObject {
+ id: object2
+ stringProperty: "hello" + object1.stringProperty
+ }
+ ]
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/boolPropertiesEvaluateAsBool.1.qml b/tests/auto/declarative/qmlecmascript/data/boolPropertiesEvaluateAsBool.1.qml
new file mode 100644
index 0000000..3147f63
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/boolPropertiesEvaluateAsBool.1.qml
@@ -0,0 +1,5 @@
+import Qt.test 1.0
+
+MyQmlObject {
+ stringProperty: trueProperty?'pass':'fail'
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/boolPropertiesEvaluateAsBool.2.qml b/tests/auto/declarative/qmlecmascript/data/boolPropertiesEvaluateAsBool.2.qml
new file mode 100644
index 0000000..c89bb49
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/boolPropertiesEvaluateAsBool.2.qml
@@ -0,0 +1,5 @@
+import Qt.test 1.0
+
+MyQmlObject {
+ stringProperty: falseProperty?'fail':'pass'
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/bug.1.qml b/tests/auto/declarative/qmlecmascript/data/bug.1.qml
new file mode 100644
index 0000000..266de76
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/bug.1.qml
@@ -0,0 +1,10 @@
+import Qt 4.6
+
+QtObject {
+ property int a: 10
+ property bool b: false
+
+ property int test
+
+ test: ((a == 10)?(a + 1):0) + ((b == true)?9:3)
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/compositePropertyType.qml b/tests/auto/declarative/qmlecmascript/data/compositePropertyType.qml
new file mode 100644
index 0000000..80a2814
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/compositePropertyType.qml
@@ -0,0 +1,8 @@
+import Qt 4.6
+
+QtObject {
+ property CustomObject myObject
+ myObject: CustomObject { }
+
+ Component.onCompleted: console.log(myObject.greeting)
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/constantsOverrideBindings.1.qml b/tests/auto/declarative/qmlecmascript/data/constantsOverrideBindings.1.qml
new file mode 100644
index 0000000..13c5ae5
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/constantsOverrideBindings.1.qml
@@ -0,0 +1,8 @@
+import Qt.test 1.0
+
+MyQmlObject {
+ property int c1: 0
+ property int c2: c1
+
+ onBasicSignal: c2 = 13
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/constantsOverrideBindings.2.qml b/tests/auto/declarative/qmlecmascript/data/constantsOverrideBindings.2.qml
new file mode 100644
index 0000000..207a06b
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/constantsOverrideBindings.2.qml
@@ -0,0 +1,11 @@
+import Qt.test 1.0
+
+MyQmlObject {
+ property alias c1: myConstants.c1
+ property alias c2: myConstants.c2
+
+ objectProperty: ConstantsOverrideBindings {
+ id: myConstants
+ c2: 10
+ }
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/constantsOverrideBindings.3.qml b/tests/auto/declarative/qmlecmascript/data/constantsOverrideBindings.3.qml
new file mode 100644
index 0000000..ca9d1d8
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/constantsOverrideBindings.3.qml
@@ -0,0 +1,7 @@
+import Qt.test 1.0
+
+MyQmlObject {
+ property int c1: 0
+ property int c2: c1
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/deferredProperties.qml b/tests/auto/declarative/qmlecmascript/data/deferredProperties.qml
new file mode 100644
index 0000000..e01f708
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/deferredProperties.qml
@@ -0,0 +1,10 @@
+import Qt.test 1.0
+
+MyDeferredObject {
+ id: root
+ value: 10
+ objectProperty: MyQmlObject {
+ value: root.value
+ }
+ objectProperty2: MyQmlObject { id: blah }
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/deletedObject.qml b/tests/auto/declarative/qmlecmascript/data/deletedObject.qml
new file mode 100644
index 0000000..6bc3a17
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/deletedObject.qml
@@ -0,0 +1,25 @@
+import Qt 4.6
+import Qt.test 1.0
+
+QtObject {
+ property var obj
+ obj: MyQmlObject {
+ id: myObject
+ value: 92
+ }
+
+ property bool test1: false
+ property bool test2: false
+ property bool test3: false
+ property bool test4: false
+
+ Component.onCompleted: {
+ test1 = myObject.value == 92;
+ test2 = obj.value == 92;
+
+ myObject.deleteOnSet = 1;
+
+ test3 = myObject.value == undefined;
+ // test4 = obj.value == undefined;
+ }
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/dynamicCreation.helper.qml b/tests/auto/declarative/qmlecmascript/data/dynamicCreation.helper.qml
new file mode 100644
index 0000000..d790d63
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/dynamicCreation.helper.qml
@@ -0,0 +1,6 @@
+import Qt.test 1.0
+
+MyQmlObject{
+ objectName: "objectTwo"
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/dynamicCreation.qml b/tests/auto/declarative/qmlecmascript/data/dynamicCreation.qml
new file mode 100644
index 0000000..ed5e571
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/dynamicCreation.qml
@@ -0,0 +1,21 @@
+import Qt.test 1.0
+
+MyQmlObject{
+ id: obj
+ objectName: "obj"
+ function createOne()
+ {
+ obj.objectProperty = createQmlObject('import Qt.test 1.0; MyQmlObject{objectName:"objectOne"}', obj);
+ }
+
+ function createTwo()
+ {
+ var component = createComponent('dynamicCreation.helper.qml');
+ obj.objectProperty = component.createObject();
+ }
+
+ function createThree()
+ {
+ obj.objectProperty = createQmlObject('TypeForDynamicCreation{}', obj);
+ }
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/dynamicDeletion.qml b/tests/auto/declarative/qmlecmascript/data/dynamicDeletion.qml
new file mode 100644
index 0000000..0855b29
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/dynamicDeletion.qml
@@ -0,0 +1,20 @@
+import Qt.test 1.0
+
+MyQmlObject{
+ id: obj
+ objectName: "obj"
+ function create()
+ {
+ obj.objectProperty = createQmlObject('import Qt.test 1.0; MyQmlObject{objectName:"emptyObject"}', obj);
+ }
+
+ function killOther()
+ {
+ obj.objectProperty.destroy(500);
+ }
+
+ function killMe()
+ {
+ obj.destroy();//Must not segfault
+ }
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/enums.1.qml b/tests/auto/declarative/qmlecmascript/data/enums.1.qml
new file mode 100644
index 0000000..6351823
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/enums.1.qml
@@ -0,0 +1,20 @@
+import Qt.test 1.0
+import Qt.test 1.0 as Namespace
+
+MyQmlObject {
+ // Enums from non-namespaced type
+ property int a: MyQmlObject.EnumValue1
+ property int b: MyQmlObject.EnumValue2
+ property int c: MyQmlObject.EnumValue3
+ property int d: MyQmlObject.EnumValue4
+
+ // Enums from namespaced type
+ property int e: Namespace.MyQmlObject.EnumValue1
+ property int f: Namespace.MyQmlObject.EnumValue2
+ property int g: Namespace.MyQmlObject.EnumValue3
+ property int h: Namespace.MyQmlObject.EnumValue4
+
+ // Test that enums don't mask attached properties
+ property int i: MyQmlObject.value
+ property int j: Namespace.MyQmlObject.value
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/enums.2.qml b/tests/auto/declarative/qmlecmascript/data/enums.2.qml
new file mode 100644
index 0000000..bdc672f
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/enums.2.qml
@@ -0,0 +1,8 @@
+import Qt.test 1.0
+import Qt.test 1.0 as Namespace
+
+MyQmlObject {
+ property int a: MyQmlObject.EnumValue10
+ property int b: Namespace.MyQmlObject.EnumValue10
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/exceptionClearsOnReeval.qml b/tests/auto/declarative/qmlecmascript/data/exceptionClearsOnReeval.qml
new file mode 100644
index 0000000..a2f0d1a
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/exceptionClearsOnReeval.qml
@@ -0,0 +1,6 @@
+import Qt.test 1.0
+
+MyQmlObject {
+ property bool test: objectProperty.objectProperty.trueProperty
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/exceptionProducesWarning.qml b/tests/auto/declarative/qmlecmascript/data/exceptionProducesWarning.qml
new file mode 100644
index 0000000..acc3163
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/exceptionProducesWarning.qml
@@ -0,0 +1,8 @@
+import Qt 4.6
+import Qt.test 1.0
+
+MyQmlObject {
+ Component.onCompleted:
+ { throw(new Error("JS exception")) }
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/exceptionProducesWarning2.qml b/tests/auto/declarative/qmlecmascript/data/exceptionProducesWarning2.qml
new file mode 100644
index 0000000..44e10c1
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/exceptionProducesWarning2.qml
@@ -0,0 +1,7 @@
+import Qt 4.6
+import Qt.test 1.0
+
+MyQmlObject {
+ value: { throw(new Error("JS exception")) }
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/extendedObjectPropertyLookup.qml b/tests/auto/declarative/qmlecmascript/data/extendedObjectPropertyLookup.qml
new file mode 100644
index 0000000..9a82ad1
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/extendedObjectPropertyLookup.qml
@@ -0,0 +1,8 @@
+import Qt.test 1.0
+import Qt 4.6
+
+QtObject {
+ property MyExtendedObject a;
+ a: MyExtendedObject { id: root }
+ property int b: Math.max(root.extendedProperty, 0)
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/extensionObjects.qml b/tests/auto/declarative/qmlecmascript/data/extensionObjects.qml
new file mode 100644
index 0000000..a902312
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/extensionObjects.qml
@@ -0,0 +1,10 @@
+import Qt.test 1.0
+
+MyExtendedObject
+{
+ baseProperty: baseExtendedProperty
+ baseExtendedProperty: 13
+
+ coreProperty: extendedProperty
+ extendedProperty: 9
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/externalScript.1.qml b/tests/auto/declarative/qmlecmascript/data/externalScript.1.qml
new file mode 100644
index 0000000..2ac7b6e
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/externalScript.1.qml
@@ -0,0 +1,11 @@
+import Qt 4.6
+
+QtObject {
+ property int test: external_script_func();
+
+ Script {
+ // Single source as non-array literal
+ source: "externalScript.js"
+ }
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/externalScript.2.js b/tests/auto/declarative/qmlecmascript/data/externalScript.2.js
new file mode 100644
index 0000000..78c3a86
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/externalScript.2.js
@@ -0,0 +1,8 @@
+function external_script_func2() {
+ return a;
+}
+
+function is_a_undefined() {
+ return a == undefined;
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/externalScript.2.qml b/tests/auto/declarative/qmlecmascript/data/externalScript.2.qml
new file mode 100644
index 0000000..dec657c
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/externalScript.2.qml
@@ -0,0 +1,11 @@
+import Qt 4.6
+
+QtObject {
+ property int test: external_script_func();
+
+ Script {
+ // Single source as array
+ source: [ "externalScript.js" ]
+ }
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/externalScript.3.qml b/tests/auto/declarative/qmlecmascript/data/externalScript.3.qml
new file mode 100644
index 0000000..d7acf38
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/externalScript.3.qml
@@ -0,0 +1,13 @@
+import Qt 4.6
+
+QtObject {
+ property int test: external_script_func();
+ property int test2: external_script_func2();
+ property bool test3: is_a_undefined();
+
+ Script {
+ // Multiple script
+ source: [ "externalScript.js", "externalScript.2.js" ]
+ }
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/externalScript.4.qml b/tests/auto/declarative/qmlecmascript/data/externalScript.4.qml
new file mode 100644
index 0000000..16211aa
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/externalScript.4.qml
@@ -0,0 +1,15 @@
+import Qt 4.6
+
+QtObject {
+ property int test: external_script_func();
+ property bool test2: is_a_undefined();
+
+ // Disconnected scripts
+ Script {
+ source: "externalScript.js"
+ }
+
+ Script {
+ source: "externalScript.2.js"
+ }
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/externalScript.js b/tests/auto/declarative/qmlecmascript/data/externalScript.js
new file mode 100644
index 0000000..8928652
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/externalScript.js
@@ -0,0 +1,6 @@
+var a = 92;
+
+function external_script_func() {
+ return a;
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/idShortcutInvalidates.1.qml b/tests/auto/declarative/qmlecmascript/data/idShortcutInvalidates.1.qml
new file mode 100644
index 0000000..2db0fc6
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/idShortcutInvalidates.1.qml
@@ -0,0 +1,13 @@
+import Qt.test 1.0
+import Qt 4.6
+
+MyQmlObject {
+ objectProperty: if(1) otherObject
+
+ property var obj
+
+ obj: QtObject {
+ id: otherObject
+ }
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/idShortcutInvalidates.qml b/tests/auto/declarative/qmlecmascript/data/idShortcutInvalidates.qml
new file mode 100644
index 0000000..f66428d
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/idShortcutInvalidates.qml
@@ -0,0 +1,12 @@
+import Qt.test 1.0
+import Qt 4.6
+
+MyQmlObject {
+ objectProperty: otherObject
+
+ property var obj
+
+ obj: QtObject {
+ id: otherObject
+ }
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/jsObject.qml b/tests/auto/declarative/qmlecmascript/data/jsObject.qml
new file mode 100644
index 0000000..4128c92
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/jsObject.qml
@@ -0,0 +1,12 @@
+import Qt 4.6
+
+QtObject {
+ property int test
+
+ Component.onCompleted: {
+ var o = new Object;
+ o.test = 92;
+ test = o.test;
+ }
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/listProperties.qml b/tests/auto/declarative/qmlecmascript/data/listProperties.qml
new file mode 100644
index 0000000..cae1721
--- /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: [
+ QtObject { property int a: 10 },
+ QtObject { property int a: 11 }
+ ]
+
+ objectQmlListProperty: [
+ QtObject { property int a: 10 },
+ QtObject { property int a: 1 },
+ QtObject { 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/data/listToVariant.qml b/tests/auto/declarative/qmlecmascript/data/listToVariant.qml
new file mode 100644
index 0000000..47f4e50
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/listToVariant.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+QtObject {
+ property var test: children
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/methods.1.qml b/tests/auto/declarative/qmlecmascript/data/methods.1.qml
new file mode 100644
index 0000000..0bbee16
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/methods.1.qml
@@ -0,0 +1,6 @@
+import Qt.test 1.0
+
+MyQmlObject {
+ id: myObject
+ onBasicSignal: myObject.methodNoArgs()
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/methods.2.qml b/tests/auto/declarative/qmlecmascript/data/methods.2.qml
new file mode 100644
index 0000000..9f0c6b1
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/methods.2.qml
@@ -0,0 +1,6 @@
+import Qt.test 1.0
+
+MyQmlObject {
+ id: myObject
+ onBasicSignal: myObject.method(163)
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/methods.3.qml b/tests/auto/declarative/qmlecmascript/data/methods.3.qml
new file mode 100644
index 0000000..79efc50
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/methods.3.qml
@@ -0,0 +1,7 @@
+import Qt 4.6
+
+QtObject {
+ function testFunction() { return 19; }
+
+ property int test: testFunction()
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/methods.4.qml b/tests/auto/declarative/qmlecmascript/data/methods.4.qml
new file mode 100644
index 0000000..aac711c
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/methods.4.qml
@@ -0,0 +1,11 @@
+import Qt 4.6
+
+MethodsObject {
+ function testFunction2() { return 17; }
+ function testFunction3() { return 16; }
+
+ property int test: testFunction()
+ property int test2: testFunction2()
+ property int test3: testFunction3()
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/methods.5.qml b/tests/auto/declarative/qmlecmascript/data/methods.5.qml
new file mode 100644
index 0000000..3d45b15
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/methods.5.qml
@@ -0,0 +1,9 @@
+import Qt 4.6
+
+Item {
+ property alias x: item.x
+ Item { id: item }
+
+ function testFunction() { return 9; }
+ property int test: testFunction();
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/multiEngineObject.qml b/tests/auto/declarative/qmlecmascript/data/multiEngineObject.qml
new file mode 100644
index 0000000..7da09e4
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/multiEngineObject.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+QtObject {
+ property string test: thing.stringProperty
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/nonExistantAttachedObject.qml b/tests/auto/declarative/qmlecmascript/data/nonExistantAttachedObject.qml
new file mode 100644
index 0000000..f9585db
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/nonExistantAttachedObject.qml
@@ -0,0 +1,5 @@
+import Qt.test 1.0
+
+MyQmlObject {
+ stringProperty: MyQmlContainer.prop
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/objectsCompareAsEqual.qml b/tests/auto/declarative/qmlecmascript/data/objectsCompareAsEqual.qml
new file mode 100644
index 0000000..18e488a
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/objectsCompareAsEqual.qml
@@ -0,0 +1,15 @@
+import Qt 4.6
+
+Item {
+ id: root
+
+ property var item: child
+ Item { id: child }
+
+ property bool test1: child == child
+ property bool test2: child.parent == root
+ property bool test3: root != child
+ property bool test4: item == child
+ property bool test5: item != root
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/outerBindingOverridesInnerBinding.qml b/tests/auto/declarative/qmlecmascript/data/outerBindingOverridesInnerBinding.qml
new file mode 100644
index 0000000..0a933e8
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/outerBindingOverridesInnerBinding.qml
@@ -0,0 +1,14 @@
+import Qt.test 1.0
+
+MyQmlObject {
+ property alias c1: myConstants.c1
+ property alias c2: myConstants.c2
+ property int c3: 0
+
+ objectProperty: ConstantsOverrideBindings {
+ id: myConstants
+ c2: c3
+ }
+
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/qmlToString.qml b/tests/auto/declarative/qmlecmascript/data/qmlToString.qml
new file mode 100644
index 0000000..ac296ce
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/qmlToString.qml
@@ -0,0 +1,11 @@
+import Qt.test 1.0
+
+MyQmlObject{
+ id: obj
+ objectName: "objName"
+ function testToString()
+ {
+ obj.stringProperty = obj.toString();
+ }
+
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/scope.2.qml b/tests/auto/declarative/qmlecmascript/data/scope.2.qml
new file mode 100644
index 0000000..8e5aa0b
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/scope.2.qml
@@ -0,0 +1,42 @@
+import Qt 4.6
+
+Item {
+ property int a: 0
+ property int b: 0
+
+ Script {
+ function b() { return 11; }
+ function c() { return 33; }
+ }
+
+ QtObject {
+ id: a
+ property int value: 19
+ }
+
+ QtObject {
+ id: c
+ property int value: 24
+ }
+
+ QtObject {
+ id: nested
+ property int a: 1
+ property int test: a.value
+ property int test2: b()
+ property int test3: c.value
+ }
+
+
+ // id takes precedence over local, and root properties
+ property int test1: a.value
+ property alias test2: nested.test
+
+ // methods takes precedence over local, and root properties
+ property int test3: b()
+ property alias test4: nested.test2
+
+ // id takes precedence over methods
+ property int test5: c.value
+ property alias test6: nested.test3
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/scope.qml b/tests/auto/declarative/qmlecmascript/data/scope.qml
new file mode 100644
index 0000000..cccd3d3
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/scope.qml
@@ -0,0 +1,48 @@
+import Qt 4.6
+
+Item {
+ id: root
+
+ property int a: 1
+ property int binding: a
+ property string binding2: a + "Test"
+ property int binding3: myFunction()
+ property int binding4: myNestedFunction()
+
+ Script {
+ function myFunction() {
+ return a;
+ }
+ }
+
+ Item {
+ id: nestedObject
+
+ Script {
+ function myNestedFunction() {
+ return a;
+ }
+ }
+
+ property int a: 2
+ property int binding: a
+ property string binding2: a + "Test"
+ property int binding3: myFunction()
+ property int binding4: myNestedFunction()
+ }
+
+ ScopeObject {
+ id: compObject
+ }
+
+ property alias test1: root.binding
+ property alias test2: nestedObject.binding
+ property alias test3: root.binding2
+ property alias test4: nestedObject.binding2
+ property alias test5: root.binding3
+ property alias test6: nestedObject.binding3
+ property alias test7: root.binding4
+ property alias test8: nestedObject.binding4
+ property alias test9: compObject.binding
+ property alias test10: compObject.binding2
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/scriptAccess.js b/tests/auto/declarative/qmlecmascript/data/scriptAccess.js
new file mode 100644
index 0000000..c00d285
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/scriptAccess.js
@@ -0,0 +1,7 @@
+var extVariable = 19;
+
+function extMethod()
+{
+ return extVariable;
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/scriptAccess.qml b/tests/auto/declarative/qmlecmascript/data/scriptAccess.qml
new file mode 100644
index 0000000..feb6d16
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/scriptAccess.qml
@@ -0,0 +1,17 @@
+import Qt 4.6
+
+Item {
+ Script {
+ function method() {
+ return 10;
+ }
+ }
+
+ Script {
+ source: "scriptAccess.js"
+ }
+
+ property int test1: method()
+ property int test2: extMethod()
+ property int test3: extVariable
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/scriptErrors.js b/tests/auto/declarative/qmlecmascript/data/scriptErrors.js
new file mode 100644
index 0000000..1d7b357
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/scriptErrors.js
@@ -0,0 +1,2 @@
+// Comment
+a = 10
diff --git a/tests/auto/declarative/qmlecmascript/data/scriptErrors.qml b/tests/auto/declarative/qmlecmascript/data/scriptErrors.qml
new file mode 100644
index 0000000..c2edb41
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/scriptErrors.qml
@@ -0,0 +1,17 @@
+import Qt.test 1.0
+
+MyQmlObject {
+ Script { source: "scriptErrors.js" }
+ Script { function getValue() { a = 10; return 0; } }
+
+ property int t: a.value
+ property int w: getValue();
+ property int x: undefinedObject
+ property int y: (a.value, undefinedObject)
+
+ onBasicSignal: { console.log(a.value); }
+ id: myObj
+ onAnotherBasicSignal: myObj.trueProperty = false;
+ onThirdBasicSignal: myObj.fakeProperty = "";
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/selfDeletingBinding.2.qml b/tests/auto/declarative/qmlecmascript/data/selfDeletingBinding.2.qml
new file mode 100644
index 0000000..58cf805
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/selfDeletingBinding.2.qml
@@ -0,0 +1,17 @@
+import Qt.test 1.0
+
+MyQmlContainer {
+ property bool triggerDelete: false
+
+ children: [
+ MyQmlObject {
+ // Will trigger deletion on binding assignment
+ deleteOnSet: Math.max(0, 1)
+ },
+
+ MyQmlObject {
+ // Will trigger deletion on binding assignment, but after component creation
+ deleteOnSet: if (triggerDelete) 1; else 0;
+ }
+ ]
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/selfDeletingBinding.qml b/tests/auto/declarative/qmlecmascript/data/selfDeletingBinding.qml
new file mode 100644
index 0000000..074851a
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/selfDeletingBinding.qml
@@ -0,0 +1,18 @@
+import Qt.test 1.0
+
+MyQmlContainer {
+ property bool triggerDelete: false
+
+ children: [
+ MyQmlObject {
+ // Will trigger deletion during binding evaluation
+ stringProperty: {deleteMe(), "Hello"}
+ },
+
+ MyQmlObject {
+ // Will trigger deletion during binding evaluation, but after component creation
+ stringProperty: if (triggerDelete) { deleteMe(), "Hello" } else { "World" }
+ }
+
+ ]
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/shutdownErrors.qml b/tests/auto/declarative/qmlecmascript/data/shutdownErrors.qml
new file mode 100644
index 0000000..5a19639
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/shutdownErrors.qml
@@ -0,0 +1,13 @@
+import Qt 4.6
+
+Item {
+ property int test: myObject.object.a
+
+ Item {
+ id: myObject
+ property QtObject object;
+ object: QtObject {
+ property int a: 10
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/signalAssignment.1.qml b/tests/auto/declarative/qmlecmascript/data/signalAssignment.1.qml
new file mode 100644
index 0000000..fbd0914
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/signalAssignment.1.qml
@@ -0,0 +1,5 @@
+import Qt.test 1.0
+
+MyQmlObject {
+ onBasicSignal: setString('pass')
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/signalAssignment.2.qml b/tests/auto/declarative/qmlecmascript/data/signalAssignment.2.qml
new file mode 100644
index 0000000..8addcb9
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/signalAssignment.2.qml
@@ -0,0 +1,5 @@
+import Qt.test 1.0
+
+MyQmlObject {
+ onArgumentSignal: setString('pass ' + a + ' ' + b + ' ' + c)
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/signalParameterTypes.qml b/tests/auto/declarative/qmlecmascript/data/signalParameterTypes.qml
new file mode 100644
index 0000000..6fc8b02
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/signalParameterTypes.qml
@@ -0,0 +1,16 @@
+import Qt.test 1.0
+
+MyQmlObject
+{
+ id: root
+ property int intProperty
+ property real realProperty
+ property color colorProperty
+ property var variantProperty
+
+ signal mySignal(int a, real b, color c, var d)
+
+ onMySignal: { intProperty = a; realProperty = b; colorProperty = c; variantProperty = d; }
+
+ onBasicSignal: root.mySignal(10, 19.2, Qt.rgba(1, 1, 0, 1), Qt.rgba(1, 0, 1, 1))
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/signalTriggeredBindings.qml b/tests/auto/declarative/qmlecmascript/data/signalTriggeredBindings.qml
new file mode 100644
index 0000000..7d419cd
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/signalTriggeredBindings.qml
@@ -0,0 +1,20 @@
+import Qt.test 1.0
+import Qt 4.6
+
+MyQmlObject {
+ property real base: 50
+ property alias test1: myObject.test1
+ property alias test2: myObject.test2
+
+ objectProperty: QtObject {
+ id: myObject
+ property real test1: base
+ property real test2: Math.max(0, base)
+ }
+
+ // Signal with no args
+ onBasicSignal: base = 200
+ // Signal with args
+ onArgumentSignal: base = 400
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/transientErrors.qml b/tests/auto/declarative/qmlecmascript/data/transientErrors.qml
new file mode 100644
index 0000000..fa7e01c
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/transientErrors.qml
@@ -0,0 +1,10 @@
+import Qt 4.6
+
+QtObject {
+ property var obj: nested
+
+ property var obj2
+ obj2: NestedTypeTransientErrors {
+ id: nested
+ }
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/undefinedResetsProperty.2.qml b/tests/auto/declarative/qmlecmascript/data/undefinedResetsProperty.2.qml
new file mode 100644
index 0000000..e73d38e2
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/undefinedResetsProperty.2.qml
@@ -0,0 +1,10 @@
+import Qt.test 1.0
+
+MyQmlObject {
+ resettableProperty: 19
+
+ function doReset() {
+ resettableProperty = undefined;
+ }
+}
+
diff --git a/tests/auto/declarative/qmlecmascript/data/undefinedResetsProperty.qml b/tests/auto/declarative/qmlecmascript/data/undefinedResetsProperty.qml
new file mode 100644
index 0000000..eceff60
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/undefinedResetsProperty.qml
@@ -0,0 +1,7 @@
+import Qt.test 1.0
+
+MyQmlObject {
+ property bool setUndefined: false
+
+ resettableProperty: setUndefined?undefined:92
+}
diff --git a/tests/auto/declarative/qmlecmascript/data/valueTypeFunctions.qml b/tests/auto/declarative/qmlecmascript/data/valueTypeFunctions.qml
new file mode 100644
index 0000000..33b4a68
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/data/valueTypeFunctions.qml
@@ -0,0 +1,6 @@
+import Qt.test 1.0
+
+MyTypeObject {
+ rectProperty: Qt.rect(0,0,100,100)
+ rectFProperty: Qt.rect(0,0.5,100,99.5)
+}
diff --git a/tests/auto/declarative/qmlecmascript/qmlecmascript.pro b/tests/auto/declarative/qmlecmascript/qmlecmascript.pro
new file mode 100644
index 0000000..9f592e8
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/qmlecmascript.pro
@@ -0,0 +1,10 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative script
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlecmascript.cpp \
+ testtypes.cpp
+HEADERS += testtypes.h
+
+# QMAKE_CXXFLAGS = -fprofile-arcs -ftest-coverage
+# LIBS += -lgcov
diff --git a/tests/auto/declarative/qmlecmascript/testtypes.cpp b/tests/auto/declarative/qmlecmascript/testtypes.cpp
new file mode 100644
index 0000000..df0cb18
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/testtypes.cpp
@@ -0,0 +1,82 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "testtypes.h"
+
+class BaseExtensionObject : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int baseExtendedProperty READ extendedProperty WRITE setExtendedProperty NOTIFY extendedPropertyChanged);
+public:
+ BaseExtensionObject(QObject *parent) : QObject(parent), m_value(0) {}
+
+ int extendedProperty() const { return m_value; }
+ void setExtendedProperty(int v) { m_value = v; emit extendedPropertyChanged(); }
+
+signals:
+ void extendedPropertyChanged();
+private:
+ int m_value;
+};
+
+class ExtensionObject : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int extendedProperty READ extendedProperty WRITE setExtendedProperty NOTIFY extendedPropertyChanged);
+public:
+ ExtensionObject(QObject *parent) : QObject(parent), m_value(0) {}
+
+ int extendedProperty() const { return m_value; }
+ void setExtendedProperty(int v) { m_value = v; emit extendedPropertyChanged(); }
+
+signals:
+ void extendedPropertyChanged();
+private:
+ int m_value;
+};
+
+QML_DEFINE_TYPE(Qt.test, 1,0, MyQmlObject,MyQmlObject);
+QML_DEFINE_TYPE(Qt.test, 1,0, MyDeferredObject,MyDeferredObject);
+QML_DEFINE_TYPE(Qt.test, 1,0, MyQmlContainer,MyQmlContainer);
+QML_DEFINE_EXTENDED_TYPE(Qt.test, 1,0, MyBaseExtendedObject,MyBaseExtendedObject,BaseExtensionObject);
+QML_DEFINE_EXTENDED_TYPE(Qt.test, 1,0, MyExtendedObject,MyExtendedObject,ExtensionObject);
+QML_DEFINE_TYPE(Qt.test, 1,0, MyTypeObject, MyTypeObject);
+
+#include "testtypes.moc"
diff --git a/tests/auto/declarative/qmlecmascript/testtypes.h b/tests/auto/declarative/qmlecmascript/testtypes.h
new file mode 100644
index 0000000..09c850d
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/testtypes.h
@@ -0,0 +1,595 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef TESTTYPES_H
+#define TESTTYPES_H
+
+#include <QtCore/qobject.h>
+#include <QtDeclarative/qml.h>
+#include <QtDeclarative/qmlexpression.h>
+#include <QtCore/qpoint.h>
+#include <QtCore/qsize.h>
+#include <QtDeclarative/qmllist.h>
+#include <QtCore/qrect.h>
+#include <QtGui/qmatrix.h>
+#include <QtGui/qcolor.h>
+#include <QtGui/qvector3d.h>
+#include <QtCore/qdatetime.h>
+#include <QtScript/qscriptvalue.h>
+#include <QtDeclarative/qmlscriptstring.h>
+#include <QtDeclarative/qmlcomponent.h>
+
+class MyQmlAttachedObject : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int value READ value CONSTANT)
+public:
+ MyQmlAttachedObject(QObject *parent) : QObject(parent) {}
+
+ int value() const { return 19; }
+};
+
+class MyQmlObject : public QObject
+{
+ Q_OBJECT
+ Q_ENUMS(MyEnum)
+ Q_ENUMS(MyEnum2)
+ Q_PROPERTY(int deleteOnSet READ deleteOnSet WRITE setDeleteOnSet)
+ Q_PROPERTY(bool trueProperty READ trueProperty CONSTANT)
+ Q_PROPERTY(bool falseProperty READ falseProperty CONSTANT)
+ Q_PROPERTY(int value READ value WRITE setValue)
+ Q_PROPERTY(QString stringProperty READ stringProperty WRITE setStringProperty NOTIFY stringChanged)
+ 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)
+ Q_PROPERTY(int resettableProperty READ resettableProperty WRITE setResettableProperty RESET resetProperty)
+
+public:
+ MyQmlObject(): m_methodCalled(false), m_methodIntCalled(false), m_object(0), m_value(0), m_resetProperty(13) {}
+
+ enum MyEnum { EnumValue1 = 0, EnumValue2 = 1 };
+ enum MyEnum2 { EnumValue3 = 2, EnumValue4 = 3 };
+
+ bool trueProperty() const { return true; }
+ bool falseProperty() const { return false; }
+
+ QString stringProperty() const { return m_string; }
+ void setStringProperty(const QString &s)
+ {
+ if (s == m_string)
+ return;
+ m_string = s;
+ emit stringChanged();
+ }
+
+ QObject *objectProperty() const { return m_object; }
+ void setObjectProperty(QObject *obj) {
+ if (obj == m_object)
+ return;
+ m_object = obj;
+ 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; }
+
+ QString string() const { return m_string; }
+
+ static MyQmlAttachedObject *qmlAttachedProperties(QObject *o) {
+ return new MyQmlAttachedObject(o);
+ }
+
+ int deleteOnSet() const { return 1; }
+ void setDeleteOnSet(int v) { if(v) delete this; }
+
+ int value() const { return m_value; }
+ void setValue(int v) { m_value = v; }
+
+ int resettableProperty() const { return m_resetProperty; }
+ void setResettableProperty(int v) { m_resetProperty = v; }
+ void resetProperty() { m_resetProperty = 13; }
+
+signals:
+ void basicSignal();
+ void argumentSignal(int a, QString b, qreal c);
+ void stringChanged();
+ void objectChanged();
+ void anotherBasicSignal();
+ void thirdBasicSignal();
+
+public slots:
+ void deleteMe() { delete this; }
+ void methodNoArgs() { m_methodCalled = true; }
+ void method(int a) { if(a == 163) m_methodIntCalled = true; }
+ void setString(const QString &s) { m_string = s; }
+
+private:
+ friend class tst_qmlecmascript;
+ bool m_methodCalled;
+ bool m_methodIntCalled;
+
+ QObject *m_object;
+ QString m_string;
+ QmlConcreteList<QObject *> m_objectQmlList;
+ QList<QObject *> m_objectQList;
+ int m_value;
+ int m_resetProperty;
+};
+
+QML_DECLARE_TYPEINFO(MyQmlObject, QML_HAS_ATTACHED_PROPERTIES)
+QML_DECLARE_TYPE(MyQmlObject);
+
+class MyQmlContainer : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QList<MyQmlObject*>* children READ children CONSTANT)
+public:
+ MyQmlContainer() {}
+
+ QList<MyQmlObject*> *children() { return &m_children; }
+
+private:
+ QList<MyQmlObject*> m_children;
+};
+
+QML_DECLARE_TYPE(MyQmlContainer);
+
+class MyExpression : public QmlExpression
+{
+public:
+ MyExpression(QmlContext *ctxt, const QString &expr)
+ : QmlExpression(ctxt, expr, 0), changed(false)
+ {
+ }
+
+ void emitValueChanged() {
+ changed = true;
+ QmlExpression::emitValueChanged();
+ }
+ bool changed;
+};
+
+
+class MyDefaultObject1 : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int horseLegs READ horseLegs CONSTANT);
+ Q_PROPERTY(int antLegs READ antLegs CONSTANT);
+public:
+ int horseLegs() const { return 4; }
+ int antLegs() const { return 6; }
+};
+
+class MyDefaultObject2 : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int antLegs READ antLegs CONSTANT);
+ Q_PROPERTY(int emuLegs READ emuLegs CONSTANT);
+public:
+ int antLegs() const { return 5; } // Had an accident
+ int emuLegs() const { return 2; }
+};
+
+class MyDefaultObject3 : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int antLegs READ antLegs CONSTANT);
+ Q_PROPERTY(int humanLegs READ humanLegs CONSTANT);
+public:
+ int antLegs() const { return 7; } // Mutant
+ int humanLegs() const { return 2; }
+ int millipedeLegs() const { return 1000; }
+};
+
+class MyDeferredObject : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged)
+ Q_PROPERTY(QObject *objectProperty READ objectProperty WRITE setObjectProperty);
+ Q_PROPERTY(QObject *objectProperty2 READ objectProperty2 WRITE setObjectProperty2);
+ Q_CLASSINFO("DeferredPropertyNames", "value,objectProperty,objectProperty2");
+
+public:
+ MyDeferredObject() : m_value(0), m_object(0), m_object2(0) {}
+
+ int value() const { return m_value; }
+ void setValue(int v) { m_value = v; emit valueChanged(); }
+
+ QObject *objectProperty() const { return m_object; }
+ void setObjectProperty(QObject *obj) { m_object = obj; }
+
+ QObject *objectProperty2() const { return m_object2; }
+ void setObjectProperty2(QObject *obj) { m_object2 = obj; }
+
+signals:
+ void valueChanged();
+
+private:
+ int m_value;
+ QObject *m_object;
+ QObject *m_object2;
+};
+QML_DECLARE_TYPE(MyDeferredObject);
+
+class MyBaseExtendedObject : public QObject
+{
+Q_OBJECT
+Q_PROPERTY(int baseProperty READ baseProperty WRITE setBaseProperty);
+public:
+ MyBaseExtendedObject() : m_value(0) {}
+
+ int baseProperty() const { return m_value; }
+ void setBaseProperty(int v) { m_value = v; }
+
+private:
+ int m_value;
+};
+QML_DECLARE_TYPE(MyBaseExtendedObject);
+
+class MyExtendedObject : public MyBaseExtendedObject
+{
+Q_OBJECT
+Q_PROPERTY(int coreProperty READ coreProperty WRITE setCoreProperty);
+public:
+ MyExtendedObject() : m_value(0) {}
+
+ int coreProperty() const { return m_value; }
+ void setCoreProperty(int v) { m_value = v; }
+
+private:
+ int m_value;
+};
+QML_DECLARE_TYPE(MyExtendedObject);
+
+class MyTypeObject : public QObject
+{
+ Q_OBJECT
+ Q_ENUMS(MyEnum)
+ Q_FLAGS(MyFlags)
+
+ Q_PROPERTY(QString id READ id WRITE setId);
+ Q_PROPERTY(QObject *objectProperty READ objectProperty WRITE setObjectProperty);
+ Q_PROPERTY(QmlComponent *componentProperty READ componentProperty WRITE setComponentProperty);
+ Q_PROPERTY(MyFlags flagProperty READ flagProperty WRITE setFlagProperty);
+ Q_PROPERTY(MyEnum enumProperty READ enumProperty WRITE setEnumProperty);
+ Q_PROPERTY(QString stringProperty READ stringProperty WRITE setStringProperty);
+ Q_PROPERTY(uint uintProperty READ uintProperty WRITE setUintProperty);
+ Q_PROPERTY(int intProperty READ intProperty WRITE setIntProperty);
+ Q_PROPERTY(qreal realProperty READ realProperty WRITE setRealProperty);
+ Q_PROPERTY(double doubleProperty READ doubleProperty WRITE setDoubleProperty);
+ Q_PROPERTY(float floatProperty READ floatProperty WRITE setFloatProperty);
+ Q_PROPERTY(QColor colorProperty READ colorProperty WRITE setColorProperty);
+ Q_PROPERTY(QDate dateProperty READ dateProperty WRITE setDateProperty);
+ Q_PROPERTY(QTime timeProperty READ timeProperty WRITE setTimeProperty);
+ Q_PROPERTY(QDateTime dateTimeProperty READ dateTimeProperty WRITE setDateTimeProperty);
+ Q_PROPERTY(QPoint pointProperty READ pointProperty WRITE setPointProperty);
+ Q_PROPERTY(QPointF pointFProperty READ pointFProperty WRITE setPointFProperty);
+ Q_PROPERTY(QSize sizeProperty READ sizeProperty WRITE setSizeProperty);
+ Q_PROPERTY(QSizeF sizeFProperty READ sizeFProperty WRITE setSizeFProperty);
+ Q_PROPERTY(QRect rectProperty READ rectProperty WRITE setRectProperty NOTIFY rectPropertyChanged);
+ Q_PROPERTY(QRect rectProperty2 READ rectProperty2 WRITE setRectProperty2);
+ Q_PROPERTY(QRectF rectFProperty READ rectFProperty WRITE setRectFProperty);
+ Q_PROPERTY(bool boolProperty READ boolProperty WRITE setBoolProperty);
+ Q_PROPERTY(QVariant variantProperty READ variantProperty WRITE setVariantProperty);
+ Q_PROPERTY(QVector3D vectorProperty READ vectorProperty WRITE setVectorProperty);
+ Q_PROPERTY(QUrl urlProperty READ urlProperty WRITE setUrlProperty);
+
+ Q_PROPERTY(QmlScriptString scriptProperty READ scriptProperty WRITE setScriptProperty);
+
+public:
+ MyTypeObject()
+ : objectPropertyValue(0), componentPropertyValue(0) {}
+
+ QString idValue;
+ QString id() const {
+ return idValue;
+ }
+ void setId(const QString &v) {
+ idValue = v;
+ }
+
+ QObject *objectPropertyValue;
+ QObject *objectProperty() const {
+ return objectPropertyValue;
+ }
+ void setObjectProperty(QObject *v) {
+ objectPropertyValue = v;
+ }
+
+ QmlComponent *componentPropertyValue;
+ QmlComponent *componentProperty() const {
+ return componentPropertyValue;
+ }
+ void setComponentProperty(QmlComponent *v) {
+ componentPropertyValue = v;
+ }
+
+ enum MyFlag { FlagVal1 = 0x01, FlagVal2 = 0x02, FlagVal3 = 0x04 };
+ Q_DECLARE_FLAGS(MyFlags, MyFlag)
+ MyFlags flagPropertyValue;
+ MyFlags flagProperty() const {
+ return flagPropertyValue;
+ }
+ void setFlagProperty(MyFlags v) {
+ flagPropertyValue = v;
+ }
+
+ enum MyEnum { EnumVal1, EnumVal2 };
+ MyEnum enumPropertyValue;
+ MyEnum enumProperty() const {
+ return enumPropertyValue;
+ }
+ void setEnumProperty(MyEnum v) {
+ enumPropertyValue = v;
+ }
+
+ QString stringPropertyValue;
+ QString stringProperty() const {
+ return stringPropertyValue;
+ }
+ void setStringProperty(const QString &v) {
+ stringPropertyValue = v;
+ }
+
+ uint uintPropertyValue;
+ uint uintProperty() const {
+ return uintPropertyValue;
+ }
+ void setUintProperty(const uint &v) {
+ uintPropertyValue = v;
+ }
+
+ int intPropertyValue;
+ int intProperty() const {
+ return intPropertyValue;
+ }
+ void setIntProperty(const int &v) {
+ intPropertyValue = v;
+ }
+
+ qreal realPropertyValue;
+ qreal realProperty() const {
+ return realPropertyValue;
+ }
+ void setRealProperty(const qreal &v) {
+ realPropertyValue = v;
+ }
+
+ double doublePropertyValue;
+ double doubleProperty() const {
+ return doublePropertyValue;
+ }
+ void setDoubleProperty(const double &v) {
+ doublePropertyValue = v;
+ }
+
+ float floatPropertyValue;
+ float floatProperty() const {
+ return floatPropertyValue;
+ }
+ void setFloatProperty(const float &v) {
+ floatPropertyValue = v;
+ }
+
+ QColor colorPropertyValue;
+ QColor colorProperty() const {
+ return colorPropertyValue;
+ }
+ void setColorProperty(const QColor &v) {
+ colorPropertyValue = v;
+ }
+
+ QDate datePropertyValue;
+ QDate dateProperty() const {
+ return datePropertyValue;
+ }
+ void setDateProperty(const QDate &v) {
+ datePropertyValue = v;
+ }
+
+ QTime timePropertyValue;
+ QTime timeProperty() const {
+ return timePropertyValue;
+ }
+ void setTimeProperty(const QTime &v) {
+ timePropertyValue = v;
+ }
+
+ QDateTime dateTimePropertyValue;
+ QDateTime dateTimeProperty() const {
+ return dateTimePropertyValue;
+ }
+ void setDateTimeProperty(const QDateTime &v) {
+ dateTimePropertyValue = v;
+ }
+
+ QPoint pointPropertyValue;
+ QPoint pointProperty() const {
+ return pointPropertyValue;
+ }
+ void setPointProperty(const QPoint &v) {
+ pointPropertyValue = v;
+ }
+
+ QPointF pointFPropertyValue;
+ QPointF pointFProperty() const {
+ return pointFPropertyValue;
+ }
+ void setPointFProperty(const QPointF &v) {
+ pointFPropertyValue = v;
+ }
+
+ QSize sizePropertyValue;
+ QSize sizeProperty() const {
+ return sizePropertyValue;
+ }
+ void setSizeProperty(const QSize &v) {
+ sizePropertyValue = v;
+ }
+
+ QSizeF sizeFPropertyValue;
+ QSizeF sizeFProperty() const {
+ return sizeFPropertyValue;
+ }
+ void setSizeFProperty(const QSizeF &v) {
+ sizeFPropertyValue = v;
+ }
+
+ QRect rectPropertyValue;
+ QRect rectProperty() const {
+ return rectPropertyValue;
+ }
+ void setRectProperty(const QRect &v) {
+ rectPropertyValue = v;
+ emit rectPropertyChanged();
+ }
+
+ QRect rectPropertyValue2;
+ QRect rectProperty2() const {
+ return rectPropertyValue2;
+ }
+ void setRectProperty2(const QRect &v) {
+ rectPropertyValue2 = v;
+ }
+
+ QRectF rectFPropertyValue;
+ QRectF rectFProperty() const {
+ return rectFPropertyValue;
+ }
+ void setRectFProperty(const QRectF &v) {
+ rectFPropertyValue = v;
+ }
+
+ bool boolPropertyValue;
+ bool boolProperty() const {
+ return boolPropertyValue;
+ }
+ void setBoolProperty(const bool &v) {
+ boolPropertyValue = v;
+ }
+
+ QVariant variantPropertyValue;
+ QVariant variantProperty() const {
+ return variantPropertyValue;
+ }
+ void setVariantProperty(const QVariant &v) {
+ variantPropertyValue = v;
+ }
+
+ QVector3D vectorPropertyValue;
+ QVector3D vectorProperty() const {
+ return vectorPropertyValue;
+ }
+ void setVectorProperty(const QVector3D &v) {
+ vectorPropertyValue = v;
+ }
+
+ QUrl urlPropertyValue;
+ QUrl urlProperty() const {
+ return urlPropertyValue;
+ }
+ void setUrlProperty(const QUrl &v) {
+ urlPropertyValue = v;
+ }
+
+ QmlScriptString scriptPropertyValue;
+ QmlScriptString scriptProperty() const {
+ return scriptPropertyValue;
+ }
+ void setScriptProperty(const QmlScriptString &v) {
+ scriptPropertyValue = v;
+ }
+
+ void doAction() { emit action(); }
+signals:
+ void action();
+ void rectPropertyChanged();
+};
+Q_DECLARE_OPERATORS_FOR_FLAGS(MyTypeObject::MyFlags)
+QML_DECLARE_TYPE(MyTypeObject);
+
+Q_DECLARE_METATYPE(QScriptValue);
+class MyInvokableObject : public QObject
+{
+ Q_OBJECT
+public:
+ MyInvokableObject() { reset(); }
+
+ int invoked() const { return m_invoked; }
+ bool error() const { return m_invokedError; }
+ const QVariantList &actuals() const { return m_actuals; }
+ void reset() { m_invoked = -1; m_invokedError = false; m_actuals.clear(); }
+
+ Q_INVOKABLE QPointF method_get_QPointF() { return QPointF(99.3, -10.2); }
+ Q_INVOKABLE QPoint method_get_QPoint() { return QPoint(9, 12); }
+
+ Q_INVOKABLE void method_NoArgs() { invoke(0); }
+ Q_INVOKABLE int method_NoArgs_int() { invoke(1); return 6; }
+ Q_INVOKABLE qreal method_NoArgs_real() { invoke(2); return 19.7; }
+ Q_INVOKABLE QPointF method_NoArgs_QPointF() { invoke(3); return QPointF(123, 4.5); }
+ Q_INVOKABLE QObject *method_NoArgs_QObject() { invoke(4); return this; }
+ Q_INVOKABLE MyInvokableObject *method_NoArgs_unknown() { invoke(5); return this; }
+ Q_INVOKABLE QScriptValue method_NoArgs_QScriptValue() { invoke(6); return QScriptValue("Hello world"); }
+ Q_INVOKABLE QVariant method_NoArgs_QVariant() { invoke(7); return QVariant("QML rocks"); }
+
+ Q_INVOKABLE void method_int(int a) { invoke(8); m_actuals << a; }
+ Q_INVOKABLE void method_intint(int a, int b) { invoke(9); m_actuals << a << b; }
+ Q_INVOKABLE void method_real(qreal a) { invoke(10); m_actuals << a; }
+ Q_INVOKABLE void method_QString(QString a) { invoke(11); m_actuals << a; }
+ Q_INVOKABLE void method_QPointF(QPointF a) { invoke(12); m_actuals << a; }
+ Q_INVOKABLE void method_QObject(QObject *a) { invoke(13); m_actuals << qVariantFromValue(a); }
+ Q_INVOKABLE void method_QScriptValue(QScriptValue a) { invoke(14); m_actuals << qVariantFromValue(a); }
+ Q_INVOKABLE void method_intQScriptValue(int a, QScriptValue b) { invoke(15); m_actuals << a << qVariantFromValue(b); }
+
+ Q_INVOKABLE void method_overload(int a) { invoke(16); m_actuals << a; }
+ Q_INVOKABLE void method_overload(int a, int b) { invoke(17); m_actuals << a << b; }
+
+private:
+ void invoke(int idx) { if (m_invoked != -1) m_invokedError = true; m_invoked = idx;}
+ int m_invoked;
+ bool m_invokedError;
+ QVariantList m_actuals;
+};
+
+#endif // TESTTYPES_H
+
diff --git a/tests/auto/declarative/qmlecmascript/tst_qmlecmascript.cpp b/tests/auto/declarative/qmlecmascript/tst_qmlecmascript.cpp
new file mode 100644
index 0000000..e5472bb
--- /dev/null
+++ b/tests/auto/declarative/qmlecmascript/tst_qmlecmascript.cpp
@@ -0,0 +1,1663 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlexpression.h>
+#include <QtDeclarative/qmlcontext.h>
+#include <QtCore/qfileinfo.h>
+#include <QtCore/qdebug.h>
+#include <QtCore/private/qguard_p.h>
+#include <QtCore/qdir.h>
+#include <QtCore/qnumeric.h>
+#include <private/qmlengine_p.h>
+#include <private/qmlglobalscriptclass_p.h>
+#include "testtypes.h"
+
+/*
+This test covers evaluation of ECMAScript expressions and bindings from within
+QML. This does not include static QML language issues.
+
+Static QML language issues are covered in qmllanguage
+*/
+inline QUrl TEST_FILE(const QString &filename)
+{
+ QFileInfo fileInfo(__FILE__);
+ return QUrl::fromLocalFile(fileInfo.absoluteDir().filePath("data/" + filename));
+}
+
+inline QUrl TEST_FILE(const char *filename)
+{
+ return TEST_FILE(QLatin1String(filename));
+}
+
+class tst_qmlecmascript : public QObject
+{
+ Q_OBJECT
+public:
+ tst_qmlecmascript() {}
+
+private slots:
+ void assignBasicTypes();
+ void idShortcutInvalidates();
+ void boolPropertiesEvaluateAsBool();
+ void methods();
+ void signalAssignment();
+ void bindingLoop();
+ void basicExpressions();
+ void basicExpressions_data();
+ void arrayExpressions();
+ void contextPropertiesTriggerReeval();
+ void objectPropertiesTriggerReeval();
+ void deferredProperties();
+ void extensionObjects();
+ void attachedProperties();
+ void enums();
+ void valueTypeFunctions();
+ void constantsOverrideBindings();
+ void outerBindingOverridesInnerBinding();
+ void aliasPropertyAndBinding();
+ void nonExistantAttachedObject();
+ void scope();
+ void signalParameterTypes();
+ void objectsCompareAsEqual();
+ void scriptAccess();
+ void dynamicCreation_data();
+ void dynamicCreation();
+ void dynamicDestruction();
+ void objectToString();
+ void selfDeletingBinding();
+ void extendedObjectPropertyLookup();
+ void scriptErrors();
+ void signalTriggeredBindings();
+ void listProperties();
+ void exceptionClearsOnReeval();
+ void exceptionSlotProducesWarning();
+ void exceptionBindingProducesWarning();
+ void transientErrors();
+ void shutdownErrors();
+ void externalScript();
+ void compositePropertyType();
+ void jsObject();
+ void undefinedResetsProperty();
+ void listToVariant();
+ void multiEngineObject();
+ void deletedObject();
+
+ void bug1();
+
+ void callQtInvokables();
+private:
+ QmlEngine engine;
+};
+
+void tst_qmlecmascript::assignBasicTypes()
+{
+ {
+ QmlComponent component(&engine, TEST_FILE("assignBasicTypes.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+ QCOMPARE(object->flagProperty(), MyTypeObject::FlagVal1 | MyTypeObject::FlagVal3);
+ QCOMPARE(object->enumProperty(), MyTypeObject::EnumVal2);
+ QCOMPARE(object->stringProperty(), QString("Hello World!"));
+ QCOMPARE(object->uintProperty(), uint(10));
+ QCOMPARE(object->intProperty(), -19);
+ QCOMPARE((float)object->realProperty(), float(23.2));
+ QCOMPARE((float)object->doubleProperty(), float(-19.7));
+ QCOMPARE((float)object->floatProperty(), float(8.5));
+ QCOMPARE(object->colorProperty(), QColor("red"));
+ QCOMPARE(object->dateProperty(), QDate(1982, 11, 25));
+ QCOMPARE(object->timeProperty(), QTime(11, 11, 32));
+ QCOMPARE(object->dateTimeProperty(), QDateTime(QDate(2009, 5, 12), QTime(13, 22, 1)));
+ QCOMPARE(object->pointProperty(), QPoint(99,13));
+ QCOMPARE(object->pointFProperty(), QPointF(-10.1, 12.3));
+ QCOMPARE(object->sizeProperty(), QSize(99, 13));
+ QCOMPARE(object->sizeFProperty(), QSizeF(0.1, 0.2));
+ QCOMPARE(object->rectProperty(), QRect(9, 7, 100, 200));
+ QCOMPARE(object->rectFProperty(), QRectF(1000.1, -10.9, 400, 90.99));
+ QCOMPARE(object->boolProperty(), true);
+ QCOMPARE(object->variantProperty(), QVariant("Hello World!"));
+ QCOMPARE(object->vectorProperty(), QVector3D(10, 1, 2.2));
+ QCOMPARE(object->urlProperty(), component.url().resolved(QUrl("main.qml")));
+ delete object;
+ }
+ {
+ QmlComponent component(&engine, TEST_FILE("assignBasicTypes.2.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+ QCOMPARE(object->flagProperty(), MyTypeObject::FlagVal1 | MyTypeObject::FlagVal3);
+ QCOMPARE(object->enumProperty(), MyTypeObject::EnumVal2);
+ QCOMPARE(object->stringProperty(), QString("Hello World!"));
+ QCOMPARE(object->uintProperty(), uint(10));
+ QCOMPARE(object->intProperty(), -19);
+ QCOMPARE((float)object->realProperty(), float(23.2));
+ QCOMPARE((float)object->doubleProperty(), float(-19.7));
+ QCOMPARE((float)object->floatProperty(), float(8.5));
+ QCOMPARE(object->colorProperty(), QColor("red"));
+ QCOMPARE(object->dateProperty(), QDate(1982, 11, 25));
+ QCOMPARE(object->timeProperty(), QTime(11, 11, 32));
+ QCOMPARE(object->dateTimeProperty(), QDateTime(QDate(2009, 5, 12), QTime(13, 22, 1)));
+ QCOMPARE(object->pointProperty(), QPoint(99,13));
+ QCOMPARE(object->pointFProperty(), QPointF(-10.1, 12.3));
+ QCOMPARE(object->sizeProperty(), QSize(99, 13));
+ QCOMPARE(object->sizeFProperty(), QSizeF(0.1, 0.2));
+ QCOMPARE(object->rectProperty(), QRect(9, 7, 100, 200));
+ QCOMPARE(object->rectFProperty(), QRectF(1000.1, -10.9, 400, 90.99));
+ QCOMPARE(object->boolProperty(), true);
+ QCOMPARE(object->variantProperty(), QVariant("Hello World!"));
+ QCOMPARE(object->vectorProperty(), QVector3D(10, 1, 2.2));
+ QCOMPARE(object->urlProperty(), component.url().resolved(QUrl("main.qml")));
+ delete object;
+ }
+}
+
+void tst_qmlecmascript::idShortcutInvalidates()
+{
+ {
+ QmlComponent component(&engine, TEST_FILE("idShortcutInvalidates.qml"));
+ MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
+ QVERIFY(object != 0);
+ QVERIFY(object->objectProperty() != 0);
+ delete object->objectProperty();
+ QVERIFY(object->objectProperty() == 0);
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("idShortcutInvalidates.1.qml"));
+ MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
+ QVERIFY(object != 0);
+ QVERIFY(object->objectProperty() != 0);
+ delete object->objectProperty();
+ QVERIFY(object->objectProperty() == 0);
+ }
+}
+
+void tst_qmlecmascript::boolPropertiesEvaluateAsBool()
+{
+ {
+ QmlComponent component(&engine, TEST_FILE("boolPropertiesEvaluateAsBool.1.qml"));
+ MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
+ QVERIFY(object != 0);
+ QCOMPARE(object->stringProperty(), QLatin1String("pass"));
+ }
+ {
+ QmlComponent component(&engine, TEST_FILE("boolPropertiesEvaluateAsBool.2.qml"));
+ MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
+ QVERIFY(object != 0);
+ QCOMPARE(object->stringProperty(), QLatin1String("pass"));
+ }
+}
+
+void tst_qmlecmascript::signalAssignment()
+{
+ {
+ QmlComponent component(&engine, TEST_FILE("signalAssignment.1.qml"));
+ MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
+ QVERIFY(object != 0);
+ QCOMPARE(object->string(), QString());
+ emit object->basicSignal();
+ QCOMPARE(object->string(), QString("pass"));
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("signalAssignment.2.qml"));
+ MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
+ QVERIFY(object != 0);
+ QCOMPARE(object->string(), QString());
+ emit object->argumentSignal(19, "Hello world!", 10.3);
+ QCOMPARE(object->string(), QString("pass 19 Hello world! 10.3"));
+ }
+}
+
+void tst_qmlecmascript::methods()
+{
+ {
+ QmlComponent component(&engine, TEST_FILE("methods.1.qml"));
+ MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
+ QVERIFY(object != 0);
+ QCOMPARE(object->methodCalled(), false);
+ QCOMPARE(object->methodIntCalled(), false);
+ emit object->basicSignal();
+ QCOMPARE(object->methodCalled(), true);
+ QCOMPARE(object->methodIntCalled(), false);
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("methods.2.qml"));
+ MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
+ QVERIFY(object != 0);
+ QCOMPARE(object->methodCalled(), false);
+ QCOMPARE(object->methodIntCalled(), false);
+ emit object->basicSignal();
+ QCOMPARE(object->methodCalled(), false);
+ QCOMPARE(object->methodIntCalled(), true);
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("methods.3.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ QCOMPARE(object->property("test").toInt(), 19);
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("methods.4.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ QCOMPARE(object->property("test").toInt(), 19);
+ QCOMPARE(object->property("test2").toInt(), 17);
+ QCOMPARE(object->property("test3").toInt(), 16);
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("methods.5.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ QCOMPARE(object->property("test").toInt(), 9);
+ }
+}
+
+void tst_qmlecmascript::bindingLoop()
+{
+ QmlComponent component(&engine, TEST_FILE("bindingLoop.qml"));
+ QString warning = "QML MyQmlObject (" + component.url().toString() + ":9:9) Binding loop detected for property \"stringProperty\"";
+ QTest::ignoreMessage(QtWarningMsg, warning.toLatin1().constData());
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+}
+
+void tst_qmlecmascript::basicExpressions_data()
+{
+ QTest::addColumn<QString>("expression");
+ QTest::addColumn<QVariant>("result");
+ QTest::addColumn<bool>("nest");
+
+ QTest::newRow("Syntax error (self test)") << "{console.log({'a':1'}.a)}" << QVariant() << false;
+ QTest::newRow("Context property") << "a" << QVariant(1944) << false;
+ QTest::newRow("Context property") << "a" << QVariant(1944) << true;
+ QTest::newRow("Context property expression") << "a * 2" << QVariant(3888) << false;
+ QTest::newRow("Context property expression") << "a * 2" << QVariant(3888) << true;
+ QTest::newRow("Overridden context property") << "b" << QVariant("Milk") << false;
+ QTest::newRow("Overridden context property") << "b" << QVariant("Cow") << true;
+ QTest::newRow("Object property") << "object.stringProperty" << QVariant("Object1") << false;
+ QTest::newRow("Object property") << "object.stringProperty" << QVariant("Object1") << true;
+ QTest::newRow("Overridden object property") << "objectOverride.stringProperty" << QVariant("Object2") << false;
+ QTest::newRow("Overridden object property") << "objectOverride.stringProperty" << QVariant("Object3") << true;
+ QTest::newRow("Default object property") << "horseLegs" << QVariant(4) << false;
+ QTest::newRow("Default object property") << "antLegs" << QVariant(6) << false;
+ QTest::newRow("Default object property") << "emuLegs" << QVariant(2) << false;
+ QTest::newRow("Nested default object property") << "horseLegs" << QVariant(4) << true;
+ QTest::newRow("Nested default object property") << "antLegs" << QVariant(7) << true;
+ QTest::newRow("Nested default object property") << "emuLegs" << QVariant(2) << true;
+ QTest::newRow("Nested default object property") << "humanLegs" << QVariant(2) << true;
+ QTest::newRow("Context property override default object property") << "millipedeLegs" << QVariant(100) << true;
+}
+
+void tst_qmlecmascript::basicExpressions()
+{
+ QFETCH(QString, expression);
+ QFETCH(QVariant, result);
+ QFETCH(bool, nest);
+
+ MyQmlObject object1;
+ MyQmlObject object2;
+ MyQmlObject object3;
+ MyDefaultObject1 default1;
+ MyDefaultObject2 default2;
+ MyDefaultObject3 default3;
+ object1.setStringProperty("Object1");
+ object2.setStringProperty("Object2");
+ object3.setStringProperty("Object3");
+
+ QmlContext context(engine.rootContext());
+ QmlContext nestedContext(&context);
+
+ context.addDefaultObject(&default1);
+ context.addDefaultObject(&default2);
+ context.setContextProperty("a", QVariant(1944));
+ context.setContextProperty("b", QVariant("Milk"));
+ context.setContextProperty("object", &object1);
+ context.setContextProperty("objectOverride", &object2);
+ nestedContext.addDefaultObject(&default3);
+ nestedContext.setContextProperty("b", QVariant("Cow"));
+ nestedContext.setContextProperty("objectOverride", &object3);
+ nestedContext.setContextProperty("millipedeLegs", QVariant(100));
+
+ MyExpression expr(nest?&nestedContext:&context, expression);
+ QCOMPARE(expr.value(), result);
+}
+
+Q_DECLARE_METATYPE(QList<QObject *>);
+void tst_qmlecmascript::arrayExpressions()
+{
+ QObject obj1;
+ QObject obj2;
+ QObject obj3;
+
+ QmlContext context(engine.rootContext());
+ context.setContextProperty("a", &obj1);
+ context.setContextProperty("b", &obj2);
+ context.setContextProperty("c", &obj3);
+
+ MyExpression expr(&context, "[a, b, c, 10]");
+ QVariant result = expr.value();
+ QCOMPARE(result.userType(), qMetaTypeId<QList<QObject *> >());
+ QList<QObject *> list = qvariant_cast<QList<QObject *> >(result);
+ QCOMPARE(list.count(), 4);
+ QCOMPARE(list.at(0), &obj1);
+ QCOMPARE(list.at(1), &obj2);
+ QCOMPARE(list.at(2), &obj3);
+ QCOMPARE(list.at(3), (QObject *)0);
+}
+
+// Tests that modifying a context property will reevaluate expressions
+void tst_qmlecmascript::contextPropertiesTriggerReeval()
+{
+ QmlContext context(engine.rootContext());
+ MyQmlObject object1;
+ MyQmlObject object2;
+ MyQmlObject *object3 = new MyQmlObject;
+
+ object1.setStringProperty("Hello");
+ object2.setStringProperty("World");
+
+ context.setContextProperty("testProp", QVariant(1));
+ context.setContextProperty("testObj", &object1);
+ context.setContextProperty("testObj2", object3);
+
+ {
+ MyExpression expr(&context, "testProp + 1");
+ QCOMPARE(expr.changed, false);
+ QCOMPARE(expr.value(), QVariant(2));
+
+ context.setContextProperty("testProp", QVariant(2));
+ QCOMPARE(expr.changed, true);
+ QCOMPARE(expr.value(), QVariant(3));
+ }
+
+ {
+ MyExpression expr(&context, "testProp + testProp + testProp");
+ QCOMPARE(expr.changed, false);
+ QCOMPARE(expr.value(), QVariant(6));
+
+ context.setContextProperty("testProp", QVariant(4));
+ QCOMPARE(expr.changed, true);
+ QCOMPARE(expr.value(), QVariant(12));
+ }
+
+ {
+ MyExpression expr(&context, "testObj.stringProperty");
+ QCOMPARE(expr.changed, false);
+ QCOMPARE(expr.value(), QVariant("Hello"));
+
+ context.setContextProperty("testObj", &object2);
+ QCOMPARE(expr.changed, true);
+ QCOMPARE(expr.value(), QVariant("World"));
+ }
+
+ {
+ MyExpression expr(&context, "testObj.stringProperty /**/");
+ QCOMPARE(expr.changed, false);
+ QCOMPARE(expr.value(), QVariant("World"));
+
+ context.setContextProperty("testObj", &object1);
+ QCOMPARE(expr.changed, true);
+ QCOMPARE(expr.value(), QVariant("Hello"));
+ }
+
+ {
+ MyExpression expr(&context, "testObj2");
+ QCOMPARE(expr.changed, false);
+ QCOMPARE(expr.value(), QVariant::fromValue((QObject *)object3));
+ }
+
+}
+
+void tst_qmlecmascript::objectPropertiesTriggerReeval()
+{
+ QmlContext context(engine.rootContext());
+ MyQmlObject object1;
+ MyQmlObject object2;
+ MyQmlObject object3;
+ context.setContextProperty("testObj", &object1);
+
+ object1.setStringProperty(QLatin1String("Hello"));
+ object2.setStringProperty(QLatin1String("Dog"));
+ object3.setStringProperty(QLatin1String("Cat"));
+
+ {
+ MyExpression expr(&context, "testObj.stringProperty");
+ QCOMPARE(expr.changed, false);
+ QCOMPARE(expr.value(), QVariant("Hello"));
+
+ object1.setStringProperty(QLatin1String("World"));
+ QCOMPARE(expr.changed, true);
+ QCOMPARE(expr.value(), QVariant("World"));
+ }
+
+ {
+ MyExpression expr(&context, "testObj.objectProperty.stringProperty");
+ QCOMPARE(expr.changed, false);
+ QCOMPARE(expr.value(), QVariant());
+
+ object1.setObjectProperty(&object2);
+ QCOMPARE(expr.changed, true);
+ expr.changed = false;
+ QCOMPARE(expr.value(), QVariant("Dog"));
+
+ object1.setObjectProperty(&object3);
+ QCOMPARE(expr.changed, true);
+ expr.changed = false;
+ QCOMPARE(expr.value(), QVariant("Cat"));
+
+ object1.setObjectProperty(0);
+ QCOMPARE(expr.changed, true);
+ expr.changed = false;
+ QCOMPARE(expr.value(), QVariant());
+
+ object1.setObjectProperty(&object3);
+ QCOMPARE(expr.changed, true);
+ expr.changed = false;
+ QCOMPARE(expr.value(), QVariant("Cat"));
+
+ object3.setStringProperty("Donkey");
+ QCOMPARE(expr.changed, true);
+ expr.changed = false;
+ QCOMPARE(expr.value(), QVariant("Donkey"));
+ }
+}
+
+void tst_qmlecmascript::deferredProperties()
+{
+ QmlComponent component(&engine, TEST_FILE("deferredProperties.qml"));
+ MyDeferredObject *object =
+ qobject_cast<MyDeferredObject *>(component.create());
+ QVERIFY(object != 0);
+ QCOMPARE(object->value(), 0);
+ QVERIFY(object->objectProperty() == 0);
+ QVERIFY(object->objectProperty2() != 0);
+ qmlExecuteDeferred(object);
+ QCOMPARE(object->value(), 10);
+ QVERIFY(object->objectProperty() != 0);
+ MyQmlObject *qmlObject =
+ qobject_cast<MyQmlObject *>(object->objectProperty());
+ QVERIFY(qmlObject != 0);
+ QCOMPARE(qmlObject->value(), 10);
+ object->setValue(19);
+ QCOMPARE(qmlObject->value(), 19);
+}
+
+void tst_qmlecmascript::extensionObjects()
+{
+ QmlComponent component(&engine, TEST_FILE("extensionObjects.qml"));
+ MyExtendedObject *object =
+ qobject_cast<MyExtendedObject *>(component.create());
+ QVERIFY(object != 0);
+ QCOMPARE(object->baseProperty(), 13);
+ QCOMPARE(object->coreProperty(), 9);
+
+ object->setProperty("extendedProperty", QVariant(11));
+ object->setProperty("baseExtendedProperty", QVariant(92));
+ QCOMPARE(object->coreProperty(), 11);
+ QCOMPARE(object->baseProperty(), 92);
+}
+
+void tst_qmlecmascript::attachedProperties()
+{
+ QmlComponent component(&engine, TEST_FILE("attachedProperty.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ QCOMPARE(object->property("a").toInt(), 19);
+ QCOMPARE(object->property("b").toInt(), 19);
+ QCOMPARE(object->property("c").toInt(), 19);
+ QCOMPARE(object->property("d").toInt(), 19);
+
+ // ### Need to test attached property assignment
+}
+
+void tst_qmlecmascript::enums()
+{
+ // Existant enums
+ {
+ QmlComponent component(&engine, TEST_FILE("enums.1.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("a").toInt(), 0);
+ QCOMPARE(object->property("b").toInt(), 1);
+ QCOMPARE(object->property("c").toInt(), 2);
+ QCOMPARE(object->property("d").toInt(), 3);
+ QCOMPARE(object->property("e").toInt(), 0);
+ QCOMPARE(object->property("f").toInt(), 1);
+ QCOMPARE(object->property("g").toInt(), 2);
+ QCOMPARE(object->property("h").toInt(), 3);
+ QCOMPARE(object->property("i").toInt(), 19);
+ QCOMPARE(object->property("j").toInt(), 19);
+ }
+ // Non-existant enums
+ {
+ QmlComponent component(&engine, TEST_FILE("enums.2.qml"));
+
+ QString warning1 = component.url().toString() + ":5: Unable to assign [undefined] to int";
+ QString warning2 = component.url().toString() + ":6: Unable to assign [undefined] to int";
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1));
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2));
+
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ QCOMPARE(object->property("a").toInt(), 0);
+ QCOMPARE(object->property("b").toInt(), 0);
+ }
+}
+
+void tst_qmlecmascript::valueTypeFunctions()
+{
+ QmlComponent component(&engine, TEST_FILE("valueTypeFunctions.qml"));
+ MyTypeObject *obj = qobject_cast<MyTypeObject*>(component.create());
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->rectProperty(), QRect(0,0,100,100));
+ QCOMPARE(obj->rectFProperty(), QRectF(0,0.5,100,99.5));
+}
+
+/*
+Tests that writing a constant to a property with a binding on it disables the
+binding.
+*/
+void tst_qmlecmascript::constantsOverrideBindings()
+{
+ // From ECMAScript
+ {
+ QmlComponent component(&engine, TEST_FILE("constantsOverrideBindings.1.qml"));
+ MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("c2").toInt(), 0);
+ object->setProperty("c1", QVariant(9));
+ QCOMPARE(object->property("c2").toInt(), 9);
+
+ emit object->basicSignal();
+
+ QCOMPARE(object->property("c2").toInt(), 13);
+ object->setProperty("c1", QVariant(8));
+ QCOMPARE(object->property("c2").toInt(), 13);
+ }
+
+ // During construction
+ {
+ QmlComponent component(&engine, TEST_FILE("constantsOverrideBindings.2.qml"));
+ MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("c1").toInt(), 0);
+ QCOMPARE(object->property("c2").toInt(), 10);
+ object->setProperty("c1", QVariant(9));
+ QCOMPARE(object->property("c1").toInt(), 9);
+ QCOMPARE(object->property("c2").toInt(), 10);
+ }
+
+#if 0
+ // From C++
+ {
+ QmlComponent component(&engine, TEST_FILE("constantsOverrideBindings.3.qml"));
+ MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("c2").toInt(), 0);
+ object->setProperty("c1", QVariant(9));
+ QCOMPARE(object->property("c2").toInt(), 9);
+
+ object->setProperty("c2", QVariant(13));
+ QCOMPARE(object->property("c2").toInt(), 13);
+ object->setProperty("c1", QVariant(7));
+ QCOMPARE(object->property("c1").toInt(), 7);
+ QCOMPARE(object->property("c2").toInt(), 13);
+ }
+#endif
+}
+
+/*
+Tests that assigning a binding to a property that already has a binding causes
+the original binding to be disabled.
+*/
+void tst_qmlecmascript::outerBindingOverridesInnerBinding()
+{
+ QmlComponent component(&engine,
+ TEST_FILE("outerBindingOverridesInnerBinding.qml"));
+ MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("c1").toInt(), 0);
+ QCOMPARE(object->property("c2").toInt(), 0);
+ QCOMPARE(object->property("c3").toInt(), 0);
+
+ object->setProperty("c1", QVariant(9));
+ QCOMPARE(object->property("c1").toInt(), 9);
+ QCOMPARE(object->property("c2").toInt(), 0);
+ QCOMPARE(object->property("c3").toInt(), 0);
+
+ object->setProperty("c3", QVariant(8));
+ QCOMPARE(object->property("c1").toInt(), 9);
+ QCOMPARE(object->property("c2").toInt(), 8);
+ QCOMPARE(object->property("c3").toInt(), 8);
+}
+
+/*
+Access a non-existant attached object.
+
+Tests for a regression where this used to crash.
+*/
+void tst_qmlecmascript::nonExistantAttachedObject()
+{
+ QmlComponent component(&engine, TEST_FILE("nonExistantAttachedObject.qml"));
+
+ QString warning = component.url().toString() + ":4: Unable to assign [undefined] to QString";
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(warning));
+
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+}
+
+void tst_qmlecmascript::scope()
+{
+ {
+ QmlComponent component(&engine, TEST_FILE("scope.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test1").toInt(), 1);
+ QCOMPARE(object->property("test2").toInt(), 2);
+ QCOMPARE(object->property("test3").toString(), QString("1Test"));
+ QCOMPARE(object->property("test4").toString(), QString("2Test"));
+ QCOMPARE(object->property("test5").toInt(), 1);
+ QCOMPARE(object->property("test6").toInt(), 1);
+ QCOMPARE(object->property("test7").toInt(), 2);
+ QCOMPARE(object->property("test8").toInt(), 2);
+ QCOMPARE(object->property("test9").toInt(), 1);
+ QCOMPARE(object->property("test10").toInt(), 3);
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("scope.2.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test1").toInt(), 19);
+ QCOMPARE(object->property("test2").toInt(), 19);
+ QCOMPARE(object->property("test3").toInt(), 11);
+ QCOMPARE(object->property("test4").toInt(), 11);
+ QCOMPARE(object->property("test5").toInt(), 24);
+ QCOMPARE(object->property("test6").toInt(), 24);
+ }
+}
+
+/*
+Tests that "any" type passes through a synthesized signal parameter. This
+is essentially a test of QmlMetaType::copy()
+*/
+void tst_qmlecmascript::signalParameterTypes()
+{
+ QmlComponent component(&engine, TEST_FILE("signalParameterTypes.qml"));
+ MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
+ QVERIFY(object != 0);
+
+ emit object->basicSignal();
+
+ QCOMPARE(object->property("intProperty").toInt(), 10);
+ QCOMPARE(object->property("realProperty").toReal(), 19.2);
+ QVERIFY(object->property("colorProperty").value<QColor>() == QColor(255, 255, 0, 255));
+ QVERIFY(object->property("variantProperty") == QVariant::fromValue(QColor(255, 0, 255, 255)));
+}
+
+/*
+Test that two JS objects for the same QObject compare as equal.
+*/
+void tst_qmlecmascript::objectsCompareAsEqual()
+{
+ QmlComponent component(&engine, TEST_FILE("objectsCompareAsEqual.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test1").toBool(), true);
+ QCOMPARE(object->property("test2").toBool(), true);
+ QCOMPARE(object->property("test3").toBool(), true);
+ QCOMPARE(object->property("test4").toBool(), true);
+ QCOMPARE(object->property("test5").toBool(), true);
+}
+
+/*
+Confirm bindings and alias properties can coexist.
+
+Tests for a regression where the binding would not reevaluate.
+*/
+void tst_qmlecmascript::aliasPropertyAndBinding()
+{
+ QmlComponent component(&engine, TEST_FILE("aliasPropertyAndBinding.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("c2").toInt(), 3);
+ QCOMPARE(object->property("c3").toInt(), 3);
+
+ object->setProperty("c2", QVariant(19));
+
+ QCOMPARE(object->property("c2").toInt(), 19);
+ QCOMPARE(object->property("c3").toInt(), 19);
+}
+
+/*
+Tests that only methods of Script {} blocks are exposed.
+*/
+void tst_qmlecmascript::scriptAccess()
+{
+ QmlComponent component(&engine, TEST_FILE("scriptAccess.qml"));
+
+ QString warning = component.url().toString() + ":16: Unable to assign [undefined] to int";
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(warning));
+
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test1").toInt(), 10);
+ QCOMPARE(object->property("test2").toInt(), 19);
+ QCOMPARE(object->property("test3").toInt(), 0);
+}
+
+void tst_qmlecmascript::dynamicCreation_data()
+{
+ QTest::addColumn<QString>("method");
+ QTest::addColumn<QString>("createdName");
+
+ QTest::newRow("One") << "createOne" << "objectOne";
+ QTest::newRow("Two") << "createTwo" << "objectTwo";
+ QTest::newRow("Three") << "createThree" << "objectThree";
+}
+
+/*
+Test using createQmlObject to dynamically generate an item
+Also using createComponent is tested.
+*/
+void tst_qmlecmascript::dynamicCreation()
+{
+ QFETCH(QString, method);
+ QFETCH(QString, createdName);
+
+ QmlComponent component(&engine, TEST_FILE("dynamicCreation.qml"));
+ MyQmlObject *object = qobject_cast<MyQmlObject*>(component.create());
+ QVERIFY(object != 0);
+
+ QMetaObject::invokeMethod(object, method.toUtf8());
+ QObject *created = object->objectProperty();
+ QVERIFY(created);
+ QCOMPARE(created->objectName(), createdName);
+}
+
+/*
+ Tests the destroy function
+*/
+void tst_qmlecmascript::dynamicDestruction()
+{
+ QmlComponent component(&engine, TEST_FILE("dynamicDeletion.qml"));
+ QGuard<MyQmlObject> object = qobject_cast<MyQmlObject*>(component.create());
+ QVERIFY(object != 0);
+ QGuard<QObject> createdQmlObject = 0;
+
+ QMetaObject::invokeMethod(object, "create");
+ createdQmlObject = object->objectProperty();
+ QVERIFY(createdQmlObject);
+ QCOMPARE(createdQmlObject->objectName(), QString("emptyObject"));
+
+ QMetaObject::invokeMethod(object, "killOther");
+ QVERIFY(createdQmlObject);
+ QTest::qWait(0);
+ QCoreApplication::instance()->processEvents(QEventLoop::DeferredDeletion);
+ QVERIFY(createdQmlObject);
+ for (int ii = 0; createdQmlObject && ii < 10; ++ii) {
+ if (createdQmlObject) {
+ QTest::qWait(100);
+ QCoreApplication::instance()->processEvents(QEventLoop::DeferredDeletion);
+ }
+ }
+ QVERIFY(!createdQmlObject);
+
+ QMetaObject::invokeMethod(object, "killMe");
+ QVERIFY(object);
+ QTest::qWait(0);
+ QCoreApplication::instance()->processEvents(QEventLoop::DeferredDeletion);
+ QVERIFY(!object);
+}
+
+/*
+ tests that id.toString() works
+*/
+void tst_qmlecmascript::objectToString()
+{
+ QmlComponent component(&engine, TEST_FILE("qmlToString.qml"));
+ MyQmlObject *object = qobject_cast<MyQmlObject*>(component.create());
+ QVERIFY(object != 0);
+ QMetaObject::invokeMethod(object, "testToString");
+ QVERIFY(object->stringProperty().startsWith("MyQmlObject_QML_"));
+ QVERIFY(object->stringProperty().endsWith(", \"objName\")"));
+}
+
+/*
+Tests bindings that indirectly cause their own deletion work.
+
+This test is best run under valgrind to ensure no invalid memory access occur.
+*/
+void tst_qmlecmascript::selfDeletingBinding()
+{
+ {
+ QmlComponent component(&engine, TEST_FILE("selfDeletingBinding.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ object->setProperty("triggerDelete", true);
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("selfDeletingBinding.2.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ object->setProperty("triggerDelete", true);
+ }
+}
+
+/*
+Test that extended object properties can be accessed.
+
+This test a regression where this used to crash. The issue was specificially
+for extended objects that did not include a synthesized meta object (so non-root
+and no synthesiszed properties).
+*/
+void tst_qmlecmascript::extendedObjectPropertyLookup()
+{
+ QmlComponent component(&engine, TEST_FILE("extendedObjectPropertyLookup.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+}
+
+/*
+Test file/lineNumbers for binding/Script errors.
+*/
+void tst_qmlecmascript::scriptErrors()
+{
+ QmlComponent component(&engine, TEST_FILE("scriptErrors.qml"));
+ QString url = component.url().toString();
+
+ QString warning1 = url.left(url.length() - 3) + "js:2: Error: Invalid write to global property \"a\"";
+ QString warning2 = url + ":7: TypeError: Result of expression 'a' [undefined] is not an object.";
+ QString warning3 = url + ":5: Error: Invalid write to global property \"a\"";
+ QString warning4 = url + ":12: TypeError: Result of expression 'a' [undefined] is not an object.";
+ QString warning5 = url + ":10: TypeError: Result of expression 'a' [undefined] is not an object.";
+ QString warning6 = url + ":9: Unable to assign [undefined] to int";
+ QString warning7 = url + ":14: Error: Cannot assign to read-only property \"trueProperty\"";
+ QString warning8 = url + ":15: Error: Cannot assign to non-existant property \"fakeProperty\"";
+
+ QTest::ignoreMessage(QtWarningMsg, warning1.toLatin1().constData());
+ QTest::ignoreMessage(QtWarningMsg, warning2.toLatin1().constData());
+ QTest::ignoreMessage(QtWarningMsg, warning3.toLatin1().constData());
+ QTest::ignoreMessage(QtWarningMsg, warning5.toLatin1().constData());
+ QTest::ignoreMessage(QtWarningMsg, warning6.toLatin1().constData());
+ MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QTest::ignoreMessage(QtWarningMsg, warning4.toLatin1().constData());
+ emit object->basicSignal();
+
+ QTest::ignoreMessage(QtWarningMsg, warning7.toLatin1().constData());
+ emit object->anotherBasicSignal();
+
+ QTest::ignoreMessage(QtWarningMsg, warning8.toLatin1().constData());
+ emit object->thirdBasicSignal();
+}
+
+/*
+Test bindings still work when the reeval is triggered from within
+a signal script.
+*/
+void tst_qmlecmascript::signalTriggeredBindings()
+{
+ QmlComponent component(&engine, TEST_FILE("signalTriggeredBindings.qml"));
+ MyQmlObject *object = qobject_cast<MyQmlObject*>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("base").toReal(), 50.);
+ QCOMPARE(object->property("test1").toReal(), 50.);
+ QCOMPARE(object->property("test2").toReal(), 50.);
+
+ object->basicSignal();
+
+ QCOMPARE(object->property("base").toReal(), 200.);
+ QCOMPARE(object->property("test1").toReal(), 200.);
+ QCOMPARE(object->property("test2").toReal(), 200.);
+
+ object->argumentSignal(10, QString(), 10);
+
+ QCOMPARE(object->property("base").toReal(), 400.);
+ QCOMPARE(object->property("test1").toReal(), 400.);
+ 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);
+}
+
+void tst_qmlecmascript::exceptionClearsOnReeval()
+{
+ QmlComponent component(&engine, TEST_FILE("exceptionClearsOnReeval.qml"));
+ QString url = component.url().toString();
+
+ QString warning = url + ":4: TypeError: Result of expression 'objectProperty.objectProperty' [undefined] is not an object.";
+
+ QTest::ignoreMessage(QtWarningMsg, warning.toLatin1().constData());
+ MyQmlObject *object = qobject_cast<MyQmlObject*>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test").toBool(), false);
+
+ MyQmlObject object2;
+ MyQmlObject object3;
+ object2.setObjectProperty(&object3);
+ object->setObjectProperty(&object2);
+
+ QCOMPARE(object->property("test").toBool(), true);
+}
+
+void tst_qmlecmascript::exceptionSlotProducesWarning()
+{
+ QmlComponent component(&engine, TEST_FILE("exceptionProducesWarning.qml"));
+ QString url = component.url().toString();
+
+ QString warning = component.url().toString() + ":6: Error: JS exception";
+
+ QTest::ignoreMessage(QtWarningMsg, warning.toLatin1().constData());
+ MyQmlObject *object = qobject_cast<MyQmlObject*>(component.create());
+ QVERIFY(object != 0);
+}
+
+void tst_qmlecmascript::exceptionBindingProducesWarning()
+{
+ QmlComponent component(&engine, TEST_FILE("exceptionProducesWarning2.qml"));
+ QString url = component.url().toString();
+
+ QString warning = component.url().toString() + ":5: Error: JS exception";
+
+ QTest::ignoreMessage(QtWarningMsg, warning.toLatin1().constData());
+ MyQmlObject *object = qobject_cast<MyQmlObject*>(component.create());
+ QVERIFY(object != 0);
+}
+
+static int transientErrorsMsgCount = 0;
+static void transientErrorsMsgHandler(QtMsgType, const char *)
+{
+ ++transientErrorsMsgCount;
+}
+
+// Check that transient binding errors are not displayed
+void tst_qmlecmascript::transientErrors()
+{
+ QmlComponent component(&engine, TEST_FILE("transientErrors.qml"));
+
+ transientErrorsMsgCount = 0;
+ QtMsgHandler old = qInstallMsgHandler(transientErrorsMsgHandler);
+
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ qInstallMsgHandler(old);
+
+ QCOMPARE(transientErrorsMsgCount, 0);
+}
+
+// Check that errors during shutdown are minimized
+void tst_qmlecmascript::shutdownErrors()
+{
+ QmlComponent component(&engine, TEST_FILE("shutdownErrors.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ transientErrorsMsgCount = 0;
+ QtMsgHandler old = qInstallMsgHandler(transientErrorsMsgHandler);
+
+ delete object;
+
+ qInstallMsgHandler(old);
+ QCOMPARE(transientErrorsMsgCount, 0);
+}
+
+// Check that Script::source property works as expected
+void tst_qmlecmascript::externalScript()
+{
+ {
+ QmlComponent component(&engine, TEST_FILE("externalScript.1.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test").toInt(), 92);
+
+ delete object;
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("externalScript.2.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test").toInt(), 92);
+
+ delete object;
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("externalScript.3.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test").toInt(), 92);
+ QCOMPARE(object->property("test2").toInt(), 92);
+ QCOMPARE(object->property("test3").toBool(), false);
+
+ delete object;
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("externalScript.4.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test").toInt(), 92);
+ QCOMPARE(object->property("test2").toBool(), true);
+
+ delete object;
+ }
+}
+
+void tst_qmlecmascript::compositePropertyType()
+{
+ QmlComponent component(&engine, TEST_FILE("compositePropertyType.qml"));
+ QTest::ignoreMessage(QtDebugMsg, "hello world");
+ QObject *object = qobject_cast<QObject *>(component.create());
+ delete object;
+}
+
+// QTBUG-5759
+void tst_qmlecmascript::jsObject()
+{
+ QmlComponent component(&engine, TEST_FILE("jsObject.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test").toInt(), 92);
+
+ delete object;
+}
+
+void tst_qmlecmascript::undefinedResetsProperty()
+{
+ {
+ QmlComponent component(&engine, TEST_FILE("undefinedResetsProperty.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("resettableProperty").toInt(), 92);
+
+ object->setProperty("setUndefined", true);
+
+ QCOMPARE(object->property("resettableProperty").toInt(), 13);
+
+ object->setProperty("setUndefined", false);
+
+ QCOMPARE(object->property("resettableProperty").toInt(), 92);
+
+ delete object;
+ }
+ {
+ QmlComponent component(&engine, TEST_FILE("undefinedResetsProperty.2.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("resettableProperty").toInt(), 19);
+
+ QMetaObject::invokeMethod(object, "doReset");
+
+ QCOMPARE(object->property("resettableProperty").toInt(), 13);
+
+ delete object;
+ }
+}
+
+// QTBUG-6781
+void tst_qmlecmascript::bug1()
+{
+ QmlComponent component(&engine, TEST_FILE("bug.1.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test").toInt(), 14);
+
+ object->setProperty("a", 11);
+
+ QCOMPARE(object->property("test").toInt(), 3);
+
+ object->setProperty("b", true);
+
+ QCOMPARE(object->property("test").toInt(), 9);
+
+ delete object;
+}
+
+void tst_qmlecmascript::callQtInvokables()
+{
+ MyInvokableObject o;
+
+ QmlEngine qmlengine;
+ QmlEnginePrivate *ep = QmlEnginePrivate::get(&qmlengine);
+ QScriptEngine *engine = &ep->scriptEngine;
+ ep->globalClass->explicitSetProperty("object", ep->objectClass->newQObject(&o));
+
+ // Non-existant methods
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_nonexistant()").isError(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), -1);
+ QCOMPARE(o.actuals().count(), 0);
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_nonexistant(10, 11)").isError(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), -1);
+ QCOMPARE(o.actuals().count(), 0);
+
+ // Insufficient arguments
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_int()").isError(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), -1);
+ QCOMPARE(o.actuals().count(), 0);
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_intint(10)").isError(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), -1);
+ QCOMPARE(o.actuals().count(), 0);
+
+ // Excessive arguments
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_int(10, 11)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 8);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant(10));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_intint(10, 11, 12)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 9);
+ QCOMPARE(o.actuals().count(), 2);
+ QCOMPARE(o.actuals().at(0), QVariant(10));
+ QCOMPARE(o.actuals().at(1), QVariant(11));
+
+ // Test return types
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_NoArgs()").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 0);
+ QCOMPARE(o.actuals().count(), 0);
+
+ o.reset();
+ QVERIFY(engine->evaluate("object.method_NoArgs_int()").strictlyEquals(QScriptValue(engine, 6)));
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 1);
+ QCOMPARE(o.actuals().count(), 0);
+
+ o.reset();
+ QVERIFY(engine->evaluate("object.method_NoArgs_real()").strictlyEquals(QScriptValue(engine, 19.7)));
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 2);
+ QCOMPARE(o.actuals().count(), 0);
+
+ o.reset();
+ {
+ QScriptValue ret = engine->evaluate("object.method_NoArgs_QPointF()");
+ QVERIFY(ret.isVariant());
+ QCOMPARE(ret.toVariant(), QVariant(QPointF(123, 4.5)));
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 3);
+ QCOMPARE(o.actuals().count(), 0);
+ }
+
+ o.reset();
+ {
+ QScriptValue ret = engine->evaluate("object.method_NoArgs_QObject()");
+ QVERIFY(ret.isQObject());
+ QCOMPARE(ret.toQObject(), (QObject *)&o);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 4);
+ QCOMPARE(o.actuals().count(), 0);
+ }
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_NoArgs_unknown()").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 5);
+ QCOMPARE(o.actuals().count(), 0);
+
+ o.reset();
+ {
+ QScriptValue ret = engine->evaluate("object.method_NoArgs_QScriptValue()");
+ QVERIFY(ret.isString());
+ QCOMPARE(ret.toString(), QString("Hello world"));
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 6);
+ QCOMPARE(o.actuals().count(), 0);
+ }
+
+ o.reset();
+ QVERIFY(engine->evaluate("object.method_NoArgs_QVariant()").strictlyEquals(QScriptValue(engine, "QML rocks")));
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 7);
+ QCOMPARE(o.actuals().count(), 0);
+
+ // Test arg types
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_int(94)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 8);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant(94));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_int(\"94\")").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 8);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant(94));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_int(\"not a number\")").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 8);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant(0));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_int(null)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 8);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant(0));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_int(undefined)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 8);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant(0));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_int(object)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 8);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant(0));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_intint(122, 9)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 9);
+ QCOMPARE(o.actuals().count(), 2);
+ QCOMPARE(o.actuals().at(0), QVariant(122));
+ QCOMPARE(o.actuals().at(1), QVariant(9));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_real(94.3)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 10);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant(94.3));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_real(\"94.3\")").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 10);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant(94.3));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_real(\"not a number\")").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 10);
+ QCOMPARE(o.actuals().count(), 1);
+ QVERIFY(qIsNaN(o.actuals().at(0).toDouble()));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_real(null)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 10);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant(0));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_real(undefined)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 10);
+ QCOMPARE(o.actuals().count(), 1);
+ QVERIFY(qIsNaN(o.actuals().at(0).toDouble()));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_real(object)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 10);
+ QCOMPARE(o.actuals().count(), 1);
+ QVERIFY(qIsNaN(o.actuals().at(0).toDouble()));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_QString(\"Hello world\")").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 11);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant("Hello world"));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_QString(19)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 11);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant("19"));
+
+ o.reset();
+ {
+ QString expected = "MyInvokableObject(0x" + QString::number((intptr_t)&o, 16) + ")";
+ QCOMPARE(engine->evaluate("object.method_QString(object)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 11);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant(expected));
+ }
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_QString(null)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 11);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant(QString()));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_QString(undefined)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 11);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant(QString()));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_QPointF(0)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 12);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant(QPointF()));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_QPointF(null)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 12);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant(QPointF()));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_QPointF(undefined)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 12);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant(QPointF()));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_QPointF(object)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 12);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant(QPointF()));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_QPointF(object.method_get_QPointF())").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 12);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant(QPointF(99.3, -10.2)));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_QPointF(object.method_get_QPoint())").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 12);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant(QPointF(9, 12)));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_QObject(0)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 13);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), qVariantFromValue((QObject *)0));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_QObject(\"Hello world\")").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 13);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), qVariantFromValue((QObject *)0));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_QObject(null)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 13);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), qVariantFromValue((QObject *)0));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_QObject(undefined)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 13);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), qVariantFromValue((QObject *)0));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_QObject(object)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 13);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), qVariantFromValue((QObject *)&o));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_QScriptValue(null)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 14);
+ QCOMPARE(o.actuals().count(), 1);
+ QVERIFY(qvariant_cast<QScriptValue>(o.actuals().at(0)).isNull());
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_QScriptValue(undefined)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 14);
+ QCOMPARE(o.actuals().count(), 1);
+ QVERIFY(qvariant_cast<QScriptValue>(o.actuals().at(0)).isUndefined());
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_QScriptValue(19)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 14);
+ QCOMPARE(o.actuals().count(), 1);
+ QVERIFY(qvariant_cast<QScriptValue>(o.actuals().at(0)).strictlyEquals(QScriptValue(engine, 19)));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_QScriptValue([19, 20])").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 14);
+ QCOMPARE(o.actuals().count(), 1);
+ QVERIFY(qvariant_cast<QScriptValue>(o.actuals().at(0)).isArray());
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_intQScriptValue(4, null)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 15);
+ QCOMPARE(o.actuals().count(), 2);
+ QCOMPARE(o.actuals().at(0), QVariant(4));
+ QVERIFY(qvariant_cast<QScriptValue>(o.actuals().at(1)).isNull());
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_intQScriptValue(8, undefined)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 15);
+ QCOMPARE(o.actuals().count(), 2);
+ QCOMPARE(o.actuals().at(0), QVariant(8));
+ QVERIFY(qvariant_cast<QScriptValue>(o.actuals().at(1)).isUndefined());
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_intQScriptValue(3, 19)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 15);
+ QCOMPARE(o.actuals().count(), 2);
+ QCOMPARE(o.actuals().at(0), QVariant(3));
+ QVERIFY(qvariant_cast<QScriptValue>(o.actuals().at(1)).strictlyEquals(QScriptValue(engine, 19)));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_intQScriptValue(44, [19, 20])").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 15);
+ QCOMPARE(o.actuals().count(), 2);
+ QCOMPARE(o.actuals().at(0), QVariant(44));
+ QVERIFY(qvariant_cast<QScriptValue>(o.actuals().at(1)).isArray());
+
+ // Test overloads - QML will always invoke the *last* method
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_overload()").isError(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), -1);
+ QCOMPARE(o.actuals().count(), 0);
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_overload(10)").isError(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), -1);
+ QCOMPARE(o.actuals().count(), 0);
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_overload(10, 11)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 17);
+ QCOMPARE(o.actuals().count(), 2);
+ QCOMPARE(o.actuals().at(0), QVariant(10));
+ QCOMPARE(o.actuals().at(1), QVariant(11));
+}
+
+// QTBUG-5675
+void tst_qmlecmascript::listToVariant()
+{
+ QmlComponent component(&engine, TEST_FILE("listToVariant.qml"));
+
+ MyQmlContainer container;
+
+ QmlContext context(engine.rootContext());
+ context.addDefaultObject(&container);
+
+ QObject *object = component.create(&context);
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test"), QVariant::fromValue(container.children()));
+
+ delete object;
+}
+
+// QTBUG-7957
+void tst_qmlecmascript::multiEngineObject()
+{
+ MyQmlObject obj;
+ obj.setStringProperty("Howdy planet");
+
+ QmlEngine e1;
+ e1.rootContext()->setContextProperty("thing", &obj);
+ QmlComponent c1(&e1, TEST_FILE("multiEngineObject.qml"));
+
+ QmlEngine e2;
+ e2.rootContext()->setContextProperty("thing", &obj);
+ QmlComponent c2(&e2, TEST_FILE("multiEngineObject.qml"));
+
+ QObject *o1 = c1.create();
+ QObject *o2 = c2.create();
+
+ QCOMPARE(o1->property("test").toString(), QString("Howdy planet"));
+ QCOMPARE(o2->property("test").toString(), QString("Howdy planet"));
+
+ delete o2;
+ delete o1;
+}
+
+// Test that references to QObjects are cleanup when the object is destroyed
+void tst_qmlecmascript::deletedObject()
+{
+ QmlComponent component(&engine, TEST_FILE("deletedObject.qml"));
+
+ QObject *object = component.create();
+
+ QCOMPARE(object->property("test1").toBool(), true);
+ QCOMPARE(object->property("test2").toBool(), true);
+ QCOMPARE(object->property("test3").toBool(), true);
+ QEXPECT_FAIL("", "QTBUG-8077", Continue);
+ QCOMPARE(object->property("test4").toBool(), true);
+
+ delete object;
+}
+
+QTEST_MAIN(tst_qmlecmascript)
+
+#include "tst_qmlecmascript.moc"
diff --git a/tests/auto/declarative/qmlengine/qmlengine.pro b/tests/auto/declarative/qmlengine/qmlengine.pro
new file mode 100644
index 0000000..21d55a4
--- /dev/null
+++ b/tests/auto/declarative/qmlengine/qmlengine.pro
@@ -0,0 +1,8 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative webkit network
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlengine.cpp
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlengine/tst_qmlengine.cpp b/tests/auto/declarative/qmlengine/tst_qmlengine.cpp
new file mode 100644
index 0000000..af8e44f
--- /dev/null
+++ b/tests/auto/declarative/qmlengine/tst_qmlengine.cpp
@@ -0,0 +1,240 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qtest.h>
+#include <QmlEngine>
+#include <QmlContext>
+#include <QNetworkAccessManager>
+#include <QPointer>
+#include <QDir>
+#include <QDesktopServices>
+#include <QDebug>
+#include <QmlComponent>
+#include <QmlNetworkAccessManagerFactory>
+
+class tst_qmlengine : public QObject
+{
+ Q_OBJECT
+public:
+ tst_qmlengine() {}
+
+private slots:
+ void rootContext();
+ void networkAccessManager();
+ void baseUrl();
+ void contextForObject();
+ void offlineStoragePath();
+ void clearComponentCache();
+};
+
+void tst_qmlengine::rootContext()
+{
+ QmlEngine engine;
+
+ QVERIFY(engine.rootContext());
+
+ QCOMPARE(engine.rootContext()->engine(), &engine);
+ QVERIFY(engine.rootContext()->parentContext() == 0);
+}
+
+class NetworkAccessManagerFactory : public QmlNetworkAccessManagerFactory
+{
+public:
+ NetworkAccessManagerFactory() : manager(0) {}
+
+ QNetworkAccessManager *create(QObject *parent) {
+ manager = new QNetworkAccessManager(parent);
+ return manager;
+ }
+
+ QNetworkAccessManager *manager;
+};
+
+void tst_qmlengine::networkAccessManager()
+{
+ QmlEngine *engine = new QmlEngine;
+
+ // Test QmlEngine created manager
+ QPointer<QNetworkAccessManager> manager = engine->networkAccessManager();
+ QVERIFY(manager != 0);
+ delete engine;
+
+ // Test factory created manager
+ engine = new QmlEngine;
+ NetworkAccessManagerFactory factory;
+ engine->setNetworkAccessManagerFactory(&factory);
+ QVERIFY(engine->networkAccessManager() == factory.manager);
+ delete engine;
+}
+
+void tst_qmlengine::baseUrl()
+{
+ QmlEngine engine;
+
+ QUrl cwd = QUrl::fromLocalFile(QDir::currentPath() + QDir::separator());
+
+ QCOMPARE(engine.baseUrl(), cwd);
+ QCOMPARE(engine.rootContext()->resolvedUrl(QUrl("main.qml")), cwd.resolved(QUrl("main.qml")));
+
+ QDir dir = QDir::current();
+ dir.cdUp();
+ QVERIFY(dir != QDir::current());
+ QDir::setCurrent(dir.path());
+ QVERIFY(QDir::current() == dir);
+
+ QUrl cwd2 = QUrl::fromLocalFile(QDir::currentPath() + QDir::separator());
+ QCOMPARE(engine.baseUrl(), cwd2);
+ QCOMPARE(engine.rootContext()->resolvedUrl(QUrl("main.qml")), cwd2.resolved(QUrl("main.qml")));
+
+ engine.setBaseUrl(cwd);
+ QCOMPARE(engine.baseUrl(), cwd);
+ QCOMPARE(engine.rootContext()->resolvedUrl(QUrl("main.qml")), cwd.resolved(QUrl("main.qml")));
+}
+
+void tst_qmlengine::contextForObject()
+{
+ QmlEngine *engine = new QmlEngine;
+
+ // Test null-object
+ QVERIFY(QmlEngine::contextForObject(0) == 0);
+
+ // Test an object with no context
+ QObject object;
+ QVERIFY(QmlEngine::contextForObject(&object) == 0);
+
+ // Test setting null-object
+ QmlEngine::setContextForObject(0, engine->rootContext());
+
+ // Test setting null-context
+ QmlEngine::setContextForObject(&object, 0);
+
+ // Test setting context
+ QmlEngine::setContextForObject(&object, engine->rootContext());
+ QVERIFY(QmlEngine::contextForObject(&object) == engine->rootContext());
+
+ QmlContext context(engine->rootContext());
+
+ // Try changing context
+ QTest::ignoreMessage(QtWarningMsg, "QmlEngine::setContextForObject(): Object already has a QmlContext");
+ QmlEngine::setContextForObject(&object, &context);
+ QVERIFY(QmlEngine::contextForObject(&object) == engine->rootContext());
+
+ // Delete context
+ delete engine; engine = 0;
+ QVERIFY(QmlEngine::contextForObject(&object) == 0);
+}
+
+void tst_qmlengine::offlineStoragePath()
+{
+ // Without these set, QDesktopServices::storageLocation returns
+ // strings with extra "//" at the end. We set them to ignore this problem.
+ qApp->setApplicationName("tst_qmlengine");
+ qApp->setOrganizationName("Nokia");
+ qApp->setOrganizationDomain("nokia.com");
+
+ QmlEngine engine;
+
+ QDir dir(QDesktopServices::storageLocation(QDesktopServices::DataLocation));
+ dir.mkpath("QML");
+ dir.cd("QML");
+ dir.mkpath("OfflineStorage");
+ dir.cd("OfflineStorage");
+
+ QCOMPARE(QDir::fromNativeSeparators(engine.offlineStoragePath()), dir.path());
+
+ engine.setOfflineStoragePath(QDir::homePath());
+ QCOMPARE(engine.offlineStoragePath(), QDir::homePath());
+}
+
+void tst_qmlengine::clearComponentCache()
+{
+ QmlEngine engine;
+
+ // Create original qml file
+ {
+ QFile file("temp.qml");
+ QVERIFY(file.open(QIODevice::WriteOnly));
+ file.write("import Qt 4.6\nQtObject {\nproperty int test: 10\n}\n");
+ file.close();
+ }
+
+ // Test "test" property
+ {
+ QmlComponent component(&engine, "temp.qml");
+ QObject *obj = component.create();
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->property("test").toInt(), 10);
+ delete obj;
+ }
+
+ // Modify qml file
+ {
+ QFile file("temp.qml");
+ QVERIFY(file.open(QIODevice::WriteOnly));
+ file.write("import Qt 4.6\nQtObject {\nproperty int test: 11\n}\n");
+ file.close();
+ }
+
+ // Test cache hit
+ {
+ QmlComponent component(&engine, "temp.qml");
+ QObject *obj = component.create();
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->property("test").toInt(), 10);
+ delete obj;
+ }
+
+ // Clear cache
+ engine.clearComponentCache();
+
+ // Test cache refresh
+ {
+ QmlComponent component(&engine, "temp.qml");
+ QObject *obj = component.create();
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->property("test").toInt(), 11);
+ delete obj;
+ }
+}
+
+QTEST_MAIN(tst_qmlengine)
+
+#include "tst_qmlengine.moc"
diff --git a/tests/auto/declarative/qmlerror/qmlerror.pro b/tests/auto/declarative/qmlerror/qmlerror.pro
new file mode 100644
index 0000000..fa9b79e
--- /dev/null
+++ b/tests/auto/declarative/qmlerror/qmlerror.pro
@@ -0,0 +1,6 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+SOURCES += tst_qmlerror.cpp
+macx:CONFIG -= app_bundle
+
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlerror/test.txt b/tests/auto/declarative/qmlerror/test.txt
new file mode 100644
index 0000000..cdafd9e
--- /dev/null
+++ b/tests/auto/declarative/qmlerror/test.txt
@@ -0,0 +1,3 @@
+Line Content
+Line2 Content
+Line3 Content
diff --git a/tests/auto/declarative/qmlerror/tst_qmlerror.cpp b/tests/auto/declarative/qmlerror/tst_qmlerror.cpp
new file mode 100644
index 0000000..70fef1d
--- /dev/null
+++ b/tests/auto/declarative/qmlerror/tst_qmlerror.cpp
@@ -0,0 +1,242 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qtest.h>
+#include <QmlError>
+#include <QDebug>
+
+class tst_qmlerror : public QObject
+{
+ Q_OBJECT
+private slots:
+ void url();
+ void description();
+ void line();
+ void column();
+ void toString();
+
+ void copy();
+ void debug();
+};
+
+void tst_qmlerror::url()
+{
+ QmlError error;
+
+ QCOMPARE(error.url(), QUrl());
+
+ error.setUrl(QUrl("http://www.nokia.com/main.qml"));
+
+ QCOMPARE(error.url(), QUrl("http://www.nokia.com/main.qml"));
+
+ QmlError error2 = error;
+
+ QCOMPARE(error2.url(), QUrl("http://www.nokia.com/main.qml"));
+
+ error.setUrl(QUrl("http://qt.nokia.com/main.qml"));
+
+ QCOMPARE(error.url(), QUrl("http://qt.nokia.com/main.qml"));
+ QCOMPARE(error2.url(), QUrl("http://www.nokia.com/main.qml"));
+}
+
+void tst_qmlerror::description()
+{
+ QmlError error;
+
+ QCOMPARE(error.description(), QString());
+
+ error.setDescription("An Error");
+
+ QCOMPARE(error.description(), QString("An Error"));
+
+ QmlError error2 = error;
+
+ QCOMPARE(error2.description(), QString("An Error"));
+
+ error.setDescription("Another Error");
+
+ QCOMPARE(error.description(), QString("Another Error"));
+ QCOMPARE(error2.description(), QString("An Error"));
+}
+
+void tst_qmlerror::line()
+{
+ QmlError error;
+
+ QCOMPARE(error.line(), -1);
+
+ error.setLine(102);
+
+ QCOMPARE(error.line(), 102);
+
+ QmlError error2 = error;
+
+ QCOMPARE(error2.line(), 102);
+
+ error.setLine(4);
+
+ QCOMPARE(error.line(), 4);
+ QCOMPARE(error2.line(), 102);
+}
+
+void tst_qmlerror::column()
+{
+ QmlError error;
+
+ QCOMPARE(error.column(), -1);
+
+ error.setColumn(16);
+
+ QCOMPARE(error.column(), 16);
+
+ QmlError error2 = error;
+
+ QCOMPARE(error2.column(), 16);
+
+ error.setColumn(3);
+
+ QCOMPARE(error.column(), 3);
+ QCOMPARE(error2.column(), 16);
+}
+
+void tst_qmlerror::toString()
+{
+ {
+ QmlError error;
+ error.setUrl(QUrl("http://www.nokia.com/main.qml"));
+ error.setDescription("An Error");
+ error.setLine(92);
+ error.setColumn(13);
+
+ QCOMPARE(error.toString(), QString("http://www.nokia.com/main.qml:92:13: An Error"));
+ }
+
+ {
+ QmlError error;
+ error.setUrl(QUrl("http://www.nokia.com/main.qml"));
+ error.setDescription("An Error");
+ error.setLine(92);
+
+ QCOMPARE(error.toString(), QString("http://www.nokia.com/main.qml:92: An Error"));
+ }
+}
+
+void tst_qmlerror::copy()
+{
+ QmlError error;
+ error.setUrl(QUrl("http://www.nokia.com/main.qml"));
+ error.setDescription("An Error");
+ error.setLine(92);
+ error.setColumn(13);
+
+ QmlError error2(error);
+ QmlError error3;
+ error3 = error;
+
+ error.setUrl(QUrl("http://qt.nokia.com/main.qml"));
+ error.setDescription("Another Error");
+ error.setLine(2);
+ error.setColumn(33);
+
+ QCOMPARE(error.url(), QUrl("http://qt.nokia.com/main.qml"));
+ QCOMPARE(error.description(), QString("Another Error"));
+ QCOMPARE(error.line(), 2);
+ QCOMPARE(error.column(), 33);
+
+ QCOMPARE(error2.url(), QUrl("http://www.nokia.com/main.qml"));
+ QCOMPARE(error2.description(), QString("An Error"));
+ QCOMPARE(error2.line(), 92);
+ QCOMPARE(error2.column(), 13);
+
+ QCOMPARE(error3.url(), QUrl("http://www.nokia.com/main.qml"));
+ QCOMPARE(error3.description(), QString("An Error"));
+ QCOMPARE(error3.line(), 92);
+ QCOMPARE(error3.column(), 13);
+
+}
+
+void tst_qmlerror::debug()
+{
+ {
+ QmlError error;
+ error.setUrl(QUrl("http://www.nokia.com/main.qml"));
+ error.setDescription("An Error");
+ error.setLine(92);
+ error.setColumn(13);
+
+ QTest::ignoreMessage(QtWarningMsg, "http://www.nokia.com/main.qml:92:13: An Error ");
+ qWarning() << error;
+ }
+
+ {
+ QUrl url(QUrl::fromLocalFile(QString(SRCDIR) + "/").resolved(QUrl("test.txt")));
+ QmlError error;
+ error.setUrl(url);
+ error.setDescription("An Error");
+ error.setLine(2);
+ error.setColumn(5);
+
+ QString out = url.toString() + ":2:5: An Error \n Line2 Content \n ^ ";
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(out));
+
+ qWarning() << error;
+ }
+
+ {
+ QUrl url(QUrl::fromLocalFile(QString(SRCDIR) + "/").resolved(QUrl("foo.txt")));
+ QmlError error;
+ error.setUrl(url);
+ error.setDescription("An Error");
+ error.setLine(2);
+ error.setColumn(5);
+
+ QString out = url.toString() + ":2:5: An Error ";
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(out));
+
+ qWarning() << error;
+ }
+}
+
+
+
+QTEST_MAIN(tst_qmlerror)
+
+#include "tst_qmlerror.moc"
diff --git a/tests/auto/declarative/qmlfontloader/data/dummy.ttf b/tests/auto/declarative/qmlfontloader/data/dummy.ttf
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/auto/declarative/qmlfontloader/data/dummy.ttf
diff --git a/tests/auto/declarative/qmlfontloader/data/tarzeau_ocr_a.ttf b/tests/auto/declarative/qmlfontloader/data/tarzeau_ocr_a.ttf
new file mode 100644
index 0000000..cf93f96
--- /dev/null
+++ b/tests/auto/declarative/qmlfontloader/data/tarzeau_ocr_a.ttf
Binary files differ
diff --git a/tests/auto/declarative/qmlfontloader/qmlfontloader.pro b/tests/auto/declarative/qmlfontloader/qmlfontloader.pro
new file mode 100644
index 0000000..bc89639
--- /dev/null
+++ b/tests/auto/declarative/qmlfontloader/qmlfontloader.pro
@@ -0,0 +1,8 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative gui
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlfontloader.cpp
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlfontloader/tst_qmlfontloader.cpp b/tests/auto/declarative/qmlfontloader/tst_qmlfontloader.cpp
new file mode 100644
index 0000000..19372a0
--- /dev/null
+++ b/tests/auto/declarative/qmlfontloader/tst_qmlfontloader.cpp
@@ -0,0 +1,156 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <private/qmlfontloader_p.h>
+#include "../../../shared/util.h"
+
+class tst_qmlfontloader : public QObject
+
+{
+ Q_OBJECT
+public:
+ tst_qmlfontloader();
+
+private slots:
+ void noFont();
+ void namedFont();
+ void localFont();
+ void failLocalFont();
+ void webFont();
+ void failWebFont();
+
+private slots:
+
+private:
+ QmlEngine engine;
+};
+
+tst_qmlfontloader::tst_qmlfontloader()
+{
+}
+
+void tst_qmlfontloader::noFont()
+{
+ QString componentStr = "import Qt 4.6\nFontLoader { }";
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlFontLoader *fontObject = qobject_cast<QmlFontLoader*>(component.create());
+
+ QVERIFY(fontObject != 0);
+ QCOMPARE(fontObject->name(), QString(""));
+ QCOMPARE(fontObject->source(), QUrl(""));
+ QTRY_VERIFY(fontObject->status() == QmlFontLoader::Null);
+
+ delete fontObject;
+}
+
+void tst_qmlfontloader::namedFont()
+{
+ QString componentStr = "import Qt 4.6\nFontLoader { name: \"Helvetica\" }";
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlFontLoader *fontObject = qobject_cast<QmlFontLoader*>(component.create());
+
+ QVERIFY(fontObject != 0);
+ QCOMPARE(fontObject->source(), QUrl(""));
+ QCOMPARE(fontObject->name(), QString("Helvetica"));
+ QTRY_VERIFY(fontObject->status() == QmlFontLoader::Ready);
+}
+
+void tst_qmlfontloader::localFont()
+{
+ QString componentStr = "import Qt 4.6\nFontLoader { source: \"" SRCDIR "/data/tarzeau_ocr_a.ttf\" }";
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlFontLoader *fontObject = qobject_cast<QmlFontLoader*>(component.create());
+
+ QVERIFY(fontObject != 0);
+ QVERIFY(fontObject->source() != QUrl(""));
+ QTRY_COMPARE(fontObject->name(), QString("OCRA"));
+ QTRY_VERIFY(fontObject->status() == QmlFontLoader::Ready);
+}
+
+void tst_qmlfontloader::failLocalFont()
+{
+ QString componentStr = "import Qt 4.6\nFontLoader { source: \"" + QUrl::fromLocalFile(SRCDIR "/data/dummy.ttf").toString() + "\" }";
+ QTest::ignoreMessage(QtWarningMsg, QString("Cannot load font: QUrl( \"" + QUrl::fromLocalFile(SRCDIR "/data/dummy.ttf").toString() + "\" ) ").toUtf8().constData());
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlFontLoader *fontObject = qobject_cast<QmlFontLoader*>(component.create());
+
+ QVERIFY(fontObject != 0);
+ QVERIFY(fontObject->source() != QUrl(""));
+ QTRY_COMPARE(fontObject->name(), QString(""));
+ QTRY_VERIFY(fontObject->status() == QmlFontLoader::Error);
+}
+
+void tst_qmlfontloader::webFont()
+{
+ QString componentStr = "import Qt 4.6\nFontLoader { source: \"http://www.princexml.com/fonts/steffmann/Starburst.ttf\" }";
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlFontLoader *fontObject = qobject_cast<QmlFontLoader*>(component.create());
+
+ QVERIFY(fontObject != 0);
+ QVERIFY(fontObject->source() != QUrl(""));
+ QTRY_COMPARE(fontObject->name(), QString("Starburst"));
+ QTRY_VERIFY(fontObject->status() == QmlFontLoader::Ready);
+}
+
+void tst_qmlfontloader::failWebFont()
+{
+ QString componentStr = "import Qt 4.6\nFontLoader { source: \"http://wrong.address.com/Starburst.ttf\" }";
+ QTest::ignoreMessage(QtWarningMsg, "Cannot load font: QUrl( \"http://wrong.address.com/Starburst.ttf\" ) ");
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlFontLoader *fontObject = qobject_cast<QmlFontLoader*>(component.create());
+
+ QVERIFY(fontObject != 0);
+ QVERIFY(fontObject->source() != QUrl(""));
+ QTRY_COMPARE(fontObject->name(), QString(""));
+ QTRY_VERIFY(fontObject->status() == QmlFontLoader::Error);
+}
+
+QTEST_MAIN(tst_qmlfontloader)
+
+#include "tst_qmlfontloader.moc"
diff --git a/tests/auto/declarative/qmlgraphicsanchors/data/anchors.qml b/tests/auto/declarative/qmlgraphicsanchors/data/anchors.qml
new file mode 100644
index 0000000..b64d0b0
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsanchors/data/anchors.qml
@@ -0,0 +1,162 @@
+import Qt 4.6
+
+Rectangle {
+ color: "white"
+ width: 240
+ height: 320
+ Rectangle { id: masterRect; objectName: "masterRect"; x: 26; width: 96; height: 20; color: "red" }
+ Rectangle {
+ id: rect1; objectName: "rect1"
+ y: 20; width: 10; height: 10
+ anchors.left: masterRect.left
+ }
+ Rectangle {
+ id: rect2; objectName: "rect2"
+ y: 20; width: 10; height: 10
+ anchors.left: masterRect.right
+ }
+ Rectangle {
+ id: rect3; objectName: "rect3"
+ y: 20; width: 10; height: 10
+ anchors.left: masterRect.horizontalCenter
+ }
+ Rectangle {
+ id: rect4; objectName: "rect4"
+ y: 30; width: 10; height: 10
+ anchors.right: masterRect.left
+ }
+ Rectangle {
+ id: rect5; objectName: "rect5"
+ y: 30; width: 10; height: 10
+ anchors.right: masterRect.right
+ }
+ Rectangle {
+ id: rect6; objectName: "rect6"
+ y: 30; width: 10; height: 10
+ anchors.right: masterRect.horizontalCenter
+ }
+ Rectangle {
+ id: rect7; objectName: "rect7"
+ y: 50; width: 10; height: 10
+ anchors.left: parent.left
+ }
+ Rectangle {
+ id: rect8; objectName: "rect8"
+ y: 50; width: 10; height: 10
+ anchors.left: parent.right
+ }
+ Rectangle {
+ id: rect9; objectName: "rect9"
+ y: 50; width: 10; height: 10
+ anchors.left: parent.horizontalCenter
+ }
+ Rectangle {
+ id: rect10; objectName: "rect10"
+ y: 60; width: 10; height: 10
+ anchors.right: parent.left
+ }
+ Rectangle {
+ id: rect11; objectName: "rect11"
+ y: 60; width: 10; height: 10
+ anchors.right: parent.right
+ }
+ Rectangle {
+ id: rect12; objectName: "rect12"
+ y: 60; width: 10; height: 10
+ anchors.right: parent.horizontalCenter
+ }
+ Rectangle {
+ id: rect13; objectName: "rect13"
+ x: 200; width: 10; height: 10
+ anchors.top: masterRect.bottom
+ }
+ Rectangle {
+ id: rect14; objectName: "rect14"
+ width: 10; height: 10; color: "steelblue"
+ anchors.verticalCenter: parent.verticalCenter
+ }
+ Rectangle {
+ id: rect15; objectName: "rect15"
+ y: 200; height: 10
+ anchors.left: masterRect.left
+ anchors.right: masterRect.right
+ }
+ Rectangle {
+ id: rect16; objectName: "rect16"
+ y: 220; height: 10
+ anchors.left: masterRect.left
+ anchors.horizontalCenter: masterRect.right
+ }
+ Rectangle {
+ id: rect17; objectName: "rect17"
+ y: 240; height: 10
+ anchors.right: masterRect.right
+ anchors.horizontalCenter: masterRect.left
+ }
+ Rectangle {
+ id: rect18; objectName: "rect18"
+ x: 180; width: 10
+ anchors.top: masterRect.bottom
+ anchors.bottom: rect12.top
+ }
+ Rectangle {
+ id: rect19; objectName: "rect19"
+ y: 70; width: 10; height: 10
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ Rectangle {
+ id: rect20; objectName: "rect20"
+ y: 70; width: 10; height: 10
+ anchors.horizontalCenter: parent.right
+ }
+ Rectangle {
+ id: rect21; objectName: "rect21"
+ y: 70; width: 10; height: 10
+ anchors.horizontalCenter: parent.left
+ }
+ Rectangle {
+ id: rect22; objectName: "rect22"
+ width: 10; height: 10
+ anchors.centerIn: masterRect
+ }
+ Rectangle {
+ id: rect23; objectName: "rect23"
+ anchors.left: masterRect.left
+ anchors.leftMargin: 5
+ anchors.right: masterRect.right
+ anchors.rightMargin: 5
+ anchors.top: masterRect.top
+ anchors.topMargin: 5
+ anchors.bottom: masterRect.bottom
+ anchors.bottomMargin: 5
+ }
+ Rectangle {
+ id: rect24; objectName: "rect24"
+ width: 10; height: 10
+ anchors.horizontalCenter: masterRect.left
+ anchors.horizontalCenterOffset: width/2
+ }
+ Rectangle {
+ id: rect25; objectName: "rect25"
+ width: 10; height: 10
+ anchors.verticalCenter: rect12.top
+ anchors.verticalCenterOffset: height/2
+ }
+ Rectangle {
+ id: rect26; objectName: "rect26"
+ width: 10; height: 10
+ anchors.baseline: masterRect.top
+ anchors.baselineOffset: height/2
+ }
+ Text {
+ id: text1; objectName: "text1"
+ y: 200;
+ text: "Hello"
+ }
+ Text {
+ id: text2; objectName: "text2"
+ anchors.baseline: text1.baseline
+ anchors.left: text1.right
+ text: "World"
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicsanchors/data/centerin.qml b/tests/auto/declarative/qmlgraphicsanchors/data/centerin.qml
new file mode 100644
index 0000000..09b97f6
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsanchors/data/centerin.qml
@@ -0,0 +1,12 @@
+import Qt 4.6
+
+Rectangle {
+ width: 200; height: 200
+ Rectangle {
+ objectName: "centered"
+ width: 50; height: 50; color: "blue"
+ anchors.centerIn: parent;
+ anchors.verticalCenterOffset: 30
+ anchors.horizontalCenterOffset: 10
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicsanchors/data/crash1.qml b/tests/auto/declarative/qmlgraphicsanchors/data/crash1.qml
new file mode 100644
index 0000000..fd9dc55
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsanchors/data/crash1.qml
@@ -0,0 +1,11 @@
+import Qt 4.6
+
+Column {
+ Text {
+ text: "foo"
+ anchors.fill: parent
+ }
+ Text {
+ text: "bar"
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicsanchors/data/fill.qml b/tests/auto/declarative/qmlgraphicsanchors/data/fill.qml
new file mode 100644
index 0000000..902465c
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsanchors/data/fill.qml
@@ -0,0 +1,14 @@
+import Qt 4.6
+
+Rectangle {
+ width: 200; height: 200
+ Rectangle {
+ objectName: "filler"
+ width: 50; height: 50; color: "blue"
+ anchors.fill: parent;
+ anchors.leftMargin: 10;
+ anchors.rightMargin: 20;
+ anchors.topMargin: 30;
+ anchors.bottomMargin: 40;
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicsanchors/data/loop1.qml b/tests/auto/declarative/qmlgraphicsanchors/data/loop1.qml
new file mode 100644
index 0000000..a266612
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsanchors/data/loop1.qml
@@ -0,0 +1,8 @@
+import Qt 4.6
+
+Rectangle {
+ id: rect
+ width: 120; height: 200; color: "white"
+ Text { id: text1; anchors.right: text2.right; text: "Hello" }
+ Text { id: text2; anchors.right: text1.right; anchors.rightMargin: 10; text: "World" }
+}
diff --git a/tests/auto/declarative/qmlgraphicsanchors/data/loop2.qml b/tests/auto/declarative/qmlgraphicsanchors/data/loop2.qml
new file mode 100644
index 0000000..acb57cd
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsanchors/data/loop2.qml
@@ -0,0 +1,20 @@
+import Qt 4.6
+
+Rectangle {
+ id: container;
+ width: 600;
+ height: 600;
+
+ Image {
+ id: image1
+ source: "http://labs.trolltech.com/blogs/wp-content/uploads/2009/03/3311388091_ac2a257feb.jpg"
+ anchors.right: image2.left
+ }
+
+ Image {
+ id: image2
+ source: "http://labs.trolltech.com/blogs/wp-content/uploads/2009/03/oslo_groupphoto.jpg"
+ anchors.left: image1.right
+ anchors.leftMargin: 20
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicsanchors/data/margins.qml b/tests/auto/declarative/qmlgraphicsanchors/data/margins.qml
new file mode 100644
index 0000000..4a29e77
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsanchors/data/margins.qml
@@ -0,0 +1,13 @@
+import Qt 4.6
+
+Rectangle {
+ width: 200; height: 200
+ Rectangle {
+ objectName: "filler"
+ width: 50; height: 50; color: "blue"
+ anchors.fill: parent;
+ anchors.margins: 10
+ anchors.leftMargin: 5
+ anchors.topMargin: 6
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicsanchors/qmlgraphicsanchors.pro b/tests/auto/declarative/qmlgraphicsanchors/qmlgraphicsanchors.pro
new file mode 100644
index 0000000..755de3f
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsanchors/qmlgraphicsanchors.pro
@@ -0,0 +1,6 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+SOURCES += tst_qmlgraphicsanchors.cpp
+macx:CONFIG -= app_bundle
+
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlgraphicsanchors/tst_qmlgraphicsanchors.cpp b/tests/auto/declarative/qmlgraphicsanchors/tst_qmlgraphicsanchors.cpp
new file mode 100644
index 0000000..5850cf0
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsanchors/tst_qmlgraphicsanchors.cpp
@@ -0,0 +1,459 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QSignalSpy>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <QtDeclarative/qmlview.h>
+#include <private/qmlgraphicsrectangle_p.h>
+#include <private/qmlgraphicstext_p.h>
+#include <QtDeclarative/private/qmlgraphicsanchors_p_p.h>
+
+Q_DECLARE_METATYPE(QmlGraphicsAnchors::UsedAnchor)
+Q_DECLARE_METATYPE(QmlGraphicsAnchorLine::AnchorLine)
+
+
+class tst_anchors : public QObject
+{
+ Q_OBJECT
+public:
+ tst_anchors() {}
+
+ template<typename T>
+ T *findItem(QmlGraphicsItem *parent, const QString &id);
+
+private slots:
+ void basicAnchors();
+ void loops();
+ void illegalSets();
+ void illegalSets_data();
+ void reset();
+ void reset_data();
+ void resetConvenience();
+ void nullItem();
+ void nullItem_data();
+ void crash1();
+ void centerIn();
+ void fill();
+ void margins();
+};
+
+/*
+ Find an item with the specified id.
+*/
+template<typename T>
+T *tst_anchors::findItem(QmlGraphicsItem *parent, const QString &objectName)
+{
+ const QMetaObject &mo = T::staticMetaObject;
+ QList<QGraphicsItem *> children = parent->childItems();
+ for (int i = 0; i < children.count(); ++i) {
+ QmlGraphicsItem *item = qobject_cast<QmlGraphicsItem *>(children.at(i)->toGraphicsObject());
+ if (item) {
+ if (mo.cast(item) && (objectName.isEmpty() || item->objectName() == objectName)) {
+ return static_cast<T*>(item);
+ }
+ item = findItem<T>(item, objectName);
+ if (item)
+ return static_cast<T*>(item);
+ }
+ }
+
+ return 0;
+}
+
+void tst_anchors::basicAnchors()
+{
+ QmlView *view = new QmlView;
+ view->setUrl(QUrl::fromLocalFile(SRCDIR "/data/anchors.qml"));
+
+ view->execute();
+ qApp->processEvents();
+
+ //sibling horizontal
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect1"))->x(), 26.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect2"))->x(), 122.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect3"))->x(), 74.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect4"))->x(), 16.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect5"))->x(), 112.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect6"))->x(), 64.0);
+
+ //parent horizontal
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect7"))->x(), 0.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect8"))->x(), 240.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect9"))->x(), 120.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect10"))->x(), -10.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect11"))->x(), 230.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect12"))->x(), 110.0);
+
+ //vertical
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect13"))->y(), 20.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect14"))->y(), 155.0);
+
+ //stretch
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect15"))->x(), 26.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect15"))->width(), 96.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect16"))->x(), 26.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect16"))->width(), 192.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect17"))->x(), -70.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect17"))->width(), 192.0);
+
+ //vertical stretch
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect18"))->y(), 20.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect18"))->height(), 40.0);
+
+ //more parent horizontal
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect19"))->x(), 115.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect20"))->x(), 235.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect21"))->x(), -5.0);
+
+ //centerIn
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect22"))->x(), 69.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect22"))->y(), 5.0);
+
+ //margins
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect23"))->x(), 31.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect23"))->y(), 5.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect23"))->width(), 86.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect23"))->height(), 10.0);
+
+ // offsets
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect24"))->x(), 26.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect25"))->y(), 60.0);
+ QCOMPARE(findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("rect26"))->y(), 5.0);
+
+ //baseline
+ QmlGraphicsText *text1 = findItem<QmlGraphicsText>(view->root(), QLatin1String("text1"));
+ QmlGraphicsText *text2 = findItem<QmlGraphicsText>(view->root(), QLatin1String("text2"));
+ QCOMPARE(text1->y(), text2->y());
+
+ delete view;
+}
+
+// mostly testing that we don't crash
+void tst_anchors::loops()
+{
+ {
+ QmlView *view = new QmlView;
+
+ view->setUrl(QUrl::fromLocalFile(SRCDIR "/data/loop1.qml"));
+
+ QString expect = "QML Text (" + view->url().toString() + ":6:5" + ") Possible anchor loop detected on horizontal anchor.";
+ QTest::ignoreMessage(QtWarningMsg, expect.toLatin1());
+ QTest::ignoreMessage(QtWarningMsg, expect.toLatin1());
+ QTest::ignoreMessage(QtWarningMsg, expect.toLatin1());
+ view->execute();
+ qApp->processEvents();
+
+ delete view;
+ }
+
+ {
+ QmlView *view = new QmlView;
+
+ view->setUrl(QUrl::fromLocalFile(SRCDIR "/data/loop2.qml"));
+
+ QString expect = "QML Image (" + view->url().toString() + ":8:3" + ") Possible anchor loop detected on horizontal anchor.";
+ QTest::ignoreMessage(QtWarningMsg, expect.toLatin1());
+ view->execute();
+ qApp->processEvents();
+
+ delete view;
+ }
+}
+
+void tst_anchors::illegalSets()
+{
+ QFETCH(QString, qml);
+ QFETCH(QString, warning);
+
+ QTest::ignoreMessage(QtWarningMsg, warning.toLatin1());
+
+ QmlEngine engine;
+ QmlComponent component(&engine);
+ component.setData(QByteArray("import Qt 4.6\n" + qml.toUtf8()), QUrl::fromLocalFile(""));
+ if (!component.isReady())
+ qWarning() << "Test errors:" << component.errors();
+ QVERIFY(component.isReady());
+ QObject *o = component.create();
+ delete o;
+}
+
+void tst_anchors::illegalSets_data()
+{
+ QTest::addColumn<QString>("qml");
+ QTest::addColumn<QString>("warning");
+
+ QTest::newRow("H - too many anchors")
+ << "Rectangle { id: rect; Rectangle { anchors.left: rect.left; anchors.right: rect.right; anchors.horizontalCenter: rect.horizontalCenter } }"
+ << "QML Rectangle (file::2:23) Can't specify left, right, and hcenter anchors.";
+
+ foreach (const QString &side, QStringList() << "left" << "right") {
+ QTest::newRow("H - anchor to V")
+ << QString("Rectangle { Rectangle { anchors.%1: parent.top } }").arg(side)
+ << "QML Rectangle (file::2:13) Can't anchor a horizontal edge to a vertical edge.";
+
+ QTest::newRow("H - anchor to non parent/sibling")
+ << QString("Rectangle { Item { Rectangle { id: rect } } Rectangle { anchors.%1: rect.%1 } }").arg(side)
+ << "QML Rectangle (file::2:45) Can't anchor to an item that isn't a parent or sibling.";
+
+ QTest::newRow("H - anchor to self")
+ << QString("Rectangle { id: rect; anchors.%1: rect.%1 }").arg(side)
+ << "QML Rectangle (file::2:1) Can't anchor item to self.";
+ }
+
+
+ QTest::newRow("V - too many anchors")
+ << "Rectangle { id: rect; Rectangle { anchors.top: rect.top; anchors.bottom: rect.bottom; anchors.verticalCenter: rect.verticalCenter } }"
+ << "QML Rectangle (file::2:23) Can't specify top, bottom, and vcenter anchors.";
+
+ QTest::newRow("V - too many anchors with baseline")
+ << "Rectangle { Text { id: text1; text: \"Hello\" } Text { anchors.baseline: text1.baseline; anchors.top: text1.top; } }"
+ << "QML Text (file::2:47) Baseline anchor can't be used in conjunction with top, bottom, or vcenter anchors.";
+
+ foreach (const QString &side, QStringList() << "top" << "bottom" << "baseline") {
+
+ QTest::newRow("V - anchor to H")
+ << QString("Rectangle { Rectangle { anchors.%1: parent.left } }").arg(side)
+ << "QML Rectangle (file::2:13) Can't anchor a vertical edge to a horizontal edge.";
+
+ QTest::newRow("V - anchor to non parent/sibling")
+ << QString("Rectangle { Item { Rectangle { id: rect } } Rectangle { anchors.%1: rect.%1 } }").arg(side)
+ << "QML Rectangle (file::2:45) Can't anchor to an item that isn't a parent or sibling.";
+
+ QTest::newRow("V - anchor to self")
+ << QString("Rectangle { id: rect; anchors.%1: rect.%1 }").arg(side)
+ << "QML Rectangle (file::2:1) Can't anchor item to self.";
+ }
+
+
+ QTest::newRow("centerIn - anchor to non parent/sibling")
+ << "Rectangle { Item { Rectangle { id: rect } } Rectangle { anchors.centerIn: rect} }"
+ << "QML Rectangle (file::2:45) Can't anchor to an item that isn't a parent or sibling.";
+
+
+ QTest::newRow("fill - anchor to non parent/sibling")
+ << "Rectangle { Item { Rectangle { id: rect } } Rectangle { anchors.fill: rect} }"
+ << "QML Rectangle (file::2:45) Can't anchor to an item that isn't a parent or sibling.";
+}
+
+void tst_anchors::reset()
+{
+ QFETCH(QString, side);
+ QFETCH(QmlGraphicsAnchorLine::AnchorLine, anchorLine);
+ QFETCH(QmlGraphicsAnchors::UsedAnchor, usedAnchor);
+
+ QmlGraphicsItem *baseItem = new QmlGraphicsItem;
+
+ QmlGraphicsAnchorLine anchor;
+ anchor.item = baseItem;
+ anchor.anchorLine = anchorLine;
+
+ QmlGraphicsItem *item = new QmlGraphicsItem;
+
+ const QMetaObject *meta = item->anchors()->metaObject();
+ QMetaProperty p = meta->property(meta->indexOfProperty(side.toUtf8().constData()));
+
+ QVERIFY(p.write(item->anchors(), qVariantFromValue(anchor)));
+ QCOMPARE(item->anchors()->usedAnchors().testFlag(usedAnchor), true);
+
+ QVERIFY(p.reset(item->anchors()));
+ QCOMPARE(item->anchors()->usedAnchors().testFlag(usedAnchor), false);
+
+ delete item;
+ delete baseItem;
+}
+
+void tst_anchors::reset_data()
+{
+ QTest::addColumn<QString>("side");
+ QTest::addColumn<QmlGraphicsAnchorLine::AnchorLine>("anchorLine");
+ QTest::addColumn<QmlGraphicsAnchors::UsedAnchor>("usedAnchor");
+
+ QTest::newRow("left") << "left" << QmlGraphicsAnchorLine::Left << QmlGraphicsAnchors::HasLeftAnchor;
+ QTest::newRow("top") << "top" << QmlGraphicsAnchorLine::Top << QmlGraphicsAnchors::HasTopAnchor;
+ QTest::newRow("right") << "right" << QmlGraphicsAnchorLine::Right << QmlGraphicsAnchors::HasRightAnchor;
+ QTest::newRow("bottom") << "bottom" << QmlGraphicsAnchorLine::Bottom << QmlGraphicsAnchors::HasBottomAnchor;
+
+ QTest::newRow("hcenter") << "horizontalCenter" << QmlGraphicsAnchorLine::HCenter << QmlGraphicsAnchors::HasHCenterAnchor;
+ QTest::newRow("vcenter") << "verticalCenter" << QmlGraphicsAnchorLine::VCenter << QmlGraphicsAnchors::HasVCenterAnchor;
+ QTest::newRow("baseline") << "baseline" << QmlGraphicsAnchorLine::Baseline << QmlGraphicsAnchors::HasBaselineAnchor;
+}
+
+void tst_anchors::resetConvenience()
+{
+ QmlGraphicsItem *baseItem = new QmlGraphicsItem;
+ QmlGraphicsItem *item = new QmlGraphicsItem;
+
+ //fill
+ item->anchors()->setFill(baseItem);
+ QVERIFY(item->anchors()->fill() == baseItem);
+ item->anchors()->resetFill();
+ QVERIFY(item->anchors()->fill() == 0);
+
+ //centerIn
+ item->anchors()->setCenterIn(baseItem);
+ QVERIFY(item->anchors()->centerIn() == baseItem);
+ item->anchors()->resetCenterIn();
+ QVERIFY(item->anchors()->centerIn() == 0);
+
+ delete item;
+ delete baseItem;
+}
+
+void tst_anchors::nullItem()
+{
+ QFETCH(QString, side);
+
+ QmlGraphicsAnchorLine anchor;
+ QmlGraphicsItem *item = new QmlGraphicsItem;
+
+ const QMetaObject *meta = item->anchors()->metaObject();
+ QMetaProperty p = meta->property(meta->indexOfProperty(side.toUtf8().constData()));
+
+ QTest::ignoreMessage(QtWarningMsg, "QML Item (unknown location) Can't anchor to a null item.");
+ QVERIFY(p.write(item->anchors(), qVariantFromValue(anchor)));
+
+ delete item;
+}
+
+void tst_anchors::nullItem_data()
+{
+ QTest::addColumn<QString>("side");
+
+ QTest::newRow("left") << "left";
+ QTest::newRow("top") << "top";
+ QTest::newRow("right") << "right";
+ QTest::newRow("bottom") << "bottom";
+
+ QTest::newRow("hcenter") << "horizontalCenter";
+ QTest::newRow("vcenter") << "verticalCenter";
+ QTest::newRow("baseline") << "baseline";
+}
+
+void tst_anchors::crash1()
+{
+ QmlView *view = new QmlView;
+
+ view->setUrl(QUrl::fromLocalFile(SRCDIR "/data/crash1.qml"));
+
+ QString expect = "QML Text (" + view->url().toString() + ":4:5" + ") Possible anchor loop detected on fill.";
+ QTest::ignoreMessage(QtWarningMsg, expect.toLatin1());
+ QTest::ignoreMessage(QtWarningMsg, expect.toLatin1()); // XXX ideally, should be one message
+ view->execute();
+ qApp->processEvents();
+
+ delete view;
+}
+
+void tst_anchors::fill()
+{
+ QmlView *view = new QmlView;
+
+ view->setUrl(QUrl::fromLocalFile(SRCDIR "/data/fill.qml"));
+
+ view->execute();
+ qApp->processEvents();
+ QmlGraphicsRectangle* rect = findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("filler"));
+ QCOMPARE(rect->x(), 0.0 + 10.0);
+ QCOMPARE(rect->y(), 0.0 + 30.0);
+ QCOMPARE(rect->width(), 200.0 - 10.0 - 20.0);
+ QCOMPARE(rect->height(), 200.0 - 30.0 - 40.0);
+ //Alter Offsets (QTBUG-6631)
+ rect->anchors()->setLeftMargin(20.0);
+ rect->anchors()->setRightMargin(0.0);
+ rect->anchors()->setBottomMargin(0.0);
+ rect->anchors()->setTopMargin(10.0);
+ QCOMPARE(rect->x(), 0.0 + 20.0);
+ QCOMPARE(rect->y(), 0.0 + 10.0);
+ QCOMPARE(rect->width(), 200.0 - 20.0);
+ QCOMPARE(rect->height(), 200.0 - 10.0);
+
+ delete view;
+}
+
+void tst_anchors::centerIn()
+{
+ QmlView *view = new QmlView;
+
+ view->setUrl(QUrl::fromLocalFile(SRCDIR "/data/centerin.qml"));
+
+ view->execute();
+ qApp->processEvents();
+ QmlGraphicsRectangle* rect = findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("centered"));
+ QCOMPARE(rect->x(), 75.0 + 10);
+ QCOMPARE(rect->y(), 75.0 + 30);
+ //Alter Offsets (QTBUG-6631)
+ rect->anchors()->setHorizontalCenterOffset(-20.0);
+ rect->anchors()->setVerticalCenterOffset(-10.0);
+ QCOMPARE(rect->x(), 75.0 - 20.0);
+ QCOMPARE(rect->y(), 75.0 - 10.0);
+
+ delete view;
+}
+
+void tst_anchors::margins()
+{
+ QmlView *view = new QmlView;
+
+ view->setUrl(QUrl::fromLocalFile(SRCDIR "/data/margins.qml"));
+
+ view->execute();
+ qApp->processEvents();
+ QmlGraphicsRectangle* rect = findItem<QmlGraphicsRectangle>(view->root(), QLatin1String("filler"));
+ QCOMPARE(rect->x(), 5.0);
+ QCOMPARE(rect->y(), 6.0);
+ QCOMPARE(rect->width(), 200.0 - 5.0 - 10.0);
+ QCOMPARE(rect->height(), 200.0 - 6.0 - 10.0);
+
+ rect->anchors()->setTopMargin(0.0);
+ rect->anchors()->setMargins(20.0);
+
+ QCOMPARE(rect->x(), 5.0);
+ QCOMPARE(rect->y(), 20.0);
+ QCOMPARE(rect->width(), 200.0 - 5.0 - 20.0);
+ QCOMPARE(rect->height(), 200.0 - 20.0 - 20.0);
+
+ delete view;
+}
+
+QTEST_MAIN(tst_anchors)
+
+#include "tst_qmlgraphicsanchors.moc"
diff --git a/tests/auto/declarative/qmlgraphicsanimatedimage/data/colors.gif b/tests/auto/declarative/qmlgraphicsanimatedimage/data/colors.gif
new file mode 100644
index 0000000..1270bfa
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsanimatedimage/data/colors.gif
Binary files differ
diff --git a/tests/auto/declarative/qmlgraphicsanimatedimage/data/colors.qml b/tests/auto/declarative/qmlgraphicsanimatedimage/data/colors.qml
new file mode 100644
index 0000000..5bada34
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsanimatedimage/data/colors.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+AnimatedImage {
+ source: "colors.gif"
+}
diff --git a/tests/auto/declarative/qmlgraphicsanimatedimage/data/stickman.gif b/tests/auto/declarative/qmlgraphicsanimatedimage/data/stickman.gif
new file mode 100644
index 0000000..7c4cd18
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsanimatedimage/data/stickman.gif
Binary files differ
diff --git a/tests/auto/declarative/qmlgraphicsanimatedimage/data/stickman.qml b/tests/auto/declarative/qmlgraphicsanimatedimage/data/stickman.qml
new file mode 100644
index 0000000..a70db5d
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsanimatedimage/data/stickman.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+AnimatedImage {
+ source: "stickman.gif"
+}
diff --git a/tests/auto/declarative/qmlgraphicsanimatedimage/data/stickmanpause.qml b/tests/auto/declarative/qmlgraphicsanimatedimage/data/stickmanpause.qml
new file mode 100644
index 0000000..7ab17d4
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsanimatedimage/data/stickmanpause.qml
@@ -0,0 +1,7 @@
+import Qt 4.6
+
+AnimatedImage {
+ source: "stickman.gif"
+ paused: true
+ currentFrame: 2
+}
diff --git a/tests/auto/declarative/qmlgraphicsanimatedimage/data/stickmanstopped.qml b/tests/auto/declarative/qmlgraphicsanimatedimage/data/stickmanstopped.qml
new file mode 100644
index 0000000..53b0c3a
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsanimatedimage/data/stickmanstopped.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+AnimatedImage {
+ source: "stickman.gif"
+ playing: false
+}
diff --git a/tests/auto/declarative/qmlgraphicsanimatedimage/qmlgraphicsanimatedimage.pro b/tests/auto/declarative/qmlgraphicsanimatedimage/qmlgraphicsanimatedimage.pro
new file mode 100644
index 0000000..877dfab
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsanimatedimage/qmlgraphicsanimatedimage.pro
@@ -0,0 +1,7 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative network
+HEADERS += ../shared/testhttpserver.h
+SOURCES += tst_qmlgraphicsanimatedimage.cpp ../shared/testhttpserver.cpp
+macx:CONFIG -= app_bundle
+
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlgraphicsanimatedimage/tst_qmlgraphicsanimatedimage.cpp b/tests/auto/declarative/qmlgraphicsanimatedimage/tst_qmlgraphicsanimatedimage.cpp
new file mode 100644
index 0000000..bc10e30
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsanimatedimage/tst_qmlgraphicsanimatedimage.cpp
@@ -0,0 +1,191 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <QtDeclarative/qmlview.h>
+#include <private/qmlgraphicsrectangle_p.h>
+#include <private/qmlgraphicsimage_p.h>
+#include <private/qmlgraphicsanimatedimage_p.h>
+
+#include "../shared/testhttpserver.h"
+
+#define TRY_WAIT(expr) \
+ do { \
+ for (int ii = 0; ii < 6; ++ii) { \
+ if ((expr)) break; \
+ QTest::qWait(50); \
+ } \
+ QVERIFY((expr)); \
+ } while (false)
+
+
+class tst_animatedimage : public QObject
+{
+ Q_OBJECT
+public:
+ tst_animatedimage() {}
+
+private slots:
+ void play();
+ void pause();
+ void stopped();
+ void setFrame();
+ void frameCount();
+ void remote();
+ void remote_data();
+ void invalidSource();
+};
+
+void tst_animatedimage::play()
+{
+ QmlEngine engine;
+ QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/stickman.qml"));
+ QmlGraphicsAnimatedImage *anim = qobject_cast<QmlGraphicsAnimatedImage *>(component.create());
+ QVERIFY(anim);
+ QVERIFY(anim->isPlaying());
+
+ delete anim;
+}
+
+void tst_animatedimage::pause()
+{
+ QmlEngine engine;
+ QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/stickmanpause.qml"));
+ QmlGraphicsAnimatedImage *anim = qobject_cast<QmlGraphicsAnimatedImage *>(component.create());
+ QVERIFY(anim);
+ QVERIFY(anim->isPlaying());
+ QVERIFY(anim->isPaused());
+
+ delete anim;
+}
+
+void tst_animatedimage::stopped()
+{
+ QmlEngine engine;
+ QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/stickmanstopped.qml"));
+ QmlGraphicsAnimatedImage *anim = qobject_cast<QmlGraphicsAnimatedImage *>(component.create());
+ QVERIFY(anim);
+ QVERIFY(!anim->isPlaying());
+ QCOMPARE(anim->currentFrame(), 0);
+
+ delete anim;
+}
+
+void tst_animatedimage::setFrame()
+{
+ QmlEngine engine;
+ QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/stickmanpause.qml"));
+ QmlGraphicsAnimatedImage *anim = qobject_cast<QmlGraphicsAnimatedImage *>(component.create());
+ QVERIFY(anim);
+ QVERIFY(anim->isPlaying());
+ QCOMPARE(anim->currentFrame(), 2);
+
+ delete anim;
+}
+
+void tst_animatedimage::frameCount()
+{
+ QmlEngine engine;
+ QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/colors.qml"));
+ QmlGraphicsAnimatedImage *anim = qobject_cast<QmlGraphicsAnimatedImage *>(component.create());
+ QVERIFY(anim);
+ QVERIFY(anim->isPlaying());
+ QCOMPARE(anim->frameCount(), 3);
+
+ delete anim;
+}
+
+void tst_animatedimage::remote()
+{
+ QFETCH(QString, fileName);
+ QFETCH(bool, paused);
+
+ TestHTTPServer server(14445);
+ QVERIFY(server.isValid());
+ server.serveDirectory(SRCDIR "/data");
+
+ QmlEngine engine;
+ QmlComponent component(&engine, QUrl("http://127.0.0.1:14445/" + fileName));
+ TRY_WAIT(component.isReady());
+
+ QmlGraphicsAnimatedImage *anim = qobject_cast<QmlGraphicsAnimatedImage *>(component.create());
+ QVERIFY(anim);
+
+ TRY_WAIT(anim->isPlaying());
+ if (paused) {
+ TRY_WAIT(anim->isPaused());
+ QCOMPARE(anim->currentFrame(), 2);
+ }
+
+ delete anim;
+}
+
+void tst_animatedimage::remote_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<bool>("paused");
+
+ QTest::newRow("playing") << "stickman.qml" << false;
+ QTest::newRow("paused") << "stickmanpause.qml" << true;
+}
+
+void tst_animatedimage::invalidSource()
+{
+ QmlEngine engine;
+ QmlComponent component(&engine);
+ component.setData("import Qt 4.6\n AnimatedImage { source: \"no-such-file.gif\" }", QUrl::fromLocalFile(""));
+ QVERIFY(component.isReady());
+
+ QTest::ignoreMessage(QtWarningMsg, "Error Reading Animated Image File QUrl( \"file:no-such-file.gif\" ) ");
+
+ QmlGraphicsAnimatedImage *anim = qobject_cast<QmlGraphicsAnimatedImage *>(component.create());
+ QVERIFY(anim);
+
+ QVERIFY(!anim->isPlaying());
+ QVERIFY(!anim->isPaused());
+ QCOMPARE(anim->currentFrame(), 0);
+ QCOMPARE(anim->frameCount(), 0);
+}
+
+QTEST_MAIN(tst_animatedimage)
+
+#include "tst_qmlgraphicsanimatedimage.moc"
diff --git a/tests/auto/declarative/qmlgraphicsborderimage/data/colors-round.sci b/tests/auto/declarative/qmlgraphicsborderimage/data/colors-round.sci
new file mode 100644
index 0000000..5d2f49f
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsborderimage/data/colors-round.sci
@@ -0,0 +1,7 @@
+border.left:10
+border.top:20
+border.right:30
+border.bottom:40
+horizontalTileRule:Round
+verticalTileRule:Repeat
+source:colors.png
diff --git a/tests/auto/declarative/qmlgraphicsborderimage/data/colors.png b/tests/auto/declarative/qmlgraphicsborderimage/data/colors.png
new file mode 100644
index 0000000..dfb62f3
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsborderimage/data/colors.png
Binary files differ
diff --git a/tests/auto/declarative/qmlgraphicsborderimage/data/invalid.sci b/tests/auto/declarative/qmlgraphicsborderimage/data/invalid.sci
new file mode 100644
index 0000000..98c72c9
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsborderimage/data/invalid.sci
@@ -0,0 +1,7 @@
+border.left:10
+border.top:20
+border.down:30
+border.up:40
+horizontalTileRule:Roun
+verticalTileRule:Repea
+source:colors.png
diff --git a/tests/auto/declarative/qmlgraphicsborderimage/qmlgraphicsborderimage.pro b/tests/auto/declarative/qmlgraphicsborderimage/qmlgraphicsborderimage.pro
new file mode 100644
index 0000000..1f606e5
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsborderimage/qmlgraphicsborderimage.pro
@@ -0,0 +1,9 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative gui network
+macx:CONFIG -= app_bundle
+
+HEADERS += ../shared/testhttpserver.h
+SOURCES += tst_qmlgraphicsborderimage.cpp ../shared/testhttpserver.cpp
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlgraphicsborderimage/tst_qmlgraphicsborderimage.cpp b/tests/auto/declarative/qmlgraphicsborderimage/tst_qmlgraphicsborderimage.cpp
new file mode 100644
index 0000000..1ae0227
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsborderimage/tst_qmlgraphicsborderimage.cpp
@@ -0,0 +1,351 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QTextDocument>
+#include <QTcpServer>
+#include <QTcpSocket>
+#include <QDir>
+
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <private/qmlgraphicsborderimage_p.h>
+#include <private/qmlgraphicsimagebase_p.h>
+#include <private/qmlgraphicsscalegrid_p_p.h>
+#include <private/qmlgraphicsloader_p.h>
+#include <QtDeclarative/qmlcontext.h>
+
+#include "../shared/testhttpserver.h"
+
+
+#define SERVER_PORT 14445
+#define SERVER_ADDR "http://127.0.0.1:14445"
+
+#define TRY_WAIT(expr) \
+ do { \
+ for (int ii = 0; ii < 6; ++ii) { \
+ if ((expr)) break; \
+ QTest::qWait(50); \
+ } \
+ QVERIFY((expr)); \
+ } while (false)
+
+
+class tst_qmlgraphicsborderimage : public QObject
+
+{
+ Q_OBJECT
+public:
+ tst_qmlgraphicsborderimage();
+
+private slots:
+ void noSource();
+ void imageSource();
+ void imageSource_data();
+ void clearSource();
+ void resized();
+ void smooth();
+ void tileModes();
+ void sciSource();
+ void sciSource_data();
+ void invalidSciFile();
+ void pendingRemoteRequest();
+ void pendingRemoteRequest_data();
+
+private:
+ QmlEngine engine;
+};
+
+tst_qmlgraphicsborderimage::tst_qmlgraphicsborderimage()
+{
+}
+
+void tst_qmlgraphicsborderimage::noSource()
+{
+ QString componentStr = "import Qt 4.6\nBorderImage { source: \"\" }";
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsBorderImage *obj = qobject_cast<QmlGraphicsBorderImage*>(component.create());
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->source(), QUrl());
+ QCOMPARE(obj->width(), 0.);
+ QCOMPARE(obj->height(), 0.);
+ QCOMPARE(obj->horizontalTileMode(), QmlGraphicsBorderImage::Stretch);
+ QCOMPARE(obj->verticalTileMode(), QmlGraphicsBorderImage::Stretch);
+
+ delete obj;
+}
+
+void tst_qmlgraphicsborderimage::imageSource_data()
+{
+ QTest::addColumn<QString>("source");
+ QTest::addColumn<bool>("remote");
+ QTest::addColumn<QString>("error");
+
+ QTest::newRow("local") << QUrl::fromLocalFile(SRCDIR "/data/colors.png").toString() << false << "";
+ QTest::newRow("local not found") << QUrl::fromLocalFile(SRCDIR "/data/no-such-file.png").toString() << false
+ << "Cannot open QUrl( \"" + QUrl::fromLocalFile(SRCDIR "/data/no-such-file.png").toString() + "\" ) ";
+ QTest::newRow("remote") << SERVER_ADDR "/colors.png" << true << "";
+ QTest::newRow("remote not found") << SERVER_ADDR "/no-such-file.png" << true
+ << "\"Error downloading " SERVER_ADDR "/no-such-file.png - server replied: Not found\" ";
+}
+
+void tst_qmlgraphicsborderimage::imageSource()
+{
+ QFETCH(QString, source);
+ QFETCH(bool, remote);
+ QFETCH(QString, error);
+
+ TestHTTPServer *server = 0;
+ if (remote) {
+ server = new TestHTTPServer(SERVER_PORT);
+ QVERIFY(server->isValid());
+ server->serveDirectory(SRCDIR "/data");
+ }
+
+ if (!error.isEmpty())
+ QTest::ignoreMessage(QtWarningMsg, error.toUtf8());
+
+ QString componentStr = "import Qt 4.6\nBorderImage { source: \"" + source + "\" }";
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsBorderImage *obj = qobject_cast<QmlGraphicsBorderImage*>(component.create());
+ QVERIFY(obj != 0);
+
+ if (remote)
+ TRY_WAIT(obj->status() == QmlGraphicsBorderImage::Loading);
+
+ QCOMPARE(obj->source(), remote ? source : QUrl(source));
+
+ if (error.isEmpty()) {
+ TRY_WAIT(obj->status() == QmlGraphicsBorderImage::Ready);
+ QCOMPARE(obj->width(), 120.);
+ QCOMPARE(obj->height(), 120.);
+ QCOMPARE(obj->horizontalTileMode(), QmlGraphicsBorderImage::Stretch);
+ QCOMPARE(obj->verticalTileMode(), QmlGraphicsBorderImage::Stretch);
+ } else {
+ TRY_WAIT(obj->status() == QmlGraphicsBorderImage::Error);
+ }
+
+ delete obj;
+ delete server;
+}
+
+void tst_qmlgraphicsborderimage::clearSource()
+{
+ QString componentStr = "import Qt 4.6\nBorderImage { source: srcImage }";
+ QmlContext *ctxt = engine.rootContext();
+ ctxt->setContextProperty("srcImage", QUrl::fromLocalFile(SRCDIR "/data/colors.png"));
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsBorderImage *obj = qobject_cast<QmlGraphicsBorderImage*>(component.create());
+ QVERIFY(obj != 0);
+ QVERIFY(obj->status() == QmlGraphicsBorderImage::Ready);
+ QCOMPARE(obj->width(), 120.);
+ QCOMPARE(obj->height(), 120.);
+
+ ctxt->setContextProperty("srcImage", "");
+ QVERIFY(obj->source().isEmpty());
+ QVERIFY(obj->status() == QmlGraphicsBorderImage::Null);
+ QCOMPARE(obj->width(), 0.);
+ QCOMPARE(obj->height(), 0.);
+}
+
+void tst_qmlgraphicsborderimage::resized()
+{
+ QString componentStr = "import Qt 4.6\nBorderImage { source: \"" + QUrl::fromLocalFile(SRCDIR "/data/colors.png").toString() + "\"; width: 300; height: 300 }";
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsBorderImage *obj = qobject_cast<QmlGraphicsBorderImage*>(component.create());
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->width(), 300.);
+ QCOMPARE(obj->height(), 300.);
+ QCOMPARE(obj->horizontalTileMode(), QmlGraphicsBorderImage::Stretch);
+ QCOMPARE(obj->verticalTileMode(), QmlGraphicsBorderImage::Stretch);
+
+ delete obj;
+}
+
+void tst_qmlgraphicsborderimage::smooth()
+{
+ QString componentStr = "import Qt 4.6\nBorderImage { source: \"" SRCDIR "/data/colors.png\"; smooth: true; width: 300; height: 300 }";
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsBorderImage *obj = qobject_cast<QmlGraphicsBorderImage*>(component.create());
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->width(), 300.);
+ QCOMPARE(obj->height(), 300.);
+ QCOMPARE(obj->smooth(), true);
+ QCOMPARE(obj->horizontalTileMode(), QmlGraphicsBorderImage::Stretch);
+ QCOMPARE(obj->verticalTileMode(), QmlGraphicsBorderImage::Stretch);
+
+ delete obj;
+}
+
+void tst_qmlgraphicsborderimage::tileModes()
+{
+ {
+ QString componentStr = "import Qt 4.6\nBorderImage { source: \"" SRCDIR "/data/colors.png\"; width: 100; height: 300; horizontalTileMode: BorderImage.Repeat; verticalTileMode: BorderImage.Repeat }";
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsBorderImage *obj = qobject_cast<QmlGraphicsBorderImage*>(component.create());
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->width(), 100.);
+ QCOMPARE(obj->height(), 300.);
+ QCOMPARE(obj->horizontalTileMode(), QmlGraphicsBorderImage::Repeat);
+ QCOMPARE(obj->verticalTileMode(), QmlGraphicsBorderImage::Repeat);
+
+ delete obj;
+ }
+ {
+ QString componentStr = "import Qt 4.6\nBorderImage { source: \"" SRCDIR "/data/colors.png\"; width: 300; height: 150; horizontalTileMode: BorderImage.Round; verticalTileMode: BorderImage.Round }";
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsBorderImage *obj = qobject_cast<QmlGraphicsBorderImage*>(component.create());
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->width(), 300.);
+ QCOMPARE(obj->height(), 150.);
+ QCOMPARE(obj->horizontalTileMode(), QmlGraphicsBorderImage::Round);
+ QCOMPARE(obj->verticalTileMode(), QmlGraphicsBorderImage::Round);
+
+ delete obj;
+ }
+}
+
+void tst_qmlgraphicsborderimage::sciSource()
+{
+ QFETCH(QString, source);
+ QFETCH(bool, valid);
+
+ bool remote = source.startsWith("http");
+ TestHTTPServer *server = 0;
+ if (remote) {
+ server = new TestHTTPServer(SERVER_PORT);
+ QVERIFY(server->isValid());
+ server->serveDirectory(SRCDIR "/data");
+ }
+
+ QString componentStr = "import Qt 4.6\nBorderImage { source: \"" + source + "\"; width: 300; height: 300 }";
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsBorderImage *obj = qobject_cast<QmlGraphicsBorderImage*>(component.create());
+ QVERIFY(obj != 0);
+
+ if (remote)
+ TRY_WAIT(obj->status() == QmlGraphicsBorderImage::Loading);
+
+ QCOMPARE(obj->source(), remote ? source : QUrl(source));
+ QCOMPARE(obj->width(), 300.);
+ QCOMPARE(obj->height(), 300.);
+
+ if (valid) {
+ TRY_WAIT(obj->status() == QmlGraphicsBorderImage::Ready);
+ QCOMPARE(obj->border()->left(), 10);
+ QCOMPARE(obj->border()->top(), 20);
+ QCOMPARE(obj->border()->right(), 30);
+ QCOMPARE(obj->border()->bottom(), 40);
+ QCOMPARE(obj->horizontalTileMode(), QmlGraphicsBorderImage::Round);
+ QCOMPARE(obj->verticalTileMode(), QmlGraphicsBorderImage::Repeat);
+ } else {
+ TRY_WAIT(obj->status() == QmlGraphicsBorderImage::Error);
+ }
+
+ delete obj;
+ delete server;
+}
+
+void tst_qmlgraphicsborderimage::sciSource_data()
+{
+ QTest::addColumn<QString>("source");
+ QTest::addColumn<bool>("valid");
+
+ QTest::newRow("local") << QUrl::fromLocalFile(SRCDIR "/data/colors-round.sci").toString() << true;
+ QTest::newRow("local not found") << QUrl::fromLocalFile(SRCDIR "/data/no-such-file.sci").toString() << false;
+ QTest::newRow("remote") << SERVER_ADDR "/colors-round.sci" << true;
+ QTest::newRow("remote not found") << SERVER_ADDR "/no-such-file.sci" << false;
+}
+
+void tst_qmlgraphicsborderimage::invalidSciFile()
+{
+ QTest::ignoreMessage(QtWarningMsg, "Unknown tile rule specified. Using Stretch "); // for "Roun"
+ QTest::ignoreMessage(QtWarningMsg, "Unknown tile rule specified. Using Stretch "); // for "Repea"
+
+ QString componentStr = "import Qt 4.6\nBorderImage { source: \"" + QUrl::fromLocalFile(SRCDIR "/data/invalid.sci").toString() +"\"; width: 300; height: 300 }";
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsBorderImage *obj = qobject_cast<QmlGraphicsBorderImage*>(component.create());
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->width(), 300.);
+ QCOMPARE(obj->height(), 300.);
+ QCOMPARE(obj->status(), QmlGraphicsImageBase::Error);
+ QCOMPARE(obj->horizontalTileMode(), QmlGraphicsBorderImage::Stretch);
+ QCOMPARE(obj->verticalTileMode(), QmlGraphicsBorderImage::Stretch);
+
+ delete obj;
+}
+
+void tst_qmlgraphicsborderimage::pendingRemoteRequest()
+{
+ QFETCH(QString, source);
+
+ QString componentStr = "import Qt 4.6\nBorderImage { source: \"" + source + "\" }";
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsBorderImage *obj = qobject_cast<QmlGraphicsBorderImage*>(component.create());
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->status(), QmlGraphicsBorderImage::Loading);
+
+ // verify no crash
+ // This will cause a delayed "QThread: Destroyed while thread is still running" warning
+ delete obj;
+ QTest::qWait(50);
+}
+
+void tst_qmlgraphicsborderimage::pendingRemoteRequest_data()
+{
+ QTest::addColumn<QString>("source");
+
+ QTest::newRow("png file") << "http://no-such-qt-server-like-this/none.png";
+ QTest::newRow("sci file") << "http://no-such-qt-server-like-this/none.sci";
+}
+
+QTEST_MAIN(tst_qmlgraphicsborderimage)
+
+#include "tst_qmlgraphicsborderimage.moc"
diff --git a/tests/auto/declarative/qmlgraphicsflickable/data/flickable01.qml b/tests/auto/declarative/qmlgraphicsflickable/data/flickable01.qml
new file mode 100644
index 0000000..8a1843c
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsflickable/data/flickable01.qml
@@ -0,0 +1,4 @@
+import Qt 4.6
+
+Flickable {
+}
diff --git a/tests/auto/declarative/qmlgraphicsflickable/data/flickable02.qml b/tests/auto/declarative/qmlgraphicsflickable/data/flickable02.qml
new file mode 100644
index 0000000..3e08359
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsflickable/data/flickable02.qml
@@ -0,0 +1,14 @@
+import Qt 4.6
+
+Flickable {
+ width: 100; height: 100
+ viewportWidth: row.width; viewportHeight: row.height
+
+ Row {
+ id: row
+ Repeater {
+ model: 4
+ Rectangle { width: 200; height: 300; color: "blue" }
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicsflickable/data/flickable03.qml b/tests/auto/declarative/qmlgraphicsflickable/data/flickable03.qml
new file mode 100644
index 0000000..3ed173d
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsflickable/data/flickable03.qml
@@ -0,0 +1,14 @@
+import Qt 4.6
+
+Flickable {
+ width: 100; height: 100
+ viewportWidth: column.width; viewportHeight: column.height
+
+ Column {
+ id: column
+ Repeater {
+ model: 4
+ Rectangle { width: 200; height: 300; color: "blue" }
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicsflickable/data/flickable04.qml b/tests/auto/declarative/qmlgraphicsflickable/data/flickable04.qml
new file mode 100644
index 0000000..1425d85
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsflickable/data/flickable04.qml
@@ -0,0 +1,16 @@
+import Qt 4.6
+
+Flickable {
+ width: 100; height: 100
+ viewportWidth: column.width; viewportHeight: column.height
+ pressDelay: 200; overShoot: false; interactive: false
+ maximumFlickVelocity: 2000
+
+ Column {
+ id: column
+ Repeater {
+ model: 4
+ Rectangle { width: 200; height: 300; color: "blue" }
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicsflickable/qmlgraphicsflickable.pro b/tests/auto/declarative/qmlgraphicsflickable/qmlgraphicsflickable.pro
new file mode 100644
index 0000000..7c4c959
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsflickable/qmlgraphicsflickable.pro
@@ -0,0 +1,8 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative gui
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlgraphicsflickable.cpp
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlgraphicsflickable/tst_qmlgraphicsflickable.cpp b/tests/auto/declarative/qmlgraphicsflickable/tst_qmlgraphicsflickable.cpp
new file mode 100644
index 0000000..c0ffeb7
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsflickable/tst_qmlgraphicsflickable.cpp
@@ -0,0 +1,145 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <private/qmlgraphicsflickable_p.h>
+#include <private/qmlvaluetype_p.h>
+#include <math.h>
+
+class tst_qmlgraphicsflickable : public QObject
+{
+ Q_OBJECT
+public:
+ tst_qmlgraphicsflickable();
+
+private slots:
+ void create();
+ void horizontalViewportSize();
+ void verticalViewportSize();
+ void properties();
+
+private:
+ QmlEngine engine;
+};
+
+tst_qmlgraphicsflickable::tst_qmlgraphicsflickable()
+{
+}
+
+void tst_qmlgraphicsflickable::create()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/flickable01.qml"));
+ QmlGraphicsFlickable *obj = qobject_cast<QmlGraphicsFlickable*>(c.create());
+
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->isAtXBeginning(), true);
+ QCOMPARE(obj->isAtXEnd(), false);
+ QCOMPARE(obj->isAtYBeginning(), true);
+ QCOMPARE(obj->isAtYEnd(), false);
+ QCOMPARE(obj->viewportX(), 0.);
+ QCOMPARE(obj->viewportY(), 0.);
+
+ QCOMPARE(obj->horizontalVelocity(), 0.);
+ QCOMPARE(obj->verticalVelocity(), 0.);
+ QCOMPARE(obj->reportedVelocitySmoothing(), 100.);
+
+ QCOMPARE(obj->isInteractive(), true);
+ QCOMPARE(obj->overShoot(), true);
+ QCOMPARE(obj->pressDelay(), 0);
+ QCOMPARE(obj->maximumFlickVelocity(), 2000.);
+
+ delete obj;
+}
+
+void tst_qmlgraphicsflickable::horizontalViewportSize()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/flickable02.qml"));
+ QmlGraphicsFlickable *obj = qobject_cast<QmlGraphicsFlickable*>(c.create());
+
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->viewportWidth(), 800.);
+ QCOMPARE(obj->viewportHeight(), 300.);
+ QCOMPARE(obj->isAtXBeginning(), true);
+ QCOMPARE(obj->isAtXEnd(), false);
+ QCOMPARE(obj->isAtYBeginning(), true);
+ QCOMPARE(obj->isAtYEnd(), false);
+
+ delete obj;
+}
+
+void tst_qmlgraphicsflickable::verticalViewportSize()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/flickable03.qml"));
+ QmlGraphicsFlickable *obj = qobject_cast<QmlGraphicsFlickable*>(c.create());
+
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->viewportWidth(), 200.);
+ QCOMPARE(obj->viewportHeight(), 1200.);
+ QCOMPARE(obj->isAtXBeginning(), true);
+ QCOMPARE(obj->isAtXEnd(), false);
+ QCOMPARE(obj->isAtYBeginning(), true);
+ QCOMPARE(obj->isAtYEnd(), false);
+
+ delete obj;
+}
+
+void tst_qmlgraphicsflickable::properties()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/flickable04.qml"));
+ QmlGraphicsFlickable *obj = qobject_cast<QmlGraphicsFlickable*>(c.create());
+
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->isInteractive(), false);
+ QCOMPARE(obj->overShoot(), false);
+ QCOMPARE(obj->pressDelay(), 200);
+ QCOMPARE(obj->maximumFlickVelocity(), 2000.);
+
+ delete obj;
+}
+
+QTEST_MAIN(tst_qmlgraphicsflickable)
+
+#include "tst_qmlgraphicsflickable.moc"
diff --git a/tests/auto/declarative/qmlgraphicsflipable/data/test-flipable.qml b/tests/auto/declarative/qmlgraphicsflipable/data/test-flipable.qml
new file mode 100644
index 0000000..21d356d
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsflipable/data/test-flipable.qml
@@ -0,0 +1,9 @@
+import Qt 4.6
+
+Flipable {
+ id: flipable
+ width: 640; height: 480
+
+ front: Rectangle { anchors.fill: flipable }
+ back: Rectangle { anchors.fill: flipable }
+}
diff --git a/tests/auto/declarative/qmlgraphicsflipable/qmlgraphicsflipable.pro b/tests/auto/declarative/qmlgraphicsflipable/qmlgraphicsflipable.pro
new file mode 100644
index 0000000..b046086
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsflipable/qmlgraphicsflipable.pro
@@ -0,0 +1,8 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative gui
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlgraphicsflipable.cpp
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlgraphicsflipable/tst_qmlgraphicsflipable.cpp b/tests/auto/declarative/qmlgraphicsflipable/tst_qmlgraphicsflipable.cpp
new file mode 100644
index 0000000..e571e4e
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsflipable/tst_qmlgraphicsflipable.cpp
@@ -0,0 +1,113 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <private/qmlgraphicsflipable_p.h>
+#include <private/qmlvaluetype_p.h>
+#include <QFontMetrics>
+#include <private/qmlgraphicsrectangle_p.h>
+#include <math.h>
+
+class tst_qmlgraphicsflipable : public QObject
+{
+ Q_OBJECT
+public:
+ tst_qmlgraphicsflipable();
+
+private slots:
+ void create();
+ void checkFrontAndBack();
+ void setFrontAndBack();
+
+private:
+ QmlEngine engine;
+};
+
+tst_qmlgraphicsflipable::tst_qmlgraphicsflipable()
+{
+}
+
+void tst_qmlgraphicsflipable::create()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/test-flipable.qml"));
+ QmlGraphicsFlipable *obj = qobject_cast<QmlGraphicsFlipable*>(c.create());
+
+ QVERIFY(obj != 0);
+ delete obj;
+}
+
+void tst_qmlgraphicsflipable::checkFrontAndBack()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/test-flipable.qml"));
+ QmlGraphicsFlipable *obj = qobject_cast<QmlGraphicsFlipable*>(c.create());
+
+ QVERIFY(obj != 0);
+ QVERIFY(obj->front() != 0);
+ QVERIFY(obj->back() != 0);
+ delete obj;
+}
+
+void tst_qmlgraphicsflipable::setFrontAndBack()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/test-flipable.qml"));
+ QmlGraphicsFlipable *obj = qobject_cast<QmlGraphicsFlipable*>(c.create());
+
+ QVERIFY(obj != 0);
+ QVERIFY(obj->front() != 0);
+ QVERIFY(obj->back() != 0);
+
+ QString message = "QML Flipable (" + c.url().toString() + ":3:1) front is a write-once property";
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(message));
+ obj->setFront(new QmlGraphicsRectangle());
+
+ message = "QML Flipable (" + c.url().toString() + ":3:1) back is a write-once property";
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(message));
+ obj->setBack(new QmlGraphicsRectangle());
+ delete obj;
+}
+
+QTEST_MAIN(tst_qmlgraphicsflipable)
+
+#include "tst_qmlgraphicsflipable.moc"
diff --git a/tests/auto/declarative/qmlgraphicsgridview/data/gridview-initCurrent.qml b/tests/auto/declarative/qmlgraphicsgridview/data/gridview-initCurrent.qml
new file mode 100644
index 0000000..32833d2
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsgridview/data/gridview-initCurrent.qml
@@ -0,0 +1,51 @@
+import Qt 4.6
+
+Rectangle {
+ width: 240
+ height: 320
+ color: "#ffffff"
+ resources: [
+ Component {
+ id: myDelegate
+ Rectangle {
+ id: wrapper
+ objectName: "wrapper"
+ width: 80
+ height: 60
+ border.color: "blue"
+ Text {
+ text: index
+ }
+ Text {
+ x: 40
+ text: wrapper.x + ", " + wrapper.y
+ }
+ Text {
+ y: 20
+ id: textName
+ objectName: "textName"
+ text: name
+ }
+ Text {
+ y: 40
+ id: textNumber
+ objectName: "textNumber"
+ text: number
+ }
+ color: GridView.isCurrentItem ? "lightsteelblue" : "white"
+ }
+ }
+ ]
+ GridView {
+ id: grid
+ objectName: "grid"
+ focus: true
+ width: 240
+ height: 320
+ currentIndex: 5
+ cellWidth: 80
+ cellHeight: 60
+ delegate: myDelegate
+ model: testModel
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicsgridview/data/gridview.qml b/tests/auto/declarative/qmlgraphicsgridview/data/gridview.qml
new file mode 100644
index 0000000..344b4b5
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsgridview/data/gridview.qml
@@ -0,0 +1,50 @@
+import Qt 4.6
+
+Rectangle {
+ width: 240
+ height: 320
+ color: "#ffffff"
+ resources: [
+ Component {
+ id: myDelegate
+ Rectangle {
+ id: wrapper
+ objectName: "wrapper"
+ width: 80
+ height: 60
+ border.color: "blue"
+ Text {
+ text: index
+ }
+ Text {
+ x: 40
+ text: wrapper.x + ", " + wrapper.y
+ }
+ Text {
+ y: 20
+ id: textName
+ objectName: "textName"
+ text: name
+ }
+ Text {
+ y: 40
+ id: textNumber
+ objectName: "textNumber"
+ text: number
+ }
+ color: GridView.isCurrentItem ? "lightsteelblue" : "white"
+ }
+ }
+ ]
+ GridView {
+ id: grid
+ objectName: "grid"
+ width: 240
+ height: 320
+ cellWidth: 80
+ cellHeight: 60
+ flow: (testTopToBottom == false) ? "LeftToRight" : "TopToBottom"
+ model: testModel
+ delegate: myDelegate
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicsgridview/data/gridview2.qml b/tests/auto/declarative/qmlgraphicsgridview/data/gridview2.qml
new file mode 100644
index 0000000..62b5bd3
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsgridview/data/gridview2.qml
@@ -0,0 +1,26 @@
+import Qt 4.6
+
+GridView {
+ anchors.fill: parent
+ width: 320; height: 200
+ cellWidth: 100; cellHeight: 100; cacheBuffer: 200; focus: true
+ keyNavigationWraps: true; highlightFollowsCurrentItem: false
+
+ model: ListModel {
+ id: appModel
+ ListElement { lColor: "red" }
+ ListElement { lColor: "yellow" }
+ ListElement { lColor: "green" }
+ ListElement { lColor: "blue" }
+ }
+
+ delegate: Item {
+ width: 100; height: 100
+ Rectangle {
+ color: lColor; x: 4; y: 4
+ width: 92; height: 92
+ }
+ }
+
+ highlight: Rectangle { width: 100; height: 100; color: "black" }
+}
diff --git a/tests/auto/declarative/qmlgraphicsgridview/data/gridview3.qml b/tests/auto/declarative/qmlgraphicsgridview/data/gridview3.qml
new file mode 100644
index 0000000..b133d55
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsgridview/data/gridview3.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+GridView {
+ anchors.fill: parent
+ width: 320; height: 200
+}
diff --git a/tests/auto/declarative/qmlgraphicsgridview/qmlgraphicsgridview.pro b/tests/auto/declarative/qmlgraphicsgridview/qmlgraphicsgridview.pro
new file mode 100644
index 0000000..8eae8ae
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsgridview/qmlgraphicsgridview.pro
@@ -0,0 +1,8 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlgraphicsgridview.cpp
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlgraphicsgridview/tst_qmlgraphicsgridview.cpp b/tests/auto/declarative/qmlgraphicsgridview/tst_qmlgraphicsgridview.cpp
new file mode 100644
index 0000000..c157e62
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsgridview/tst_qmlgraphicsgridview.cpp
@@ -0,0 +1,989 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qmlengine.h>
+#include <qmlcomponent.h>
+#include <QtTest/QtTest>
+#include <private/qlistmodelinterface_p.h>
+#include <qmlview.h>
+#include <private/qmlgraphicsgridview_p.h>
+#include <private/qmlgraphicstext_p.h>
+#include <qmlcontext.h>
+#include <qmlexpression.h>
+
+class tst_QmlGraphicsGridView : public QObject
+{
+ Q_OBJECT
+public:
+ tst_QmlGraphicsGridView();
+
+private slots:
+ void items();
+ void changed();
+ void inserted();
+ void removed();
+ void moved();
+ void changeFlow();
+ void currentIndex();
+ void defaultValues();
+ void properties();
+ void positionViewAtIndex();
+
+private:
+ QmlView *createView(const QString &filename);
+ template<typename T>
+ T *findItem(QmlGraphicsItem *parent, const QString &id, int index=-1);
+ template<typename T>
+ QList<T*> findItems(QmlGraphicsItem *parent, const QString &objectName);
+ void dumpTree(QmlGraphicsItem *parent, int depth = 0);
+};
+
+class TestModel : public QAbstractListModel
+{
+public:
+ enum Roles { Name = Qt::UserRole+1, Number = Qt::UserRole+2 };
+
+ TestModel(QObject *parent=0) : QAbstractListModel(parent) {
+ QHash<int, QByteArray> roles;
+ roles[Name] = "name";
+ roles[Number] = "number";
+ setRoleNames(roles);
+ }
+
+ int rowCount(const QModelIndex &parent=QModelIndex()) const { return list.count(); }
+ QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const {
+ QVariant rv;
+ if (role == Name)
+ rv = list.at(index.row()).first;
+ else if (role == Number)
+ rv = list.at(index.row()).second;
+
+ return rv;
+ }
+
+ int count() const { return rowCount(); }
+ QString name(int index) const { return list.at(index).first; }
+ QString number(int index) const { return list.at(index).second; }
+
+ void addItem(const QString &name, const QString &number) {
+ emit beginInsertRows(QModelIndex(), list.count(), list.count());
+ list.append(QPair<QString,QString>(name, number));
+ emit endInsertRows();
+ }
+
+ void insertItem(int index, const QString &name, const QString &number) {
+ emit beginInsertRows(QModelIndex(), index, index);
+ list.insert(index, QPair<QString,QString>(name, number));
+ emit endInsertRows();
+ }
+
+ void removeItem(int index) {
+ emit beginRemoveRows(QModelIndex(), index, index);
+ list.removeAt(index);
+ emit endRemoveRows();
+ }
+
+ void moveItem(int from, int to) {
+ emit beginMoveRows(QModelIndex(), from, from, QModelIndex(), to);
+ list.move(from, to);
+ emit endMoveRows();
+ }
+
+ void modifyItem(int idx, const QString &name, const QString &number) {
+ list[idx] = QPair<QString,QString>(name, number);
+ emit dataChanged(index(idx,0), index(idx,0));
+ }
+
+private:
+ QList<QPair<QString,QString> > list;
+};
+
+tst_QmlGraphicsGridView::tst_QmlGraphicsGridView()
+{
+}
+
+void tst_QmlGraphicsGridView::items()
+{
+ QmlView *canvas = createView(SRCDIR "/data/gridview.qml");
+
+ TestModel model;
+ model.addItem("Fred", "12345");
+ model.addItem("John", "2345");
+ model.addItem("Bob", "54321");
+ model.addItem("Billy", "22345");
+ model.addItem("Sam", "2945");
+ model.addItem("Ben", "04321");
+ model.addItem("Jim", "0780");
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+ ctxt->setContextProperty("testTopToBottom", QVariant(false));
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsGridView *gridview = findItem<QmlGraphicsGridView>(canvas->root(), "grid");
+ QVERIFY(gridview != 0);
+
+ QmlGraphicsItem *viewport = gridview->viewport();
+ QVERIFY(viewport != 0);
+
+ QCOMPARE(gridview->count(), model.count());
+ QCOMPARE(viewport->childItems().count(), model.count()+1); // assumes all are visible, +1 for the (default) highlight item
+
+ for (int i = 0; i < model.count(); ++i) {
+ QmlGraphicsText *name = findItem<QmlGraphicsText>(viewport, "textName", i);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(i));
+ QmlGraphicsText *number = findItem<QmlGraphicsText>(viewport, "textNumber", i);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(i));
+ }
+
+ // set an empty model and confirm that items are destroyed
+ TestModel model2;
+ ctxt->setContextProperty("testModel", &model2);
+
+ int itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ QVERIFY(itemCount == 0);
+
+ delete canvas;
+}
+
+void tst_QmlGraphicsGridView::changed()
+{
+ QmlView *canvas = createView(SRCDIR "/data/gridview.qml");
+
+ TestModel model;
+ model.addItem("Fred", "12345");
+ model.addItem("John", "2345");
+ model.addItem("Bob", "54321");
+ model.addItem("Billy", "22345");
+ model.addItem("Sam", "2945");
+ model.addItem("Ben", "04321");
+ model.addItem("Jim", "0780");
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+ ctxt->setContextProperty("testTopToBottom", QVariant(false));
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsFlickable *gridview = findItem<QmlGraphicsFlickable>(canvas->root(), "grid");
+ QVERIFY(gridview != 0);
+
+ QmlGraphicsItem *viewport = gridview->viewport();
+ QVERIFY(viewport != 0);
+
+ model.modifyItem(1, "Will", "9876");
+ QmlGraphicsText *name = findItem<QmlGraphicsText>(viewport, "textName", 1);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(1));
+ QmlGraphicsText *number = findItem<QmlGraphicsText>(viewport, "textNumber", 1);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(1));
+
+ delete canvas;
+}
+
+void tst_QmlGraphicsGridView::inserted()
+{
+ QmlView *canvas = createView(SRCDIR "/data/gridview.qml");
+
+ TestModel model;
+ model.addItem("Fred", "12345");
+ model.addItem("John", "2345");
+ model.addItem("Bob", "54321");
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+ ctxt->setContextProperty("testTopToBottom", QVariant(false));
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsGridView *gridview = findItem<QmlGraphicsGridView>(canvas->root(), "grid");
+ QVERIFY(gridview != 0);
+
+ QmlGraphicsItem *viewport = gridview->viewport();
+ QVERIFY(viewport != 0);
+
+ model.insertItem(1, "Will", "9876");
+
+ // let transitions settle.
+ QTest::qWait(300);
+
+ QCOMPARE(viewport->childItems().count(), model.count()+1); // assumes all are visible, +1 for the (default) highlight item
+
+ QmlGraphicsText *name = findItem<QmlGraphicsText>(viewport, "textName", 1);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(1));
+ QmlGraphicsText *number = findItem<QmlGraphicsText>(viewport, "textNumber", 1);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(1));
+
+ // Confirm items positioned correctly
+ for (int i = 0; i < model.count(); ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ QCOMPARE(item->x(), (i%3)*80.0);
+ QCOMPARE(item->y(), (i/3)*60.0);
+ }
+
+ model.insertItem(0, "Foo", "1111"); // zero index, and current item
+
+ // let transitions settle.
+ QTest::qWait(300);
+
+ QCOMPARE(viewport->childItems().count(), model.count()+1); // assumes all are visible, +1 for the (default) highlight item
+
+ name = findItem<QmlGraphicsText>(viewport, "textName", 0);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(0));
+ number = findItem<QmlGraphicsText>(viewport, "textNumber", 0);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(0));
+
+ QCOMPARE(gridview->currentIndex(), 1);
+
+ // Confirm items positioned correctly
+ for (int i = 0; i < model.count(); ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ QVERIFY(item->x() == (i%3)*80);
+ QVERIFY(item->y() == (i/3)*60);
+ }
+
+ for (int i = model.count(); i < 30; ++i)
+ model.insertItem(i, "Hello", QString::number(i));
+ QTest::qWait(300);
+
+ gridview->setViewportY(120);
+ QTest::qWait(300);
+
+ // Insert item outside visible area
+ model.insertItem(1, "Hello", "1324");
+ QTest::qWait(300);
+
+ QVERIFY(gridview->viewportY() == 120);
+
+ delete canvas;
+}
+
+void tst_QmlGraphicsGridView::removed()
+{
+ QmlView *canvas = createView(SRCDIR "/data/gridview.qml");
+
+ TestModel model;
+ for (int i = 0; i < 40; i++)
+ model.addItem("Item" + QString::number(i), "");
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+ ctxt->setContextProperty("testTopToBottom", QVariant(false));
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsGridView *gridview = findItem<QmlGraphicsGridView>(canvas->root(), "grid");
+ QVERIFY(gridview != 0);
+
+ QmlGraphicsItem *viewport = gridview->viewport();
+ QVERIFY(viewport != 0);
+
+ model.removeItem(1);
+
+ // let transitions settle.
+ QTest::qWait(300);
+
+ QmlGraphicsText *name = findItem<QmlGraphicsText>(viewport, "textName", 1);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(1));
+ QmlGraphicsText *number = findItem<QmlGraphicsText>(viewport, "textNumber", 1);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(1));
+
+ // Confirm items positioned correctly
+ int itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QVERIFY(item->x() == (i%3)*80);
+ QVERIFY(item->y() == (i/3)*60);
+ }
+
+ // Remove first item (which is the current item);
+ model.removeItem(0);
+
+ // let transitions settle.
+ QTest::qWait(300);
+
+ name = findItem<QmlGraphicsText>(viewport, "textName", 0);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(0));
+ number = findItem<QmlGraphicsText>(viewport, "textNumber", 0);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(0));
+
+ // Confirm items positioned correctly
+ itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QVERIFY(item->x() == (i%3)*80);
+ QVERIFY(item->y() == (i/3)*60);
+ }
+
+ // Remove items not visible
+ model.removeItem(25);
+ // let transitions settle.
+ QTest::qWait(300);
+
+ // Confirm items positioned correctly
+ itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QVERIFY(item->x() == (i%3)*80);
+ QVERIFY(item->y() == (i/3)*60);
+ }
+
+ // Remove items before visible
+ gridview->setViewportY(120);
+ QTest::qWait(500);
+ gridview->setCurrentIndex(10);
+
+ // let transitions settle.
+ QTest::qWait(300);
+
+ // Setting currentIndex above shouldn't cause view to scroll
+ QCOMPARE(gridview->viewportY(), 120.0);
+
+ model.removeItem(1);
+
+ // let transitions settle.
+ QTest::qWait(300);
+
+ // Confirm items positioned correctly
+ for (int i = 6; i < 18; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QVERIFY(item->x() == (i%3)*80);
+ QVERIFY(item->y() == (i/3)*60);
+ }
+
+ // Remove currentIndex
+ QmlGraphicsItem *oldCurrent = gridview->currentItem();
+ model.removeItem(9);
+ QTest::qWait(500);
+
+ QCOMPARE(gridview->currentIndex(), 9);
+ QVERIFY(gridview->currentItem() != oldCurrent);
+
+ gridview->setViewportY(0);
+ // let transitions settle.
+ QTest::qWait(300);
+
+ // Confirm items positioned correctly
+ itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QVERIFY(item->x() == (i%3)*80);
+ QVERIFY(item->y() == (i/3)*60);
+ }
+
+ // remove item outside current view.
+ gridview->setCurrentIndex(32);
+ QTest::qWait(500);
+ gridview->setViewportY(240);
+
+ model.removeItem(30);
+ QVERIFY(gridview->currentIndex() == 31);
+
+ // remove current item beyond visible items.
+ gridview->setCurrentIndex(20);
+ QTest::qWait(500);
+ gridview->setViewportY(0);
+ model.removeItem(20);
+ QTest::qWait(500);
+
+ QCOMPARE(gridview->currentIndex(), 20);
+ QVERIFY(gridview->currentItem() != 0);
+
+ // remove item before current, but visible
+ gridview->setCurrentIndex(8);
+ QTest::qWait(500);
+ gridview->setViewportY(240);
+ oldCurrent = gridview->currentItem();
+ model.removeItem(6);
+ QTest::qWait(500);
+
+ QCOMPARE(gridview->currentIndex(), 7);
+ QVERIFY(gridview->currentItem() == oldCurrent);
+
+ delete canvas;
+}
+
+void tst_QmlGraphicsGridView::moved()
+{
+ QmlView *canvas = createView(SRCDIR "/data/gridview.qml");
+
+ TestModel model;
+ for (int i = 0; i < 30; i++)
+ model.addItem("Item" + QString::number(i), "");
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+ ctxt->setContextProperty("testTopToBottom", QVariant(false));
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsGridView *gridview = findItem<QmlGraphicsGridView>(canvas->root(), "grid");
+ QVERIFY(gridview != 0);
+
+ QmlGraphicsItem *viewport = gridview->viewport();
+ QVERIFY(viewport != 0);
+
+ model.moveItem(1, 8);
+
+ // let transitions settle.
+ QTest::qWait(300);
+
+ QmlGraphicsText *name = findItem<QmlGraphicsText>(viewport, "textName", 1);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(1));
+ QmlGraphicsText *number = findItem<QmlGraphicsText>(viewport, "textNumber", 1);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(1));
+
+ name = findItem<QmlGraphicsText>(viewport, "textName", 8);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(8));
+ number = findItem<QmlGraphicsText>(viewport, "textNumber", 8);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(8));
+
+ // Confirm items positioned correctly
+ int itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QVERIFY(item->x() == (i%3)*80);
+ QVERIFY(item->y() == (i/3)*60);
+ }
+
+ gridview->setViewportY(120);
+
+ // move outside visible area
+ model.moveItem(1, 25);
+
+ // let transitions settle.
+ QTest::qWait(300);
+
+ // Confirm items positioned correctly and indexes correct
+ itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count()-1;
+ for (int i = 6; i < model.count()-6 && i < itemCount+6; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QCOMPARE(item->x(), qreal((i%3)*80));
+ QCOMPARE(item->y(), qreal((i/3)*60));
+ name = findItem<QmlGraphicsText>(viewport, "textName", i);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(i));
+ number = findItem<QmlGraphicsText>(viewport, "textNumber", i);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(i));
+ }
+
+ // move from outside visible into visible
+ model.moveItem(28, 8);
+
+ // let transitions settle.
+ QTest::qWait(300);
+
+ // Confirm items positioned correctly and indexes correct
+ for (int i = 6; i < model.count()-6 && i < itemCount+6; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QVERIFY(item->x() == (i%3)*80);
+ QVERIFY(item->y() == (i/3)*60);
+ name = findItem<QmlGraphicsText>(viewport, "textName", i);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(i));
+ number = findItem<QmlGraphicsText>(viewport, "textNumber", i);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(i));
+ }
+
+ delete canvas;
+}
+
+void tst_QmlGraphicsGridView::currentIndex()
+{
+ TestModel model;
+ for (int i = 0; i < 30; i++)
+ model.addItem("Item" + QString::number(i), QString::number(i));
+
+ QmlView *canvas = new QmlView(0);
+ canvas->setFixedSize(240,320);
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+
+ QString filename(SRCDIR "/data/gridview-initCurrent.qml");
+ QFile file(filename);
+ file.open(QFile::ReadOnly);
+ QString qml = file.readAll();
+ canvas->setQml(qml, filename);
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsGridView *gridview = findItem<QmlGraphicsGridView>(canvas->root(), "grid");
+ QVERIFY(gridview != 0);
+
+ QmlGraphicsItem *viewport = gridview->viewport();
+ QVERIFY(viewport != 0);
+
+ QTest::qWait(500);
+
+ // current item should be third item
+ QCOMPARE(gridview->currentIndex(), 5);
+ QCOMPARE(gridview->currentItem(), findItem<QmlGraphicsItem>(viewport, "wrapper", 5));
+ QCOMPARE(gridview->currentItem()->y(), gridview->highlightItem()->y());
+
+ gridview->moveCurrentIndexRight();
+ QCOMPARE(gridview->currentIndex(), 6);
+ gridview->moveCurrentIndexDown();
+ QCOMPARE(gridview->currentIndex(), 9);
+ gridview->moveCurrentIndexUp();
+ QCOMPARE(gridview->currentIndex(), 6);
+ gridview->moveCurrentIndexLeft();
+ QCOMPARE(gridview->currentIndex(), 5);
+
+ // no wrap
+ gridview->setCurrentIndex(0);
+ QCOMPARE(gridview->currentIndex(), 0);
+
+ gridview->moveCurrentIndexUp();
+ QCOMPARE(gridview->currentIndex(), 0);
+
+ gridview->moveCurrentIndexLeft();
+ QCOMPARE(gridview->currentIndex(), 0);
+
+ gridview->setCurrentIndex(model.count()-1);
+ QTest::qWait(500);
+ QCOMPARE(gridview->currentIndex(), model.count()-1);
+
+ gridview->moveCurrentIndexRight();
+ QCOMPARE(gridview->currentIndex(), model.count()-1);
+
+ gridview->moveCurrentIndexDown();
+ QCOMPARE(gridview->currentIndex(), model.count()-1);
+
+ // with wrap
+ gridview->setWrapEnabled(true);
+
+ gridview->setCurrentIndex(0);
+ QCOMPARE(gridview->currentIndex(), 0);
+ QTest::qWait(500);
+
+ gridview->moveCurrentIndexLeft();
+ QCOMPARE(gridview->currentIndex(), model.count()-1);
+
+ QTest::qWait(500);
+ QCOMPARE(gridview->viewportY(), 279.0);
+
+ gridview->moveCurrentIndexRight();
+ QCOMPARE(gridview->currentIndex(), 0);
+
+ QTest::qWait(500);
+ QCOMPARE(gridview->viewportY(), 0.0);
+
+ // Test keys
+ canvas->show();
+ canvas->setFocus();
+ qApp->processEvents();
+
+ QEvent wa(QEvent::WindowActivate);
+ QApplication::sendEvent(canvas, &wa);
+ QFocusEvent fe(QEvent::FocusIn);
+ QApplication::sendEvent(canvas, &fe);
+
+ QKeyEvent key(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier, "", false, 1);
+ QApplication::sendEvent(canvas, &key);
+ QVERIFY(key.isAccepted());
+ QCOMPARE(gridview->currentIndex(), 3);
+
+ key = QKeyEvent(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier, "", false, 1);
+ QApplication::sendEvent(canvas, &key);
+ QVERIFY(key.isAccepted());
+ QCOMPARE(gridview->currentIndex(), 0);
+
+ gridview->setFlow(QmlGraphicsGridView::TopToBottom);
+
+ key = QKeyEvent(QEvent::KeyPress, Qt::Key_Right, Qt::NoModifier, "", false, 1);
+ QApplication::sendEvent(canvas, &key);
+ QVERIFY(key.isAccepted());
+ QCOMPARE(gridview->currentIndex(), 5);
+
+ key = QKeyEvent(QEvent::KeyPress, Qt::Key_Left, Qt::NoModifier, "", false, 1);
+ QApplication::sendEvent(canvas, &key);
+ QVERIFY(key.isAccepted());
+ QCOMPARE(gridview->currentIndex(), 0);
+
+ key = QKeyEvent(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier, "", false, 1);
+ QApplication::sendEvent(canvas, &key);
+ QVERIFY(key.isAccepted());
+ QCOMPARE(gridview->currentIndex(), 1);
+
+ key = QKeyEvent(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier, "", false, 1);
+ QApplication::sendEvent(canvas, &key);
+ QVERIFY(key.isAccepted());
+ QCOMPARE(gridview->currentIndex(), 0);
+
+
+ // turn off auto highlight
+ gridview->setHighlightFollowsCurrentItem(false);
+ QVERIFY(gridview->highlightFollowsCurrentItem() == false);
+
+ QTest::qWait(500);
+ QVERIFY(gridview->highlightItem());
+ qreal hlPosX = gridview->highlightItem()->x();
+ qreal hlPosY = gridview->highlightItem()->y();
+
+ gridview->setCurrentIndex(5);
+ QTest::qWait(500);
+ QCOMPARE(gridview->highlightItem()->x(), hlPosX);
+ QCOMPARE(gridview->highlightItem()->y(), hlPosY);
+
+ delete canvas;
+}
+
+void tst_QmlGraphicsGridView::changeFlow()
+{
+ QmlView *canvas = createView(SRCDIR "/data/gridview.qml");
+
+ TestModel model;
+ for (int i = 0; i < 30; i++)
+ model.addItem("Item" + QString::number(i), QString::number(i));
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+ ctxt->setContextProperty("testTopToBottom", QVariant(false));
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsGridView *gridview = findItem<QmlGraphicsGridView>(canvas->root(), "grid");
+ QVERIFY(gridview != 0);
+
+ QmlGraphicsItem *viewport = gridview->viewport();
+ QVERIFY(viewport != 0);
+
+ // Confirm items positioned correctly and indexes correct
+ int itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QCOMPARE(item->x(), qreal((i%3)*80));
+ QCOMPARE(item->y(), qreal((i/3)*60));
+ QmlGraphicsText *name = findItem<QmlGraphicsText>(viewport, "textName", i);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(i));
+ QmlGraphicsText *number = findItem<QmlGraphicsText>(viewport, "textNumber", i);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(i));
+ }
+
+ ctxt->setContextProperty("testTopToBottom", QVariant(true));
+ QTest::qWait(500);
+
+ // Confirm items positioned correctly and indexes correct
+ itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QCOMPARE(item->x(), qreal((i/5)*80));
+ QCOMPARE(item->y(), qreal((i%5)*60));
+ QmlGraphicsText *name = findItem<QmlGraphicsText>(viewport, "textName", i);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(i));
+ QmlGraphicsText *number = findItem<QmlGraphicsText>(viewport, "textNumber", i);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(i));
+ }
+
+ delete canvas;
+}
+
+void tst_QmlGraphicsGridView::defaultValues()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/gridview3.qml"));
+ QmlGraphicsGridView *obj = qobject_cast<QmlGraphicsGridView*>(c.create());
+
+ QVERIFY(obj != 0);
+ QVERIFY(obj->model() == QVariant());
+ QVERIFY(obj->delegate() == 0);
+ QCOMPARE(obj->currentIndex(), -1);
+ QVERIFY(obj->currentItem() == 0);
+ QCOMPARE(obj->count(), 0);
+ QVERIFY(obj->highlight() == 0);
+ QVERIFY(obj->highlightItem() == 0);
+ QCOMPARE(obj->highlightFollowsCurrentItem(), true);
+ QVERIFY(obj->flow() == 0);
+ QCOMPARE(obj->isWrapEnabled(), false);
+ QCOMPARE(obj->cacheBuffer(), 0);
+ QCOMPARE(obj->cellWidth(), 100); //### Should 100 be the default?
+ QCOMPARE(obj->cellHeight(), 100);
+ delete obj;
+}
+
+void tst_QmlGraphicsGridView::properties()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/gridview2.qml"));
+ QmlGraphicsGridView *obj = qobject_cast<QmlGraphicsGridView*>(c.create());
+
+ QVERIFY(obj != 0);
+ QVERIFY(obj->model() != QVariant());
+ QVERIFY(obj->delegate() != 0);
+ QCOMPARE(obj->currentIndex(), 0);
+ QVERIFY(obj->currentItem() != 0);
+ QCOMPARE(obj->count(), 4);
+ QVERIFY(obj->highlight() != 0);
+ QVERIFY(obj->highlightItem() != 0);
+ QCOMPARE(obj->highlightFollowsCurrentItem(), false);
+ QVERIFY(obj->flow() == 0);
+ QCOMPARE(obj->isWrapEnabled(), true);
+ QCOMPARE(obj->cacheBuffer(), 200);
+ QCOMPARE(obj->cellWidth(), 100);
+ QCOMPARE(obj->cellHeight(), 100);
+ delete obj;
+}
+
+void tst_QmlGraphicsGridView::positionViewAtIndex()
+{
+ QmlView *canvas = createView(SRCDIR "/data/gridview.qml");
+
+ TestModel model;
+ for (int i = 0; i < 40; i++)
+ model.addItem("Item" + QString::number(i), "");
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+ ctxt->setContextProperty("testTopToBottom", QVariant(false));
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsGridView *gridview = findItem<QmlGraphicsGridView>(canvas->root(), "grid");
+ QVERIFY(gridview != 0);
+
+ QmlGraphicsItem *viewport = gridview->viewport();
+ QVERIFY(viewport != 0);
+
+ // Confirm items positioned correctly
+ int itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount-1; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QCOMPARE(item->x(), (i%3)*80.);
+ QCOMPARE(item->y(), (i/3)*60.);
+ }
+
+ // Position on a currently visible item
+ gridview->positionViewAtIndex(4);
+ QCOMPARE(gridview->viewportY(), 60.);
+
+ // Confirm items positioned correctly
+ itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 3; i < model.count() && i < itemCount-3-1; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QCOMPARE(item->x(), (i%3)*80.);
+ QCOMPARE(item->y(), (i/3)*60.);
+ }
+
+ // Position on an item beyond the visible items
+ gridview->positionViewAtIndex(21);
+ QCOMPARE(gridview->viewportY(), 420.);
+
+ // Confirm items positioned correctly
+ itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 22; i < model.count() && i < itemCount-22-1; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QCOMPARE(item->x(), (i%3)*80.);
+ QCOMPARE(item->y(), (i/3)*60.);
+ }
+
+ // Position on an item that would leave empty space if positioned at the top
+ gridview->positionViewAtIndex(31);
+ QCOMPARE(gridview->viewportY(), 520.);
+
+ // Confirm items positioned correctly
+ itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 24; i < model.count() && i < itemCount-24-1; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QCOMPARE(item->x(), (i%3)*80.);
+ QCOMPARE(item->y(), (i/3)*60.);
+ }
+
+ // Position at the beginning again
+ gridview->positionViewAtIndex(0);
+ QCOMPARE(gridview->viewportY(), 0.);
+
+ // Confirm items positioned correctly
+ itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount-1; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QCOMPARE(item->x(), (i%3)*80.);
+ QCOMPARE(item->y(), (i/3)*60.);
+ }
+
+ delete canvas;
+}
+
+QmlView *tst_QmlGraphicsGridView::createView(const QString &filename)
+{
+ QmlView *canvas = new QmlView(0);
+ canvas->setFixedSize(240,320);
+
+ QFile file(filename);
+ file.open(QFile::ReadOnly);
+ QString qml = file.readAll();
+ canvas->setQml(qml, filename);
+
+ return canvas;
+}
+
+/*
+ Find an item with the specified objectName. If index is supplied then the
+ item must also evaluate the {index} expression equal to index
+*/
+template<typename T>
+T *tst_QmlGraphicsGridView::findItem(QmlGraphicsItem *parent, const QString &objectName, int index)
+{
+ const QMetaObject &mo = T::staticMetaObject;
+ //qDebug() << parent->QGraphicsObject::children().count() << "children";
+ for (int i = 0; i < parent->childItems().count(); ++i) {
+ QmlGraphicsItem *item = qobject_cast<QmlGraphicsItem*>(parent->childItems().at(i));
+ if(!item)
+ continue;
+ //qDebug() << "try" << item;
+ if (mo.cast(item) && (objectName.isEmpty() || item->objectName() == objectName)) {
+ if (index != -1) {
+ QmlContext *context = QmlEngine::contextForObject(item);
+ if (context) {
+ if (context->contextProperty("index").toInt() == index) {
+ return static_cast<T*>(item);
+ }
+ }
+ } else {
+ return static_cast<T*>(item);
+ }
+ }
+ item = findItem<T>(item, objectName, index);
+ if (item)
+ return static_cast<T*>(item);
+ }
+
+ return 0;
+}
+
+template<typename T>
+QList<T*> tst_QmlGraphicsGridView::findItems(QmlGraphicsItem *parent, const QString &objectName)
+{
+ QList<T*> items;
+ const QMetaObject &mo = T::staticMetaObject;
+ //qDebug() << parent->QGraphicsObject::children().count() << "children";
+ for (int i = 0; i < parent->childItems().count(); ++i) {
+ QmlGraphicsItem *item = qobject_cast<QmlGraphicsItem*>(parent->childItems().at(i));
+ if(!item)
+ continue;
+ //qDebug() << "try" << item;
+ if (mo.cast(item) && (objectName.isEmpty() || item->objectName() == objectName)) {
+ items.append(static_cast<T*>(item));
+ //qDebug() << " found:" << item;
+ }
+ items += findItems<T>(item, objectName);
+ }
+
+ return items;
+}
+
+void tst_QmlGraphicsGridView::dumpTree(QmlGraphicsItem *parent, int depth)
+{
+ static QString padding(" ");
+ for (int i = 0; i < parent->childItems().count(); ++i) {
+ QmlGraphicsItem *item = qobject_cast<QmlGraphicsItem*>(parent->childItems().at(i));
+ if(!item)
+ continue;
+ QmlContext *context = QmlEngine::contextForObject(item);
+ qDebug() << padding.left(depth*2) << item << (context ? context->contextProperty("index").toInt() : -1);
+ dumpTree(item, depth+1);
+ }
+}
+
+
+QTEST_MAIN(tst_QmlGraphicsGridView)
+
+#include "tst_qmlgraphicsgridview.moc"
diff --git a/tests/auto/declarative/qmlgraphicsimage/data/colors.png b/tests/auto/declarative/qmlgraphicsimage/data/colors.png
new file mode 100644
index 0000000..dfb62f3
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsimage/data/colors.png
Binary files differ
diff --git a/tests/auto/declarative/qmlgraphicsimage/qmlgraphicsimage.pro b/tests/auto/declarative/qmlgraphicsimage/qmlgraphicsimage.pro
new file mode 100644
index 0000000..b5f7f83
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsimage/qmlgraphicsimage.pro
@@ -0,0 +1,9 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative gui network
+macx:CONFIG -= app_bundle
+
+HEADERS += ../shared/testhttpserver.h
+SOURCES += tst_qmlgraphicsimage.cpp ../shared/testhttpserver.cpp
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlgraphicsimage/tst_qmlgraphicsimage.cpp b/tests/auto/declarative/qmlgraphicsimage/tst_qmlgraphicsimage.cpp
new file mode 100644
index 0000000..79dc290
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsimage/tst_qmlgraphicsimage.cpp
@@ -0,0 +1,247 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QTextDocument>
+#include <QTcpServer>
+#include <QTcpSocket>
+#include <QDir>
+
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <private/qmlgraphicsimage_p.h>
+#include <private/qmlgraphicsimagebase_p.h>
+#include <private/qmlgraphicsloader_p.h>
+#include <QtDeclarative/qmlcontext.h>
+
+#include "../shared/testhttpserver.h"
+
+
+#define SERVER_PORT 14445
+#define SERVER_ADDR "http://127.0.0.1:14445"
+
+#define TRY_WAIT(expr) \
+ do { \
+ for (int ii = 0; ii < 6; ++ii) { \
+ if ((expr)) break; \
+ QTest::qWait(50); \
+ } \
+ QVERIFY((expr)); \
+ } while (false)
+
+
+class tst_qmlgraphicsimage : public QObject
+
+{
+ Q_OBJECT
+public:
+ tst_qmlgraphicsimage();
+
+private slots:
+ void noSource();
+ void imageSource();
+ void imageSource_data();
+ void clearSource();
+ void resized();
+ void smooth();
+ void pixmap();
+
+private:
+ QmlEngine engine;
+};
+
+tst_qmlgraphicsimage::tst_qmlgraphicsimage()
+{
+}
+
+void tst_qmlgraphicsimage::noSource()
+{
+ QString componentStr = "import Qt 4.6\nImage { source: \"\" }";
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsImage *obj = qobject_cast<QmlGraphicsImage*>(component.create());
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->source(), QUrl());
+ QVERIFY(obj->status() == QmlGraphicsImage::Null);
+ QCOMPARE(obj->width(), 0.);
+ QCOMPARE(obj->height(), 0.);
+ QCOMPARE(obj->fillMode(), QmlGraphicsImage::Stretch);
+ QCOMPARE(obj->progress(), 0.0);
+
+ delete obj;
+}
+
+void tst_qmlgraphicsimage::imageSource_data()
+{
+ QTest::addColumn<QString>("source");
+ QTest::addColumn<bool>("remote");
+ QTest::addColumn<QString>("error");
+
+ QTest::newRow("local") << QUrl::fromLocalFile(SRCDIR "/data/colors.png").toString() << false << "";
+ QTest::newRow("local not found") << QUrl::fromLocalFile(SRCDIR "/data/no-such-file.png").toString() << false
+ << "Cannot open QUrl( \"" + QUrl::fromLocalFile(SRCDIR "/data/no-such-file.png").toString() + "\" ) ";
+ QTest::newRow("remote") << SERVER_ADDR "/colors.png" << true << "";
+ QTest::newRow("remote not found") << SERVER_ADDR "/no-such-file.png" << true
+ << "\"Error downloading " SERVER_ADDR "/no-such-file.png - server replied: Not found\" ";
+}
+
+void tst_qmlgraphicsimage::imageSource()
+{
+ QFETCH(QString, source);
+ QFETCH(bool, remote);
+ QFETCH(QString, error);
+
+ TestHTTPServer server(SERVER_PORT);
+ if (remote) {
+ QVERIFY(server.isValid());
+ server.serveDirectory(SRCDIR "/data");
+ }
+
+ if (!error.isEmpty())
+ QTest::ignoreMessage(QtWarningMsg, error.toUtf8());
+
+ QString componentStr = "import Qt 4.6\nImage { source: \"" + source + "\" }";
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsImage *obj = qobject_cast<QmlGraphicsImage*>(component.create());
+ QVERIFY(obj != 0);
+
+ if (remote)
+ TRY_WAIT(obj->status() == QmlGraphicsImage::Loading);
+
+ QCOMPARE(obj->source(), remote ? source : QUrl(source));
+
+ if (error.isEmpty()) {
+ TRY_WAIT(obj->status() == QmlGraphicsImage::Ready);
+ QCOMPARE(obj->width(), 120.);
+ QCOMPARE(obj->height(), 120.);
+ QCOMPARE(obj->fillMode(), QmlGraphicsImage::Stretch);
+ QCOMPARE(obj->progress(), 1.0);
+ } else {
+ TRY_WAIT(obj->status() == QmlGraphicsImage::Error);
+ }
+
+ delete obj;
+}
+
+void tst_qmlgraphicsimage::clearSource()
+{
+ QString componentStr = "import Qt 4.6\nImage { source: srcImage }";
+ QmlContext *ctxt = engine.rootContext();
+ ctxt->setContextProperty("srcImage", QUrl::fromLocalFile(SRCDIR "/data/colors.png"));
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsImage *obj = qobject_cast<QmlGraphicsImage*>(component.create());
+ QVERIFY(obj != 0);
+ QVERIFY(obj->status() == QmlGraphicsImage::Ready);
+ QCOMPARE(obj->width(), 120.);
+ QCOMPARE(obj->height(), 120.);
+ QCOMPARE(obj->progress(), 1.0);
+
+ ctxt->setContextProperty("srcImage", "");
+ QVERIFY(obj->source().isEmpty());
+ QVERIFY(obj->status() == QmlGraphicsImage::Null);
+ QCOMPARE(obj->width(), 0.);
+ QCOMPARE(obj->height(), 0.);
+ QCOMPARE(obj->progress(), 0.0);
+}
+
+void tst_qmlgraphicsimage::resized()
+{
+ QString componentStr = "import Qt 4.6\nImage { source: \"" SRCDIR "/data/colors.png\"; width: 300; height: 300 }";
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsImage *obj = qobject_cast<QmlGraphicsImage*>(component.create());
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->width(), 300.);
+ QCOMPARE(obj->height(), 300.);
+ QCOMPARE(obj->fillMode(), QmlGraphicsImage::Stretch);
+
+ delete obj;
+}
+
+void tst_qmlgraphicsimage::smooth()
+{
+ QString componentStr = "import Qt 4.6\nImage { source: \"" SRCDIR "/data/colors.png\"; smooth: true; width: 300; height: 300 }";
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsImage *obj = qobject_cast<QmlGraphicsImage*>(component.create());
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->width(), 300.);
+ QCOMPARE(obj->height(), 300.);
+ QCOMPARE(obj->smooth(), true);
+ QCOMPARE(obj->fillMode(), QmlGraphicsImage::Stretch);
+
+ delete obj;
+}
+
+void tst_qmlgraphicsimage::pixmap()
+{
+ QString componentStr = "import Qt 4.6\nImage { pixmap: testPixmap }";
+
+ QPixmap pixmap;
+ QmlContext *ctxt = engine.rootContext();
+ ctxt->setContextProperty("testPixmap", pixmap);
+
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+
+ QmlGraphicsImage *obj = qobject_cast<QmlGraphicsImage*>(component.create());
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->source(), QUrl());
+ QVERIFY(obj->status() == QmlGraphicsImage::Null);
+ QCOMPARE(obj->width(), 0.);
+ QCOMPARE(obj->height(), 0.);
+ QCOMPARE(obj->fillMode(), QmlGraphicsImage::Stretch);
+ QCOMPARE(obj->progress(), 0.0);
+ QVERIFY(obj->pixmap().isNull());
+
+ pixmap = QPixmap(SRCDIR "/data/colors.png");
+ ctxt->setContextProperty("testPixmap", pixmap);
+ QCOMPARE(obj->width(), 120.);
+ QCOMPARE(obj->height(), 120.);
+ QVERIFY(obj->status() == QmlGraphicsImage::Ready);
+
+ delete obj;
+}
+
+QTEST_MAIN(tst_qmlgraphicsimage)
+
+#include "tst_qmlgraphicsimage.moc"
diff --git a/tests/auto/declarative/qmlgraphicsitem/data/keynavigation.qml b/tests/auto/declarative/qmlgraphicsitem/data/keynavigation.qml
new file mode 100644
index 0000000..9281a17
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsitem/data/keynavigation.qml
@@ -0,0 +1,39 @@
+import Qt 4.6
+
+Grid {
+ columns: 2
+ width: 100; height: 100
+ Rectangle {
+ id: item1
+ objectName: "item1"
+ focus: true
+ width: 50; height: 50
+ color: focus ? "red" : "lightgray"
+ KeyNavigation.right: item2
+ KeyNavigation.down: item3
+ }
+ Rectangle {
+ id: item2
+ objectName: "item2"
+ width: 50; height: 50
+ color: focus ? "red" : "lightgray"
+ KeyNavigation.left: item1
+ KeyNavigation.down: item4
+ }
+ Rectangle {
+ id: item3
+ objectName: "item3"
+ width: 50; height: 50
+ color: focus ? "red" : "lightgray"
+ KeyNavigation.right: item4
+ KeyNavigation.up: item1
+ }
+ Rectangle {
+ id: item4
+ objectName: "item4"
+ width: 50; height: 50
+ color: focus ? "red" : "lightgray"
+ KeyNavigation.left: item3
+ KeyNavigation.up: item2
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicsitem/data/keys.qml b/tests/auto/declarative/qmlgraphicsitem/data/keys.qml
new file mode 100644
index 0000000..f3c1f7b
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsitem/data/keys.qml
@@ -0,0 +1,18 @@
+import Qt 4.6
+
+Item {
+ focus: true
+ Keys.onPressed: keysTestObject.keyPress(event.key, event.text, event.modifiers)
+ Keys.onReleased: { keysTestObject.keyRelease(event.key, event.text, event.modifiers); event.accepted = true; }
+ Keys.onReturnPressed: keysTestObject.keyPress(event.key, "Return", event.modifiers)
+ Keys.onDigit0Pressed: keysTestObject.keyPress(event.key, event.text, event.modifiers)
+ Keys.onDigit9Pressed: { event.accepted = false; keysTestObject.keyPress(event.key, event.text, event.modifiers) }
+ Keys.forwardTo: [ item2 ]
+ Keys.enabled: enableKeyHanding
+
+ Item {
+ id: item2
+ Keys.onPressed: keysTestObject.forwardedKey(event.key)
+ Keys.onReleased: keysTestObject.forwardedKey(event.key)
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicsitem/qmlgraphicsitem.pro b/tests/auto/declarative/qmlgraphicsitem/qmlgraphicsitem.pro
new file mode 100644
index 0000000..ddabf9a
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsitem/qmlgraphicsitem.pro
@@ -0,0 +1,7 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative gui
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlgraphicsitem.cpp
+
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlgraphicsitem/tst_qmlgraphicsitem.cpp b/tests/auto/declarative/qmlgraphicsitem/tst_qmlgraphicsitem.cpp
new file mode 100644
index 0000000..c671dae
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsitem/tst_qmlgraphicsitem.cpp
@@ -0,0 +1,271 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <QtDeclarative/qmlcontext.h>
+#include <QtDeclarative/qmlview.h>
+#include <qmlgraphicsitem.h>
+
+class tst_QmlGraphicsItem : public QObject
+
+{
+ Q_OBJECT
+public:
+ tst_QmlGraphicsItem();
+
+private slots:
+ void keys();
+ void keyNavigation();
+
+private:
+ template<typename T>
+ T *findItem(QmlGraphicsItem *parent, const QString &objectName);
+};
+
+class KeysTestObject : public QObject
+{
+ Q_OBJECT
+public:
+ KeysTestObject() : mKey(0), mModifiers(0), mForwardedKey(0) {}
+
+ void reset() {
+ mKey = 0;
+ mText = QString();
+ mModifiers = 0;
+ mForwardedKey = 0;
+ }
+
+public slots:
+ void keyPress(int key, QString text, int modifiers) {
+ mKey = key;
+ mText = text;
+ mModifiers = modifiers;
+ }
+ void keyRelease(int key, QString text, int modifiers) {
+ mKey = key;
+ mText = text;
+ mModifiers = modifiers;
+ }
+ void forwardedKey(int key) {
+ mForwardedKey = key;
+ }
+
+public:
+ int mKey;
+ QString mText;
+ int mModifiers;
+ int mForwardedKey;
+
+private:
+};
+
+
+tst_QmlGraphicsItem::tst_QmlGraphicsItem()
+{
+}
+
+void tst_QmlGraphicsItem::keys()
+{
+ QmlView *canvas = new QmlView(0);
+ canvas->setFixedSize(240,320);
+
+ canvas->setUrl(QUrl::fromLocalFile(SRCDIR "/data/keys.qml"));
+
+ KeysTestObject *testObject = new KeysTestObject;
+ canvas->rootContext()->setContextProperty("keysTestObject", testObject);
+
+ canvas->rootContext()->setContextProperty("enableKeyHanding", QVariant(true));
+
+ canvas->execute();
+ canvas->show();
+ qApp->processEvents();
+
+ QEvent wa(QEvent::WindowActivate);
+ QApplication::sendEvent(canvas, &wa);
+ QFocusEvent fe(QEvent::FocusIn);
+ QApplication::sendEvent(canvas, &fe);
+
+ QKeyEvent key(QEvent::KeyPress, Qt::Key_A, Qt::NoModifier, "A", false, 1);
+ QApplication::sendEvent(canvas, &key);
+ QCOMPARE(testObject->mKey, int(Qt::Key_A));
+ QCOMPARE(testObject->mForwardedKey, int(Qt::Key_A));
+ QCOMPARE(testObject->mText, QLatin1String("A"));
+ QVERIFY(testObject->mModifiers == Qt::NoModifier);
+ QVERIFY(!key.isAccepted());
+
+ testObject->reset();
+
+ key = QKeyEvent(QEvent::KeyRelease, Qt::Key_A, Qt::ShiftModifier, "A", false, 1);
+ QApplication::sendEvent(canvas, &key);
+ QCOMPARE(testObject->mKey, int(Qt::Key_A));
+ QCOMPARE(testObject->mForwardedKey, int(Qt::Key_A));
+ QCOMPARE(testObject->mText, QLatin1String("A"));
+ QVERIFY(testObject->mModifiers == Qt::ShiftModifier);
+ QVERIFY(key.isAccepted());
+
+ testObject->reset();
+
+ key = QKeyEvent(QEvent::KeyPress, Qt::Key_Return, Qt::NoModifier, "", false, 1);
+ QApplication::sendEvent(canvas, &key);
+ QCOMPARE(testObject->mKey, int(Qt::Key_Return));
+ QCOMPARE(testObject->mForwardedKey, int(Qt::Key_Return));
+ QCOMPARE(testObject->mText, QLatin1String("Return"));
+ QVERIFY(testObject->mModifiers == Qt::NoModifier);
+ QVERIFY(key.isAccepted());
+
+ testObject->reset();
+
+ key = QKeyEvent(QEvent::KeyPress, Qt::Key_0, Qt::NoModifier, "0", false, 1);
+ QApplication::sendEvent(canvas, &key);
+ QCOMPARE(testObject->mKey, int(Qt::Key_0));
+ QCOMPARE(testObject->mForwardedKey, int(Qt::Key_0));
+ QCOMPARE(testObject->mText, QLatin1String("0"));
+ QVERIFY(testObject->mModifiers == Qt::NoModifier);
+ QVERIFY(key.isAccepted());
+
+ testObject->reset();
+
+ key = QKeyEvent(QEvent::KeyPress, Qt::Key_9, Qt::NoModifier, "9", false, 1);
+ QApplication::sendEvent(canvas, &key);
+ QCOMPARE(testObject->mKey, int(Qt::Key_9));
+ QCOMPARE(testObject->mForwardedKey, int(Qt::Key_9));
+ QCOMPARE(testObject->mText, QLatin1String("9"));
+ QVERIFY(testObject->mModifiers == Qt::NoModifier);
+ QVERIFY(!key.isAccepted());
+
+ testObject->reset();
+
+ canvas->rootContext()->setContextProperty("enableKeyHanding", QVariant(false));
+
+ key = QKeyEvent(QEvent::KeyPress, Qt::Key_Return, Qt::NoModifier, "", false, 1);
+ QApplication::sendEvent(canvas, &key);
+ QCOMPARE(testObject->mKey, 0);
+ QVERIFY(!key.isAccepted());
+
+ delete canvas;
+ delete testObject;
+}
+
+void tst_QmlGraphicsItem::keyNavigation()
+{
+ QmlView *canvas = new QmlView(0);
+ canvas->setFixedSize(240,320);
+
+ canvas->setUrl(QUrl::fromLocalFile(SRCDIR "/data/keynavigation.qml"));
+ canvas->execute();
+ canvas->show();
+ qApp->processEvents();
+
+ QEvent wa(QEvent::WindowActivate);
+ QApplication::sendEvent(canvas, &wa);
+ QFocusEvent fe(QEvent::FocusIn);
+ QApplication::sendEvent(canvas, &fe);
+
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(canvas->root(), "item1");
+ QVERIFY(item);
+ QVERIFY(item->hasFocus());
+
+ // right
+ QKeyEvent key(QEvent::KeyPress, Qt::Key_Right, Qt::NoModifier, "", false, 1);
+ QApplication::sendEvent(canvas, &key);
+ QVERIFY(key.isAccepted());
+
+ item = findItem<QmlGraphicsItem>(canvas->root(), "item2");
+ QVERIFY(item);
+ QVERIFY(item->hasFocus());
+
+ // down
+ key = QKeyEvent(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier, "", false, 1);
+ QApplication::sendEvent(canvas, &key);
+ QVERIFY(key.isAccepted());
+
+ item = findItem<QmlGraphicsItem>(canvas->root(), "item4");
+ QVERIFY(item);
+ QVERIFY(item->hasFocus());
+
+ // left
+ key = QKeyEvent(QEvent::KeyPress, Qt::Key_Left, Qt::NoModifier, "", false, 1);
+ QApplication::sendEvent(canvas, &key);
+ QVERIFY(key.isAccepted());
+
+ item = findItem<QmlGraphicsItem>(canvas->root(), "item3");
+ QVERIFY(item);
+ QVERIFY(item->hasFocus());
+
+ // up
+ key = QKeyEvent(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier, "", false, 1);
+ QApplication::sendEvent(canvas, &key);
+ QVERIFY(key.isAccepted());
+
+ item = findItem<QmlGraphicsItem>(canvas->root(), "item1");
+ QVERIFY(item);
+ QVERIFY(item->hasFocus());
+}
+
+template<typename T>
+T *tst_QmlGraphicsItem::findItem(QmlGraphicsItem *parent, const QString &objectName)
+{
+ if (!parent)
+ return 0;
+
+ const QMetaObject &mo = T::staticMetaObject;
+ //qDebug() << parent->QGraphicsObject::children().count() << "children";
+ for (int i = 0; i < parent->QGraphicsObject::children().count(); ++i) {
+ QmlGraphicsItem *item = qobject_cast<QmlGraphicsItem*>(parent->QGraphicsObject::children().at(i));
+ if(!item)
+ continue;
+ //qDebug() << "try" << item;
+ if (mo.cast(item) && (objectName.isEmpty() || item->objectName() == objectName))
+ return static_cast<T*>(item);
+ item = findItem<T>(item, objectName);
+ if (item)
+ return static_cast<T*>(item);
+ }
+
+ return 0;
+}
+
+
+
+QTEST_MAIN(tst_QmlGraphicsItem)
+
+#include "tst_qmlgraphicsitem.moc"
diff --git a/tests/auto/declarative/qmlgraphicslistview/data/itemlist.qml b/tests/auto/declarative/qmlgraphicslistview/data/itemlist.qml
new file mode 100644
index 0000000..e6b5c8f
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicslistview/data/itemlist.qml
@@ -0,0 +1,43 @@
+// This example demonstrates placing items in a view using
+// a VisualItemModel
+
+import Qt 4.6
+
+Rectangle {
+ color: "lightgray"
+ width: 240
+ height: 320
+
+ VisualItemModel {
+ id: itemModel
+ objectName: "itemModel"
+ Rectangle {
+ objectName: "item1"
+ height: view.height; width: view.width; color: "#FFFEF0"
+ Text { objectName: "text1"; text: "index: " + parent.VisualItemModel.index; font.bold: true; anchors.centerIn: parent }
+ }
+ Rectangle {
+ objectName: "item2"
+ height: view.height; width: view.width; color: "#F0FFF7"
+ Text { objectName: "text2"; text: "index: " + parent.VisualItemModel.index; font.bold: true; anchors.centerIn: parent }
+ }
+ Rectangle {
+ objectName: "item3"
+ height: view.height; width: view.width; color: "#F4F0FF"
+ Text { objectName: "text3"; text: "index: " + parent.VisualItemModel.index; font.bold: true; anchors.centerIn: parent }
+ }
+ }
+
+ ListView {
+ id: view
+ objectName: "view"
+ anchors.fill: parent
+ anchors.bottomMargin: 30
+ model: itemModel
+ preferredHighlightBegin: 0
+ preferredHighlightEnd: 0
+ highlightRangeMode: "StrictlyEnforceRange"
+ orientation: ListView.Horizontal
+ flickDeceleration: 2000
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicslistview/data/listview-enforcerange.qml b/tests/auto/declarative/qmlgraphicslistview/data/listview-enforcerange.qml
new file mode 100644
index 0000000..46fddae
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicslistview/data/listview-enforcerange.qml
@@ -0,0 +1,55 @@
+import Qt 4.6
+
+Rectangle {
+ width: 240
+ height: 320
+ color: "#ffffff"
+ Component {
+ id: myDelegate
+ Item {
+ id: wrapper
+ objectName: "wrapper"
+ height: 20
+ width: 240
+ Text {
+ text: index
+ }
+ Text {
+ x: 30
+ id: textName
+ objectName: "textName"
+ text: name
+ }
+ Text {
+ x: 120
+ id: textNumber
+ objectName: "textNumber"
+ text: number
+ }
+ Text {
+ x: 200
+ text: wrapper.y
+ }
+ }
+ }
+
+ Component {
+ id: myHighlight
+ Rectangle {
+ color: "lightsteelblue"
+ }
+ }
+
+ ListView {
+ id: list
+ objectName: "list"
+ width: 240
+ height: 320
+ model: testModel
+ delegate: myDelegate
+ highlight: myHighlight
+ preferredHighlightBegin: 100
+ preferredHighlightEnd: 100
+ highlightRangeMode: "StrictlyEnforceRange"
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicslistview/data/listview-initCurrent.qml b/tests/auto/declarative/qmlgraphicslistview/data/listview-initCurrent.qml
new file mode 100644
index 0000000..74f5ef4
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicslistview/data/listview-initCurrent.qml
@@ -0,0 +1,50 @@
+import Qt 4.6
+
+Rectangle {
+ width: 240
+ height: 320
+ color: "#ffffff"
+ resources: [
+ Component {
+ id: myDelegate
+ Rectangle {
+ id: wrapper
+ objectName: "wrapper"
+ height: 20
+ width: 240
+ Text {
+ text: index
+ }
+ Text {
+ x: 30
+ id: textName
+ objectName: "textName"
+ text: name
+ }
+ Text {
+ x: 120
+ id: textNumber
+ objectName: "textNumber"
+ text: number
+ }
+ Text {
+ x: 200
+ text: wrapper.y
+ }
+ color: ListView.isCurrentItem ? "lightsteelblue" : "white"
+ }
+ }
+ ]
+ ListView {
+ id: list
+ objectName: "list"
+ focus: true
+ currentIndex: 3
+ width: 240
+ height: 320
+ keyNavigationWraps: testWrap
+ delegate: myDelegate
+ highlightMoveSpeed: 1000
+ model: testModel
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicslistview/data/listview-sections.qml b/tests/auto/declarative/qmlgraphicslistview/data/listview-sections.qml
new file mode 100644
index 0000000..4b5bea6
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicslistview/data/listview-sections.qml
@@ -0,0 +1,59 @@
+import Qt 4.6
+
+Rectangle {
+ width: 240
+ height: 320
+ color: "#ffffff"
+ resources: [
+ Component {
+ id: myDelegate
+ Item {
+ id: wrapper
+ objectName: "wrapper"
+ height: ListView.prevSection != ListView.section ? 40 : 20;
+ width: 240
+ Rectangle {
+ y: wrapper.ListView.prevSection != wrapper.ListView.section ? 20 : 0
+ height: 20
+ width: parent.width
+ color: wrapper.ListView.isCurrentItem ? "lightsteelblue" : "white"
+ Text {
+ text: index
+ }
+ Text {
+ x: 30
+ id: textName
+ objectName: "textName"
+ text: name
+ }
+ Text {
+ x: 120
+ id: textNumber
+ objectName: "textNumber"
+ text: number
+ }
+ Text {
+ x: 200
+ text: wrapper.y
+ }
+ }
+ Rectangle {
+ color: "#99bb99"
+ height: wrapper.ListView.prevSection != wrapper.ListView.section ? 20 : 0
+ width: parent.width
+ visible: wrapper.ListView.prevSection != wrapper.ListView.section ? true : false
+ Text { text: wrapper.ListView.section }
+ }
+ }
+ }
+ ]
+ ListView {
+ id: list
+ objectName: "list"
+ width: 240
+ height: 320
+ model: testModel
+ delegate: myDelegate
+ section.property: "number"
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicslistview/data/listview.qml b/tests/auto/declarative/qmlgraphicslistview/data/listview.qml
new file mode 100644
index 0000000..99b3db6
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicslistview/data/listview.qml
@@ -0,0 +1,119 @@
+import Qt 4.6
+
+Rectangle {
+ width: 240
+ height: 320
+ color: "#ffffff"
+ function checkProperties() {
+ testObject.error = false;
+ if (list.model != testModel) {
+ console.log("model property incorrect");
+ testObject.error = true;
+ }
+ if (!testObject.animate && list.delegate != myDelegate) {
+ console.log("delegate property incorrect - expected myDelegate");
+ testObject.error = true;
+ }
+ if (testObject.animate && list.delegate != animatedDelegate) {
+ console.log("delegate property incorrect - expected animatedDelegate");
+ testObject.error = true;
+ }
+ if (testObject.invalidHighlight && list.highlight != invalidHl) {
+ console.log("highlight property incorrect - expected invalidHl");
+ testObject.error = true;
+ }
+ if (!testObject.invalidHighlight && list.highlight != myHighlight) {
+ console.log("highlight property incorrect - expected myHighlight");
+ testObject.error = true;
+ }
+ }
+ resources: [
+ Component {
+ id: myDelegate
+ Rectangle {
+ id: wrapper
+ objectName: "wrapper"
+ height: 20
+ width: 240
+ Text {
+ text: index
+ }
+ Text {
+ x: 30
+ id: textName
+ objectName: "textName"
+ text: name
+ }
+ Text {
+ x: 120
+ id: textNumber
+ objectName: "textNumber"
+ text: number
+ }
+ Text {
+ x: 200
+ text: wrapper.y
+ }
+ color: ListView.isCurrentItem ? "lightsteelblue" : "white"
+ }
+ },
+ Component {
+ id: animatedDelegate
+ Rectangle {
+ id: wrapper
+ objectName: "wrapper"
+ height: 20
+ width: 240
+ Text {
+ text: index
+ }
+ Text {
+ x: 30
+ id: textName
+ objectName: "textName"
+ text: name
+ }
+ Text {
+ x: 120
+ id: textNumber
+ objectName: "textNumber"
+ text: number
+ }
+ Text {
+ x: 200
+ text: wrapper.y
+ }
+ color: ListView.isCurrentItem ? "lightsteelblue" : "white"
+ ListView.onRemove: SequentialAnimation {
+ ScriptAction { script: console.log("Fix PropertyAction with attached properties") }
+/*
+ PropertyAction { target: wrapper; property: "ListView.delayRemove"; value: true }
+ NumberAnimation { target: wrapper; property: "scale"; to: 0; duration: 250; easing: "easeInOutQuad" }
+ PropertyAction { target: wrapper; property: "ListView.delayRemove"; value: false }
+*/
+ }
+ }
+ },
+ Component {
+ id: myHighlight
+ Rectangle { color: "green" }
+ },
+ Component {
+ id: invalidHl
+ EaseFollow {}
+ }
+ ]
+ ListView {
+ id: list
+ objectName: "list"
+ focus: true
+ width: 240
+ height: 320
+ model: testModel
+ delegate: testObject.animate ? animatedDelegate : myDelegate
+ highlight: testObject.invalidHighlight ? invalidHl : myHighlight
+ highlightMoveSpeed: 1000
+ highlightResizeSpeed: 1000
+ cacheBuffer: testObject.cacheBuffer
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicslistview/qmlgraphicslistview.pro b/tests/auto/declarative/qmlgraphicslistview/qmlgraphicslistview.pro
new file mode 100644
index 0000000..f00de39
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicslistview/qmlgraphicslistview.pro
@@ -0,0 +1,8 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlgraphicslistview.cpp
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlgraphicslistview/tst_qmlgraphicslistview.cpp b/tests/auto/declarative/qmlgraphicslistview/tst_qmlgraphicslistview.cpp
new file mode 100644
index 0000000..6f97030
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicslistview/tst_qmlgraphicslistview.cpp
@@ -0,0 +1,1378 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtTest/QtTest>
+#include <private/qlistmodelinterface_p.h>
+#include <qmlview.h>
+#include <private/qmlgraphicslistview_p.h>
+#include <private/qmlgraphicstext_p.h>
+#include <private/qmlgraphicsvisualitemmodel_p.h>
+#include <qmlcontext.h>
+#include <qmlexpression.h>
+
+class tst_QmlGraphicsListView : public QObject
+{
+ Q_OBJECT
+public:
+ tst_QmlGraphicsListView();
+
+private slots:
+ // Test both QListModelInterface and QAbstractItemModel model types
+ void qListModelInterface_items();
+ void qAbstractItemModel_items();
+
+ void qListModelInterface_changed();
+ void qAbstractItemModel_changed();
+
+ void qListModelInterface_inserted();
+ void qAbstractItemModel_inserted();
+
+ void qListModelInterface_removed();
+ void qAbstractItemModel_removed();
+
+ void qListModelInterface_moved();
+ void qAbstractItemModel_moved();
+
+ void qListModelInterface_clear();
+ void qAbstractItemModel_clear();
+
+ void itemList();
+ void currentIndex();
+ void enforceRange();
+ void spacing();
+ void sections();
+ void cacheBuffer();
+ void positionViewAtIndex();
+
+private:
+ template <class T> void items();
+ template <class T> void changed();
+ template <class T> void inserted();
+ template <class T> void removed(bool animated);
+ template <class T> void moved();
+ template <class T> void clear();
+ QmlView *createView(const QString &filename);
+ template<typename T>
+ T *findItem(QmlGraphicsItem *parent, const QString &id, int index=-1);
+ template<typename T>
+ QList<T*> findItems(QmlGraphicsItem *parent, const QString &objectName);
+ void dumpTree(QmlGraphicsItem *parent, int depth = 0);
+};
+
+class TestObject : public QObject
+{
+ Q_OBJECT
+
+ Q_PROPERTY(bool error READ error WRITE setError NOTIFY changedError)
+ Q_PROPERTY(bool animate READ animate NOTIFY changedAnim)
+ Q_PROPERTY(bool invalidHighlight READ invalidHighlight NOTIFY changedHl)
+ Q_PROPERTY(int cacheBuffer READ cacheBuffer NOTIFY changedCacheBuffer)
+
+public:
+ TestObject(QObject *parent = 0)
+ : QObject(parent), mError(true), mAnimate(false), mInvalidHighlight(false)
+ , mCacheBuffer(0) {}
+
+ bool error() const { return mError; }
+ void setError(bool err) { mError = err; emit changedError(); }
+
+ bool animate() const { return mAnimate; }
+ void setAnimate(bool anim) { mAnimate = anim; emit changedAnim(); }
+
+ bool invalidHighlight() const { return mInvalidHighlight; }
+ void setInvalidHighlight(bool invalid) { mInvalidHighlight = invalid; emit changedHl(); }
+
+ int cacheBuffer() const { return mCacheBuffer; }
+ void setCacheBuffer(int buffer) { mCacheBuffer = buffer; emit changedCacheBuffer(); }
+
+signals:
+ void changedError();
+ void changedAnim();
+ void changedHl();
+ void changedCacheBuffer();
+
+public:
+ bool mError;
+ bool mAnimate;
+ bool mInvalidHighlight;
+ int mCacheBuffer;
+};
+
+class TestModel : public QListModelInterface
+{
+ Q_OBJECT
+public:
+ TestModel(QObject *parent = 0) : QListModelInterface(parent) {}
+ ~TestModel() {}
+
+ enum Roles { Name, Number };
+
+ QString name(int index) const { return list.at(index).first; }
+ QString number(int index) const { return list.at(index).second; }
+
+ int count() const { return list.count(); }
+
+ QList<int> roles() const { return QList<int>() << Name << Number; }
+ QString toString(int role) const {
+ switch(role) {
+ case Name:
+ return "name";
+ case Number:
+ return "number";
+ default:
+ return "";
+ }
+ }
+
+ QVariant data(int index, int role) const
+ {
+ if (role==0)
+ return list.at(index).first;
+ if (role==1)
+ return list.at(index).second;
+ return QVariant();
+ }
+ QHash<int, QVariant> data(int index, const QList<int> &roles) const {
+ QHash<int,QVariant> returnHash;
+
+ for (int i = 0; i < roles.size(); ++i) {
+ int role = roles.at(i);
+ QVariant info;
+ switch(role) {
+ case Name:
+ info = list.at(index).first;
+ break;
+ case Number:
+ info = list.at(index).second;
+ break;
+ default:
+ break;
+ }
+ returnHash.insert(role, info);
+ }
+ return returnHash;
+ }
+
+ void addItem(const QString &name, const QString &number) {
+ list.append(QPair<QString,QString>(name, number));
+ emit itemsInserted(list.count()-1, 1);
+ }
+
+ void insertItem(int index, const QString &name, const QString &number) {
+ list.insert(index, QPair<QString,QString>(name, number));
+ emit itemsInserted(index, 1);
+ }
+
+ void removeItem(int index) {
+ list.removeAt(index);
+ emit itemsRemoved(index, 1);
+ }
+
+ void moveItem(int from, int to) {
+ list.move(from, to);
+ emit itemsMoved(from, to, 1);
+ }
+
+ void modifyItem(int index, const QString &name, const QString &number) {
+ list[index] = QPair<QString,QString>(name, number);
+ emit itemsChanged(index, 1, roles());
+ }
+
+ void clear() {
+ int count = list.count();
+ list.clear();
+ emit itemsRemoved(0, count);
+ }
+
+private:
+ QList<QPair<QString,QString> > list;
+};
+
+
+class TestModel2 : public QAbstractListModel
+{
+public:
+ enum Roles { Name = Qt::UserRole+1, Number = Qt::UserRole+2 };
+
+ TestModel2(QObject *parent=0) : QAbstractListModel(parent) {
+ QHash<int, QByteArray> roles;
+ roles[Name] = "name";
+ roles[Number] = "number";
+ setRoleNames(roles);
+ }
+
+ int rowCount(const QModelIndex &parent=QModelIndex()) const { return list.count(); }
+ QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const {
+ QVariant rv;
+ if (role == Name)
+ rv = list.at(index.row()).first;
+ else if (role == Number)
+ rv = list.at(index.row()).second;
+
+ return rv;
+ }
+
+ int count() const { return rowCount(); }
+ QString name(int index) const { return list.at(index).first; }
+ QString number(int index) const { return list.at(index).second; }
+
+ void addItem(const QString &name, const QString &number) {
+ emit beginInsertRows(QModelIndex(), list.count(), list.count());
+ list.append(QPair<QString,QString>(name, number));
+ emit endInsertRows();
+ }
+
+ void insertItem(int index, const QString &name, const QString &number) {
+ emit beginInsertRows(QModelIndex(), index, index);
+ list.insert(index, QPair<QString,QString>(name, number));
+ emit endInsertRows();
+ }
+
+ void removeItem(int index) {
+ emit beginRemoveRows(QModelIndex(), index, index);
+ list.removeAt(index);
+ emit endRemoveRows();
+ }
+
+ void moveItem(int from, int to) {
+ emit beginMoveRows(QModelIndex(), from, from, QModelIndex(), to);
+ list.move(from, to);
+ emit endMoveRows();
+ }
+
+ void modifyItem(int idx, const QString &name, const QString &number) {
+ list[idx] = QPair<QString,QString>(name, number);
+ emit dataChanged(index(idx,0), index(idx,0));
+ }
+
+ void clear() {
+ int count = list.count();
+ emit beginRemoveRows(QModelIndex(), 0, count-1);
+ list.clear();
+ emit endRemoveRows();
+ }
+
+private:
+ QList<QPair<QString,QString> > list;
+};
+
+tst_QmlGraphicsListView::tst_QmlGraphicsListView()
+{
+}
+
+template <class T>
+void tst_QmlGraphicsListView::items()
+{
+ QmlView *canvas = createView(SRCDIR "/data/listview.qml");
+
+ T model;
+ model.addItem("Fred", "12345");
+ model.addItem("John", "2345");
+ model.addItem("Bob", "54321");
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+
+ TestObject *testObject = new TestObject;
+ ctxt->setContextProperty("testObject", testObject);
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsListView *listview = findItem<QmlGraphicsListView>(canvas->root(), "list");
+ QVERIFY(listview != 0);
+
+ QmlGraphicsItem *viewport = listview->viewport();
+ QVERIFY(viewport != 0);
+
+ QMetaObject::invokeMethod(canvas->root(), "checkProperties");
+ QVERIFY(testObject->error() == false);
+
+ QVERIFY(listview->highlightItem() != 0);
+ QCOMPARE(listview->count(), model.count());
+ QCOMPARE(viewport->childItems().count(), model.count()+1); // assumes all are visible, +1 for the (default) highlight item
+
+ // current item should be first item
+ QCOMPARE(listview->currentItem(), findItem<QmlGraphicsItem>(viewport, "wrapper", 0));
+
+ for (int i = 0; i < model.count(); ++i) {
+ QmlGraphicsText *name = findItem<QmlGraphicsText>(viewport, "textName", i);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(i));
+ QmlGraphicsText *number = findItem<QmlGraphicsText>(viewport, "textNumber", i);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(i));
+ }
+
+ // switch to other delegate
+ testObject->setAnimate(true);
+ QMetaObject::invokeMethod(canvas->root(), "checkProperties");
+ QVERIFY(testObject->error() == false);
+ QVERIFY(listview->currentItem());
+
+ // set invalid highlight
+ testObject->setInvalidHighlight(true);
+ QMetaObject::invokeMethod(canvas->root(), "checkProperties");
+ QVERIFY(testObject->error() == false);
+ QVERIFY(listview->currentItem());
+ QVERIFY(listview->highlightItem() == 0);
+
+ // back to normal highlight
+ testObject->setInvalidHighlight(false);
+ QMetaObject::invokeMethod(canvas->root(), "checkProperties");
+ QVERIFY(testObject->error() == false);
+ QVERIFY(listview->currentItem());
+ QVERIFY(listview->highlightItem() != 0);
+
+ // set an empty model and confirm that items are destroyed
+ T model2;
+ ctxt->setContextProperty("testModel", &model2);
+
+ // Allow deleteLaters to process
+ QTest::qWait(500);
+
+ int itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ QVERIFY(itemCount == 0);
+
+ QCOMPARE(listview->highlightResizeSpeed(), 1000.0);
+ QCOMPARE(listview->highlightMoveSpeed(), 1000.0);
+
+ delete canvas;
+}
+
+template <class T>
+void tst_QmlGraphicsListView::changed()
+{
+ QmlView *canvas = createView(SRCDIR "/data/listview.qml");
+
+ T model;
+ model.addItem("Fred", "12345");
+ model.addItem("John", "2345");
+ model.addItem("Bob", "54321");
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+
+ TestObject *testObject = new TestObject;
+ ctxt->setContextProperty("testObject", testObject);
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsFlickable *listview = findItem<QmlGraphicsFlickable>(canvas->root(), "list");
+ QVERIFY(listview != 0);
+
+ QmlGraphicsItem *viewport = listview->viewport();
+ QVERIFY(viewport != 0);
+
+ model.modifyItem(1, "Will", "9876");
+ QmlGraphicsText *name = findItem<QmlGraphicsText>(viewport, "textName", 1);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(1));
+ QmlGraphicsText *number = findItem<QmlGraphicsText>(viewport, "textNumber", 1);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(1));
+
+ delete canvas;
+}
+
+template <class T>
+void tst_QmlGraphicsListView::inserted()
+{
+ QmlView *canvas = createView(SRCDIR "/data/listview.qml");
+
+ T model;
+ model.addItem("Fred", "12345");
+ model.addItem("John", "2345");
+ model.addItem("Bob", "54321");
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+
+ TestObject *testObject = new TestObject;
+ ctxt->setContextProperty("testObject", testObject);
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsListView *listview = findItem<QmlGraphicsListView>(canvas->root(), "list");
+ QVERIFY(listview != 0);
+
+ QmlGraphicsItem *viewport = listview->viewport();
+ QVERIFY(viewport != 0);
+
+ model.insertItem(1, "Will", "9876");
+
+ // let transitions settle.
+ QTest::qWait(500);
+
+ QCOMPARE(viewport->childItems().count(), model.count()+1); // assumes all are visible, +1 for the (default) highlight item
+
+ QmlGraphicsText *name = findItem<QmlGraphicsText>(viewport, "textName", 1);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(1));
+ QmlGraphicsText *number = findItem<QmlGraphicsText>(viewport, "textNumber", 1);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(1));
+
+ // Confirm items positioned correctly
+ for (int i = 0; i < model.count(); ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ QCOMPARE(item->y(), i*20.0);
+ }
+
+ model.insertItem(0, "Foo", "1111"); // zero index, and current item
+
+ // let transitions settle.
+ QTest::qWait(500);
+
+ QCOMPARE(viewport->childItems().count(), model.count()+1); // assumes all are visible, +1 for the (default) highlight item
+
+ name = findItem<QmlGraphicsText>(viewport, "textName", 0);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(0));
+ number = findItem<QmlGraphicsText>(viewport, "textNumber", 0);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(0));
+
+ QCOMPARE(listview->currentIndex(), 1);
+
+ // Confirm items positioned correctly
+ for (int i = 0; i < model.count(); ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ QCOMPARE(item->y(), i*20.0);
+ }
+
+ for (int i = model.count(); i < 30; ++i)
+ model.insertItem(i, "Hello", QString::number(i));
+ QTest::qWait(500);
+
+ listview->setViewportY(80);
+ QTest::qWait(500);
+
+ // Insert item outside visible area
+ model.insertItem(1, "Hello", "1324");
+ QTest::qWait(500);
+
+ QVERIFY(listview->viewportY() == 80);
+
+ // Confirm items positioned correctly
+ for (int i = 5; i < 5+15; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QCOMPARE(item->y(), i*20.0 - 20.0);
+ }
+
+ delete canvas;
+}
+
+template <class T>
+void tst_QmlGraphicsListView::removed(bool animated)
+{
+ QmlView *canvas = createView(SRCDIR "/data/listview.qml");
+
+ T model;
+ for (int i = 0; i < 30; i++)
+ model.addItem("Item" + QString::number(i), "");
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+
+ TestObject *testObject = new TestObject;
+ testObject->setAnimate(animated);
+ ctxt->setContextProperty("testObject", testObject);
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsListView *listview = findItem<QmlGraphicsListView>(canvas->root(), "list");
+ QVERIFY(listview != 0);
+
+ QmlGraphicsItem *viewport = listview->viewport();
+ QVERIFY(viewport != 0);
+
+ model.removeItem(1);
+
+ // let transitions settle.
+ QTest::qWait(500);
+
+ QmlGraphicsText *name = findItem<QmlGraphicsText>(viewport, "textName", 1);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(1));
+ QmlGraphicsText *number = findItem<QmlGraphicsText>(viewport, "textNumber", 1);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(1));
+
+ // Confirm items positioned correctly
+ int itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QVERIFY(item->y() == i*20);
+ }
+
+ // Remove first item (which is the current item);
+ model.removeItem(0); // post: top item starts at 20
+
+ // let transitions settle.
+ QTest::qWait(500);
+
+ name = findItem<QmlGraphicsText>(viewport, "textName", 0);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(0));
+ number = findItem<QmlGraphicsText>(viewport, "textNumber", 0);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(0));
+
+ // Confirm items positioned correctly
+ itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QCOMPARE(item->y(),i*20.0 + 20.0);
+ }
+
+ // Remove items not visible
+ model.removeItem(18);
+ // let transitions settle.
+ QTest::qWait(500);
+
+ // Confirm items positioned correctly
+ itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QCOMPARE(item->y(),i*20.0+20.0);
+ }
+
+ // Remove items before visible
+ listview->setViewportY(80);
+ listview->setCurrentIndex(10);
+
+ model.removeItem(1); // post: top item will be at 40
+ // let transitions settle.
+ QTest::qWait(500);
+
+ // Confirm items positioned correctly
+ for (int i = 2; i < 18; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QCOMPARE(item->y(),40+i*20.0);
+ }
+
+ // Remove current index
+ QVERIFY(listview->currentIndex() == 9);
+ QmlGraphicsItem *oldCurrent = listview->currentItem();
+ model.removeItem(9);
+ QTest::qWait(500);
+
+ QCOMPARE(listview->currentIndex(), 9);
+ QVERIFY(listview->currentItem() != oldCurrent);
+
+ listview->setViewportY(40); // That's the top now
+ // let transitions settle.
+ QTest::qWait(500);
+
+ // Confirm items positioned correctly
+ itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QCOMPARE(item->y(),40+i*20.0);
+ }
+
+ // remove current item beyond visible items.
+ listview->setCurrentIndex(20);
+ QTest::qWait(500);
+ listview->setViewportY(40);
+ model.removeItem(20);
+ QTest::qWait(500);
+
+ QCOMPARE(listview->currentIndex(), 20);
+ QVERIFY(listview->currentItem() != 0);
+
+ // remove item before current, but visible
+ listview->setCurrentIndex(8);
+ QTest::qWait(500);
+ oldCurrent = listview->currentItem();
+ model.removeItem(6);
+ QTest::qWait(500);
+
+ QCOMPARE(listview->currentIndex(), 7);
+ QVERIFY(listview->currentItem() == oldCurrent);
+
+ delete canvas;
+}
+
+template <class T>
+void tst_QmlGraphicsListView::clear()
+{
+ QmlView *canvas = createView(SRCDIR "/data/listview.qml");
+
+ T model;
+ for (int i = 0; i < 30; i++)
+ model.addItem("Item" + QString::number(i), "");
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+
+ TestObject *testObject = new TestObject;
+ ctxt->setContextProperty("testObject", testObject);
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsListView *listview = findItem<QmlGraphicsListView>(canvas->root(), "list");
+ QVERIFY(listview != 0);
+
+ QmlGraphicsItem *viewport = listview->viewport();
+ QVERIFY(viewport != 0);
+
+ model.clear();
+
+ // let transitions settle.
+ QTest::qWait(500);
+
+ QVERIFY(listview->count() == 0);
+ QVERIFY(listview->currentItem() == 0);
+ QVERIFY(listview->viewportY() == 0);
+
+ delete canvas;
+}
+
+
+template <class T>
+void tst_QmlGraphicsListView::moved()
+{
+ QmlView *canvas = createView(SRCDIR "/data/listview.qml");
+
+ T model;
+ for (int i = 0; i < 30; i++)
+ model.addItem("Item" + QString::number(i), "");
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+
+ TestObject *testObject = new TestObject;
+ ctxt->setContextProperty("testObject", testObject);
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsListView *listview = findItem<QmlGraphicsListView>(canvas->root(), "list");
+ QVERIFY(listview != 0);
+
+ QmlGraphicsItem *viewport = listview->viewport();
+ QVERIFY(viewport != 0);
+
+ model.moveItem(1, 4);
+
+ // let transitions settle.
+ QTest::qWait(500);
+
+ QmlGraphicsText *name = findItem<QmlGraphicsText>(viewport, "textName", 1);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(1));
+ QmlGraphicsText *number = findItem<QmlGraphicsText>(viewport, "textNumber", 1);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(1));
+
+ name = findItem<QmlGraphicsText>(viewport, "textName", 4);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(4));
+ number = findItem<QmlGraphicsText>(viewport, "textNumber", 4);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(4));
+
+ // Confirm items positioned correctly
+ int itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QVERIFY(item->y() == i*20);
+ }
+
+ listview->setViewportY(80);
+
+ // move outside visible area
+ model.moveItem(1, 18);
+
+ // let transitions settle.
+ QTest::qWait(500);
+
+ // Confirm items positioned correctly and indexes correct
+ for (int i = 3; i < model.count() && i < itemCount; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QCOMPARE(item->y(), i*20.0 + 20);
+ name = findItem<QmlGraphicsText>(viewport, "textName", i);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(i));
+ number = findItem<QmlGraphicsText>(viewport, "textNumber", i);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(i));
+ }
+
+ // move from outside visible into visible
+ model.moveItem(20, 4);
+
+ // let transitions settle.
+ QTest::qWait(500);
+
+ // Confirm items positioned correctly and indexes correct
+ for (int i = 3; i < model.count() && i < itemCount; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QCOMPARE(item->y(), i*20.0 + 20);
+ name = findItem<QmlGraphicsText>(viewport, "textName", i);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(i));
+ number = findItem<QmlGraphicsText>(viewport, "textNumber", i);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(i));
+ }
+
+ delete canvas;
+}
+
+void tst_QmlGraphicsListView::enforceRange()
+{
+ QmlView *canvas = createView(SRCDIR "/data/listview-enforcerange.qml");
+
+ TestModel model;
+ for (int i = 0; i < 30; i++)
+ model.addItem("Item" + QString::number(i), "");
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsListView *listview = findItem<QmlGraphicsListView>(canvas->root(), "list");
+ QVERIFY(listview != 0);
+
+ QCOMPARE(listview->preferredHighlightBegin(), 100.0);
+ QCOMPARE(listview->preferredHighlightEnd(), 100.0);
+ QCOMPARE(listview->highlightRangeMode(), QmlGraphicsListView::StrictlyEnforceRange);
+
+ QmlGraphicsItem *viewport = listview->viewport();
+ QVERIFY(viewport != 0);
+
+ // view should be positioned at the top of the range.
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", 0);
+ QVERIFY(item);
+ QCOMPARE(listview->viewportY(), -100.0);
+
+ QmlGraphicsText *name = findItem<QmlGraphicsText>(viewport, "textName", 0);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(0));
+ QmlGraphicsText *number = findItem<QmlGraphicsText>(viewport, "textNumber", 0);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(0));
+
+ // Check currentIndex is updated when viewport moves
+ listview->setViewportY(20);
+ QTest::qWait(500);
+
+ QCOMPARE(listview->currentIndex(), 6);
+
+ delete canvas;
+}
+
+void tst_QmlGraphicsListView::spacing()
+{
+ QmlView *canvas = createView(SRCDIR "/data/listview.qml");
+
+ TestModel model;
+ for (int i = 0; i < 30; i++)
+ model.addItem("Item" + QString::number(i), "");
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+
+ TestObject *testObject = new TestObject;
+ ctxt->setContextProperty("testObject", testObject);
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsListView *listview = findItem<QmlGraphicsListView>(canvas->root(), "list");
+ QVERIFY(listview != 0);
+
+ QmlGraphicsItem *viewport = listview->viewport();
+ QVERIFY(viewport != 0);
+
+ // Confirm items positioned correctly
+ int itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QVERIFY(item->y() == i*20);
+ }
+
+ listview->setSpacing(10);
+ QVERIFY(listview->spacing() == 10);
+
+ // Confirm items positioned correctly
+ itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QVERIFY(item->y() == i*30);
+ }
+
+ listview->setSpacing(0);
+
+ // Confirm items positioned correctly
+ itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QCOMPARE(item->y(), i*20.0);
+ }
+
+ delete canvas;
+}
+
+void tst_QmlGraphicsListView::sections()
+{
+ QmlView *canvas = createView(SRCDIR "/data/listview-sections.qml");
+
+ TestModel model;
+ for (int i = 0; i < 30; i++)
+ model.addItem("Item" + QString::number(i), QString::number(i/5));
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsListView *listview = findItem<QmlGraphicsListView>(canvas->root(), "list");
+ QVERIFY(listview != 0);
+
+ QmlGraphicsItem *viewport = listview->viewport();
+ QVERIFY(viewport != 0);
+
+ // Confirm items positioned correctly
+ int itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ QVERIFY(item);
+ QCOMPARE(item->y(), qreal(i*20 + ((i+4)/5) * 20));
+ }
+
+ // Remove section boundary
+ model.removeItem(5);
+
+ // New section header created
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", 5);
+ QVERIFY(item);
+ QCOMPARE(item->height(), 40.0);
+
+ model.insertItem(3, "New Item", "0");
+
+ // Section header moved
+ item = findItem<QmlGraphicsItem>(viewport, "wrapper", 5);
+ QVERIFY(item);
+ QCOMPARE(item->height(), 20.0);
+
+ item = findItem<QmlGraphicsItem>(viewport, "wrapper", 6);
+ QVERIFY(item);
+ QCOMPARE(item->height(), 40.0);
+
+ // insert item which will become a section header
+ model.insertItem(6, "Replace header", "1");
+
+ item = findItem<QmlGraphicsItem>(viewport, "wrapper", 6);
+ QVERIFY(item);
+ QCOMPARE(item->height(), 40.0);
+
+ item = findItem<QmlGraphicsItem>(viewport, "wrapper", 7);
+ QVERIFY(item);
+ QCOMPARE(item->height(), 20.0);
+
+ QCOMPARE(listview->currentSection(), QString("0"));
+
+ listview->setViewportY(140);
+ QCOMPARE(listview->currentSection(), QString("1"));
+
+ listview->setViewportY(20);
+ QCOMPARE(listview->currentSection(), QString("0"));
+
+ item = findItem<QmlGraphicsItem>(viewport, "wrapper", 1);
+ QVERIFY(item);
+ QCOMPARE(item->height(), 20.0);
+
+ delete canvas;
+}
+
+void tst_QmlGraphicsListView::currentIndex()
+{
+ TestModel model;
+ for (int i = 0; i < 30; i++)
+ model.addItem("Item" + QString::number(i), QString::number(i));
+
+ QmlView *canvas = new QmlView(0);
+ canvas->setFixedSize(240,320);
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+ ctxt->setContextProperty("testWrap", QVariant(false));
+
+ QString filename(SRCDIR "/data/listview-initCurrent.qml");
+ QFile file(filename);
+ file.open(QFile::ReadOnly);
+ QString qml = file.readAll();
+ canvas->setQml(qml, filename);
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsListView *listview = findItem<QmlGraphicsListView>(canvas->root(), "list");
+ QVERIFY(listview != 0);
+
+ QmlGraphicsItem *viewport = listview->viewport();
+ QVERIFY(viewport != 0);
+
+ QTest::qWait(500);
+
+ // current item should be third item
+ QCOMPARE(listview->currentIndex(), 3);
+ QCOMPARE(listview->currentItem(), findItem<QmlGraphicsItem>(viewport, "wrapper", 3));
+ QCOMPARE(listview->highlightItem()->y(), listview->currentItem()->y());
+
+ // no wrap
+ listview->setCurrentIndex(0);
+ QCOMPARE(listview->currentIndex(), 0);
+
+ listview->incrementCurrentIndex();
+ QCOMPARE(listview->currentIndex(), 1);
+ listview->decrementCurrentIndex();
+ QCOMPARE(listview->currentIndex(), 0);
+
+ listview->decrementCurrentIndex();
+ QCOMPARE(listview->currentIndex(), 0);
+
+ // with wrap
+ ctxt->setContextProperty("testWrap", QVariant(true));
+ QVERIFY(listview->isWrapEnabled());
+
+ listview->decrementCurrentIndex();
+ QCOMPARE(listview->currentIndex(), model.count()-1);
+
+ QTest::qWait(1000);
+ QCOMPARE(listview->viewportY(), 279.0);
+
+ listview->incrementCurrentIndex();
+ QCOMPARE(listview->currentIndex(), 0);
+
+ QTest::qWait(1000);
+ QCOMPARE(listview->viewportY(), 0.0);
+
+ // Test keys
+ canvas->show();
+ qApp->processEvents();
+
+ QEvent wa(QEvent::WindowActivate);
+ QApplication::sendEvent(canvas, &wa);
+ QFocusEvent fe(QEvent::FocusIn);
+ QApplication::sendEvent(canvas, &fe);
+
+ QKeyEvent key(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier, "", false, 1);
+ QApplication::sendEvent(canvas, &key);
+ QVERIFY(key.isAccepted());
+ QCOMPARE(listview->currentIndex(), 1);
+
+ key = QKeyEvent(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier, "", false, 1);
+ QApplication::sendEvent(canvas, &key);
+ QVERIFY(key.isAccepted());
+ QCOMPARE(listview->currentIndex(), 0);
+
+ // turn off auto highlight
+ listview->setHighlightFollowsCurrentItem(false);
+ QVERIFY(listview->highlightFollowsCurrentItem() == false);
+
+ QTest::qWait(500);
+ QVERIFY(listview->highlightItem());
+ qreal hlPos = listview->highlightItem()->y();
+
+ listview->setCurrentIndex(4);
+ QTest::qWait(500);
+ QCOMPARE(listview->highlightItem()->y(), hlPos);
+
+ delete canvas;
+}
+
+void tst_QmlGraphicsListView::itemList()
+{
+ QmlView *canvas = createView(SRCDIR "/data/itemlist.qml");
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsListView *listview = findItem<QmlGraphicsListView>(canvas->root(), "view");
+ QVERIFY(listview != 0);
+
+ QmlGraphicsItem *viewport = listview->viewport();
+ QVERIFY(viewport != 0);
+
+ QmlGraphicsVisualItemModel *model = canvas->root()->findChild<QmlGraphicsVisualItemModel*>("itemModel");
+ QVERIFY(model != 0);
+
+ QVERIFY(model->count() == 3);
+ QCOMPARE(listview->currentIndex(), 0);
+
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "item1");
+ QVERIFY(item);
+ QCOMPARE(item->x(), 0.0);
+
+ QmlGraphicsText *text = findItem<QmlGraphicsText>(viewport, "text1");
+ QVERIFY(text);
+ QCOMPARE(text->text(), QLatin1String("index: 0"));
+
+ listview->setCurrentIndex(2);
+ QTest::qWait(1000);
+
+ item = findItem<QmlGraphicsItem>(viewport, "item3");
+ QVERIFY(item);
+ QCOMPARE(item->x(), 480.0);
+
+ text = findItem<QmlGraphicsText>(viewport, "text3");
+ QVERIFY(text);
+ QCOMPARE(text->text(), QLatin1String("index: 2"));
+
+ delete canvas;
+}
+
+void tst_QmlGraphicsListView::cacheBuffer()
+{
+ QmlView *canvas = createView(SRCDIR "/data/listview.qml");
+
+ TestModel model;
+ for (int i = 0; i < 30; i++)
+ model.addItem("Item" + QString::number(i), "");
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+
+ TestObject *testObject = new TestObject;
+ ctxt->setContextProperty("testObject", testObject);
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsListView *listview = findItem<QmlGraphicsListView>(canvas->root(), "list");
+ QVERIFY(listview != 0);
+
+ QmlGraphicsItem *viewport = listview->viewport();
+ QVERIFY(viewport != 0);
+ QVERIFY(listview->delegate() != 0);
+ QVERIFY(listview->model() != 0);
+ QVERIFY(listview->highlight() != 0);
+
+ // Confirm items positioned correctly
+ int itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QVERIFY(item->y() == i*20);
+ }
+
+ testObject->setCacheBuffer(400);
+ QVERIFY(listview->cacheBuffer() == 400);
+
+ int newItemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ QVERIFY(newItemCount > itemCount);
+
+ // Confirm items positioned correctly
+ for (int i = 0; i < model.count() && i < newItemCount; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QVERIFY(item->y() == i*20);
+ }
+
+ delete canvas;
+}
+
+void tst_QmlGraphicsListView::positionViewAtIndex()
+{
+ QmlView *canvas = createView(SRCDIR "/data/listview.qml");
+
+ TestModel model;
+ for (int i = 0; i < 40; i++)
+ model.addItem("Item" + QString::number(i), "");
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+
+ TestObject *testObject = new TestObject;
+ ctxt->setContextProperty("testObject", testObject);
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsListView *listview = findItem<QmlGraphicsListView>(canvas->root(), "list");
+ QVERIFY(listview != 0);
+
+ QmlGraphicsItem *viewport = listview->viewport();
+ QVERIFY(viewport != 0);
+
+ // Confirm items positioned correctly
+ int itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QCOMPARE(item->y(), i*20.);
+ }
+
+ // Position on a currently visible item
+ listview->positionViewAtIndex(3);
+ QCOMPARE(listview->viewportY(), 60.);
+
+ // Confirm items positioned correctly
+ itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 3; i < model.count() && i < itemCount-3-1; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QCOMPARE(item->y(), i*20.);
+ }
+
+ // Position on an item beyond the visible items
+ listview->positionViewAtIndex(22);
+ QCOMPARE(listview->viewportY(), 440.);
+
+ // Confirm items positioned correctly
+ itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 22; i < model.count() && i < itemCount-22-1; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QCOMPARE(item->y(), i*20.);
+ }
+
+ // Position on an item that would leave empty space if positioned at the top
+ listview->positionViewAtIndex(28);
+ QCOMPARE(listview->viewportY(), 480.);
+
+ // Confirm items positioned correctly
+ itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 24; i < model.count() && i < itemCount-24-1; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QCOMPARE(item->y(), i*20.);
+ }
+
+ // Position at the beginning again
+ listview->positionViewAtIndex(0);
+ QCOMPARE(listview->viewportY(), 0.);
+
+ // Confirm items positioned correctly
+ itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount-1; ++i) {
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QCOMPARE(item->y(), i*20.);
+ }
+
+ delete canvas;
+}
+
+void tst_QmlGraphicsListView::qListModelInterface_items()
+{
+ items<TestModel>();
+}
+
+void tst_QmlGraphicsListView::qAbstractItemModel_items()
+{
+ items<TestModel2>();
+}
+
+void tst_QmlGraphicsListView::qListModelInterface_changed()
+{
+ changed<TestModel>();
+}
+
+void tst_QmlGraphicsListView::qAbstractItemModel_changed()
+{
+ changed<TestModel2>();
+}
+
+void tst_QmlGraphicsListView::qListModelInterface_inserted()
+{
+ inserted<TestModel>();
+}
+
+void tst_QmlGraphicsListView::qAbstractItemModel_inserted()
+{
+ inserted<TestModel2>();
+}
+
+void tst_QmlGraphicsListView::qListModelInterface_removed()
+{
+ removed<TestModel>(false);
+ removed<TestModel>(true);
+}
+
+void tst_QmlGraphicsListView::qAbstractItemModel_removed()
+{
+ removed<TestModel2>(false);
+ removed<TestModel2>(true);
+}
+
+void tst_QmlGraphicsListView::qListModelInterface_moved()
+{
+ moved<TestModel>();
+}
+
+void tst_QmlGraphicsListView::qAbstractItemModel_moved()
+{
+ moved<TestModel2>();
+}
+
+void tst_QmlGraphicsListView::qListModelInterface_clear()
+{
+ clear<TestModel>();
+}
+
+void tst_QmlGraphicsListView::qAbstractItemModel_clear()
+{
+ clear<TestModel2>();
+}
+
+QmlView *tst_QmlGraphicsListView::createView(const QString &filename)
+{
+ QmlView *canvas = new QmlView(0);
+ canvas->setFixedSize(240,320);
+
+ QFile file(filename);
+ file.open(QFile::ReadOnly);
+ QString qml = file.readAll();
+ canvas->setQml(qml, filename);
+
+ return canvas;
+}
+
+/*
+ Find an item with the specified objectName. If index is supplied then the
+ item must also evaluate the {index} expression equal to index
+*/
+template<typename T>
+T *tst_QmlGraphicsListView::findItem(QmlGraphicsItem *parent, const QString &objectName, int index)
+{
+ const QMetaObject &mo = T::staticMetaObject;
+ //qDebug() << parent->QGraphicsObject::children().count() << "children";
+ for (int i = 0; i < parent->childItems().count(); ++i) {
+ QmlGraphicsItem *item = qobject_cast<QmlGraphicsItem*>(parent->childItems().at(i));
+ if(!item)
+ continue;
+ //qDebug() << "try" << item;
+ if (mo.cast(item) && (objectName.isEmpty() || item->objectName() == objectName)) {
+ if (index != -1) {
+ QmlExpression e(qmlContext(item), "index", item);
+ e.setTrackChange(false);
+ if (e.value().toInt() == index)
+ return static_cast<T*>(item);
+ } else {
+ return static_cast<T*>(item);
+ }
+ }
+ item = findItem<T>(item, objectName, index);
+ if (item)
+ return static_cast<T*>(item);
+ }
+
+ return 0;
+}
+
+template<typename T>
+QList<T*> tst_QmlGraphicsListView::findItems(QmlGraphicsItem *parent, const QString &objectName)
+{
+ QList<T*> items;
+ const QMetaObject &mo = T::staticMetaObject;
+ //qDebug() << parent->QGraphicsObject::children().count() << "children";
+ for (int i = 0; i < parent->childItems().count(); ++i) {
+ QmlGraphicsItem *item = qobject_cast<QmlGraphicsItem*>(parent->childItems().at(i));
+ if(!item)
+ continue;
+ //qDebug() << "try" << item;
+ if (mo.cast(item) && (objectName.isEmpty() || item->objectName() == objectName))
+ items.append(static_cast<T*>(item));
+ items += findItems<T>(item, objectName);
+ }
+
+ return items;
+}
+
+void tst_QmlGraphicsListView::dumpTree(QmlGraphicsItem *parent, int depth)
+{
+ static QString padding(" ");
+ for (int i = 0; i < parent->childItems().count(); ++i) {
+ QmlGraphicsItem *item = qobject_cast<QmlGraphicsItem*>(parent->childItems().at(i));
+ if(!item)
+ continue;
+ qDebug() << padding.left(depth*2) << item;
+ dumpTree(item, depth+1);
+ }
+}
+
+
+QTEST_MAIN(tst_QmlGraphicsListView)
+
+#include "tst_qmlgraphicslistview.moc"
diff --git a/tests/auto/declarative/qmlgraphicsloader/data/NoResize.qml b/tests/auto/declarative/qmlgraphicsloader/data/NoResize.qml
new file mode 100644
index 0000000..cfbb55a
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsloader/data/NoResize.qml
@@ -0,0 +1,7 @@
+import Qt 4.6
+
+Loader {
+ resizeMode: "NoResize"
+ width: 200; height: 80
+ source: "Rect120x60.qml"
+}
diff --git a/tests/auto/declarative/qmlgraphicsloader/data/Rect120x60.qml b/tests/auto/declarative/qmlgraphicsloader/data/Rect120x60.qml
new file mode 100644
index 0000000..aa4b0c2
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsloader/data/Rect120x60.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+Rectangle {
+ width: 120
+ height:60
+}
diff --git a/tests/auto/declarative/qmlgraphicsloader/data/SetSourceComponent.qml b/tests/auto/declarative/qmlgraphicsloader/data/SetSourceComponent.qml
new file mode 100644
index 0000000..1db56c4
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsloader/data/SetSourceComponent.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+Item {
+ Component { id: comp; Rectangle { width: 100; height: 50 } }
+ Loader { sourceComponent: comp }
+}
diff --git a/tests/auto/declarative/qmlgraphicsloader/data/SizeToItem.qml b/tests/auto/declarative/qmlgraphicsloader/data/SizeToItem.qml
new file mode 100644
index 0000000..b52fa03
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsloader/data/SizeToItem.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+Loader {
+ resizeMode: "SizeLoaderToItem"
+ source: "Rect120x60.qml"
+}
diff --git a/tests/auto/declarative/qmlgraphicsloader/data/SizeToLoader.qml b/tests/auto/declarative/qmlgraphicsloader/data/SizeToLoader.qml
new file mode 100644
index 0000000..1a107e1
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsloader/data/SizeToLoader.qml
@@ -0,0 +1,7 @@
+import Qt 4.6
+
+Loader {
+ resizeMode: "SizeItemToLoader"
+ width: 200; height: 80
+ source: "Rect120x60.qml"
+}
diff --git a/tests/auto/declarative/qmlgraphicsloader/qmlgraphicsloader.pro b/tests/auto/declarative/qmlgraphicsloader/qmlgraphicsloader.pro
new file mode 100644
index 0000000..4837075
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsloader/qmlgraphicsloader.pro
@@ -0,0 +1,11 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative gui network
+macx:CONFIG -= app_bundle
+
+INCLUDEPATH += ../shared/
+HEADERS += ../shared/testhttpserver.h
+SOURCES += tst_qmlgraphicsloader.cpp \
+ ../shared/testhttpserver.cpp
+
+DEFINES += SRCDIR=\\\"$$PWD\\\"
+
diff --git a/tests/auto/declarative/qmlgraphicsloader/tst_qmlgraphicsloader.cpp b/tests/auto/declarative/qmlgraphicsloader/tst_qmlgraphicsloader.cpp
new file mode 100644
index 0000000..25543a9
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsloader/tst_qmlgraphicsloader.cpp
@@ -0,0 +1,376 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <private/qmlgraphicsloader_p.h>
+#include "testhttpserver.h"
+
+#define SERVER_PORT 14445
+
+inline QUrl TEST_FILE(const QString &filename)
+{
+ return QUrl::fromLocalFile(QLatin1String(SRCDIR) + QLatin1String("/data/") + filename);
+}
+
+#define TRY_WAIT(expr) \
+ do { \
+ for (int ii = 0; ii < 6; ++ii) { \
+ if ((expr)) break; \
+ QTest::qWait(50); \
+ } \
+ QVERIFY((expr)); \
+ } while (false)
+
+class tst_QmlGraphicsLoader : public QObject
+
+{
+ Q_OBJECT
+public:
+ tst_QmlGraphicsLoader();
+
+private slots:
+ void url();
+ void invalidUrl();
+ void component();
+ void clear();
+ void urlToComponent();
+ void componentToUrl();
+ void sizeLoaderToItem();
+ void sizeItemToLoader();
+ void noResize();
+ void networkRequestUrl();
+ void failNetworkRequest();
+// void networkComponent();
+
+private:
+ QmlEngine engine;
+};
+
+
+tst_QmlGraphicsLoader::tst_QmlGraphicsLoader()
+{
+}
+
+void tst_QmlGraphicsLoader::url()
+{
+ QmlComponent component(&engine);
+ component.setData(QByteArray("import Qt 4.6\nLoader { source: \"Rect120x60.qml\" }"), TEST_FILE(""));
+ QmlGraphicsLoader *loader = qobject_cast<QmlGraphicsLoader*>(component.create());
+ QVERIFY(loader != 0);
+ QVERIFY(loader->item());
+ QVERIFY(loader->source() == QUrl::fromLocalFile(SRCDIR "/data/Rect120x60.qml"));
+ QCOMPARE(loader->progress(), 1.0);
+ QCOMPARE(loader->status(), QmlGraphicsLoader::Ready);
+ QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 1);
+
+ delete loader;
+}
+
+void tst_QmlGraphicsLoader::component()
+{
+ QmlComponent component(&engine, TEST_FILE("/SetSourceComponent.qml"));
+ QmlGraphicsItem *item = qobject_cast<QmlGraphicsItem*>(component.create());
+ QVERIFY(item);
+
+ QmlGraphicsLoader *loader = qobject_cast<QmlGraphicsLoader*>(item->QGraphicsObject::children().at(1));
+ QVERIFY(loader);
+ QVERIFY(loader->item());
+ QCOMPARE(loader->progress(), 1.0);
+ QCOMPARE(loader->status(), QmlGraphicsLoader::Ready);
+ QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 1);
+
+ delete loader;
+}
+
+void tst_QmlGraphicsLoader::invalidUrl()
+{
+ QTest::ignoreMessage(QtWarningMsg, QString("(:-1: File error for URL " + QUrl::fromLocalFile(SRCDIR "/data/IDontExist.qml").toString() + ") ").toUtf8().constData());
+
+ QmlComponent component(&engine);
+ component.setData(QByteArray("import Qt 4.6\nLoader { source: \"IDontExist.qml\" }"), TEST_FILE(""));
+ QmlGraphicsLoader *loader = qobject_cast<QmlGraphicsLoader*>(component.create());
+ QVERIFY(loader != 0);
+ QVERIFY(loader->item() == 0);
+ QCOMPARE(loader->progress(), 1.0);
+ QCOMPARE(loader->status(), QmlGraphicsLoader::Error);
+ QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 0);
+
+ delete loader;
+}
+
+void tst_QmlGraphicsLoader::clear()
+{
+ {
+ QmlComponent component(&engine);
+ component.setData(QByteArray(
+ "import Qt 4.6\n"
+ " Loader { id: loader\n"
+ " source: 'Rect120x60.qml'\n"
+ " Timer { interval: 200; running: true; onTriggered: loader.source = '' }\n"
+ " }")
+ , TEST_FILE(""));
+ QmlGraphicsLoader *loader = qobject_cast<QmlGraphicsLoader*>(component.create());
+ QVERIFY(loader != 0);
+ QVERIFY(loader->item());
+ QCOMPARE(loader->progress(), 1.0);
+ QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 1);
+
+ QTest::qWait(500);
+
+ QVERIFY(loader->item() == 0);
+ QCOMPARE(loader->progress(), 0.0);
+ QCOMPARE(loader->status(), QmlGraphicsLoader::Null);
+ QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 0);
+
+ delete loader;
+ }
+ {
+ QmlComponent component(&engine, TEST_FILE("/SetSourceComponent.qml"));
+ QmlGraphicsItem *item = qobject_cast<QmlGraphicsItem*>(component.create());
+ QVERIFY(item);
+
+ QmlGraphicsLoader *loader = qobject_cast<QmlGraphicsLoader*>(item->QGraphicsObject::children().at(1));
+ QVERIFY(loader);
+ QVERIFY(loader->item());
+ QCOMPARE(loader->progress(), 1.0);
+ QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 1);
+
+ loader->setSourceComponent(0);
+
+ QVERIFY(loader->item() == 0);
+ QCOMPARE(loader->progress(), 0.0);
+ QCOMPARE(loader->status(), QmlGraphicsLoader::Null);
+ QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 0);
+
+ delete loader;
+ }
+}
+
+void tst_QmlGraphicsLoader::urlToComponent()
+{
+ QmlComponent component(&engine);
+ component.setData(QByteArray("import Qt 4.6\n"
+ "Loader {\n"
+ " id: loader\n"
+ " Component { id: myComp; Rectangle { width: 10; height: 10 } }\n"
+ " source: \"Rect120x60.qml\"\n"
+ " Timer { interval: 100; running: true; onTriggered: loader.sourceComponent = myComp }\n"
+ "}" )
+ , TEST_FILE(""));
+ QmlGraphicsLoader *loader = qobject_cast<QmlGraphicsLoader*>(component.create());
+ QTest::qWait(500);
+ QVERIFY(loader != 0);
+ QVERIFY(loader->item());
+ QCOMPARE(loader->progress(), 1.0);
+ QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 1);
+ QCOMPARE(loader->width(), 10.0);
+ QCOMPARE(loader->height(), 10.0);
+
+ delete loader;
+}
+
+void tst_QmlGraphicsLoader::componentToUrl()
+{
+ QmlComponent component(&engine, TEST_FILE("/SetSourceComponent.qml"));
+ QmlGraphicsItem *item = qobject_cast<QmlGraphicsItem*>(component.create());
+ QVERIFY(item);
+
+ QmlGraphicsLoader *loader = qobject_cast<QmlGraphicsLoader*>(item->QGraphicsObject::children().at(1));
+ QVERIFY(loader);
+ QVERIFY(loader->item());
+ QCOMPARE(loader->progress(), 1.0);
+ QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 1);
+
+ loader->setSource(TEST_FILE("/Rect120x60.qml"));
+ QVERIFY(loader->item());
+ QCOMPARE(loader->progress(), 1.0);
+ QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 1);
+ QCOMPARE(loader->width(), 120.0);
+ QCOMPARE(loader->height(), 60.0);
+
+ delete loader;
+}
+
+void tst_QmlGraphicsLoader::sizeLoaderToItem()
+{
+ QmlComponent component(&engine, TEST_FILE("/SizeToItem.qml"));
+ QmlGraphicsLoader *loader = qobject_cast<QmlGraphicsLoader*>(component.create());
+ QVERIFY(loader != 0);
+ QVERIFY(loader->resizeMode() == QmlGraphicsLoader::SizeLoaderToItem);
+ QCOMPARE(loader->width(), 120.0);
+ QCOMPARE(loader->height(), 60.0);
+
+ // Check resize
+ QmlGraphicsItem *rect = loader->item();
+ QVERIFY(rect);
+ rect->setWidth(150);
+ rect->setHeight(45);
+ QCOMPARE(loader->width(), 150.0);
+ QCOMPARE(loader->height(), 45.0);
+
+ // Switch mode
+ loader->setResizeMode(QmlGraphicsLoader::SizeItemToLoader);
+ loader->setWidth(180);
+ loader->setHeight(30);
+ QCOMPARE(rect->width(), 180.0);
+ QCOMPARE(rect->height(), 30.0);
+}
+
+void tst_QmlGraphicsLoader::sizeItemToLoader()
+{
+ QmlComponent component(&engine, TEST_FILE("/SizeToLoader.qml"));
+ QmlGraphicsLoader *loader = qobject_cast<QmlGraphicsLoader*>(component.create());
+ QVERIFY(loader != 0);
+ QVERIFY(loader->resizeMode() == QmlGraphicsLoader::SizeItemToLoader);
+ QCOMPARE(loader->width(), 200.0);
+ QCOMPARE(loader->height(), 80.0);
+
+ QmlGraphicsItem *rect = loader->item();
+ QVERIFY(rect);
+ QCOMPARE(rect->width(), 200.0);
+ QCOMPARE(rect->height(), 80.0);
+
+ // Check resize
+ loader->setWidth(180);
+ loader->setHeight(30);
+ QCOMPARE(rect->width(), 180.0);
+ QCOMPARE(rect->height(), 30.0);
+
+ // Switch mode
+ loader->setResizeMode(QmlGraphicsLoader::SizeLoaderToItem);
+ rect->setWidth(160);
+ rect->setHeight(45);
+ QCOMPARE(rect->width(), 160.0);
+ QCOMPARE(rect->height(), 45.0);
+}
+
+void tst_QmlGraphicsLoader::noResize()
+{
+ QmlComponent component(&engine, TEST_FILE("/NoResize.qml"));
+ QmlGraphicsLoader *loader = qobject_cast<QmlGraphicsLoader*>(component.create());
+ QVERIFY(loader != 0);
+ QCOMPARE(loader->width(), 200.0);
+ QCOMPARE(loader->height(), 80.0);
+
+ QmlGraphicsItem *rect = loader->item();
+ QVERIFY(rect);
+ QCOMPARE(rect->width(), 120.0);
+ QCOMPARE(rect->height(), 60.0);
+}
+
+void tst_QmlGraphicsLoader::networkRequestUrl()
+{
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ server.serveDirectory("data");
+
+ QmlComponent component(&engine);
+ component.setData(QByteArray("import Qt 4.6\nLoader { source: \"http://127.0.0.1:14445/Rect120x60.qml\" }"), TEST_FILE(""));
+ QmlGraphicsLoader *loader = qobject_cast<QmlGraphicsLoader*>(component.create());
+ QVERIFY(loader != 0);
+
+ TRY_WAIT(loader->status() == QmlGraphicsLoader::Ready);
+
+ QVERIFY(loader->item());
+ QCOMPARE(loader->progress(), 1.0);
+ QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 1);
+
+ delete loader;
+}
+
+/* XXX Component waits until all dependencies are loaded. Is this actually possible?
+void tst_QmlGraphicsLoader::networkComponent()
+{
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ server.serveDirectory("slowdata", TestHTTPServer::Delay);
+
+ QmlComponent component(&engine);
+ component.setData(QByteArray(
+ "import Qt 4.6\n"
+ "import \"http://127.0.0.1:14445/\" as NW\n"
+ "Item {\n"
+ " Component { id: comp; NW.SlowRect {} }\n"
+ " Loader { sourceComponent: comp } }")
+ , TEST_FILE(""));
+
+ QmlGraphicsItem *item = qobject_cast<QmlGraphicsItem*>(component.create());
+ QVERIFY(item);
+
+ QmlGraphicsLoader *loader = qobject_cast<QmlGraphicsLoader*>(item->QGraphicsObject::children().at(1));
+ QVERIFY(loader);
+ TRY_WAIT(loader->status() == QmlGraphicsLoader::Ready);
+
+ QVERIFY(loader->item());
+ QCOMPARE(loader->progress(), 1.0);
+ QCOMPARE(loader->status(), QmlGraphicsLoader::Ready);
+ QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 1);
+
+ delete loader;
+}
+*/
+
+void tst_QmlGraphicsLoader::failNetworkRequest()
+{
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ server.serveDirectory("data");
+
+ QTest::ignoreMessage(QtWarningMsg, "(:-1: Network error for URL http://127.0.0.1:14445/IDontExist.qml) ");
+
+ QmlComponent component(&engine);
+ component.setData(QByteArray("import Qt 4.6\nLoader { source: \"http://127.0.0.1:14445/IDontExist.qml\" }"), TEST_FILE(""));
+ QmlGraphicsLoader *loader = qobject_cast<QmlGraphicsLoader*>(component.create());
+ QVERIFY(loader != 0);
+
+ TRY_WAIT(loader->status() == QmlGraphicsLoader::Error);
+
+ QVERIFY(loader->item() == 0);
+ QCOMPARE(loader->progress(), 0.0);
+ QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 0);
+
+ delete loader;
+}
+
+QTEST_MAIN(tst_QmlGraphicsLoader)
+
+#include "tst_qmlgraphicsloader.moc"
diff --git a/tests/auto/declarative/qmlgraphicsparticles/data/particle.png b/tests/auto/declarative/qmlgraphicsparticles/data/particle.png
new file mode 100644
index 0000000..defbde5
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsparticles/data/particle.png
Binary files differ
diff --git a/tests/auto/declarative/qmlgraphicsparticles/data/particles.qml b/tests/auto/declarative/qmlgraphicsparticles/data/particles.qml
new file mode 100644
index 0000000..c58927e
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsparticles/data/particles.qml
@@ -0,0 +1,15 @@
+import Qt 4.6
+Rectangle{
+ width: 100
+ height: 100
+ color: "black"
+ objectName: "rect"
+ Particles { id: particles
+ objectName: "particles"
+ width:1; height:1; anchors.centerIn: parent; opacity: 1
+ lifeSpan: 100; lifeSpanDeviation: 20; count:1000;
+ fadeInDuration: 20; fadeOutDuration: 20; count: -1; emissionRate: 1000
+ angle: 0; angleDeviation: 360; velocity: 500; velocityDeviation:30
+ source: "particle.png"
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicsparticles/qmlgraphicsparticles.pro b/tests/auto/declarative/qmlgraphicsparticles/qmlgraphicsparticles.pro
new file mode 100644
index 0000000..94eeb4e
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsparticles/qmlgraphicsparticles.pro
@@ -0,0 +1,8 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative gui
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlgraphicsparticles.cpp
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlgraphicsparticles/tst_qmlgraphicsparticles.cpp b/tests/auto/declarative/qmlgraphicsparticles/tst_qmlgraphicsparticles.cpp
new file mode 100644
index 0000000..5458d68
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsparticles/tst_qmlgraphicsparticles.cpp
@@ -0,0 +1,125 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtTest/QtTest>
+#include <qmlview.h>
+#include <private/qmlgraphicsparticles_p.h>
+
+class tst_QmlGraphicsParticles : public QObject
+{
+ Q_OBJECT
+public:
+ tst_QmlGraphicsParticles();
+
+private slots:
+ void properties();
+ void runs();
+private:
+ QmlView *createView(const QString &filename);
+
+};
+
+tst_QmlGraphicsParticles::tst_QmlGraphicsParticles()
+{
+}
+
+void tst_QmlGraphicsParticles::properties()
+{
+ QmlView *canvas = createView(SRCDIR "/data/particles.qml");
+ QVERIFY(canvas->root());
+ QmlGraphicsParticles* particles = canvas->root()->findChild<QmlGraphicsParticles*>("particles");
+ QVERIFY(particles);
+
+ particles->setSource(QUrl::fromLocalFile(SRCDIR "/data/particle.png"));
+ QCOMPARE(particles->source(), QUrl::fromLocalFile(SRCDIR "/data/particle.png"));
+
+ particles->setLifeSpanDeviation(1000);
+ QCOMPARE(particles->lifeSpanDeviation(), 1000);
+
+ particles->setFadeInDuration(1000);
+ QCOMPARE(particles->fadeInDuration(), 1000);
+
+ particles->setFadeOutDuration(1000);
+ QCOMPARE(particles->fadeOutDuration(), 1000);
+
+ particles->setAngle(100.0);
+ QCOMPARE(particles->angle(), 100.0);
+
+ particles->setAngleDeviation(100.0);
+ QCOMPARE(particles->angleDeviation(), 100.0);
+
+ particles->setVelocity(100.0);
+ QCOMPARE(particles->velocity(), 100.0);
+
+ particles->setVelocityDeviation(100.0);
+ QCOMPARE(particles->velocityDeviation(), 100.0);
+
+ particles->setEmissionVariance(0.5);
+ QCOMPARE(particles->emissionVariance(),0.5);
+
+ particles->setEmissionRate(12);
+ QCOMPARE(particles->emissionRate(), 12);
+}
+
+void tst_QmlGraphicsParticles::runs()
+{
+ QmlView *canvas = createView(SRCDIR "/data/particles.qml");
+ QVERIFY(canvas->root());
+ QmlGraphicsParticles* particles = canvas->root()->findChild<QmlGraphicsParticles*>("particles");
+ QVERIFY(particles);
+ QTest::qWait(1000);//Run for one second. Test passes if it doesn't crash.
+}
+
+QmlView *tst_QmlGraphicsParticles::createView(const QString &filename)
+{
+ QmlView *canvas = new QmlView(0);
+ canvas->setFixedSize(240,320);
+
+ QFile file(filename);
+ file.open(QFile::ReadOnly);
+ QString qml = file.readAll();
+ canvas->setQml(qml, filename);
+ canvas->execute();
+
+ return canvas;
+}
+QTEST_MAIN(tst_QmlGraphicsParticles)
+
+#include "tst_qmlgraphicsparticles.moc"
diff --git a/tests/auto/declarative/qmlgraphicspathview/data/datamodel.qml b/tests/auto/declarative/qmlgraphicspathview/data/datamodel.qml
new file mode 100644
index 0000000..8d07db2
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicspathview/data/datamodel.qml
@@ -0,0 +1,36 @@
+import Qt 4.6
+
+PathView {
+ id: pathview
+ objectName: "pathview"
+ width: 240; height: 320
+ pathItemCount: testObject.pathItemCount
+
+ function checkProperties() {
+ testObject.error = false;
+ if (testObject.useModel && pathview.model != testData) {
+ console.log("model property incorrect");
+ testObject.error = true;
+ }
+ }
+
+ model: testObject.useModel ? testData : 0
+
+ delegate: Component {
+ id: myDelegate
+ Rectangle {
+ id: wrapper
+ objectName: "wrapper"
+ width: 20; height: 20; color: name
+ Text {
+ objectName: "myText"
+ text: name
+ }
+ }
+ }
+
+ path: Path {
+ startX: 120; startY: 20;
+ PathLine { x: 120; y: 300 }
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicspathview/data/path.qml b/tests/auto/declarative/qmlgraphicspathview/data/path.qml
new file mode 100644
index 0000000..7e82a48
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicspathview/data/path.qml
@@ -0,0 +1,14 @@
+import Qt 4.6
+
+Path {
+ startX: 120; startY: 100
+
+ PathAttribute { name: "scale"; value: 1.0 }
+ PathQuad { x: 120; y: 25; controlX: 260; controlY: 75 }
+ PathPercent { value: 0.3 }
+ PathLine { x: 120; y: 100 }
+ PathCubic {
+ x: 180; y: 0; control1X: -10; control1Y: 90
+ control2X: 210; control2Y: 90
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicspathview/data/pathview.qml b/tests/auto/declarative/qmlgraphicspathview/data/pathview.qml
new file mode 100644
index 0000000..8fa8d59
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicspathview/data/pathview.qml
@@ -0,0 +1,66 @@
+import Qt 4.6
+
+Rectangle {
+ width: 240
+ height: 320
+ color: "#ffffff"
+ resources: [
+ Component {
+ id: delegate
+ Rectangle {
+ id: wrapper
+ objectName: "wrapper"
+ height: 20
+ width: 60
+ color: "white"
+ border.color: "black"
+ Text {
+ text: index
+ }
+ Text {
+ x: 20
+ id: textName
+ objectName: "textName"
+ text: name
+ }
+ Text {
+ x: 40
+ id: textNumber
+ objectName: "textNumber"
+ text: number
+ }
+ }
+ }
+ ]
+ PathView {
+ id: view
+ objectName: "view"
+ width: 240
+ height: 320
+ model: testModel
+ delegate: delegate
+ snapPosition: 0.01
+ path: Path {
+ startY: 120
+ startX: 160
+ PathQuad {
+ y: 120
+ x: 80
+ controlY: 330
+ controlX: 100
+ }
+ PathLine {
+ y: 160
+ x: 20
+ }
+ PathCubic {
+ y: 120
+ x: 160
+ control1Y: 0
+ control1X: 100
+ control2Y: 000
+ control2X: 200
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicspathview/data/pathview1.qml b/tests/auto/declarative/qmlgraphicspathview/data/pathview1.qml
new file mode 100644
index 0000000..b3b0a9a
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicspathview/data/pathview1.qml
@@ -0,0 +1,4 @@
+import Qt 4.6
+
+PathView {
+}
diff --git a/tests/auto/declarative/qmlgraphicspathview/data/pathview2.qml b/tests/auto/declarative/qmlgraphicspathview/data/pathview2.qml
new file mode 100644
index 0000000..0d5c98b
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicspathview/data/pathview2.qml
@@ -0,0 +1,57 @@
+import Qt 4.6
+
+PathView {
+ id: photoPathView; model: rssModel; delegate: photoDelegate
+ y: 100; width: 800; height: 330; pathItemCount: 10; z: 1
+
+ path: Path {
+ startX: -50; startY: 40;
+
+ PathAttribute { name: "scale"; value: 0.5 }
+ PathAttribute { name: "angle"; value: -45 }
+
+ PathCubic {
+ x: 400; y: 220
+ control1X: 140; control1Y: 40
+ control2X: 210; control2Y: 220
+ }
+
+ PathAttribute { name: "scale"; value: 1.2 }
+ PathAttribute { name: "angle"; value: 0 }
+
+ PathCubic {
+ x: 850; y: 40
+ control2X: 660; control2Y: 40
+ control1X: 590; control1Y: 220
+ }
+
+ PathAttribute { name: "scale"; value: 0.5 }
+ PathAttribute { name: "angle"; value: 45 }
+ }
+
+ model: ListModel {
+ id: rssModel
+ ListElement { lColor: "red" }
+ ListElement { lColor: "green" }
+ ListElement { lColor: "yellow" }
+ ListElement { lColor: "blue" }
+ ListElement { lColor: "purple" }
+ ListElement { lColor: "gray" }
+ ListElement { lColor: "brown" }
+ ListElement { lColor: "thistle" }
+ }
+
+ delegate: Component {
+ id: photoDelegate
+ Rectangle {
+ id: wrapper
+ width: 85; height: 85; color: lColor
+ scale: wrapper.PathView.scale
+
+ transform: Rotation {
+ id: itemRotation; origin.x: wrapper.width/2; origin.y: wrapper.height/2
+ axis.y: 1; axis.z: 0; angle: wrapper.PathView.angle
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicspathview/data/pathview3.qml b/tests/auto/declarative/qmlgraphicspathview/data/pathview3.qml
new file mode 100644
index 0000000..412cca2
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicspathview/data/pathview3.qml
@@ -0,0 +1,57 @@
+import Qt 4.6
+
+PathView {
+ id: photoPathView; model: rssModel; delegate: photoDelegate
+ y: 100; width: 800; height: 330; pathItemCount: 4; offset: 10
+ dragMargin: 24; snapPosition: 50
+
+ path: Path {
+ startX: -50; startY: 40;
+
+ PathAttribute { name: "scale"; value: 0.5 }
+ PathAttribute { name: "angle"; value: -45 }
+
+ PathCubic {
+ x: 400; y: 220
+ control1X: 140; control1Y: 40
+ control2X: 210; control2Y: 220
+ }
+
+ PathAttribute { name: "scale"; value: 1.2 }
+ PathAttribute { name: "angle"; value: 0 }
+
+ PathCubic {
+ x: 850; y: 40
+ control2X: 660; control2Y: 40
+ control1X: 590; control1Y: 220
+ }
+
+ PathAttribute { name: "scale"; value: 0.5 }
+ PathAttribute { name: "angle"; value: 45 }
+ }
+
+ model: ListModel {
+ id: rssModel
+ ListElement { lColor: "red" }
+ ListElement { lColor: "green" }
+ ListElement { lColor: "yellow" }
+ ListElement { lColor: "blue" }
+ ListElement { lColor: "purple" }
+ ListElement { lColor: "gray" }
+ ListElement { lColor: "brown" }
+ ListElement { lColor: "thistle" }
+ }
+
+ delegate: Component {
+ id: photoDelegate
+ Rectangle {
+ id: wrapper
+ width: 85; height: 85; color: lColor
+
+ transform: Rotation {
+ id: itemRotation; origin.x: wrapper.width/2; origin.y: wrapper.height/2
+ axis.y: 1; axis.z: 0
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicspathview/qmlgraphicspathview.pro b/tests/auto/declarative/qmlgraphicspathview/qmlgraphicspathview.pro
new file mode 100644
index 0000000..142a256
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicspathview/qmlgraphicspathview.pro
@@ -0,0 +1,8 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlgraphicspathview.cpp
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlgraphicspathview/tst_qmlgraphicspathview.cpp b/tests/auto/declarative/qmlgraphicspathview/tst_qmlgraphicspathview.cpp
new file mode 100644
index 0000000..4c2ecbd
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicspathview/tst_qmlgraphicspathview.cpp
@@ -0,0 +1,494 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <private/qmlgraphicspathview_p.h>
+#include <private/qmlgraphicspath_p.h>
+#include <qmlcontext.h>
+#include <qmlexpression.h>
+#include <qtest.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <QtDeclarative/qmlview.h>
+#include <QtDeclarative/private/qmlgraphicstext_p.h>
+#include <QtDeclarative/private/qmlgraphicsrectangle_p.h>
+#include <QAbstractListModel>
+#include <QFile>
+#include <private/qmlvaluetype_p.h>
+#include "../../../shared/util.h"
+
+class tst_QmlGraphicsPathView : public QObject
+{
+ Q_OBJECT
+public:
+ tst_QmlGraphicsPathView();
+
+private slots:
+ void initValues();
+ void items();
+ void dataModel();
+ void pathview2();
+ void pathview3();
+ void path();
+ void pathMoved();
+
+private:
+ QmlView *createView(const QString &filename);
+ template<typename T>
+ T *findItem(QmlGraphicsItem *parent, const QString &objectName, int index=-1);
+ template<typename T>
+ QList<T*> findItems(QmlGraphicsItem *parent, const QString &objectName);
+};
+
+class TestObject : public QObject
+{
+ Q_OBJECT
+
+ Q_PROPERTY(bool error READ error WRITE setError)
+ Q_PROPERTY(bool useModel READ useModel NOTIFY useModelChanged)
+ Q_PROPERTY(int pathItemCount READ pathItemCount NOTIFY pathItemCountChanged)
+
+public:
+ TestObject() : QObject(), mError(true), mUseModel(true), mPathItemCount(-1) {}
+
+ bool error() const { return mError; }
+ void setError(bool err) { mError = err; }
+
+ bool useModel() const { return mUseModel; }
+ void setUseModel(bool use) { mUseModel = use; emit useModelChanged(); }
+
+ int pathItemCount() const { return mPathItemCount; }
+ void setPathItemCount(int count) { mPathItemCount = count; emit pathItemCountChanged(); }
+
+signals:
+ void useModelChanged();
+ void pathItemCountChanged();
+
+private:
+ bool mError;
+ bool mUseModel;
+ int mPathItemCount;
+};
+
+class TestModel : public QAbstractListModel
+{
+public:
+ enum Roles { Name = Qt::UserRole+1, Number = Qt::UserRole+2 };
+
+ TestModel(QObject *parent=0) : QAbstractListModel(parent) {
+ QHash<int, QByteArray> roles;
+ roles[Name] = "name";
+ roles[Number] = "number";
+ setRoleNames(roles);
+ }
+
+ int rowCount(const QModelIndex &parent=QModelIndex()) const { return list.count(); }
+ QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const {
+ QVariant rv;
+ if (role == Name)
+ rv = list.at(index.row()).first;
+ else if (role == Number)
+ rv = list.at(index.row()).second;
+
+ return rv;
+ }
+
+ int count() const { return rowCount(); }
+ QString name(int index) const { return list.at(index).first; }
+ QString number(int index) const { return list.at(index).second; }
+
+ void addItem(const QString &name, const QString &number) {
+ emit beginInsertRows(QModelIndex(), list.count(), list.count());
+ list.append(QPair<QString,QString>(name, number));
+ emit endInsertRows();
+ }
+
+ void insertItem(int index, const QString &name, const QString &number) {
+ emit beginInsertRows(QModelIndex(), index, index);
+ list.insert(index, QPair<QString,QString>(name, number));
+ emit endInsertRows();
+ }
+
+ void removeItem(int index) {
+ emit beginRemoveRows(QModelIndex(), index, index);
+ list.removeAt(index);
+ emit endRemoveRows();
+ }
+
+ void moveItem(int from, int to) {
+ emit beginMoveRows(QModelIndex(), from, from, QModelIndex(), to);
+ list.move(from, to);
+ emit endMoveRows();
+ }
+
+ void modifyItem(int idx, const QString &name, const QString &number) {
+ list[idx] = QPair<QString,QString>(name, number);
+ emit dataChanged(index(idx,0), index(idx,0));
+ }
+
+private:
+ QList<QPair<QString,QString> > list;
+};
+
+
+tst_QmlGraphicsPathView::tst_QmlGraphicsPathView()
+{
+}
+
+void tst_QmlGraphicsPathView::initValues()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/pathview1.qml"));
+ QmlGraphicsPathView *obj = qobject_cast<QmlGraphicsPathView*>(c.create());
+
+ QVERIFY(obj != 0);
+ QVERIFY(obj->path() == 0);
+ QVERIFY(obj->delegate() == 0);
+ QCOMPARE(obj->model(), QVariant());
+ QCOMPARE(obj->currentIndex(), 0);
+ QCOMPARE(obj->offset(), 0.);
+ QCOMPARE(obj->snapPosition(), 0.);
+ QCOMPARE(obj->dragMargin(), 0.);
+ QCOMPARE(obj->count(), 0);
+ QCOMPARE(obj->pathItemCount(), -1);
+}
+
+void tst_QmlGraphicsPathView::items()
+{
+ QmlView *canvas = createView(SRCDIR "/data/pathview.qml");
+
+ TestModel model;
+ model.addItem("Fred", "12345");
+ model.addItem("John", "2345");
+ model.addItem("Bob", "54321");
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsPathView *pathview = findItem<QmlGraphicsPathView>(canvas->root(), "view");
+ QVERIFY(pathview != 0);
+
+ QCOMPARE(pathview->childItems().count(), model.count()); // assumes all are visible
+
+ for (int i = 0; i < model.count(); ++i) {
+ QmlGraphicsText *name = findItem<QmlGraphicsText>(pathview, "textName", i);
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), model.name(i));
+ QmlGraphicsText *number = findItem<QmlGraphicsText>(pathview, "textNumber", i);
+ QVERIFY(number != 0);
+ QCOMPARE(number->text(), model.number(i));
+ }
+
+ delete canvas;
+}
+
+void tst_QmlGraphicsPathView::pathview2()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/pathview2.qml"));
+ QmlGraphicsPathView *obj = qobject_cast<QmlGraphicsPathView*>(c.create());
+
+ QVERIFY(obj != 0);
+ QVERIFY(obj->path() != 0);
+ QVERIFY(obj->delegate() != 0);
+ QVERIFY(obj->model() != QVariant());
+ QCOMPARE(obj->currentIndex(), 0);
+ QCOMPARE(obj->offset(), 0.);
+ QCOMPARE(obj->snapPosition(), 0.);
+ QCOMPARE(obj->dragMargin(), 0.);
+ QCOMPARE(obj->count(), 8);
+ QCOMPARE(obj->pathItemCount(), 10);
+}
+
+void tst_QmlGraphicsPathView::pathview3()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/pathview3.qml"));
+ QmlGraphicsPathView *obj = qobject_cast<QmlGraphicsPathView*>(c.create());
+
+ QVERIFY(obj != 0);
+ QVERIFY(obj->path() != 0);
+ QVERIFY(obj->delegate() != 0);
+ QVERIFY(obj->model() != QVariant());
+ QCOMPARE(obj->currentIndex(), 0);
+ QCOMPARE(obj->offset(), 50.); // ???
+ QCOMPARE(obj->snapPosition(), 0.5); // ???
+ QCOMPARE(obj->dragMargin(), 24.);
+ QCOMPARE(obj->count(), 8);
+ QCOMPARE(obj->pathItemCount(), 4);
+}
+
+void tst_QmlGraphicsPathView::path()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/path.qml"));
+ QmlGraphicsPath *obj = qobject_cast<QmlGraphicsPath*>(c.create());
+
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->startX(), 120.);
+ QCOMPARE(obj->startY(), 100.);
+ QVERIFY(obj->path() != QPainterPath());
+
+ QList<QmlGraphicsPathElement*> *list = obj->pathElements();
+ QCOMPARE(list->count(), 5);
+
+ QmlGraphicsPathAttribute* attr = qobject_cast<QmlGraphicsPathAttribute*>(list->at(0));
+ QVERIFY(attr != 0);
+ QCOMPARE(attr->name(), QString("scale"));
+ QCOMPARE(attr->value(), 1.0);
+
+ QmlGraphicsPathQuad* quad = qobject_cast<QmlGraphicsPathQuad*>(list->at(1));
+ QVERIFY(quad != 0);
+ QCOMPARE(quad->x(), 120.);
+ QCOMPARE(quad->y(), 25.);
+ QCOMPARE(quad->controlX(), 260.);
+ QCOMPARE(quad->controlY(), 75.);
+
+ QmlGraphicsPathPercent* perc = qobject_cast<QmlGraphicsPathPercent*>(list->at(2));
+ QVERIFY(perc != 0);
+ QCOMPARE(perc->value(), 0.3);
+
+ QmlGraphicsPathLine* line = qobject_cast<QmlGraphicsPathLine*>(list->at(3));
+ QVERIFY(line != 0);
+ QCOMPARE(line->x(), 120.);
+ QCOMPARE(line->y(), 100.);
+
+ QmlGraphicsPathCubic* cubic = qobject_cast<QmlGraphicsPathCubic*>(list->at(4));
+ QVERIFY(cubic != 0);
+ QCOMPARE(cubic->x(), 180.);
+ QCOMPARE(cubic->y(), 0.);
+ QCOMPARE(cubic->control1X(), -10.);
+ QCOMPARE(cubic->control1Y(), 90.);
+ QCOMPARE(cubic->control2X(), 210.);
+ QCOMPARE(cubic->control2Y(), 90.);
+}
+
+void tst_QmlGraphicsPathView::dataModel()
+{
+ QmlView *canvas = createView(SRCDIR "/data/datamodel.qml");
+
+ QmlContext *ctxt = canvas->rootContext();
+ TestObject *testObject = new TestObject;
+ ctxt->setContextProperty("testObject", testObject);
+
+ TestModel model;
+ model.addItem("red", "1");
+ model.addItem("green", "2");
+ model.addItem("blue", "3");
+ model.addItem("purple", "4");
+ model.addItem("gray", "5");
+ model.addItem("brown", "6");
+ model.addItem("yellow", "7");
+ model.addItem("thistle", "8");
+ model.addItem("cyan", "9");
+
+ ctxt->setContextProperty("testData", &model);
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsPathView *pathview = qobject_cast<QmlGraphicsPathView*>(canvas->root());
+ QVERIFY(pathview != 0);
+
+ QMetaObject::invokeMethod(canvas->root(), "checkProperties");
+ QVERIFY(testObject->error() == false);
+
+ QmlGraphicsItem *item = findItem<QmlGraphicsItem>(pathview, "wrapper", 0);
+ QVERIFY(item);
+ QCOMPARE(item->x(), 110.0);
+ QCOMPARE(item->y(), 10.0);
+
+ model.insertItem(4, "orange", "10");
+
+ int itemCount = findItems<QmlGraphicsItem>(pathview, "wrapper").count();
+ QCOMPARE(itemCount, 10);
+
+ QmlGraphicsText *text = findItem<QmlGraphicsText>(pathview, "myText", 4);
+ QVERIFY(text);
+ QCOMPARE(text->text(), model.name(4));
+
+ model.removeItem(2);
+ text = findItem<QmlGraphicsText>(pathview, "myText", 2);
+ QVERIFY(text);
+ QCOMPARE(text->text(), model.name(2));
+
+ testObject->setPathItemCount(5);
+ QMetaObject::invokeMethod(canvas->root(), "checkProperties");
+ QVERIFY(testObject->error() == false);
+
+ itemCount = findItems<QmlGraphicsItem>(pathview, "wrapper").count();
+ QCOMPARE(itemCount, 5);
+
+ QmlGraphicsRectangle *testItem = findItem<QmlGraphicsRectangle>(pathview, "wrapper", 4);
+ QVERIFY(testItem != 0);
+ testItem = findItem<QmlGraphicsRectangle>(pathview, "wrapper", 5);
+ QVERIFY(testItem == 0);
+
+ model.insertItem(2, "pink", "2");
+
+ itemCount = findItems<QmlGraphicsItem>(pathview, "wrapper").count();
+ QCOMPARE(itemCount, 5);
+
+ text = findItem<QmlGraphicsText>(pathview, "myText", 2);
+ QVERIFY(text);
+ QCOMPARE(text->text(), model.name(2));
+
+ model.removeItem(3);
+ itemCount = findItems<QmlGraphicsItem>(pathview, "wrapper").count();
+ QCOMPARE(itemCount, 5);
+ text = findItem<QmlGraphicsText>(pathview, "myText", 3);
+ QVERIFY(text);
+ QCOMPARE(text->text(), model.name(3));
+
+ delete canvas;
+}
+
+void tst_QmlGraphicsPathView::pathMoved()
+{
+ QmlView *canvas = createView(SRCDIR "/data/pathview.qml");
+
+ TestModel model;
+ model.addItem("Ben", "12345");
+ model.addItem("Bohn", "2345");
+ model.addItem("Bob", "54321");
+ model.addItem("Bill", "4321");
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsPathView *pathview = findItem<QmlGraphicsPathView>(canvas->root(), "view");
+ QVERIFY(pathview != 0);
+
+ QmlGraphicsRectangle *firstItem = findItem<QmlGraphicsRectangle>(pathview, "wrapper", 0);
+ QVERIFY(firstItem);
+ QmlGraphicsPath *path = qobject_cast<QmlGraphicsPath*>(pathview->path());
+ QVERIFY(path);
+ QPointF start = path->pointAt(0.0);
+ QPointF offset;//Center of item is at point, but pos is from corner
+ offset.setX(firstItem->width()/2);
+ offset.setY(firstItem->height()/2);
+ QCOMPARE(firstItem->pos() + offset, start);
+ pathview->setOffset(10);
+ QTest::qWait(1000);//Moving is animated?
+
+ for(int i=0; i<model.count(); i++){
+ QmlGraphicsRectangle *curItem = findItem<QmlGraphicsRectangle>(pathview, "wrapper", i);
+ QCOMPARE(curItem->pos() + offset, path->pointAt(0.1 + i*0.25));
+ }
+
+ pathview->setOffset(100);
+ QTest::qWait(1000);//Moving is animated?
+ QCOMPARE(firstItem->pos() + offset, start);
+
+ delete canvas;
+}
+
+QmlView *tst_QmlGraphicsPathView::createView(const QString &filename)
+{
+ QmlView *canvas = new QmlView(0);
+ canvas->setFixedSize(240,320);
+
+ QFile file(filename);
+ file.open(QFile::ReadOnly);
+ QString qml = file.readAll();
+ canvas->setQml(qml, filename);
+
+ return canvas;
+}
+
+/*
+ Find an item with the specified objectName. If index is supplied then the
+ item must also evaluate the {index} expression equal to index
+ */
+template<typename T>
+T *tst_QmlGraphicsPathView::findItem(QmlGraphicsItem *parent, const QString &objectName, int index)
+{
+ const QMetaObject &mo = T::staticMetaObject;
+ //qDebug() << parent->childItems().count() << "children";
+ for (int i = 0; i < parent->childItems().count(); ++i) {
+ QmlGraphicsItem *item = qobject_cast<QmlGraphicsItem*>(parent->childItems().at(i));
+ if(!item)
+ continue;
+ //qDebug() << "try" << item;
+ if (mo.cast(item) && (objectName.isEmpty() || item->objectName() == objectName)) {
+ if (index != -1) {
+ QmlExpression e(qmlContext(item), "index", item);
+ e.setTrackChange(false);
+ if (e.value().toInt() == index)
+ return static_cast<T*>(item);
+ } else {
+ return static_cast<T*>(item);
+ }
+ }
+ item = findItem<T>(item, objectName, index);
+ if (item)
+ return static_cast<T*>(item);
+ }
+
+ return 0;
+}
+
+template<typename T>
+QList<T*> tst_QmlGraphicsPathView::findItems(QmlGraphicsItem *parent, const QString &objectName)
+{
+ QList<T*> items;
+ const QMetaObject &mo = T::staticMetaObject;
+ //qDebug() << parent->QGraphicsObject::children().count() << "children";
+ for (int i = 0; i < parent->childItems().count(); ++i) {
+ QmlGraphicsItem *item = qobject_cast<QmlGraphicsItem*>(parent->childItems().at(i));
+ if(!item)
+ continue;
+ //qDebug() << "try" << item;
+ if (mo.cast(item) && (objectName.isEmpty() || item->objectName() == objectName))
+ items.append(static_cast<T*>(item));
+ items += findItems<T>(item, objectName);
+ }
+
+ return items;
+}
+
+QTEST_MAIN(tst_QmlGraphicsPathView)
+
+#include "tst_qmlgraphicspathview.moc"
diff --git a/tests/auto/declarative/qmlgraphicspositioners/data/grid-animated.qml b/tests/auto/declarative/qmlgraphicspositioners/data/grid-animated.qml
new file mode 100644
index 0000000..022019c
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicspositioners/data/grid-animated.qml
@@ -0,0 +1,60 @@
+import Qt 4.6
+
+Item {
+ width: 640
+ height: 480
+ Grid {
+ columns: 3
+ add: Transition {
+ NumberAnimation {
+ matchProperties: "x,y";
+ }
+ }
+ move: Transition {
+ NumberAnimation {
+ matchProperties: "x,y";
+ }
+ }
+ Rectangle {
+ objectName: "one"
+ color: "red"
+ x: -100
+ y: -100
+ width: 50
+ height: 50
+ }
+ Rectangle {
+ objectName: "two"
+ x: -100
+ y: -100
+ opacity: 0
+ color: "green"
+ width: 50
+ height: 50
+ }
+ Rectangle {
+ objectName: "three"
+ color: "blue"
+ x: -100
+ y: -100
+ width: 50
+ height: 50
+ }
+ Rectangle {
+ objectName: "four"
+ color: "cyan"
+ x: -100
+ y: -100
+ width: 50
+ height: 50
+ }
+ Rectangle {
+ objectName: "five"
+ color: "magenta"
+ x: -100
+ y: -100
+ width: 50
+ height: 50
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicspositioners/data/grid-spacing.qml b/tests/auto/declarative/qmlgraphicspositioners/data/grid-spacing.qml
new file mode 100644
index 0000000..5b4a30d
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicspositioners/data/grid-spacing.qml
@@ -0,0 +1,40 @@
+import Qt 4.6
+
+Item {
+ width: 640
+ height: 480
+ Grid {
+ columns: 3
+ spacing: 4
+ Rectangle {
+ objectName: "one"
+ color: "red"
+ width: 50
+ height: 50
+ }
+ Rectangle {
+ objectName: "two"
+ color: "green"
+ width: 20
+ height: 50
+ }
+ Rectangle {
+ objectName: "three"
+ color: "blue"
+ width: 50
+ height: 20
+ }
+ Rectangle {
+ objectName: "four"
+ color: "cyan"
+ width: 50
+ height: 50
+ }
+ Rectangle {
+ objectName: "five"
+ color: "magenta"
+ width: 10
+ height: 10
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicspositioners/data/grid.qml b/tests/auto/declarative/qmlgraphicspositioners/data/grid.qml
new file mode 100644
index 0000000..830df6a
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicspositioners/data/grid.qml
@@ -0,0 +1,39 @@
+import Qt 4.6
+
+Item {
+ width: 640
+ height: 480
+ Grid {
+ columns: 3
+ Rectangle {
+ objectName: "one"
+ color: "red"
+ width: 50
+ height: 50
+ }
+ Rectangle {
+ objectName: "two"
+ color: "green"
+ width: 20
+ height: 50
+ }
+ Rectangle {
+ objectName: "three"
+ color: "blue"
+ width: 50
+ height: 20
+ }
+ Rectangle {
+ objectName: "four"
+ color: "cyan"
+ width: 50
+ height: 50
+ }
+ Rectangle {
+ objectName: "five"
+ color: "magenta"
+ width: 10
+ height: 10
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicspositioners/data/horizontal-animated.qml b/tests/auto/declarative/qmlgraphicspositioners/data/horizontal-animated.qml
new file mode 100644
index 0000000..eba165c
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicspositioners/data/horizontal-animated.qml
@@ -0,0 +1,40 @@
+import Qt 4.6
+
+Item {
+ width: 640
+ height: 480
+ Row {
+ add: Transition {
+ NumberAnimation {
+ matchProperties: "x";
+ }
+ }
+ move: Transition {
+ NumberAnimation {
+ matchProperties: "x";
+ }
+ }
+ Rectangle {
+ objectName: "one"
+ color: "red"
+ x: -100;
+ width: 50
+ height: 50
+ }
+ Rectangle {
+ objectName: "two"
+ color: "blue"
+ x: -100;
+ opacity: 0
+ width: 50
+ height: 50
+ }
+ Rectangle {
+ objectName: "three"
+ x: -100;
+ color: "green"
+ width: 50
+ height: 50
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicspositioners/data/horizontal-spacing.qml b/tests/auto/declarative/qmlgraphicspositioners/data/horizontal-spacing.qml
new file mode 100644
index 0000000..32bf775
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicspositioners/data/horizontal-spacing.qml
@@ -0,0 +1,27 @@
+import Qt 4.6
+
+Item {
+ width: 640
+ height: 480
+ Row {
+ spacing: 10
+ Rectangle {
+ objectName: "one"
+ color: "red"
+ width: 50
+ height: 50
+ }
+ Rectangle {
+ objectName: "two"
+ color: "red"
+ width: 20
+ height: 10
+ }
+ Rectangle {
+ objectName: "three"
+ color: "red"
+ width: 40
+ height: 20
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicspositioners/data/horizontal.qml b/tests/auto/declarative/qmlgraphicspositioners/data/horizontal.qml
new file mode 100644
index 0000000..06ae151
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicspositioners/data/horizontal.qml
@@ -0,0 +1,26 @@
+import Qt 4.6
+
+Item {
+ width: 640
+ height: 480
+ Row {
+ Rectangle {
+ objectName: "one"
+ color: "red"
+ width: 50
+ height: 50
+ }
+ Rectangle {
+ objectName: "two"
+ color: "red"
+ width: 20
+ height: 10
+ }
+ Rectangle {
+ objectName: "three"
+ color: "red"
+ width: 40
+ height: 20
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicspositioners/data/repeater.qml b/tests/auto/declarative/qmlgraphicspositioners/data/repeater.qml
new file mode 100644
index 0000000..2bc5e94
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicspositioners/data/repeater.qml
@@ -0,0 +1,20 @@
+import Qt 4.6
+
+Item {
+ width: 640
+ height: 480
+ Row {
+ Repeater{ model: 3;
+ delegate: Component {
+ Rectangle {
+ color: "red"
+ width: 50
+ height: 50
+ z: {if(index == 0){2;}else if(index == 1){1;} else{3;}}
+ objectName: {if(index == 0){"one";}else if(index == 1){"two";} else{"three";}}
+
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicspositioners/data/vertical-animated.qml b/tests/auto/declarative/qmlgraphicspositioners/data/vertical-animated.qml
new file mode 100644
index 0000000..8e3abbd
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicspositioners/data/vertical-animated.qml
@@ -0,0 +1,40 @@
+import Qt 4.6
+
+Item {
+ width: 640
+ height: 480
+ Column {
+ add: Transition {
+ NumberAnimation {
+ matchProperties: "y";
+ }
+ }
+ move: Transition {
+ NumberAnimation {
+ matchProperties: "y";
+ }
+ }
+ Rectangle {
+ objectName: "one"
+ color: "red"
+ y: -100
+ width: 50
+ height: 50
+ }
+ Rectangle {
+ objectName: "two"
+ color: "blue"
+ y: -100
+ opacity: 0
+ width: 50
+ height: 50
+ }
+ Rectangle {
+ objectName: "three"
+ color: "red"
+ y: -100
+ width: 50
+ height: 50
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicspositioners/data/vertical-spacing.qml b/tests/auto/declarative/qmlgraphicspositioners/data/vertical-spacing.qml
new file mode 100644
index 0000000..69a8256
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicspositioners/data/vertical-spacing.qml
@@ -0,0 +1,27 @@
+import Qt 4.6
+
+Item {
+ width: 640
+ height: 480
+ Column {
+ spacing: 10
+ Rectangle {
+ objectName: "one"
+ color: "red"
+ width: 50
+ height: 50
+ }
+ Rectangle {
+ objectName: "two"
+ color: "red"
+ width: 20
+ height: 10
+ }
+ Rectangle {
+ objectName: "three"
+ color: "red"
+ width: 40
+ height: 20
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicspositioners/data/vertical.qml b/tests/auto/declarative/qmlgraphicspositioners/data/vertical.qml
new file mode 100644
index 0000000..856c180
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicspositioners/data/vertical.qml
@@ -0,0 +1,26 @@
+import Qt 4.6
+
+Item {
+ width: 640
+ height: 480
+ Column {
+ Rectangle {
+ objectName: "one"
+ color: "red"
+ width: 50
+ height: 50
+ }
+ Rectangle {
+ objectName: "two"
+ color: "red"
+ width: 20
+ height: 10
+ }
+ Rectangle {
+ objectName: "three"
+ color: "red"
+ width: 40
+ height: 20
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicspositioners/qmlgraphicspositioners.pro b/tests/auto/declarative/qmlgraphicspositioners/qmlgraphicspositioners.pro
new file mode 100644
index 0000000..d151026
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicspositioners/qmlgraphicspositioners.pro
@@ -0,0 +1,7 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+SOURCES += tst_qmlgraphicspositioners.cpp
+macx:CONFIG -= app_bundle
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlgraphicspositioners/tst_qmlgraphicspositioners.cpp b/tests/auto/declarative/qmlgraphicspositioners/tst_qmlgraphicspositioners.cpp
new file mode 100644
index 0000000..0e2109b
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicspositioners/tst_qmlgraphicspositioners.cpp
@@ -0,0 +1,428 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtTest/QtTest>
+#include <private/qlistmodelinterface_p.h>
+#include <qmlview.h>
+#include <private/qmlgraphicsrectangle_p.h>
+#include <qmlexpression.h>
+
+class tst_QmlGraphicsPositioners : public QObject
+{
+ Q_OBJECT
+public:
+ tst_QmlGraphicsPositioners();
+
+private slots:
+ void test_horizontal();
+ void test_horizontal_spacing();
+ void test_horizontal_animated();
+ void test_vertical();
+ void test_vertical_spacing();
+ void test_vertical_animated();
+ void test_grid();
+ void test_grid_spacing();
+ void test_grid_animated();
+
+ void test_repeater();
+private:
+ QmlView *createView(const QString &filename);
+};
+
+tst_QmlGraphicsPositioners::tst_QmlGraphicsPositioners()
+{
+}
+
+void tst_QmlGraphicsPositioners::test_horizontal()
+{
+ QmlView *canvas = createView(SRCDIR "/data/horizontal.qml");
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one");
+ QVERIFY(one != 0);
+
+ QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two");
+ QVERIFY(two != 0);
+
+ QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three");
+ QVERIFY(three != 0);
+
+ QCOMPARE(one->x(), 0.0);
+ QCOMPARE(one->y(), 0.0);
+ QCOMPARE(two->x(), 50.0);
+ QCOMPARE(two->y(), 0.0);
+ QCOMPARE(three->x(), 70.0);
+ QCOMPARE(three->y(), 0.0);
+}
+
+void tst_QmlGraphicsPositioners::test_horizontal_spacing()
+{
+ QmlView *canvas = createView(SRCDIR "/data/horizontal-spacing.qml");
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one");
+ QVERIFY(one != 0);
+
+ QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two");
+ QVERIFY(two != 0);
+
+ QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three");
+ QVERIFY(three != 0);
+
+ QCOMPARE(one->x(), 0.0);
+ QCOMPARE(one->y(), 0.0);
+ QCOMPARE(two->x(), 60.0);
+ QCOMPARE(two->y(), 0.0);
+ QCOMPARE(three->x(), 90.0);
+ QCOMPARE(three->y(), 0.0);
+}
+
+void tst_QmlGraphicsPositioners::test_horizontal_animated()
+{
+ QmlView *canvas = createView(SRCDIR "/data/horizontal-animated.qml");
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QTest::qWait(0);//Let the animation start
+ //Note that they animate in
+ QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one");
+ QVERIFY(one != 0);
+ QCOMPARE(one->x(), -100.0);
+
+ QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two");
+ QVERIFY(two != 0);
+ QCOMPARE(two->x(), -100.0);
+
+ QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three");
+ QVERIFY(three != 0);
+ QCOMPARE(three->x(), -100.0);
+
+ QTest::qWait(300);//Let the animation complete
+
+ QCOMPARE(one->x(), 0.0);
+ QCOMPARE(one->y(), 0.0);
+ QCOMPARE(two->opacity(), 0.0);
+ QCOMPARE(two->x(), -100.0);//Not 'in' yet
+ QCOMPARE(two->y(), 0.0);
+ QCOMPARE(three->x(), 50.0);
+ QCOMPARE(three->y(), 0.0);
+
+ //Add 'two'
+ two->setOpacity(1.0);
+ QCOMPARE(two->opacity(), 1.0);
+ QTest::qWait(0);//Let the animation start
+ QCOMPARE(two->x(), -100.0);
+ QCOMPARE(three->x(), 50.0);
+ QTest::qWait(300);//Let the animation complete
+ QCOMPARE(two->x(), 50.0);
+ QCOMPARE(three->x(), 100.0);
+}
+
+void tst_QmlGraphicsPositioners::test_vertical()
+{
+ QmlView *canvas = createView(SRCDIR "/data/vertical.qml");
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one");
+ QVERIFY(one != 0);
+
+ QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two");
+ QVERIFY(two != 0);
+
+ QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three");
+ QVERIFY(three != 0);
+
+ QCOMPARE(one->x(), 0.0);
+ QCOMPARE(one->y(), 0.0);
+ QCOMPARE(two->x(), 0.0);
+ QCOMPARE(two->y(), 50.0);
+ QCOMPARE(three->x(), 0.0);
+ QCOMPARE(three->y(), 60.0);
+}
+
+void tst_QmlGraphicsPositioners::test_vertical_spacing()
+{
+ QmlView *canvas = createView(SRCDIR "/data/vertical-spacing.qml");
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one");
+ QVERIFY(one != 0);
+
+ QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two");
+ QVERIFY(two != 0);
+
+ QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three");
+ QVERIFY(three != 0);
+
+ QCOMPARE(one->x(), 0.0);
+ QCOMPARE(one->y(), 0.0);
+ QCOMPARE(two->x(), 0.0);
+ QCOMPARE(two->y(), 60.0);
+ QCOMPARE(three->x(), 0.0);
+ QCOMPARE(three->y(), 80.0);
+}
+
+void tst_QmlGraphicsPositioners::test_vertical_animated()
+{
+ QmlView *canvas = createView(SRCDIR "/data/vertical-animated.qml");
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QTest::qWait(0);//Let the animation start
+ //Note that they animate in
+ QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one");
+ QVERIFY(one != 0);
+ QCOMPARE(one->y(), -100.0);
+
+ QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two");
+ QVERIFY(two != 0);
+ QCOMPARE(two->y(), -100.0);
+
+ QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three");
+ QVERIFY(three != 0);
+ QCOMPARE(three->y(), -100.0);
+
+ QTest::qWait(300);//Let the animation complete
+
+ QCOMPARE(one->y(), 0.0);
+ QCOMPARE(one->x(), 0.0);
+ QCOMPARE(two->opacity(), 0.0);
+ QCOMPARE(two->y(), -100.0);//Not 'in' yet
+ QCOMPARE(two->x(), 0.0);
+ QCOMPARE(three->y(), 50.0);
+ QCOMPARE(three->x(), 0.0);
+
+ //Add 'two'
+ two->setOpacity(1.0);
+ QCOMPARE(two->opacity(), 1.0);
+ QTest::qWait(0);//Let the animation start
+ QCOMPARE(two->y(), -100.0);
+ QCOMPARE(three->y(), 50.0);
+ QTest::qWait(300);//Let the animation complete
+ QCOMPARE(two->y(), 50.0);
+ QCOMPARE(three->y(), 100.0);
+
+}
+
+void tst_QmlGraphicsPositioners::test_grid()
+{
+ QmlView *canvas = createView("data/grid.qml");
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one");
+ QVERIFY(one != 0);
+ QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two");
+ QVERIFY(two != 0);
+ QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three");
+ QVERIFY(three != 0);
+ QmlGraphicsRectangle *four = canvas->root()->findChild<QmlGraphicsRectangle*>("four");
+ QVERIFY(four != 0);
+ QmlGraphicsRectangle *five = canvas->root()->findChild<QmlGraphicsRectangle*>("five");
+ QVERIFY(five != 0);
+
+ QCOMPARE(one->x(), 0.0);
+ QCOMPARE(one->y(), 0.0);
+ QCOMPARE(two->x(), 50.0);
+ QCOMPARE(two->y(), 0.0);
+ QCOMPARE(three->x(), 70.0);
+ QCOMPARE(three->y(), 0.0);
+ QCOMPARE(four->x(), 0.0);
+ QCOMPARE(four->y(), 50.0);
+ QCOMPARE(five->x(), 50.0);
+ QCOMPARE(five->y(), 50.0);
+}
+
+void tst_QmlGraphicsPositioners::test_grid_spacing()
+{
+ QmlView *canvas = createView("data/grid-spacing.qml");
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one");
+ QVERIFY(one != 0);
+ QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two");
+ QVERIFY(two != 0);
+ QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three");
+ QVERIFY(three != 0);
+ QmlGraphicsRectangle *four = canvas->root()->findChild<QmlGraphicsRectangle*>("four");
+ QVERIFY(four != 0);
+ QmlGraphicsRectangle *five = canvas->root()->findChild<QmlGraphicsRectangle*>("five");
+ QVERIFY(five != 0);
+
+ QCOMPARE(one->x(), 0.0);
+ QCOMPARE(one->y(), 0.0);
+ QCOMPARE(two->x(), 54.0);
+ QCOMPARE(two->y(), 0.0);
+ QCOMPARE(three->x(), 78.0);
+ QCOMPARE(three->y(), 0.0);
+ QCOMPARE(four->x(), 0.0);
+ QCOMPARE(four->y(), 54.0);
+ QCOMPARE(five->x(), 54.0);
+ QCOMPARE(five->y(), 54.0);
+}
+
+void tst_QmlGraphicsPositioners::test_grid_animated()
+{
+ QmlView *canvas = createView(SRCDIR "/data/grid-animated.qml");
+ canvas->execute();
+ qApp->processEvents();
+
+ QTest::qWait(0);//Let the animation start
+ //Note that all animate in
+ QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one");
+ QVERIFY(one != 0);
+ QCOMPARE(one->x(), -100.0);
+ QCOMPARE(one->y(), -100.0);
+
+ QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two");
+ QVERIFY(two != 0);
+ QCOMPARE(two->x(), -100.0);
+ QCOMPARE(two->y(), -100.0);
+
+ QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three");
+ QVERIFY(three != 0);
+ QCOMPARE(three->x(), -100.0);
+ QCOMPARE(three->y(), -100.0);
+
+ QmlGraphicsRectangle *four = canvas->root()->findChild<QmlGraphicsRectangle*>("four");
+ QVERIFY(four != 0);
+ QCOMPARE(four->x(), -100.0);
+ QCOMPARE(four->y(), -100.0);
+
+ QmlGraphicsRectangle *five = canvas->root()->findChild<QmlGraphicsRectangle*>("five");
+ QVERIFY(five != 0);
+ QCOMPARE(five->x(), -100.0);
+ QCOMPARE(five->y(), -100.0);
+
+ QTest::qWait(300);//Let the animation complete
+
+ QCOMPARE(one->y(), 0.0);
+ QCOMPARE(one->x(), 0.0);
+ QCOMPARE(two->opacity(), 0.0);
+ QCOMPARE(two->y(), -100.0);
+ QCOMPARE(two->x(), -100.0);
+ QCOMPARE(three->y(), 0.0);
+ QCOMPARE(three->x(), 50.0);
+ QCOMPARE(four->y(), 0.0);
+ QCOMPARE(four->x(), 100.0);
+ QCOMPARE(five->y(), 50.0);
+ QCOMPARE(five->x(), 0.0);
+
+ //Add 'two'
+ two->setOpacity(1.0);
+ QCOMPARE(two->opacity(), 1.0);
+ QTest::qWait(0);//Let the animation start
+ QCOMPARE(two->x(), -100.0);
+ QCOMPARE(two->y(), -100.0);
+ QCOMPARE(one->x(), 0.0);
+ QCOMPARE(one->y(), 0.0);
+ QCOMPARE(three->x(), 50.0);
+ QCOMPARE(three->y(), 0.0);
+ QCOMPARE(four->x(), 100.0);
+ QCOMPARE(four->y(), 0.0);
+ QCOMPARE(five->x(), 0.0);
+ QCOMPARE(five->y(), 50.0);
+ QTest::qWait(300);//Let the animation complete
+ QCOMPARE(two->x(), 50.0);
+ QCOMPARE(two->y(), 0.0);
+ QCOMPARE(one->x(), 0.0);
+ QCOMPARE(one->y(), 0.0);
+ QCOMPARE(three->x(), 100.0);
+ QCOMPARE(three->y(), 0.0);
+ QCOMPARE(four->x(), 0.0);
+ QCOMPARE(four->y(), 50.0);
+ QCOMPARE(five->x(), 50.0);
+ QCOMPARE(five->y(), 50.0);
+
+}
+
+void tst_QmlGraphicsPositioners::test_repeater()
+{
+ QmlView *canvas = createView("data/repeater.qml");
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one");
+ QVERIFY(one != 0);
+
+ QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two");
+ QVERIFY(two != 0);
+
+ QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three");
+ QVERIFY(three != 0);
+
+ QCOMPARE(one->x(), 0.0);
+ QCOMPARE(one->y(), 0.0);
+ QCOMPARE(two->x(), 50.0);
+ QCOMPARE(two->y(), 0.0);
+ QCOMPARE(three->x(), 100.0);
+ QCOMPARE(three->y(), 0.0);
+}
+
+QmlView *tst_QmlGraphicsPositioners::createView(const QString &filename)
+{
+ QmlView *canvas = new QmlView(0);
+
+ QFile file(filename);
+ file.open(QFile::ReadOnly);
+ QString xml = file.readAll();
+ canvas->setQml(xml, filename);
+
+ return canvas;
+}
+
+
+QTEST_MAIN(tst_QmlGraphicsPositioners)
+
+#include "tst_qmlgraphicspositioners.moc"
diff --git a/tests/auto/declarative/qmlgraphicsrepeater/data/intmodel.qml b/tests/auto/declarative/qmlgraphicsrepeater/data/intmodel.qml
new file mode 100644
index 0000000..cf1fb4d
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsrepeater/data/intmodel.qml
@@ -0,0 +1,29 @@
+import Qt 4.6
+
+Rectangle {
+ id: container
+ objectName: "container"
+ width: 240
+ height: 320
+ color: "white"
+
+ function checkProperties() {
+ testObject.error = false;
+ if (repeater.delegate != comp) {
+ console.log("delegate property incorrect");
+ testObject.error = true;
+ }
+ }
+
+ Component {
+ id: comp
+ Item{}
+ }
+
+ Repeater {
+ id: repeater
+ objectName: "repeater"
+ model: testData
+ delegate: comp
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicsrepeater/data/itemlist.qml b/tests/auto/declarative/qmlgraphicsrepeater/data/itemlist.qml
new file mode 100644
index 0000000..fc6b34c
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsrepeater/data/itemlist.qml
@@ -0,0 +1,49 @@
+// This example demonstrates placing items in a view using
+// a VisualItemModel
+
+import Qt 4.6
+
+Rectangle {
+ color: "lightgray"
+ width: 240
+ height: 320
+
+ function checkProperties() {
+ testObject.error = false;
+ if (testObject.useModel && view.model != itemModel) {
+ console.log("model property incorrect");
+ testObject.error = true;
+ }
+ }
+
+ VisualItemModel {
+ id: itemModel
+ objectName: "itemModel"
+ Rectangle {
+ objectName: "item1"
+ height: view.height; width: view.width; color: "#FFFEF0"
+ Text { objectName: "text1"; text: "index: " + parent.VisualItemModel.index; font.bold: true; anchors.centerIn: parent }
+ }
+ Rectangle {
+ objectName: "item2"
+ height: view.height; width: view.width; color: "#F0FFF7"
+ Text { objectName: "text2"; text: "index: " + parent.VisualItemModel.index; font.bold: true; anchors.centerIn: parent }
+ }
+ Rectangle {
+ objectName: "item3"
+ height: view.height; width: view.width; color: "#F4F0FF"
+ Text { objectName: "text3"; text: "index: " + parent.VisualItemModel.index; font.bold: true; anchors.centerIn: parent }
+ }
+ }
+
+ Column {
+ objectName: "container"
+ Repeater {
+ id: view
+ objectName: "repeater"
+ anchors.fill: parent
+ anchors.bottomMargin: 30
+ model: testObject.useModel ? itemModel : 0
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicsrepeater/data/objlist.qml b/tests/auto/declarative/qmlgraphicsrepeater/data/objlist.qml
new file mode 100644
index 0000000..e6d0acb
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsrepeater/data/objlist.qml
@@ -0,0 +1,21 @@
+import Qt 4.6
+
+Rectangle {
+ id: container
+ objectName: "container"
+ width: 240
+ height: 320
+ color: "white"
+ Repeater {
+ id: repeater
+ objectName: "repeater"
+ model: testData
+ property int errors: 0
+ property int instantiated: 0
+ Component {
+ Item{
+ Component.onCompleted: {if(index!=model.idx) repeater.errors += 1; repeater.instantiated++}
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicsrepeater/data/repeater.qml b/tests/auto/declarative/qmlgraphicsrepeater/data/repeater.qml
new file mode 100644
index 0000000..7d83230
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsrepeater/data/repeater.qml
@@ -0,0 +1,28 @@
+import Qt 4.6
+
+Rectangle {
+ id: container
+ objectName: "container"
+ width: 240
+ height: 320
+ color: "white"
+ Text {
+ text: "Zero"
+ }
+ Repeater {
+ id: repeater
+ objectName: "repeater"
+ width: 240
+ height: 320
+ model: testData
+ Component {
+ Text {
+ y: index*20
+ text: modelData
+ }
+ }
+ }
+ Text {
+ text: "Last"
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicsrepeater/data/repeater2.qml b/tests/auto/declarative/qmlgraphicsrepeater/data/repeater2.qml
new file mode 100644
index 0000000..c3c3260
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsrepeater/data/repeater2.qml
@@ -0,0 +1,35 @@
+import Qt 4.6
+
+Rectangle {
+ width: 240
+ height: 320
+ color: "white"
+ Component {
+ id: myDelegate
+ Item {
+ objectName: "myDelegate"
+ height: 20
+ Text {
+ y: index*20
+ text: name
+ }
+ Text {
+ y: index*20
+ x: 100
+ text: number
+ }
+ }
+ }
+ Column {
+ id: container
+ objectName: "container"
+ Repeater {
+ id: repeater
+ objectName: "repeater"
+ width: 240
+ height: 320
+ delegate: myDelegate
+ model: testData
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicsrepeater/qmlgraphicsrepeater.pro b/tests/auto/declarative/qmlgraphicsrepeater/qmlgraphicsrepeater.pro
new file mode 100644
index 0000000..0a10ec6
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsrepeater/qmlgraphicsrepeater.pro
@@ -0,0 +1,8 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlgraphicsrepeater.cpp
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlgraphicsrepeater/tst_qmlgraphicsrepeater.cpp b/tests/auto/declarative/qmlgraphicsrepeater/tst_qmlgraphicsrepeater.cpp
new file mode 100644
index 0000000..4297901
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicsrepeater/tst_qmlgraphicsrepeater.cpp
@@ -0,0 +1,354 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtTest/QtTest>
+#include <private/qlistmodelinterface_p.h>
+#include <qmlview.h>
+#include <private/qmlgraphicsrepeater_p.h>
+#include <private/qmlgraphicstext_p.h>
+#include <qmlcontext.h>
+
+class tst_QmlGraphicsRepeater : public QObject
+{
+ Q_OBJECT
+public:
+ tst_QmlGraphicsRepeater();
+
+private slots:
+ void numberModel();
+ void objectList();
+ void stringList();
+ void dataModel();
+ void itemModel();
+
+private:
+ QmlView *createView(const QString &filename);
+ template<typename T>
+ T *findItem(QmlGraphicsItem *parent, const QString &id);
+};
+
+class TestObject : public QObject
+{
+ Q_OBJECT
+
+ Q_PROPERTY(bool error READ error WRITE setError)
+ Q_PROPERTY(bool useModel READ useModel NOTIFY useModelChanged)
+
+public:
+ TestObject() : QObject(), mError(true), mUseModel(false) {}
+
+ bool error() const { return mError; }
+ void setError(bool err) { mError = err; }
+
+ bool useModel() const { return mUseModel; }
+ void setUseModel(bool use) { mUseModel = use; emit useModelChanged(); }
+
+signals:
+ void useModelChanged();
+
+private:
+ bool mError;
+ bool mUseModel;
+};
+
+class TestModel : public QAbstractListModel
+{
+public:
+ enum Roles { Name = Qt::UserRole+1, Number = Qt::UserRole+2 };
+
+ TestModel(QObject *parent=0) : QAbstractListModel(parent) {
+ QHash<int, QByteArray> roles;
+ roles[Name] = "name";
+ roles[Number] = "number";
+ setRoleNames(roles);
+ }
+
+ int rowCount(const QModelIndex &parent=QModelIndex()) const { return list.count(); }
+ QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const {
+ QVariant rv;
+ if (role == Name)
+ rv = list.at(index.row()).first;
+ else if (role == Number)
+ rv = list.at(index.row()).second;
+
+ return rv;
+ }
+
+ int count() const { return rowCount(); }
+ QString name(int index) const { return list.at(index).first; }
+ QString number(int index) const { return list.at(index).second; }
+
+ void addItem(const QString &name, const QString &number) {
+ emit beginInsertRows(QModelIndex(), list.count(), list.count());
+ list.append(QPair<QString,QString>(name, number));
+ emit endInsertRows();
+ }
+
+ void insertItem(int index, const QString &name, const QString &number) {
+ emit beginInsertRows(QModelIndex(), index, index);
+ list.insert(index, QPair<QString,QString>(name, number));
+ emit endInsertRows();
+ }
+
+ void removeItem(int index) {
+ emit beginRemoveRows(QModelIndex(), index, index);
+ list.removeAt(index);
+ emit endRemoveRows();
+ }
+
+ void moveItem(int from, int to) {
+ emit beginMoveRows(QModelIndex(), from, from, QModelIndex(), to);
+ list.move(from, to);
+ emit endMoveRows();
+ }
+
+ void modifyItem(int idx, const QString &name, const QString &number) {
+ list[idx] = QPair<QString,QString>(name, number);
+ emit dataChanged(index(idx,0), index(idx,0));
+ }
+
+private:
+ QList<QPair<QString,QString> > list;
+};
+
+
+tst_QmlGraphicsRepeater::tst_QmlGraphicsRepeater()
+{
+}
+
+void tst_QmlGraphicsRepeater::numberModel()
+{
+ QmlView *canvas = createView(SRCDIR "/data/intmodel.qml");
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testData", 5);
+ TestObject *testObject = new TestObject;
+ ctxt->setContextProperty("testObject", testObject);
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsRepeater *repeater = findItem<QmlGraphicsRepeater>(canvas->root(), "repeater");
+ QVERIFY(repeater != 0);
+ QCOMPARE(repeater->parentItem()->childItems().count(), 5+1);
+
+ QMetaObject::invokeMethod(canvas->root(), "checkProperties");
+ QVERIFY(testObject->error() == false);
+
+ delete canvas;
+}
+
+void tst_QmlGraphicsRepeater::objectList()
+{
+ QmlView *canvas = createView(SRCDIR "/data/objlist.qml");
+
+ QObjectList* data = new QObjectList;
+ for(int i=0; i<100; i++){
+ *data << new QObject();
+ data->back()->setProperty("idx", i);
+ }
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testData", QVariant::fromValue<QObjectList*>(data));
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsRepeater *repeater = findItem<QmlGraphicsRepeater>(canvas->root(), "repeater");
+ QVERIFY(repeater != 0);
+ QCOMPARE(repeater->property("errors").toInt(), 0);//If this fails either they are out of order or can't find the object's data
+ QCOMPARE(repeater->property("instantiated").toInt(), 100);
+}
+
+/*
+The Repeater element creates children at its own position in its parent's
+stacking order. In this test we insert a repeater between two other Text
+elements to test this.
+*/
+void tst_QmlGraphicsRepeater::stringList()
+{
+ QmlView *canvas = createView(SRCDIR "/data/repeater.qml");
+
+ QStringList data;
+ data << "One";
+ data << "Two";
+ data << "Three";
+ data << "Four";
+
+ QmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testData", data);
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsRepeater *repeater = findItem<QmlGraphicsRepeater>(canvas->root(), "repeater");
+ QVERIFY(repeater != 0);
+
+ QmlGraphicsItem *container = findItem<QmlGraphicsItem>(canvas->root(), "container");
+ QVERIFY(container != 0);
+
+ QCOMPARE(container->childItems().count(), data.count() + 3);
+
+ bool saw_repeater = false;
+ for (int i = 0; i < container->childItems().count(); ++i) {
+
+ if (i == 0) {
+ QmlGraphicsText *name = qobject_cast<QmlGraphicsText*>(container->childItems().at(i));
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), QLatin1String("Zero"));
+ } else if (i == container->childItems().count() - 2) {
+ // The repeater itself
+ QmlGraphicsRepeater *rep = qobject_cast<QmlGraphicsRepeater*>(container->childItems().at(i));
+ QCOMPARE(rep, repeater);
+ saw_repeater = true;
+ continue;
+ } else if (i == container->childItems().count() - 1) {
+ QmlGraphicsText *name = qobject_cast<QmlGraphicsText*>(container->childItems().at(i));
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), QLatin1String("Last"));
+ } else {
+ QmlGraphicsText *name = qobject_cast<QmlGraphicsText*>(container->childItems().at(i));
+ QVERIFY(name != 0);
+ QCOMPARE(name->text(), data.at(i-1));
+ }
+ }
+ QVERIFY(saw_repeater);
+
+ delete canvas;
+}
+
+void tst_QmlGraphicsRepeater::dataModel()
+{
+ QmlView *canvas = createView(SRCDIR "/data/repeater2.qml");
+ QmlContext *ctxt = canvas->rootContext();
+ TestObject *testObject = new TestObject;
+ ctxt->setContextProperty("testObject", testObject);
+
+ TestModel testModel;
+ testModel.addItem("one", "1");
+ testModel.addItem("two", "2");
+ testModel.addItem("three", "3");
+
+ ctxt->setContextProperty("testData", &testModel);
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsRepeater *repeater = findItem<QmlGraphicsRepeater>(canvas->root(), "repeater");
+ QVERIFY(repeater != 0);
+
+ QmlGraphicsItem *container = findItem<QmlGraphicsItem>(canvas->root(), "container");
+ QVERIFY(container != 0);
+
+ QCOMPARE(container->childItems().count(), 4);
+
+ testModel.addItem("four", "4");
+ QCOMPARE(container->childItems().count(), 5);
+
+ testModel.removeItem(2);
+ QCOMPARE(container->childItems().count(), 4);
+}
+
+void tst_QmlGraphicsRepeater::itemModel()
+{
+ QmlView *canvas = createView(SRCDIR "/data/itemlist.qml");
+ QmlContext *ctxt = canvas->rootContext();
+ TestObject *testObject = new TestObject;
+ ctxt->setContextProperty("testObject", testObject);
+
+ canvas->execute();
+ qApp->processEvents();
+
+ QmlGraphicsRepeater *repeater = findItem<QmlGraphicsRepeater>(canvas->root(), "repeater");
+ QVERIFY(repeater != 0);
+
+ QmlGraphicsItem *container = findItem<QmlGraphicsItem>(canvas->root(), "container");
+ QVERIFY(container != 0);
+
+ QCOMPARE(container->childItems().count(), 1);
+
+ testObject->setUseModel(true);
+ QMetaObject::invokeMethod(canvas->root(), "checkProperties");
+ QVERIFY(testObject->error() == false);
+
+ QCOMPARE(container->childItems().count(), 4);
+ QVERIFY(qobject_cast<QObject*>(container->childItems().at(0))->objectName() == "item1");
+ QVERIFY(qobject_cast<QObject*>(container->childItems().at(1))->objectName() == "item2");
+ QVERIFY(qobject_cast<QObject*>(container->childItems().at(2))->objectName() == "item3");
+ QVERIFY(container->childItems().at(3) == repeater);
+
+ delete canvas;
+}
+
+
+QmlView *tst_QmlGraphicsRepeater::createView(const QString &filename)
+{
+ QmlView *canvas = new QmlView(0);
+ canvas->setFixedSize(240,320);
+
+ QFile file(filename);
+ file.open(QFile::ReadOnly);
+ QString qml = file.readAll();
+ canvas->setQml(qml, filename);
+
+ return canvas;
+}
+
+template<typename T>
+T *tst_QmlGraphicsRepeater::findItem(QmlGraphicsItem *parent, const QString &objectName)
+{
+ const QMetaObject &mo = T::staticMetaObject;
+ if (mo.cast(parent) && (objectName.isEmpty() || parent->objectName() == objectName))
+ return static_cast<T*>(parent);
+ for (int i = 0; i < parent->childItems().count(); ++i) {
+ QmlGraphicsItem *child = qobject_cast<QmlGraphicsItem*>(parent->childItems().at(i));
+ if (!child)
+ continue;
+ QmlGraphicsItem *item = findItem<T>(child, objectName);
+ if (item)
+ return static_cast<T*>(item);
+ }
+
+ return 0;
+}
+
+QTEST_MAIN(tst_QmlGraphicsRepeater)
+
+#include "tst_qmlgraphicsrepeater.moc"
diff --git a/tests/auto/declarative/qmlgraphicstext/qmlgraphicstext.pro b/tests/auto/declarative/qmlgraphicstext/qmlgraphicstext.pro
new file mode 100644
index 0000000..1d8c59f
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstext/qmlgraphicstext.pro
@@ -0,0 +1,5 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative gui
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlgraphicstext.cpp
diff --git a/tests/auto/declarative/qmlgraphicstext/tst_qmlgraphicstext.cpp b/tests/auto/declarative/qmlgraphicstext/tst_qmlgraphicstext.cpp
new file mode 100644
index 0000000..4626fe6
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstext/tst_qmlgraphicstext.cpp
@@ -0,0 +1,844 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QTextDocument>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <private/qmlgraphicstext_p.h>
+#include <private/qmlvaluetype_p.h>
+#include <QFontMetrics>
+#include <QGraphicsSceneMouseEvent>
+#include <qmath.h>
+
+class tst_qmlgraphicstext : public QObject
+
+{
+ Q_OBJECT
+public:
+ tst_qmlgraphicstext();
+
+private slots:
+ void text();
+ void width();
+ void wrap();
+ void elide();
+ void textFormat();
+
+ // ### these tests may be trivial
+ void horizontalAlignment();
+ void verticalAlignment();
+ void font();
+ void style();
+ void color();
+ void smooth();
+
+ // QmlFontValueType
+ void weight();
+ void underline();
+ void overline();
+ void strikeout();
+ void capitalization();
+ void letterSpacing();
+ void wordSpacing();
+
+ void clickLink();
+
+private:
+ QStringList standard;
+ QStringList richText;
+
+ QStringList horizontalAlignmentmentStrings;
+ QStringList verticalAlignmentmentStrings;
+
+ QList<Qt::Alignment> verticalAlignmentments;
+ QList<Qt::Alignment> horizontalAlignmentments;
+
+ QStringList styleStrings;
+ QList<QmlGraphicsText::TextStyle> styles;
+
+ QStringList colorStrings;
+
+ QmlEngine engine;
+};
+
+tst_qmlgraphicstext::tst_qmlgraphicstext()
+{
+ standard << "the quick brown fox jumped over the lazy dog"
+ << "the quick brown fox\n jumped over the lazy dog";
+
+ richText << "<i>the <b>quick</b> brown <a href=\\\"http://www.google.com\\\">fox</a> jumped over the <b>lazy</b> dog</i>"
+ << "<i>the <b>quick</b> brown <a href=\\\"http://www.google.com\\\">fox</a><br>jumped over the <b>lazy</b> dog</i>";
+
+ horizontalAlignmentmentStrings << "AlignLeft"
+ << "AlignRight"
+ << "AlignHCenter";
+
+ verticalAlignmentmentStrings << "AlignTop"
+ << "AlignBottom"
+ << "AlignVCenter";
+
+ horizontalAlignmentments << Qt::AlignLeft
+ << Qt::AlignRight
+ << Qt::AlignHCenter;
+
+ verticalAlignmentments << Qt::AlignTop
+ << Qt::AlignBottom
+ << Qt::AlignVCenter;
+
+ styleStrings << "Normal"
+ << "Outline"
+ << "Raised"
+ << "Sunken";
+
+ styles << QmlGraphicsText::Normal
+ << QmlGraphicsText::Outline
+ << QmlGraphicsText::Raised
+ << QmlGraphicsText::Sunken;
+
+ colorStrings << "aliceblue"
+ << "antiquewhite"
+ << "aqua"
+ << "darkkhaki"
+ << "darkolivegreen"
+ << "dimgray"
+ << "palevioletred"
+ << "lightsteelblue"
+ << "#000000"
+ << "#AAAAAA"
+ << "#FFFFFF"
+ << "#2AC05F";
+ //
+ // need a different test to do alpha channel test
+ // << "#AA0011DD"
+ // << "#00F16B11";
+ //
+}
+
+void tst_qmlgraphicstext::text()
+{
+ {
+ QmlComponent textComponent(&engine);
+ textComponent.setData("import Qt 4.6\nText { text: \"\" }", QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE(textObject->text(), QString(""));
+ QVERIFY(textObject->width() == 0);
+
+ delete textObject;
+ }
+
+ for (int i = 0; i < standard.size(); i++)
+ {
+ QString componentStr = "import Qt 4.6\nText { text: \"" + standard.at(i) + "\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE(textObject->text(), standard.at(i));
+ QVERIFY(textObject->width() > 0);
+ }
+
+ for (int i = 0; i < richText.size(); i++)
+ {
+ QString componentStr = "import Qt 4.6\nText { text: \"" + richText.at(i) + "\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QString expected = richText.at(i);
+ QCOMPARE(textObject->text(), expected.replace("\\\"", "\""));
+ QVERIFY(textObject->width() > 0);
+ }
+}
+
+void tst_qmlgraphicstext::width()
+{
+ // uses Font metrics to find the width for standard and document to find the width for rich
+ {
+ QmlComponent textComponent(&engine);
+ textComponent.setData("import Qt 4.6\nText { text: \"\" }", QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE(textObject->width(), 0.);
+ }
+
+ for (int i = 0; i < standard.size(); i++)
+ {
+ QVERIFY(!Qt::mightBeRichText(standard.at(i))); // self-test
+
+ QFont f;
+ QFontMetricsF fm(f);
+ qreal metricWidth = fm.size(Qt::TextExpandTabs && Qt::TextShowMnemonic, standard.at(i)).width();
+ metricWidth = qCeil(metricWidth);
+
+ QString componentStr = "import Qt 4.6\nText { text: \"" + standard.at(i) + "\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE(textObject->width(), qreal(metricWidth));
+ QVERIFY(textObject->textFormat() == QmlGraphicsText::AutoText); // setting text doesn't change format
+ }
+
+ for (int i = 0; i < richText.size(); i++)
+ {
+ QVERIFY(Qt::mightBeRichText(richText.at(i))); // self-test
+
+ QTextDocument document;
+ document.setHtml(richText.at(i));
+ document.setDocumentMargin(0);
+
+ int documentWidth = document.idealWidth();
+
+ QString componentStr = "import Qt 4.6\nText { text: \"" + richText.at(i) + "\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE(textObject->width(), qreal(documentWidth));
+ QVERIFY(textObject->textFormat() == QmlGraphicsText::AutoText); // setting text doesn't change format
+ }
+}
+
+void tst_qmlgraphicstext::wrap()
+{
+ int textHeight = 0;
+ // for specified width and wrap set true
+ {
+ QmlComponent textComponent(&engine);
+ textComponent.setData("import Qt 4.6\nText { text: \"Hello\"; wrap: true; width: 300 }", QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+ textHeight = textObject->height();
+
+ QVERIFY(textObject != 0);
+ QVERIFY(textObject->wrap() == true);
+ QCOMPARE(textObject->width(), 300.);
+ }
+
+ for (int i = 0; i < standard.size(); i++)
+ {
+ QString componentStr = "import Qt 4.6\nText { wrap: true; width: 30; text: \"" + standard.at(i) + "\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE(textObject->width(), 30.);
+ QVERIFY(textObject->height() > textHeight);
+
+ int oldHeight = textObject->height();
+ textObject->setWidth(100);
+ QVERIFY(textObject->height() < oldHeight);
+ }
+
+ for (int i = 0; i < richText.size(); i++)
+ {
+ QString componentStr = "import Qt 4.6\nText { wrap: true; width: 30; text: \"" + richText.at(i) + "\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE(textObject->width(), 30.);
+ QVERIFY(textObject->height() > textHeight);
+ }
+
+}
+
+void tst_qmlgraphicstext::elide()
+{
+ for (QmlGraphicsText::TextElideMode m = QmlGraphicsText::ElideLeft; m<=QmlGraphicsText::ElideNone; m=QmlGraphicsText::TextElideMode(int(m)+1)) {
+ const char* elidename[]={"ElideLeft", "ElideRight", "ElideMiddle", "ElideNone"};
+ QString elide = "elide: Text." + QString(elidename[int(m)]) + ";";
+
+ // XXX Poor coverage.
+
+ {
+ QmlComponent textComponent(&engine);
+ textComponent.setData(("import Qt 4.6\nText { text: \"\"; "+elide+" width: 100 }").toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QCOMPARE(textObject->elideMode(), m);
+ QCOMPARE(textObject->width(), 100.);
+ }
+
+ for (int i = 0; i < standard.size(); i++)
+ {
+ QString componentStr = "import Qt 4.6\nText { "+elide+" width: 100; text: \"" + standard.at(i) + "\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QCOMPARE(textObject->elideMode(), m);
+ QCOMPARE(textObject->width(), 100.);
+ }
+
+ // richtext - does nothing
+ for (int i = 0; i < richText.size(); i++)
+ {
+ QString componentStr = "import Qt 4.6\nText { "+elide+" width: 100; text: \"" + richText.at(i) + "\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QCOMPARE(textObject->elideMode(), m);
+ QCOMPARE(textObject->width(), 100.);
+ }
+ }
+}
+
+void tst_qmlgraphicstext::textFormat()
+{
+ {
+ QmlComponent textComponent(&engine);
+ textComponent.setData("import Qt 4.6\nText { text: \"Hello\"; textFormat: Text.RichText }", QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QVERIFY(textObject->textFormat() == QmlGraphicsText::RichText);
+ }
+ {
+ QmlComponent textComponent(&engine);
+ textComponent.setData("import Qt 4.6\nText { text: \"<b>Hello</b>\"; textFormat: Text.PlainText }", QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QVERIFY(textObject->textFormat() == QmlGraphicsText::PlainText);
+ }
+}
+
+//the alignment tests may be trivial o.oa
+void tst_qmlgraphicstext::horizontalAlignment()
+{
+ //test one align each, and then test if two align fails.
+
+ for (int i = 0; i < standard.size(); i++)
+ {
+ for (int j=0; j < horizontalAlignmentmentStrings.size(); j++)
+ {
+ QString componentStr = "import Qt 4.6\nText { horizontalAlignment: \"" + horizontalAlignmentmentStrings.at(j) + "\"; text: \"" + standard.at(i) + "\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QCOMPARE((int)textObject->hAlign(), (int)horizontalAlignmentments.at(j));
+ }
+ }
+
+ for (int i = 0; i < richText.size(); i++)
+ {
+ for (int j=0; j < horizontalAlignmentmentStrings.size(); j++)
+ {
+ QString componentStr = "import Qt 4.6\nText { horizontalAlignment: \"" + horizontalAlignmentmentStrings.at(j) + "\"; text: \"" + richText.at(i) + "\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QCOMPARE((int)textObject->hAlign(), (int)horizontalAlignmentments.at(j));
+ }
+ }
+
+}
+
+void tst_qmlgraphicstext::verticalAlignment()
+{
+ //test one align each, and then test if two align fails.
+
+ for (int i = 0; i < standard.size(); i++)
+ {
+ for (int j=0; j < verticalAlignmentmentStrings.size(); j++)
+ {
+ QString componentStr = "import Qt 4.6\nText { verticalAlignment: \"" + verticalAlignmentmentStrings.at(j) + "\"; text: \"" + standard.at(i) + "\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE((int)textObject->vAlign(), (int)verticalAlignmentments.at(j));
+ }
+ }
+
+ for (int i = 0; i < richText.size(); i++)
+ {
+ for (int j=0; j < verticalAlignmentmentStrings.size(); j++)
+ {
+ QString componentStr = "import Qt 4.6\nText { verticalAlignment: \"" + verticalAlignmentmentStrings.at(j) + "\"; text: \"" + richText.at(i) + "\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE((int)textObject->vAlign(), (int)verticalAlignmentments.at(j));
+ }
+ }
+
+}
+
+void tst_qmlgraphicstext::font()
+{
+ //test size, then bold, then italic, then family
+ {
+ QString componentStr = "import Qt 4.6\nText { font.pointSize: 40; text: \"Hello World\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QCOMPARE(textObject->font().pointSize(), 40);
+ QCOMPARE(textObject->font().bold(), false);
+ QCOMPARE(textObject->font().italic(), false);
+ }
+
+ {
+ QString componentStr = "import Qt 4.6\nText { font.pixelSize: 40; text: \"Hello World\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QCOMPARE(textObject->font().pixelSize(), 40);
+ QCOMPARE(textObject->font().bold(), false);
+ QCOMPARE(textObject->font().italic(), false);
+ }
+
+ {
+ QString componentStr = "import Qt 4.6\nText { font.bold: true; text: \"Hello World\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QCOMPARE(textObject->font().bold(), true);
+ QCOMPARE(textObject->font().italic(), false);
+ }
+
+ {
+ QString componentStr = "import Qt 4.6\nText { font.italic: true; text: \"Hello World\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QCOMPARE(textObject->font().italic(), true);
+ QCOMPARE(textObject->font().bold(), false);
+ }
+
+ {
+ QString componentStr = "import Qt 4.6\nText { font.family: \"Helvetica\"; text: \"Hello World\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QCOMPARE(textObject->font().family(), QString("Helvetica"));
+ QCOMPARE(textObject->font().bold(), false);
+ QCOMPARE(textObject->font().italic(), false);
+ }
+
+ {
+ QString componentStr = "import Qt 4.6\nText { font.family: \"\"; text: \"Hello World\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QCOMPARE(textObject->font().family(), QString(""));
+ }
+}
+
+void tst_qmlgraphicstext::style()
+{
+ //test style
+ for (int i = 0; i < styles.size(); i++)
+ {
+ QString componentStr = "import Qt 4.6\nText { style: \"" + styleStrings.at(i) + "\"; styleColor: \"white\"; text: \"Hello World\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QCOMPARE((int)textObject->style(), (int)styles.at(i));
+ QCOMPARE(textObject->styleColor(), QColor("white"));
+ }
+}
+
+void tst_qmlgraphicstext::color()
+{
+ //test style
+ for (int i = 0; i < colorStrings.size(); i++)
+ {
+ QString componentStr = "import Qt 4.6\nText { color: \"" + colorStrings.at(i) + "\"; text: \"Hello World\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QCOMPARE(textObject->color(), QColor(colorStrings.at(i)));
+ QCOMPARE(textObject->styleColor(), QColor());
+ }
+
+ for (int i = 0; i < colorStrings.size(); i++)
+ {
+ QString componentStr = "import Qt 4.6\nText { styleColor: \"" + colorStrings.at(i) + "\"; text: \"Hello World\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QCOMPARE(textObject->styleColor(), QColor(colorStrings.at(i)));
+ // default color to black?
+ QCOMPARE(textObject->color(), QColor("black"));
+ }
+
+ for (int i = 0; i < colorStrings.size(); i++)
+ {
+ for (int j = 0; j < colorStrings.size(); j++)
+ {
+ QString componentStr = "import Qt 4.6\nText { color: \"" + colorStrings.at(i) + "\"; styleColor: \"" + colorStrings.at(j) + "\"; text: \"Hello World\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QCOMPARE(textObject->color(), QColor(colorStrings.at(i)));
+ QCOMPARE(textObject->styleColor(), QColor(colorStrings.at(j)));
+ }
+ }
+ {
+ QString colorStr = "#AA001234";
+ QColor testColor("#001234");
+ testColor.setAlpha(170);
+
+ QString componentStr = "import Qt 4.6\nText { color: \"" + colorStr + "\"; text: \"Hello World\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QCOMPARE(textObject->color(), testColor);
+ }
+}
+
+void tst_qmlgraphicstext::smooth()
+{
+ for (int i = 0; i < standard.size(); i++)
+ {
+ {
+ QString componentStr = "import Qt 4.6\nText { smooth: true; text: \"" + standard.at(i) + "\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+ QCOMPARE(textObject->smooth(), true);
+ }
+ {
+ QString componentStr = "import Qt 4.6\nText { text: \"" + standard.at(i) + "\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+ QCOMPARE(textObject->smooth(), false);
+ }
+ }
+ for (int i = 0; i < richText.size(); i++)
+ {
+ {
+ QString componentStr = "import Qt 4.6\nText { smooth: true; text: \"" + richText.at(i) + "\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+ QCOMPARE(textObject->smooth(), true);
+ }
+ {
+ QString componentStr = "import Qt 4.6\nText { text: \"" + richText.at(i) + "\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+ QCOMPARE(textObject->smooth(), false);
+ }
+ }
+}
+
+void tst_qmlgraphicstext::weight()
+{
+ {
+ QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE((int)textObject->font().weight(), (int)QmlFontValueType::Normal);
+ }
+ {
+ QString componentStr = "import Qt 4.6\nText { font.weight: \"Bold\"; text: \"Hello world!\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE((int)textObject->font().weight(), (int)QmlFontValueType::Bold);
+ }
+}
+
+void tst_qmlgraphicstext::underline()
+{
+ {
+ QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE(textObject->font().underline(), false);
+ }
+ {
+ QString componentStr = "import Qt 4.6\nText { font.underline: true; text: \"Hello world!\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE(textObject->font().underline(), true);
+ }
+}
+
+void tst_qmlgraphicstext::overline()
+{
+ {
+ QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE(textObject->font().overline(), false);
+ }
+ {
+ QString componentStr = "import Qt 4.6\nText { font.overline: true; text: \"Hello world!\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE(textObject->font().overline(), true);
+ }
+}
+
+void tst_qmlgraphicstext::strikeout()
+{
+ {
+ QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE(textObject->font().strikeOut(), false);
+ }
+ {
+ QString componentStr = "import Qt 4.6\nText { font.strikeout: true; text: \"Hello world!\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE(textObject->font().strikeOut(), true);
+ }
+}
+
+void tst_qmlgraphicstext::capitalization()
+{
+ {
+ QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE((int)textObject->font().capitalization(), (int)QmlFontValueType::MixedCase);
+ }
+ {
+ QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\"; font.capitalization: \"AllUppercase\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE((int)textObject->font().capitalization(), (int)QmlFontValueType::AllUppercase);
+ }
+ {
+ QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\"; font.capitalization: \"AllLowercase\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE((int)textObject->font().capitalization(), (int)QmlFontValueType::AllLowercase);
+ }
+ {
+ QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\"; font.capitalization: \"SmallCaps\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE((int)textObject->font().capitalization(), (int)QmlFontValueType::SmallCaps);
+ }
+ {
+ QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\"; font.capitalization: \"Capitalize\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE((int)textObject->font().capitalization(), (int)QmlFontValueType::Capitalize);
+ }
+}
+
+void tst_qmlgraphicstext::letterSpacing()
+{
+ {
+ QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE(textObject->font().letterSpacing(), 0.0);
+ }
+ {
+ QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\"; font.letterSpacing: -50 }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE(textObject->font().letterSpacing(), -50.);
+ }
+ {
+ QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\"; font.letterSpacing: 200 }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE(textObject->font().letterSpacing(), 200.);
+ }
+}
+
+void tst_qmlgraphicstext::wordSpacing()
+{
+ {
+ QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE(textObject->font().wordSpacing(), 0.0);
+ }
+ {
+ QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\"; font.wordSpacing: -50 }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE(textObject->font().wordSpacing(), -50.);
+ }
+ {
+ QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\"; font.wordSpacing: 200 }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE(textObject->font().wordSpacing(), 200.);
+ }
+}
+
+class EventSender : public QGraphicsItem
+{
+public:
+ void sendEvent(QEvent *event) { sceneEvent(event); }
+};
+
+class LinkTest : public QObject
+{
+ Q_OBJECT
+public:
+ LinkTest() {}
+
+ QString link;
+
+public slots:
+ void linkClicked(QString l) { link = l; }
+};
+
+void tst_qmlgraphicstext::clickLink()
+{
+ {
+ QString componentStr = "import Qt 4.6\nText { text: \"<a href=\\\"http://qt.nokia.com\\\">Hello world!</a>\" }";
+ QmlComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+
+ LinkTest test;
+ QObject::connect(textObject, SIGNAL(linkActivated(QString)), &test, SLOT(linkClicked(QString)));
+
+ {
+ QGraphicsSceneMouseEvent me(QEvent::GraphicsSceneMousePress);
+ me.setPos(QPointF(textObject->x()/2, textObject->y()/2));
+ me.setButton(Qt::LeftButton);
+ static_cast<EventSender*>(static_cast<QGraphicsItem*>(textObject))->sendEvent(&me);
+ }
+
+ {
+ QGraphicsSceneMouseEvent me(QEvent::GraphicsSceneMouseRelease);
+ me.setPos(QPointF(textObject->x()/2, textObject->y()/2));
+ me.setButton(Qt::LeftButton);
+ static_cast<EventSender*>(static_cast<QGraphicsItem*>(textObject))->sendEvent(&me);
+ }
+
+ QCOMPARE(test.link, QLatin1String("http://qt.nokia.com"));
+ }
+}
+
+QTEST_MAIN(tst_qmlgraphicstext)
+
+#include "tst_qmlgraphicstext.moc"
diff --git a/tests/auto/declarative/qmlgraphicstextedit/data/cursorTest.qml b/tests/auto/declarative/qmlgraphicstextedit/data/cursorTest.qml
new file mode 100644
index 0000000..e5df8f1
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstextedit/data/cursorTest.qml
@@ -0,0 +1,8 @@
+import Qt 4.6
+
+Rectangle { width: 300; height: 300; color: "white"
+ TextEdit { text: "Hello world!"; id: textEditObject; objectName: "textEditObject"
+ resources: [ Component { id:cursor; Item { id:cursorInstance; objectName: "cursorInstance" } } ]
+ cursorDelegate: cursor
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicstextedit/data/http/ErrItem.qml b/tests/auto/declarative/qmlgraphicstextedit/data/http/ErrItem.qml
new file mode 100644
index 0000000..34b3883
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstextedit/data/http/ErrItem.qml
@@ -0,0 +1,7 @@
+import Qt 4.6
+
+Item{
+ Fungus{
+ palatable: false;
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicstextedit/data/http/NormItem.qml b/tests/auto/declarative/qmlgraphicstextedit/data/http/NormItem.qml
new file mode 100644
index 0000000..718cb71
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstextedit/data/http/NormItem.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+Item {
+ objectName: "delegateOkay"
+ Rectangle { }
+}
diff --git a/tests/auto/declarative/qmlgraphicstextedit/data/http/cursorHttpTest.qml b/tests/auto/declarative/qmlgraphicstextedit/data/http/cursorHttpTest.qml
new file mode 100644
index 0000000..3c31e11
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstextedit/data/http/cursorHttpTest.qml
@@ -0,0 +1,22 @@
+import Qt 4.6
+
+Rectangle { width: 300; height: 300; color: "white"
+ resources: [
+ Component { id:cursorFail; FailItem { objectName: "delegateFail" } },
+ Component { id:cursorWait; WaitItem { objectName: "delegateSlow" } },
+ Component { id:cursorNorm; NormItem { objectName: "delegateOkay" } },
+ Component { id:cursorErr; ErrItem { objectName: "delegateErrorA" } }
+ ]
+ TextEdit {
+ cursorDelegate: cursorFail
+ }
+ TextEdit {
+ cursorDelegate: cursorWait
+ }
+ TextEdit {
+ cursorDelegate: cursorNorm
+ }
+ TextEdit {
+ cursorDelegate: cursorErr
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicstextedit/data/http/cursorHttpTestFail1.qml b/tests/auto/declarative/qmlgraphicstextedit/data/http/cursorHttpTestFail1.qml
new file mode 100644
index 0000000..a44aec2
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstextedit/data/http/cursorHttpTestFail1.qml
@@ -0,0 +1,18 @@
+import Qt 4.6
+
+Rectangle { width: 300; height: 300; color: "white"
+ resources: [
+ Component { id:cursorFail; FailItem { objectName: "delegateFail" } },
+ Component { id:cursorWait; WaitItem { objectName: "delegateSlow" } },
+ Component { id:cursorNorm; NormItem { objectName: "delegateOkay" } }
+ ]
+ TextEdit {
+ cursorDelegate: cursorFail
+ }
+ TextEdit {
+ cursorDelegate: cursorWait
+ }
+ TextEdit {
+ cursorDelegate: cursorNorm
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicstextedit/data/http/cursorHttpTestFail2.qml b/tests/auto/declarative/qmlgraphicstextedit/data/http/cursorHttpTestFail2.qml
new file mode 100644
index 0000000..57d3e47
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstextedit/data/http/cursorHttpTestFail2.qml
@@ -0,0 +1,18 @@
+import Qt 4.6
+
+Rectangle { width: 300; height: 300; color: "white"
+ resources: [
+ Component { id:cursorWait; WaitItem { objectName: "delegateSlow" } },
+ Component { id:cursorNorm; NormItem { objectName: "delegateOkay" } },
+ Component { id:cursorErr; ErrItem { objectName: "delegateErrorA" } }
+ ]
+ TextEdit {
+ cursorDelegate: cursorWait
+ }
+ TextEdit {
+ cursorDelegate: cursorNorm
+ }
+ TextEdit {
+ cursorDelegate: cursorErr
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicstextedit/data/http/cursorHttpTestPass.qml b/tests/auto/declarative/qmlgraphicstextedit/data/http/cursorHttpTestPass.qml
new file mode 100644
index 0000000..a44e867
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstextedit/data/http/cursorHttpTestPass.qml
@@ -0,0 +1,18 @@
+import Qt 4.6
+
+Rectangle { width: 300; height: 300; color: "white"
+ resources: [
+ Component { id:cursorWait; WaitItem { objectName: "delegateSlow" } },
+ Component { id:cursorNorm; NormItem { objectName: "delegateOkay" } }
+ ]
+ TextEdit {
+ cursorDelegate: cursorWait
+ text: "Hello"
+ }
+ TextEdit {
+ objectName: "textEditObject"
+ cursorDelegate: cursorNorm
+ focus: true;
+ text: "Hello"
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicstextedit/data/httpfail/FailItem.qml b/tests/auto/declarative/qmlgraphicstextedit/data/httpfail/FailItem.qml
new file mode 100644
index 0000000..ddbf526
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstextedit/data/httpfail/FailItem.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+Item {
+ Rectangle { }
+}
diff --git a/tests/auto/declarative/qmlgraphicstextedit/data/httpslow/WaitItem.qml b/tests/auto/declarative/qmlgraphicstextedit/data/httpslow/WaitItem.qml
new file mode 100644
index 0000000..ddbf526
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstextedit/data/httpslow/WaitItem.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+Item {
+ Rectangle { }
+}
diff --git a/tests/auto/declarative/qmlgraphicstextedit/data/navigation.qml b/tests/auto/declarative/qmlgraphicstextedit/data/navigation.qml
new file mode 100644
index 0000000..8d7dbbc
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstextedit/data/navigation.qml
@@ -0,0 +1,23 @@
+import Qt 4.6
+
+Rectangle {
+ property var myInput: input
+
+ width: 800; height: 600; color: "blue"
+
+ Item {
+ id: firstItem;
+ KeyNavigation.right: input
+ }
+
+ TextEdit { id: input; focus: true
+ KeyNavigation.left: firstItem
+ KeyNavigation.right: lastItem
+ KeyNavigation.up: firstItem
+ KeyNavigation.down: lastItem
+ }
+ Item {
+ id: lastItem
+ KeyNavigation.left: input
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicstextedit/data/readOnly.qml b/tests/auto/declarative/qmlgraphicstextedit/data/readOnly.qml
new file mode 100644
index 0000000..103a627
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstextedit/data/readOnly.qml
@@ -0,0 +1,12 @@
+import Qt 4.6
+
+Rectangle {
+ property var myInput: input
+
+ width: 800; height: 600; color: "blue"
+
+ TextEdit { id: input; focus: true
+ readOnly: true
+ text: "I am the very model of a modern major general.\n"
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicstextedit/qmlgraphicstextedit.pro b/tests/auto/declarative/qmlgraphicstextedit/qmlgraphicstextedit.pro
new file mode 100644
index 0000000..a129120
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstextedit/qmlgraphicstextedit.pro
@@ -0,0 +1,9 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative gui network
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlgraphicstextedit.cpp ../shared/testhttpserver.cpp
+HEADERS += ../shared/testhttpserver.h
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlgraphicstextedit/tst_qmlgraphicstextedit.cpp b/tests/auto/declarative/qmlgraphicstextedit/tst_qmlgraphicstextedit.cpp
new file mode 100644
index 0000000..99e8259
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstextedit/tst_qmlgraphicstextedit.cpp
@@ -0,0 +1,791 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include "../../../shared/util.h"
+#include "../shared/testhttpserver.h"
+#include <math.h>
+#include <QFile>
+#include <QTextDocument>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcontext.h>
+#include <QtDeclarative/qmlexpression.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <private/qmlgraphicstextedit_p.h>
+#include <QFontMetrics>
+#include <QmlView>
+#include <QStyle>
+#include <QInputContext>
+
+class tst_qmlgraphicstextedit : public QObject
+
+{
+ Q_OBJECT
+public:
+ tst_qmlgraphicstextedit();
+
+private slots:
+ void text();
+ void width();
+ void wrap();
+ void textFormat();
+
+ // ### these tests may be trivial
+ void hAlign();
+ void vAlign();
+ void font();
+ void color();
+ void textMargin();
+ void persistentSelection();
+ void focusOnPress();
+ void selection();
+
+ void cursorDelegate();
+ void delegateLoading();
+ void navigation();
+ void readOnly();
+ void sendRequestSoftwareInputPanelEvent();
+
+private:
+ void simulateKey(QmlView *, int key);
+ QmlView *createView(const QString &filename);
+
+ QStringList standard;
+ QStringList richText;
+
+ QStringList hAlignmentStrings;
+ QStringList vAlignmentStrings;
+
+ QList<Qt::Alignment> vAlignments;
+ QList<Qt::Alignment> hAlignments;
+
+ QStringList colorStrings;
+
+ QmlEngine engine;
+};
+
+tst_qmlgraphicstextedit::tst_qmlgraphicstextedit()
+{
+ standard << "the quick brown fox jumped over the lazy dog"
+ << "the quick brown fox\n jumped over the lazy dog";
+
+ richText << "<i>the <b>quick</b> brown <a href=\\\"http://www.google.com\\\">fox</a> jumped over the <b>lazy</b> dog</i>"
+ << "<i>the <b>quick</b> brown <a href=\\\"http://www.google.com\\\">fox</a><br>jumped over the <b>lazy</b> dog</i>";
+
+ hAlignmentStrings << "AlignLeft"
+ << "AlignRight"
+ << "AlignHCenter";
+
+ vAlignmentStrings << "AlignTop"
+ << "AlignBottom"
+ << "AlignVCenter";
+
+ hAlignments << Qt::AlignLeft
+ << Qt::AlignRight
+ << Qt::AlignHCenter;
+
+ vAlignments << Qt::AlignTop
+ << Qt::AlignBottom
+ << Qt::AlignVCenter;
+
+ colorStrings << "aliceblue"
+ << "antiquewhite"
+ << "aqua"
+ << "darkkhaki"
+ << "darkolivegreen"
+ << "dimgray"
+ << "palevioletred"
+ << "lightsteelblue"
+ << "#000000"
+ << "#AAAAAA"
+ << "#FFFFFF"
+ << "#2AC05F";
+ //
+ // need a different test to do alpha channel test
+ // << "#AA0011DD"
+ // << "#00F16B11";
+ //
+}
+
+void tst_qmlgraphicstextedit::text()
+{
+ {
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData("import Qt 4.6\nTextEdit { text: \"\" }", QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+
+ QVERIFY(textEditObject != 0);
+ QCOMPARE(textEditObject->text(), QString(""));
+ }
+
+ for (int i = 0; i < standard.size(); i++)
+ {
+ QString componentStr = "import Qt 4.6\nTextEdit { text: \"" + standard.at(i) + "\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+
+ QVERIFY(textEditObject != 0);
+ QCOMPARE(textEditObject->text(), standard.at(i));
+ }
+
+ for (int i = 0; i < richText.size(); i++)
+ {
+ QString componentStr = "import Qt 4.6\nTextEdit { text: \"" + richText.at(i) + "\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+
+ QVERIFY(textEditObject != 0);
+ QString actual = textEditObject->text();
+ QString expected = richText.at(i);
+ actual.replace(QRegExp(".*<body[^>]*>"),"");
+ actual.replace(QRegExp("(<[^>]*>)+"),"<>");
+ expected.replace(QRegExp("(<[^>]*>)+"),"<>");
+ QCOMPARE(actual.simplified(),expected.simplified());
+ }
+}
+
+void tst_qmlgraphicstextedit::width()
+{
+ // uses Font metrics to find the width for standard and document to find the width for rich
+ {
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData("import Qt 4.6\nTextEdit { text: \"\" }", QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+
+ QVERIFY(textEditObject != 0);
+ QCOMPARE(textEditObject->width(), 1.);//+1 for cursor
+ }
+
+ for (int i = 0; i < standard.size(); i++)
+ {
+ QFont f;
+ QFontMetricsF fm(f);
+ qreal metricWidth = fm.size(Qt::TextExpandTabs && Qt::TextShowMnemonic, standard.at(i)).width();
+ metricWidth = floor(metricWidth);
+
+ QString componentStr = "import Qt 4.6\nTextEdit { text: \"" + standard.at(i) + "\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+
+ QVERIFY(textEditObject != 0);
+ QCOMPARE(textEditObject->width(), qreal(metricWidth + 1 + 3));//+3 is the current way of accounting for space between cursor and last character.
+ }
+
+ for (int i = 0; i < richText.size(); i++)
+ {
+ QTextDocument document;
+ document.setHtml(richText.at(i));
+ document.setDocumentMargin(0);
+
+ int documentWidth = document.idealWidth();
+
+ QString componentStr = "import Qt 4.6\nTextEdit { text: \"" + richText.at(i) + "\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+
+ QVERIFY(textEditObject != 0);
+ QCOMPARE(textEditObject->width(), qreal(documentWidth + 1 + 3));
+ }
+}
+
+void tst_qmlgraphicstextedit::wrap()
+{
+ // for specified width and wrap set true
+ {
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData("import Qt 4.6\nTextEdit { text: \"\"; wrap: true; width: 300 }", QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+
+ QVERIFY(textEditObject != 0);
+ QCOMPARE(textEditObject->width(), 300.);
+ }
+
+ for (int i = 0; i < standard.size(); i++)
+ {
+ QString componentStr = "import Qt 4.6\nTextEdit { wrap: true; width: 300; text: \"" + standard.at(i) + "\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+
+ QVERIFY(textEditObject != 0);
+ QCOMPARE(textEditObject->width(), 300.);
+ }
+
+ for (int i = 0; i < richText.size(); i++)
+ {
+ QString componentStr = "import Qt 4.6\nTextEdit { wrap: true; width: 300; text: \"" + richText.at(i) + "\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+
+ QVERIFY(textEditObject != 0);
+ QCOMPARE(textEditObject->width(), 300.);
+ }
+
+}
+
+void tst_qmlgraphicstextedit::textFormat()
+{
+ {
+ QmlComponent textComponent(&engine);
+ textComponent.setData("import Qt 4.6\nTextEdit { text: \"Hello\"; textFormat: Text.RichText }", QUrl::fromLocalFile(""));
+ QmlGraphicsTextEdit *textObject = qobject_cast<QmlGraphicsTextEdit*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QVERIFY(textObject->textFormat() == QmlGraphicsTextEdit::RichText);
+ }
+ {
+ QmlComponent textComponent(&engine);
+ textComponent.setData("import Qt 4.6\nTextEdit { text: \"<b>Hello</b>\"; textFormat: Text.PlainText }", QUrl::fromLocalFile(""));
+ QmlGraphicsTextEdit *textObject = qobject_cast<QmlGraphicsTextEdit*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QVERIFY(textObject->textFormat() == QmlGraphicsTextEdit::PlainText);
+ }
+}
+
+//the alignment tests may be trivial o.oa
+void tst_qmlgraphicstextedit::hAlign()
+{
+ //test one align each, and then test if two align fails.
+
+ for (int i = 0; i < standard.size(); i++)
+ {
+ for (int j=0; j < hAlignmentStrings.size(); j++)
+ {
+ QString componentStr = "import Qt 4.6\nTextEdit { horizontalAlignment: \"" + hAlignmentStrings.at(j) + "\"; text: \"" + standard.at(i) + "\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+
+ QVERIFY(textEditObject != 0);
+ QCOMPARE((int)textEditObject->hAlign(), (int)hAlignments.at(j));
+ }
+ }
+
+ for (int i = 0; i < richText.size(); i++)
+ {
+ for (int j=0; j < hAlignmentStrings.size(); j++)
+ {
+ QString componentStr = "import Qt 4.6\nTextEdit { horizontalAlignment: \"" + hAlignmentStrings.at(j) + "\"; text: \"" + richText.at(i) + "\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+
+ QVERIFY(textEditObject != 0);
+ QCOMPARE((int)textEditObject->hAlign(), (int)hAlignments.at(j));
+ }
+ }
+
+}
+
+void tst_qmlgraphicstextedit::vAlign()
+{
+ //test one align each, and then test if two align fails.
+
+ for (int i = 0; i < standard.size(); i++)
+ {
+ for (int j=0; j < vAlignmentStrings.size(); j++)
+ {
+ QString componentStr = "import Qt 4.6\nTextEdit { verticalAlignment: \"" + vAlignmentStrings.at(j) + "\"; text: \"" + standard.at(i) + "\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+
+ QVERIFY(textEditObject != 0);
+ QCOMPARE((int)textEditObject->vAlign(), (int)vAlignments.at(j));
+ }
+ }
+
+ for (int i = 0; i < richText.size(); i++)
+ {
+ for (int j=0; j < vAlignmentStrings.size(); j++)
+ {
+ QString componentStr = "import Qt 4.6\nTextEdit { verticalAlignment: \"" + vAlignmentStrings.at(j) + "\"; text: \"" + richText.at(i) + "\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+
+ QVERIFY(textEditObject != 0);
+ QCOMPARE((int)textEditObject->vAlign(), (int)vAlignments.at(j));
+ }
+ }
+
+}
+
+void tst_qmlgraphicstextedit::font()
+{
+ //test size, then bold, then italic, then family
+ {
+ QString componentStr = "import Qt 4.6\nTextEdit { font.pointSize: 40; text: \"Hello World\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+
+ QVERIFY(textEditObject != 0);
+ QCOMPARE(textEditObject->font().pointSize(), 40);
+ QCOMPARE(textEditObject->font().bold(), false);
+ QCOMPARE(textEditObject->font().italic(), false);
+ }
+
+ {
+ QString componentStr = "import Qt 4.6\nTextEdit { font.bold: true; text: \"Hello World\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+
+ QVERIFY(textEditObject != 0);
+ QCOMPARE(textEditObject->font().bold(), true);
+ QCOMPARE(textEditObject->font().italic(), false);
+ }
+
+ {
+ QString componentStr = "import Qt 4.6\nTextEdit { font.italic: true; text: \"Hello World\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+
+ QVERIFY(textEditObject != 0);
+ QCOMPARE(textEditObject->font().italic(), true);
+ QCOMPARE(textEditObject->font().bold(), false);
+ }
+
+ {
+ QString componentStr = "import Qt 4.6\nTextEdit { font.family: \"Helvetica\"; text: \"Hello World\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+
+ QVERIFY(textEditObject != 0);
+ QCOMPARE(textEditObject->font().family(), QString("Helvetica"));
+ QCOMPARE(textEditObject->font().bold(), false);
+ QCOMPARE(textEditObject->font().italic(), false);
+ }
+
+ {
+ QString componentStr = "import Qt 4.6\nTextEdit { font.family: \"\"; text: \"Hello World\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+
+ QVERIFY(textEditObject != 0);
+ QCOMPARE(textEditObject->font().family(), QString(""));
+ }
+}
+
+void tst_qmlgraphicstextedit::color()
+{
+ //test normal
+ for (int i = 0; i < colorStrings.size(); i++)
+ {
+ QString componentStr = "import Qt 4.6\nTextEdit { color: \"" + colorStrings.at(i) + "\"; text: \"Hello World\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+ //qDebug() << "textEditObject: " << textEditObject->color() << "vs. " << QColor(colorStrings.at(i));
+ QVERIFY(textEditObject != 0);
+ QCOMPARE(textEditObject->color(), QColor(colorStrings.at(i)));
+ }
+
+ //test selection
+ for (int i = 0; i < colorStrings.size(); i++)
+ {
+ QString componentStr = "import Qt 4.6\nTextEdit { selectionColor: \"" + colorStrings.at(i) + "\"; text: \"Hello World\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+ QVERIFY(textEditObject != 0);
+ QCOMPARE(textEditObject->selectionColor(), QColor(colorStrings.at(i)));
+ }
+
+ //test selected text
+ for (int i = 0; i < colorStrings.size(); i++)
+ {
+ QString componentStr = "import Qt 4.6\nTextEdit { selectedTextColor: \"" + colorStrings.at(i) + "\"; text: \"Hello World\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+ QVERIFY(textEditObject != 0);
+ QCOMPARE(textEditObject->selectedTextColor(), QColor(colorStrings.at(i)));
+ }
+
+ {
+ QString colorStr = "#AA001234";
+ QColor testColor("#001234");
+ testColor.setAlpha(170);
+
+ QString componentStr = "import Qt 4.6\nTextEdit { color: \"" + colorStr + "\"; text: \"Hello World\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+
+ QVERIFY(textEditObject != 0);
+ QCOMPARE(textEditObject->color(), testColor);
+ }
+}
+
+void tst_qmlgraphicstextedit::textMargin()
+{
+ for(qreal i=0; i<=10; i+=0.3){
+ QString componentStr = "import Qt 4.6\nTextEdit { textMargin: " + QString::number(i) + "; text: \"Hello World\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+ QVERIFY(textEditObject != 0);
+ QCOMPARE(textEditObject->textMargin(), i);
+ }
+}
+
+void tst_qmlgraphicstextedit::persistentSelection()
+{
+ {
+ QString componentStr = "import Qt 4.6\nTextEdit { persistentSelection: true; text: \"Hello World\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+ QVERIFY(textEditObject != 0);
+ QCOMPARE(textEditObject->persistentSelection(), true);
+ }
+
+ {
+ QString componentStr = "import Qt 4.6\nTextEdit { persistentSelection: false; text: \"Hello World\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+ QVERIFY(textEditObject != 0);
+ QCOMPARE(textEditObject->persistentSelection(), false);
+ }
+}
+
+void tst_qmlgraphicstextedit::focusOnPress()
+{
+ {
+ QString componentStr = "import Qt 4.6\nTextEdit { focusOnPress: true; text: \"Hello World\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+ QVERIFY(textEditObject != 0);
+ QCOMPARE(textEditObject->focusOnPress(), true);
+ }
+
+ {
+ QString componentStr = "import Qt 4.6\nTextEdit { focusOnPress: false; text: \"Hello World\" }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+ QVERIFY(textEditObject != 0);
+ QCOMPARE(textEditObject->focusOnPress(), false);
+ }
+}
+
+void tst_qmlgraphicstextedit::selection()
+{
+ QString testStr = standard[0];//TODO: What should happen for multiline/rich text?
+ QString componentStr = "import Qt 4.6\nTextEdit { text: \""+ testStr +"\"; }";
+ QmlComponent texteditComponent(&engine);
+ texteditComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextEdit *textEditObject = qobject_cast<QmlGraphicsTextEdit*>(texteditComponent.create());
+ QVERIFY(textEditObject != 0);
+
+
+ //Test selection follows cursor
+ for(int i=0; i<= testStr.size(); i++) {
+ textEditObject->setCursorPosition(i);
+ QCOMPARE(textEditObject->cursorPosition(), i);
+ QCOMPARE(textEditObject->selectionStart(), i);
+ QCOMPARE(textEditObject->selectionEnd(), i);
+ QVERIFY(textEditObject->selectedText().isNull());
+ }
+
+ textEditObject->setCursorPosition(0);
+ QVERIFY(textEditObject->cursorPosition() == 0);
+ QVERIFY(textEditObject->selectionStart() == 0);
+ QVERIFY(textEditObject->selectionEnd() == 0);
+ QVERIFY(textEditObject->selectedText().isNull());
+
+ //Test selection
+ for(int i=0; i<= testStr.size(); i++) {
+ textEditObject->setSelectionEnd(i);
+ QCOMPARE(testStr.mid(0,i), textEditObject->selectedText());
+ }
+ for(int i=0; i<= testStr.size(); i++) {
+ textEditObject->setSelectionStart(i);
+ QCOMPARE(testStr.mid(i,testStr.size()-i), textEditObject->selectedText());
+ }
+
+ textEditObject->setCursorPosition(0);
+ QVERIFY(textEditObject->cursorPosition() == 0);
+ QVERIFY(textEditObject->selectionStart() == 0);
+ QVERIFY(textEditObject->selectionEnd() == 0);
+ QVERIFY(textEditObject->selectedText().isNull());
+
+ for(int i=0; i< testStr.size(); i++) {
+ textEditObject->setSelectionStart(i);
+ QCOMPARE(textEditObject->selectionEnd(), i);
+ QCOMPARE(testStr.mid(i,0), textEditObject->selectedText());
+ textEditObject->setSelectionEnd(i+1);
+ QCOMPARE(textEditObject->selectionStart(), i);
+ QCOMPARE(testStr.mid(i,1), textEditObject->selectedText());
+ }
+
+ for(int i= testStr.size() - 1; i>0; i--) {
+ textEditObject->setSelectionEnd(i);
+ QCOMPARE(testStr.mid(i,0), textEditObject->selectedText());
+ textEditObject->setSelectionStart(i-1);
+ QCOMPARE(testStr.mid(i-1,1), textEditObject->selectedText());
+ }
+
+ //Test Error Ignoring behaviour
+ textEditObject->setCursorPosition(0);
+ QVERIFY(textEditObject->selectedText().isNull());
+ textEditObject->setSelectionStart(-10);
+ QVERIFY(textEditObject->selectedText().isNull());
+ textEditObject->setSelectionStart(100);
+ QVERIFY(textEditObject->selectedText().isNull());
+ textEditObject->setSelectionEnd(-10);
+ QVERIFY(textEditObject->selectedText().isNull());
+ textEditObject->setSelectionEnd(100);
+ QVERIFY(textEditObject->selectedText().isNull());
+ textEditObject->setSelectionStart(0);
+ textEditObject->setSelectionEnd(10);
+ QVERIFY(textEditObject->selectedText().size() == 10);
+ textEditObject->setSelectionStart(-10);
+ QVERIFY(textEditObject->selectedText().size() == 10);
+ textEditObject->setSelectionStart(100);
+ QVERIFY(textEditObject->selectedText().size() == 10);
+ textEditObject->setSelectionEnd(-10);
+ QVERIFY(textEditObject->selectedText().size() == 10);
+ textEditObject->setSelectionEnd(100);
+ QVERIFY(textEditObject->selectedText().size() == 10);
+}
+
+void tst_qmlgraphicstextedit::cursorDelegate()
+{
+ QmlView* view = createView(SRCDIR "/data/cursorTest.qml");
+ view->execute();
+ view->show();
+ view->setFocus();
+ QmlGraphicsTextEdit *textEditObject = view->root()->findChild<QmlGraphicsTextEdit*>("textEditObject");
+ QVERIFY(textEditObject != 0);
+ QVERIFY(textEditObject->findChild<QmlGraphicsItem*>("cursorInstance"));
+ //Test Delegate gets created
+ textEditObject->setFocus(true);
+ QmlGraphicsItem* delegateObject = textEditObject->findChild<QmlGraphicsItem*>("cursorInstance");
+ QVERIFY(delegateObject);
+ //Test Delegate gets moved
+ for(int i=0; i<= textEditObject->text().length(); i++){
+ textEditObject->setCursorPosition(i);
+ QCOMPARE(textEditObject->cursorRect().x(), qRound(delegateObject->x()));
+ QCOMPARE(textEditObject->cursorRect().y(), qRound(delegateObject->y()));
+ }
+ textEditObject->setCursorPosition(0);
+ QCOMPARE(textEditObject->cursorRect().x(), qRound(delegateObject->x()));
+ QCOMPARE(textEditObject->cursorRect().y(), qRound(delegateObject->y()));
+ //Test Delegate gets deleted
+ textEditObject->setCursorDelegate(0);
+ QVERIFY(!textEditObject->findChild<QmlGraphicsItem*>("cursorInstance"));
+}
+
+void tst_qmlgraphicstextedit::delegateLoading()
+{
+ TestHTTPServer server(42332);
+ server.serveDirectory(SRCDIR "/data/httpfail", TestHTTPServer::Disconnect);
+ server.serveDirectory(SRCDIR "/data/httpslow", TestHTTPServer::Delay);
+ server.serveDirectory(SRCDIR "/data/http");
+ QmlView* view = new QmlView(0);
+ view->setUrl(QUrl("http://localhost:42332/cursorHttpTestPass.qml"));
+ view->execute();
+ view->show();
+ view->setFocus();
+ QTRY_VERIFY(view->root());//Wait for loading to finish.
+ QmlGraphicsTextEdit *textEditObject = view->root()->findChild<QmlGraphicsTextEdit*>("textEditObject");
+ // view->root()->dumpObjectTree();
+ QVERIFY(textEditObject != 0);
+ textEditObject->setFocus(true);
+ QmlGraphicsItem *delegate;
+ delegate = view->root()->findChild<QmlGraphicsItem*>("delegateOkay");
+ QVERIFY(delegate);
+ delegate = view->root()->findChild<QmlGraphicsItem*>("delegateSlow");
+ QVERIFY(delegate);
+ view->setUrl(QUrl("http://localhost:42332/cursorHttpTestFail1.qml"));
+ view->execute();
+ view->show();
+ view->setFocus();
+ delegate = view->root()->findChild<QmlGraphicsItem*>("delegateOkay");
+ QVERIFY(delegate);
+ delegate = view->root()->findChild<QmlGraphicsItem*>("delegateFail");
+ QVERIFY(!delegate);
+ view->setUrl(QUrl("http://localhost:42332/cursorHttpTestFail2.qml"));
+ view->execute();
+ view->show();
+ view->setFocus();
+ delegate = view->root()->findChild<QmlGraphicsItem*>("delegateOkay");
+ QVERIFY(delegate);
+ delegate = view->root()->findChild<QmlGraphicsItem*>("delegateErrorA");
+ QVERIFY(!delegate);
+ //ErrorB should get a component which is ready but component.create() returns null
+ //Not sure how to accomplish this with QmlGraphicsTextEdits cursor delegate
+ //###This could be a case of overzealous defensive programming
+ //delegate = view->root()->findChild<QmlGraphicsItem*>("delegateErrorB");
+ //QVERIFY(!delegate);
+}
+
+/*
+TextEdit element should only handle left/right keys until the cursor reaches
+the extent of the text, then they should ignore the keys.
+*/
+void tst_qmlgraphicstextedit::navigation()
+{
+ QmlView *canvas = createView(SRCDIR "/data/navigation.qml");
+ canvas->execute();
+ canvas->show();
+ canvas->setFocus();
+
+ QVERIFY(canvas->root() != 0);
+
+ QmlGraphicsItem *input = qobject_cast<QmlGraphicsItem *>(qvariant_cast<QObject *>(canvas->root()->property("myInput")));
+
+ QVERIFY(input != 0);
+ QTRY_VERIFY(input->hasFocus() == true);
+ simulateKey(canvas, Qt::Key_Left);
+ QVERIFY(input->hasFocus() == false);
+ simulateKey(canvas, Qt::Key_Right);
+ QVERIFY(input->hasFocus() == true);
+ simulateKey(canvas, Qt::Key_Right);
+ QVERIFY(input->hasFocus() == false);
+ simulateKey(canvas, Qt::Key_Left);
+ QVERIFY(input->hasFocus() == true);
+}
+
+void tst_qmlgraphicstextedit::readOnly()
+{
+ QmlView *canvas = createView(SRCDIR "/data/readOnly.qml");
+ canvas->execute();
+ canvas->show();
+ canvas->setFocus();
+
+ QVERIFY(canvas->root() != 0);
+
+ QmlGraphicsTextEdit *edit = qobject_cast<QmlGraphicsTextEdit *>(qvariant_cast<QObject *>(canvas->root()->property("myInput")));
+
+ QVERIFY(edit != 0);
+ QTRY_VERIFY(edit->hasFocus() == true);
+ QVERIFY(edit->isReadOnly() == true);
+ QString initial = edit->text();
+ for(int k=Qt::Key_0; k<=Qt::Key_Z; k++)
+ simulateKey(canvas, k);
+ simulateKey(canvas, Qt::Key_Return);
+ simulateKey(canvas, Qt::Key_Space);
+ simulateKey(canvas, Qt::Key_Escape);
+ QCOMPARE(edit->text(), initial);
+}
+
+void tst_qmlgraphicstextedit::simulateKey(QmlView *view, int key)
+{
+ QKeyEvent press(QKeyEvent::KeyPress, key, 0);
+ QKeyEvent release(QKeyEvent::KeyRelease, key, 0);
+
+ QApplication::sendEvent(view, &press);
+ QApplication::sendEvent(view, &release);
+}
+
+QmlView *tst_qmlgraphicstextedit::createView(const QString &filename)
+{
+ QmlView *canvas = new QmlView(0);
+
+ QFile file(filename);
+ file.open(QFile::ReadOnly);
+ QString xml = file.readAll();
+ canvas->setQml(xml, filename);
+ return canvas;
+}
+
+class MyInputContext : public QInputContext
+{
+public:
+ MyInputContext() : softwareInputPanelEventReceived(false) {}
+ ~MyInputContext() {}
+
+ QString identifierName() { return QString(); }
+ QString language() { return QString(); }
+
+ void reset() {}
+
+ bool isComposing() const { return false; }
+
+ bool filterEvent( const QEvent *event )
+ {
+ if (event->type() == QEvent::RequestSoftwareInputPanel)
+ softwareInputPanelEventReceived = true;
+ return QInputContext::filterEvent(event);
+ }
+ bool softwareInputPanelEventReceived;
+};
+
+void tst_qmlgraphicstextedit::sendRequestSoftwareInputPanelEvent()
+{
+ QGraphicsScene scene;
+ QGraphicsView view(&scene);
+ MyInputContext ic;
+ view.viewport()->setInputContext(&ic);
+ QStyle::RequestSoftwareInputPanel behavior = QStyle::RequestSoftwareInputPanel(
+ view.style()->styleHint(QStyle::SH_RequestSoftwareInputPanel));
+ if ((behavior != QStyle::RSIP_OnMouseClick))
+ QSKIP("This test need to have a style with RSIP_OnMouseClick", SkipSingle);
+ QmlGraphicsTextEdit edit;
+ edit.setText("Hello world");
+ edit.setPos(0, 0);
+ scene.addItem(&edit);
+ view.show();
+ qApp->setAutoSipEnabled(true);
+ QApplication::setActiveWindow(&view);
+ QTest::qWaitForWindowShown(&view);
+ QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view));
+ QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(edit.scenePos()));
+ QApplication::processEvents();
+ QCOMPARE(ic.softwareInputPanelEventReceived, true);
+}
+QTEST_MAIN(tst_qmlgraphicstextedit)
+
+#include "tst_qmlgraphicstextedit.moc"
diff --git a/tests/auto/declarative/qmlgraphicstextinput/data/cursorTest.qml b/tests/auto/declarative/qmlgraphicstextinput/data/cursorTest.qml
new file mode 100644
index 0000000..ddc98cc
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstextinput/data/cursorTest.qml
@@ -0,0 +1,8 @@
+import Qt 4.6
+
+Rectangle { width: 300; height: 300; color: "white"
+ TextInput { text: "Hello world!"; id: textInputObject; objectName: "textInputObject"
+ resources: [ Component { id:cursor; Item { id:cursorInstance; objectName: "cursorInstance";} } ]
+ cursorDelegate: cursor
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicstextinput/data/masks.qml b/tests/auto/declarative/qmlgraphicstextinput/data/masks.qml
new file mode 100644
index 0000000..08a857c
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstextinput/data/masks.qml
@@ -0,0 +1,7 @@
+import Qt 4.6
+
+TextInput{
+ focus: true
+ objectName: "myInput"
+ inputMask: "HHHHhhhh; "
+}
diff --git a/tests/auto/declarative/qmlgraphicstextinput/data/maxLength.qml b/tests/auto/declarative/qmlgraphicstextinput/data/maxLength.qml
new file mode 100644
index 0000000..7cbeadd
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstextinput/data/maxLength.qml
@@ -0,0 +1,7 @@
+import Qt 4.6
+
+TextInput{
+ focus: true
+ objectName: "myInput"
+ maximumLength: 10
+}
diff --git a/tests/auto/declarative/qmlgraphicstextinput/data/navigation.qml b/tests/auto/declarative/qmlgraphicstextinput/data/navigation.qml
new file mode 100644
index 0000000..7a2e914
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstextinput/data/navigation.qml
@@ -0,0 +1,23 @@
+import Qt 4.6
+
+Rectangle {
+ property var myInput: input
+
+ width: 800; height: 600; color: "blue"
+
+ Item {
+ id: firstItem;
+ KeyNavigation.right: input
+ }
+
+ TextInput { id: input; focus: true
+ KeyNavigation.left: firstItem
+ KeyNavigation.right: lastItem
+ KeyNavigation.up: firstItem
+ KeyNavigation.down: lastItem
+ }
+ Item {
+ id: lastItem
+ KeyNavigation.left: input
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicstextinput/data/readOnly.qml b/tests/auto/declarative/qmlgraphicstextinput/data/readOnly.qml
new file mode 100644
index 0000000..c47371a
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstextinput/data/readOnly.qml
@@ -0,0 +1,12 @@
+import Qt 4.6
+
+Rectangle {
+ property var myInput: input
+
+ width: 800; height: 600; color: "blue"
+
+ TextInput { id: input; focus: true
+ readOnly: true
+ text: "I am the very model of a modern major general.\n"
+ }
+}
diff --git a/tests/auto/declarative/qmlgraphicstextinput/data/validators.qml b/tests/auto/declarative/qmlgraphicstextinput/data/validators.qml
new file mode 100644
index 0000000..673790d
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstextinput/data/validators.qml
@@ -0,0 +1,23 @@
+import Qt 4.6
+
+Item {
+ property var intInput: intInput
+ property var dblInput: dblInput
+ property var strInput: strInput
+
+ width: 800; height: 600;
+
+ Column{
+ TextInput { id: intInput;
+ validator: QIntValidator{top: 11; bottom: 2}
+ }
+ TextInput { id: dblInput;
+ validator: QDoubleValidator{top: 12.12; bottom: 2.93; decimals: 2; notation: QDoubleValidator.StandardNotation}
+ }
+ TextInput { id: strInput;
+ //Requires QTBUG-8025 to be implemented first
+ //validator: QRegExpValidator { regExp: /[a-zA-z]{2,4}/;}
+ }
+ }
+
+}
diff --git a/tests/auto/declarative/qmlgraphicstextinput/qmlgraphicstextinput.pro b/tests/auto/declarative/qmlgraphicstextinput/qmlgraphicstextinput.pro
new file mode 100644
index 0000000..fd75fec
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstextinput/qmlgraphicstextinput.pro
@@ -0,0 +1,8 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative gui
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlgraphicstextinput.cpp
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlgraphicstextinput/tst_qmlgraphicstextinput.cpp b/tests/auto/declarative/qmlgraphicstextinput/tst_qmlgraphicstextinput.cpp
new file mode 100644
index 0000000..7896464
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicstextinput/tst_qmlgraphicstextinput.cpp
@@ -0,0 +1,639 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include "../../../shared/util.h"
+#include <QtDeclarative/qmlengine.h>
+#include <QFile>
+#include <QtDeclarative/qmlview.h>
+#include <private/qmlgraphicstextinput_p.h>
+#include <QDebug>
+#include <QStyle>
+#include <QInputContext>
+
+class tst_qmlgraphicstextinput : public QObject
+
+{
+ Q_OBJECT
+public:
+ tst_qmlgraphicstextinput();
+
+private slots:
+ void text();
+ void width();
+ void font();
+ void color();
+ void selection();
+
+ void maxLength();
+ void masks();
+ void validators();
+
+ void cursorDelegate();
+ void navigation();
+ void readOnly();
+
+ void sendRequestSoftwareInputPanelEvent();
+
+private:
+ void simulateKey(QmlView *, int key);
+ QmlView *createView(const QString &filename);
+
+ QmlEngine engine;
+ QStringList standard;
+ QStringList colorStrings;
+};
+
+tst_qmlgraphicstextinput::tst_qmlgraphicstextinput()
+{
+ standard << "the quick brown fox jumped over the lazy dog"
+ << "It's supercalifragisiticexpialidocious!"
+ << "Hello, world!";
+
+ colorStrings << "aliceblue"
+ << "antiquewhite"
+ << "aqua"
+ << "darkkhaki"
+ << "darkolivegreen"
+ << "dimgray"
+ << "palevioletred"
+ << "lightsteelblue"
+ << "#000000"
+ << "#AAAAAA"
+ << "#FFFFFF"
+ << "#2AC05F";
+}
+
+void tst_qmlgraphicstextinput::text()
+{
+ {
+ QmlComponent textinputComponent(&engine);
+ textinputComponent.setData("import Qt 4.6\nTextInput { text: \"\" }", QUrl());
+ QmlGraphicsTextInput *textinputObject = qobject_cast<QmlGraphicsTextInput*>(textinputComponent.create());
+
+ QVERIFY(textinputObject != 0);
+ QCOMPARE(textinputObject->text(), QString(""));
+ }
+
+ for (int i = 0; i < standard.size(); i++)
+ {
+ QString componentStr = "import Qt 4.6\nTextInput { text: \"" + standard.at(i) + "\" }";
+ QmlComponent textinputComponent(&engine);
+ textinputComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextInput *textinputObject = qobject_cast<QmlGraphicsTextInput*>(textinputComponent.create());
+
+ QVERIFY(textinputObject != 0);
+ QCOMPARE(textinputObject->text(), standard.at(i));
+ }
+
+}
+
+void tst_qmlgraphicstextinput::width()
+{
+ // uses Font metrics to find the width for standard
+ {
+ QmlComponent textinputComponent(&engine);
+ textinputComponent.setData("import Qt 4.6\nTextInput { text: \"\" }", QUrl());
+ QmlGraphicsTextInput *textinputObject = qobject_cast<QmlGraphicsTextInput*>(textinputComponent.create());
+
+ QVERIFY(textinputObject != 0);
+ QCOMPARE(textinputObject->width(), 1.);//1 for the cursor
+ }
+
+ for (int i = 0; i < standard.size(); i++)
+ {
+ QFont f;
+ QFontMetricsF fm(f);
+ qreal metricWidth = fm.width(standard.at(i));
+
+ QString componentStr = "import Qt 4.6\nTextInput { text: \"" + standard.at(i) + "\" }";
+ QmlComponent textinputComponent(&engine);
+ textinputComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextInput *textinputObject = qobject_cast<QmlGraphicsTextInput*>(textinputComponent.create());
+
+ QVERIFY(textinputObject != 0);
+ QCOMPARE(textinputObject->width(), qreal(metricWidth) + 1.);//1 for the cursor
+ }
+}
+
+void tst_qmlgraphicstextinput::font()
+{
+ //test size, then bold, then italic, then family
+ {
+ QString componentStr = "import Qt 4.6\nTextInput { font.pointSize: 40; text: \"Hello World\" }";
+ QmlComponent textinputComponent(&engine);
+ textinputComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextInput *textinputObject = qobject_cast<QmlGraphicsTextInput*>(textinputComponent.create());
+
+ QVERIFY(textinputObject != 0);
+ QCOMPARE(textinputObject->font().pointSize(), 40);
+ QCOMPARE(textinputObject->font().bold(), false);
+ QCOMPARE(textinputObject->font().italic(), false);
+ }
+
+ {
+ QString componentStr = "import Qt 4.6\nTextInput { font.bold: true; text: \"Hello World\" }";
+ QmlComponent textinputComponent(&engine);
+ textinputComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextInput *textinputObject = qobject_cast<QmlGraphicsTextInput*>(textinputComponent.create());
+
+ QVERIFY(textinputObject != 0);
+ QCOMPARE(textinputObject->font().bold(), true);
+ QCOMPARE(textinputObject->font().italic(), false);
+ }
+
+ {
+ QString componentStr = "import Qt 4.6\nTextInput { font.italic: true; text: \"Hello World\" }";
+ QmlComponent textinputComponent(&engine);
+ textinputComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextInput *textinputObject = qobject_cast<QmlGraphicsTextInput*>(textinputComponent.create());
+
+ QVERIFY(textinputObject != 0);
+ QCOMPARE(textinputObject->font().italic(), true);
+ QCOMPARE(textinputObject->font().bold(), false);
+ }
+
+ {
+ QString componentStr = "import Qt 4.6\nTextInput { font.family: \"Helvetica\"; text: \"Hello World\" }";
+ QmlComponent textinputComponent(&engine);
+ textinputComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextInput *textinputObject = qobject_cast<QmlGraphicsTextInput*>(textinputComponent.create());
+
+ QVERIFY(textinputObject != 0);
+ QCOMPARE(textinputObject->font().family(), QString("Helvetica"));
+ QCOMPARE(textinputObject->font().bold(), false);
+ QCOMPARE(textinputObject->font().italic(), false);
+ }
+
+ {
+ QString componentStr = "import Qt 4.6\nTextInput { font.family: \"\"; text: \"Hello World\" }";
+ QmlComponent textinputComponent(&engine);
+ textinputComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextInput *textinputObject = qobject_cast<QmlGraphicsTextInput*>(textinputComponent.create());
+
+ QVERIFY(textinputObject != 0);
+ QCOMPARE(textinputObject->font().family(), QString(""));
+ }
+}
+
+void tst_qmlgraphicstextinput::color()
+{
+ //test color
+ for (int i = 0; i < colorStrings.size(); i++)
+ {
+ QString componentStr = "import Qt 4.6\nTextInput { color: \"" + colorStrings.at(i) + "\"; text: \"Hello World\" }";
+ QmlComponent textinputComponent(&engine);
+ textinputComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextInput *textinputObject = qobject_cast<QmlGraphicsTextInput*>(textinputComponent.create());
+ QVERIFY(textinputObject != 0);
+ QCOMPARE(textinputObject->color(), QColor(colorStrings.at(i)));
+ }
+
+ //test selection color
+ for (int i = 0; i < colorStrings.size(); i++)
+ {
+ QString componentStr = "import Qt 4.6\nTextInput { selectionColor: \"" + colorStrings.at(i) + "\"; text: \"Hello World\" }";
+ QmlComponent textinputComponent(&engine);
+ textinputComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextInput *textinputObject = qobject_cast<QmlGraphicsTextInput*>(textinputComponent.create());
+ QVERIFY(textinputObject != 0);
+ QCOMPARE(textinputObject->selectionColor(), QColor(colorStrings.at(i)));
+ }
+
+ //test selected text color
+ for (int i = 0; i < colorStrings.size(); i++)
+ {
+ QString componentStr = "import Qt 4.6\nTextInput { selectedTextColor: \"" + colorStrings.at(i) + "\"; text: \"Hello World\" }";
+ QmlComponent textinputComponent(&engine);
+ textinputComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextInput *textinputObject = qobject_cast<QmlGraphicsTextInput*>(textinputComponent.create());
+ QVERIFY(textinputObject != 0);
+ QCOMPARE(textinputObject->selectedTextColor(), QColor(colorStrings.at(i)));
+ }
+
+ {
+ QString colorStr = "#AA001234";
+ QColor testColor("#001234");
+ testColor.setAlpha(170);
+
+ QString componentStr = "import Qt 4.6\nTextInput { color: \"" + colorStr + "\"; text: \"Hello World\" }";
+ QmlComponent textinputComponent(&engine);
+ textinputComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextInput *textinputObject = qobject_cast<QmlGraphicsTextInput*>(textinputComponent.create());
+
+ QVERIFY(textinputObject != 0);
+ QCOMPARE(textinputObject->color(), testColor);
+ }
+}
+
+void tst_qmlgraphicstextinput::selection()
+{
+ QString testStr = standard[0];
+ QString componentStr = "import Qt 4.6\nTextInput { text: \""+ testStr +"\"; }";
+ QmlComponent textinputComponent(&engine);
+ textinputComponent.setData(componentStr.toLatin1(), QUrl());
+ QmlGraphicsTextInput *textinputObject = qobject_cast<QmlGraphicsTextInput*>(textinputComponent.create());
+ QVERIFY(textinputObject != 0);
+
+
+ //Test selection follows cursor
+ for(int i=0; i<= testStr.size(); i++) {
+ textinputObject->setCursorPosition(i);
+ QCOMPARE(textinputObject->cursorPosition(), i);
+ QCOMPARE(textinputObject->selectionStart(), i);
+ QCOMPARE(textinputObject->selectionEnd(), i);
+ QVERIFY(textinputObject->selectedText().isNull());
+ }
+
+ textinputObject->setCursorPosition(0);
+ QVERIFY(textinputObject->cursorPosition() == 0);
+ QVERIFY(textinputObject->selectionStart() == 0);
+ QVERIFY(textinputObject->selectionEnd() == 0);
+ QVERIFY(textinputObject->selectedText().isNull());
+
+ //Test selection
+ for(int i=0; i<= testStr.size(); i++) {
+ textinputObject->setSelectionEnd(i);
+ QCOMPARE(testStr.mid(0,i), textinputObject->selectedText());
+ }
+ for(int i=0; i<= testStr.size(); i++) {
+ textinputObject->setSelectionStart(i);
+ QCOMPARE(testStr.mid(i,testStr.size()-i), textinputObject->selectedText());
+ }
+
+ textinputObject->setCursorPosition(0);
+ QVERIFY(textinputObject->cursorPosition() == 0);
+ QVERIFY(textinputObject->selectionStart() == 0);
+ QVERIFY(textinputObject->selectionEnd() == 0);
+ QVERIFY(textinputObject->selectedText().isNull());
+
+ for(int i=0; i< testStr.size(); i++) {
+ textinputObject->setSelectionStart(i);
+ QCOMPARE(textinputObject->selectionEnd(), i);
+ QCOMPARE(testStr.mid(i,0), textinputObject->selectedText());
+ textinputObject->setSelectionEnd(i+1);
+ QCOMPARE(textinputObject->selectionStart(), i);
+ QCOMPARE(testStr.mid(i,1), textinputObject->selectedText());
+ }
+
+ for(int i= testStr.size() - 1; i>0; i--) {
+ textinputObject->setSelectionEnd(i);
+ QCOMPARE(testStr.mid(i,0), textinputObject->selectedText());
+ textinputObject->setSelectionStart(i-1);
+ QCOMPARE(testStr.mid(i-1,1), textinputObject->selectedText());
+ }
+
+ //Test Error Ignoring behaviour
+ textinputObject->setCursorPosition(0);
+ QVERIFY(textinputObject->selectedText().isNull());
+ textinputObject->setSelectionStart(-10);
+ QVERIFY(textinputObject->selectedText().isNull());
+ textinputObject->setSelectionStart(100);
+ QVERIFY(textinputObject->selectedText().isNull());
+ textinputObject->setSelectionEnd(-10);
+ QVERIFY(textinputObject->selectedText().isNull());
+ textinputObject->setSelectionEnd(100);
+ QVERIFY(textinputObject->selectedText().isNull());
+ textinputObject->setSelectionStart(0);
+ textinputObject->setSelectionEnd(10);
+ QVERIFY(textinputObject->selectedText().size() == 10);
+ textinputObject->setSelectionStart(-10);
+ QVERIFY(textinputObject->selectedText().size() == 10);
+ textinputObject->setSelectionStart(100);
+ QVERIFY(textinputObject->selectedText().size() == 10);
+ textinputObject->setSelectionEnd(-10);
+ QVERIFY(textinputObject->selectedText().size() == 10);
+ textinputObject->setSelectionEnd(100);
+ QVERIFY(textinputObject->selectedText().size() == 10);
+}
+
+void tst_qmlgraphicstextinput::maxLength()
+{
+ //QString componentStr = "import Qt 4.6\nTextInput { maximumLength: 10; }";
+ QmlView *canvas = createView(SRCDIR "/data/maxLength.qml");
+ canvas->execute();
+ canvas->show();
+ canvas->setFocus();
+ QVERIFY(canvas->root() != 0);
+ QmlGraphicsTextInput *textinputObject = qobject_cast<QmlGraphicsTextInput *>(canvas->root());
+ QVERIFY(textinputObject != 0);
+ QVERIFY(textinputObject->text().isEmpty());
+ QVERIFY(textinputObject->maxLength() == 10);
+ foreach(const QString &str, standard){
+ QVERIFY(textinputObject->text().length() <= 10);
+ textinputObject->setText(str);
+ QVERIFY(textinputObject->text().length() <= 10);
+ }
+
+ textinputObject->setText("");
+ QTRY_VERIFY(textinputObject->hasFocus() == true);
+ for(int i=0; i<20; i++){
+ QCOMPARE(textinputObject->text().length(), qMin(i,10));
+ //simulateKey(canvas, Qt::Key_A);
+ QTest::keyPress(canvas, Qt::Key_A);
+ QTest::keyRelease(canvas, Qt::Key_A, Qt::NoModifier ,10);
+ }
+}
+
+void tst_qmlgraphicstextinput::masks()
+{
+ //Not a comprehensive test of the possible masks, that's done elsewhere (QLineEdit)
+ //QString componentStr = "import Qt 4.6\nTextInput { inputMask: 'HHHHhhhh'; }";
+ QmlView *canvas = createView(SRCDIR "/data/masks.qml");
+ canvas->execute();
+ canvas->show();
+ canvas->setFocus();
+ QVERIFY(canvas->root() != 0);
+ QmlGraphicsTextInput *textinputObject = qobject_cast<QmlGraphicsTextInput *>(canvas->root());
+ QVERIFY(textinputObject != 0);
+ QTRY_VERIFY(textinputObject->hasFocus() == true);
+ QVERIFY(textinputObject->text().length() == 0);
+ QCOMPARE(textinputObject->inputMask(), QString("HHHHhhhh; "));
+ for(int i=0; i<10; i++){
+ QCOMPARE(qMin(i,8), textinputObject->text().length());
+ QCOMPARE(i>=4, textinputObject->hasAcceptableInput());
+ //simulateKey(canvas, Qt::Key_A);
+ QTest::keyPress(canvas, Qt::Key_A);
+ QTest::keyRelease(canvas, Qt::Key_A, Qt::NoModifier ,10);
+ }
+}
+
+void tst_qmlgraphicstextinput::validators()
+{
+ // Note that this test assumes that the validators are working properly
+ // so you may need to run their tests first. All validators are checked
+ // here to ensure that their exposure to QML is working.
+
+ QmlView *canvas = createView(SRCDIR "/data/validators.qml");
+ canvas->execute();
+ canvas->show();
+ canvas->setFocus();
+
+ QVERIFY(canvas->root() != 0);
+
+ QmlGraphicsTextInput *intInput = qobject_cast<QmlGraphicsTextInput *>(qvariant_cast<QObject *>(canvas->root()->property("intInput")));
+ QVERIFY(intInput);
+ intInput->setFocus(true);
+ QTRY_VERIFY(intInput->hasFocus());
+ QTest::keyPress(canvas, Qt::Key_1);
+ QTest::keyRelease(canvas, Qt::Key_1, Qt::NoModifier ,10);
+ QCOMPARE(intInput->text(), QLatin1String("1"));
+ QCOMPARE(intInput->hasAcceptableInput(), false);
+ QTest::keyPress(canvas, Qt::Key_2);
+ QTest::keyRelease(canvas, Qt::Key_2, Qt::NoModifier ,10);
+ QCOMPARE(intInput->text(), QLatin1String("1"));
+ QCOMPARE(intInput->hasAcceptableInput(), false);
+ QTest::keyPress(canvas, Qt::Key_1);
+ QTest::keyRelease(canvas, Qt::Key_1, Qt::NoModifier ,10);
+ QCOMPARE(intInput->text(), QLatin1String("11"));
+ QCOMPARE(intInput->hasAcceptableInput(), true);
+ QTest::keyPress(canvas, Qt::Key_0);
+ QTest::keyRelease(canvas, Qt::Key_0, Qt::NoModifier ,10);
+ QCOMPARE(intInput->text(), QLatin1String("11"));
+ QCOMPARE(intInput->hasAcceptableInput(), true);
+
+ QmlGraphicsTextInput *dblInput = qobject_cast<QmlGraphicsTextInput *>(qvariant_cast<QObject *>(canvas->root()->property("dblInput")));
+ QTRY_VERIFY(dblInput);
+ dblInput->setFocus(true);
+ QVERIFY(dblInput->hasFocus() == true);
+ QTest::keyPress(canvas, Qt::Key_1);
+ QTest::keyRelease(canvas, Qt::Key_1, Qt::NoModifier ,10);
+ QCOMPARE(dblInput->text(), QLatin1String("1"));
+ QCOMPARE(dblInput->hasAcceptableInput(), false);
+ QTest::keyPress(canvas, Qt::Key_2);
+ QTest::keyRelease(canvas, Qt::Key_2, Qt::NoModifier ,10);
+ QCOMPARE(dblInput->text(), QLatin1String("12"));
+ QCOMPARE(dblInput->hasAcceptableInput(), true);
+ QTest::keyPress(canvas, Qt::Key_Period);
+ QTest::keyRelease(canvas, Qt::Key_Period, Qt::NoModifier ,10);
+ QCOMPARE(dblInput->text(), QLatin1String("12."));
+ QCOMPARE(dblInput->hasAcceptableInput(), true);
+ QTest::keyPress(canvas, Qt::Key_1);
+ QTest::keyRelease(canvas, Qt::Key_1, Qt::NoModifier ,10);
+ QCOMPARE(dblInput->text(), QLatin1String("12.1"));
+ QCOMPARE(dblInput->hasAcceptableInput(), true);
+ QTest::keyPress(canvas, Qt::Key_1);
+ QTest::keyRelease(canvas, Qt::Key_1, Qt::NoModifier ,10);
+ QCOMPARE(dblInput->text(), QLatin1String("12.11"));
+ QCOMPARE(dblInput->hasAcceptableInput(), true);
+ QTest::keyPress(canvas, Qt::Key_1);
+ QTest::keyRelease(canvas, Qt::Key_1, Qt::NoModifier ,10);
+ QCOMPARE(dblInput->text(), QLatin1String("12.11"));
+ QCOMPARE(dblInput->hasAcceptableInput(), true);
+
+ QmlGraphicsTextInput *strInput = qobject_cast<QmlGraphicsTextInput *>(qvariant_cast<QObject *>(canvas->root()->property("strInput")));
+ QTRY_VERIFY(strInput);
+ strInput->setFocus(true);
+ QVERIFY(strInput->hasFocus() == true);
+ QTest::keyPress(canvas, Qt::Key_1);
+ QTest::keyRelease(canvas, Qt::Key_1, Qt::NoModifier ,10);
+ QEXPECT_FAIL("","Will not work until QTBUG-8025 is resolved", Abort);
+ QCOMPARE(strInput->text(), QLatin1String(""));
+ QCOMPARE(strInput->hasAcceptableInput(), false);
+ QTest::keyPress(canvas, Qt::Key_A);
+ QTest::keyRelease(canvas, Qt::Key_A, Qt::NoModifier ,10);
+ QCOMPARE(strInput->text(), QLatin1String("a"));
+ QCOMPARE(strInput->hasAcceptableInput(), false);
+ QTest::keyPress(canvas, Qt::Key_A);
+ QTest::keyRelease(canvas, Qt::Key_A, Qt::NoModifier ,10);
+ QCOMPARE(strInput->text(), QLatin1String("aa"));
+ QCOMPARE(strInput->hasAcceptableInput(), true);
+ QTest::keyPress(canvas, Qt::Key_A);
+ QTest::keyRelease(canvas, Qt::Key_A, Qt::NoModifier ,10);
+ QCOMPARE(strInput->text(), QLatin1String("aaa"));
+ QCOMPARE(strInput->hasAcceptableInput(), true);
+ QTest::keyPress(canvas, Qt::Key_A);
+ QTest::keyRelease(canvas, Qt::Key_A, Qt::NoModifier ,10);
+ QCOMPARE(strInput->text(), QLatin1String("aaaa"));
+ QCOMPARE(strInput->hasAcceptableInput(), true);
+ QTest::keyPress(canvas, Qt::Key_A);
+ QTest::keyRelease(canvas, Qt::Key_A, Qt::NoModifier ,10);
+ QCOMPARE(strInput->text(), QLatin1String("aaaa"));
+ QCOMPARE(strInput->hasAcceptableInput(), true);
+}
+
+/*
+TextInput element should only handle left/right keys until the cursor reaches
+the extent of the text, then they should ignore the keys.
+*/
+void tst_qmlgraphicstextinput::navigation()
+{
+ QmlView *canvas = createView(SRCDIR "/data/navigation.qml");
+ canvas->execute();
+ canvas->show();
+ canvas->setFocus();
+
+ QVERIFY(canvas->root() != 0);
+
+ QmlGraphicsItem *input = qobject_cast<QmlGraphicsItem *>(qvariant_cast<QObject *>(canvas->root()->property("myInput")));
+
+ QVERIFY(input != 0);
+ QTRY_VERIFY(input->hasFocus() == true);
+ simulateKey(canvas, Qt::Key_Left);
+ QVERIFY(input->hasFocus() == false);
+ simulateKey(canvas, Qt::Key_Right);
+ QVERIFY(input->hasFocus() == true);
+ simulateKey(canvas, Qt::Key_Right);
+ QVERIFY(input->hasFocus() == false);
+ simulateKey(canvas, Qt::Key_Left);
+ QVERIFY(input->hasFocus() == true);
+}
+
+void tst_qmlgraphicstextinput::cursorDelegate()
+{
+ QmlView* view = createView(SRCDIR "/data/cursorTest.qml");
+ view->execute();
+ view->show();
+ view->setFocus();
+ QmlGraphicsTextInput *textInputObject = view->root()->findChild<QmlGraphicsTextInput*>("textInputObject");
+ QVERIFY(textInputObject != 0);
+ QVERIFY(textInputObject->findChild<QmlGraphicsItem*>("cursorInstance"));
+ //Test Delegate gets created
+ textInputObject->setFocus(true);
+ QmlGraphicsItem* delegateObject = textInputObject->findChild<QmlGraphicsItem*>("cursorInstance");
+ QVERIFY(delegateObject);
+ //Test Delegate gets moved
+ for(int i=0; i<= textInputObject->text().length(); i++){
+ textInputObject->setCursorPosition(i);
+ //+5 is because the TextInput cursorRect is just a 10xHeight area centered on cursor position
+ QCOMPARE(textInputObject->cursorRect().x() + 5, qRound(delegateObject->x()));
+ QCOMPARE(textInputObject->cursorRect().y(), qRound(delegateObject->y()));
+ }
+ textInputObject->setCursorPosition(0);
+ QCOMPARE(textInputObject->cursorRect().x()+5, qRound(delegateObject->x()));
+ QCOMPARE(textInputObject->cursorRect().y(), qRound(delegateObject->y()));
+ //Test Delegate gets deleted
+ textInputObject->setCursorDelegate(0);
+ QVERIFY(!textInputObject->findChild<QmlGraphicsItem*>("cursorInstance"));
+}
+
+void tst_qmlgraphicstextinput::readOnly()
+{
+ QmlView *canvas = createView(SRCDIR "/data/readOnly.qml");
+ canvas->execute();
+ canvas->show();
+ canvas->setFocus();
+
+ QVERIFY(canvas->root() != 0);
+
+ QmlGraphicsTextInput *input = qobject_cast<QmlGraphicsTextInput *>(qvariant_cast<QObject *>(canvas->root()->property("myInput")));
+
+ QVERIFY(input != 0);
+ QTRY_VERIFY(input->hasFocus() == true);
+ QVERIFY(input->isReadOnly() == true);
+ QString initial = input->text();
+ for(int k=Qt::Key_0; k<=Qt::Key_Z; k++)
+ simulateKey(canvas, k);
+ simulateKey(canvas, Qt::Key_Return);
+ simulateKey(canvas, Qt::Key_Space);
+ simulateKey(canvas, Qt::Key_Escape);
+ QCOMPARE(input->text(), initial);
+}
+
+void tst_qmlgraphicstextinput::simulateKey(QmlView *view, int key)
+{
+ QKeyEvent press(QKeyEvent::KeyPress, key, 0);
+ QKeyEvent release(QKeyEvent::KeyRelease, key, 0);
+
+ QApplication::sendEvent(view, &press);
+ QApplication::sendEvent(view, &release);
+}
+
+QmlView *tst_qmlgraphicstextinput::createView(const QString &filename)
+{
+ QmlView *canvas = new QmlView(0);
+
+ QFile file(filename);
+ file.open(QFile::ReadOnly);
+ QString xml = file.readAll();
+ canvas->setQml(xml, filename);
+
+ return canvas;
+}
+
+class MyInputContext : public QInputContext
+{
+public:
+ MyInputContext() : softwareInputPanelEventReceived(false) {}
+ ~MyInputContext() {}
+
+ QString identifierName() { return QString(); }
+ QString language() { return QString(); }
+
+ void reset() {}
+
+ bool isComposing() const { return false; }
+
+ bool filterEvent( const QEvent *event )
+ {
+ if (event->type() == QEvent::RequestSoftwareInputPanel)
+ softwareInputPanelEventReceived = true;
+ return QInputContext::filterEvent(event);
+ }
+ bool softwareInputPanelEventReceived;
+};
+
+void tst_qmlgraphicstextinput::sendRequestSoftwareInputPanelEvent()
+{
+ QGraphicsScene scene;
+ QGraphicsView view(&scene);
+ MyInputContext ic;
+ view.viewport()->setInputContext(&ic);
+ QStyle::RequestSoftwareInputPanel behavior = QStyle::RequestSoftwareInputPanel(
+ view.style()->styleHint(QStyle::SH_RequestSoftwareInputPanel));
+ if ((behavior != QStyle::RSIP_OnMouseClick))
+ QSKIP("This test need to have a style with RSIP_OnMouseClick", SkipSingle);
+ QmlGraphicsTextInput input;
+ input.setText("Hello world");
+ input.setPos(0, 0);
+ scene.addItem(&input);
+ view.show();
+ qApp->setAutoSipEnabled(true);
+ QApplication::setActiveWindow(&view);
+ QTest::qWaitForWindowShown(&view);
+ QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view));
+ QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(input.scenePos()));
+ QApplication::processEvents();
+ QCOMPARE(ic.softwareInputPanelEventReceived, true);
+}
+
+QTEST_MAIN(tst_qmlgraphicstextinput)
+
+#include "tst_qmlgraphicstextinput.moc"
diff --git a/tests/auto/declarative/qmlgraphicswebview/data/basic.html b/tests/auto/declarative/qmlgraphicswebview/data/basic.html
new file mode 100644
index 0000000..22e3e24
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicswebview/data/basic.html
@@ -0,0 +1,17 @@
+<html>
+<head><title>Basic</title>
+<link rel="icon" sizes="48x48" href="basic.png">
+<script type="text/javascript">
+<!--
+window.onload = function(){ window.status = "status here"; }
+// -->
+</script>
+</head>
+<body leftmargin="0" marginwidth="0">
+<table width="123">
+<tbody>
+<tr><td>This is a basic test.</td></tr>
+</tbody>
+</table>
+</body>
+</html>
diff --git a/tests/auto/declarative/qmlgraphicswebview/data/basic.ico b/tests/auto/declarative/qmlgraphicswebview/data/basic.ico
new file mode 100644
index 0000000..8f3d05e
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicswebview/data/basic.ico
Binary files differ
diff --git a/tests/auto/declarative/qmlgraphicswebview/data/basic.png b/tests/auto/declarative/qmlgraphicswebview/data/basic.png
new file mode 100644
index 0000000..35717cc
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicswebview/data/basic.png
Binary files differ
diff --git a/tests/auto/declarative/qmlgraphicswebview/data/basic.qml b/tests/auto/declarative/qmlgraphicswebview/data/basic.qml
new file mode 100644
index 0000000..5394837
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicswebview/data/basic.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+WebView {
+ url: "basic.html"
+}
diff --git a/tests/auto/declarative/qmlgraphicswebview/data/elements.html b/tests/auto/declarative/qmlgraphicswebview/data/elements.html
new file mode 100644
index 0000000..9236867
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicswebview/data/elements.html
@@ -0,0 +1,14 @@
+<body leftmargin=0 topmargin=0>
+<table width="300px" border=1 cellpadding=0 cellspacing=0>
+<tr>
+<td align=center width=25%%><p>A</p></td>
+<td width=75% height=50px>
+ <table width=100% border=1 cellpadding=0 cellspacing=0>
+ <tr>
+ <td align=center width=50% height=50px><p>B</p></td>
+ <td align=center width=50% height=50px><p>C</p></td>
+ </tr>
+ </table>
+</td>
+</tr>
+</table>
diff --git a/tests/auto/declarative/qmlgraphicswebview/data/elements.qml b/tests/auto/declarative/qmlgraphicswebview/data/elements.qml
new file mode 100644
index 0000000..7c030e6
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicswebview/data/elements.qml
@@ -0,0 +1,7 @@
+import Qt 4.6
+
+WebView {
+ url: "elements.html"
+ width: 310
+ height: 100
+}
diff --git a/tests/auto/declarative/qmlgraphicswebview/data/forward.html b/tests/auto/declarative/qmlgraphicswebview/data/forward.html
new file mode 100644
index 0000000..030446a
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicswebview/data/forward.html
@@ -0,0 +1,12 @@
+<html>
+<head><title>Forward</title>
+<link rel="icon" sizes="48x48" href="basic.png">
+</head>
+<body leftmargin="0" marginwidth="0">
+<table width="123">
+<tbody>
+<tr><td>This is more.</td></tr>
+</tbody>
+</table>
+</body>
+</html>
diff --git a/tests/auto/declarative/qmlgraphicswebview/data/javaScript.html b/tests/auto/declarative/qmlgraphicswebview/data/javaScript.html
new file mode 100644
index 0000000..35270bc
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicswebview/data/javaScript.html
@@ -0,0 +1,11 @@
+<html>
+<head><title>JavaScript</title>
+<link rel="icon" sizes="48x48" href="basic.png">
+<script type="text/javascript">
+<!--
+window.onload = function(){ window.status = "status here"; }
+// -->
+</script>
+</head>
+<body>
+This is a JS test.
diff --git a/tests/auto/declarative/qmlgraphicswebview/data/javaScript.qml b/tests/auto/declarative/qmlgraphicswebview/data/javaScript.qml
new file mode 100644
index 0000000..07eee88
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicswebview/data/javaScript.qml
@@ -0,0 +1,11 @@
+import Qt 4.6
+
+WebView {
+ url: "javaScript.html"
+ javaScriptWindowObjects: [
+ QtObject {
+ property string qmlprop: "qmlvalue"
+ WebView.windowObjectName: "myjsname"
+ }
+ ]
+}
diff --git a/tests/auto/declarative/qmlgraphicswebview/data/loadError.qml b/tests/auto/declarative/qmlgraphicswebview/data/loadError.qml
new file mode 100644
index 0000000..1460f30
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicswebview/data/loadError.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+WebView {
+ url: "does-not-exist.html"
+}
diff --git a/tests/auto/declarative/qmlgraphicswebview/data/newwindows.html b/tests/auto/declarative/qmlgraphicswebview/data/newwindows.html
new file mode 100644
index 0000000..dd541f9
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicswebview/data/newwindows.html
@@ -0,0 +1,16 @@
+<html>
+<head>
+<script type="text/javascript">
+<!--
+function clickTheLink()
+{
+ var ev = document.createEvent('MouseEvents');
+ ev.initEvent( "click", true, false );
+ document.getElementById('thelink').dispatchEvent(ev);
+}
+// -->
+</script>
+</head>
+<h1>Multiple windows...</h1>
+
+<a id=thelink target="_blank" href="newwindows.html">Popup!</a>
diff --git a/tests/auto/declarative/qmlgraphicswebview/data/newwindows.qml b/tests/auto/declarative/qmlgraphicswebview/data/newwindows.qml
new file mode 100644
index 0000000..9d13715
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicswebview/data/newwindows.qml
@@ -0,0 +1,32 @@
+// Demonstrates opening new WebViews from HTML
+
+import Qt 4.6
+
+Grid {
+ columns: 3
+ id: pages
+ height: 300; width: 600
+ property int total: 0
+
+ Component {
+ id: webViewPage
+ Rectangle {
+ width: webView.width
+ height: webView.height
+ border.color: "gray"
+
+ WebView {
+ id: webView
+ newWindowComponent: webViewPage
+ newWindowParent: pages
+ url: "newwindows.html"
+ Timer {
+ interval: 10; running: total<4; repeat: false;
+ onTriggered: {total++; webView.evaluateJavaScript("clickTheLink()")}
+ }
+ }
+ }
+ }
+
+ Loader { sourceComponent: webViewPage }
+}
diff --git a/tests/auto/declarative/qmlgraphicswebview/data/pixelCache.html b/tests/auto/declarative/qmlgraphicswebview/data/pixelCache.html
new file mode 100644
index 0000000..bf059b9
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicswebview/data/pixelCache.html
@@ -0,0 +1,10 @@
+<html>
+<body topmargin=0 leftmargin=0>
+<table width=120>
+<tr><td>
+<h1>Pixel Cache</h1>
+This test is for the pixel cache. Because this is a long document,
+as it scrolls, more of the document will need to be rendered.
+If the pixelCacheSize is small, the first parts of the document will
+no longer be in the cache when it returns.
+</table>
diff --git a/tests/auto/declarative/qmlgraphicswebview/data/pixelCache.qml b/tests/auto/declarative/qmlgraphicswebview/data/pixelCache.qml
new file mode 100644
index 0000000..08e4d65
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicswebview/data/pixelCache.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyWebView {
+ anchors.fill: parent
+ url: "pixelCache.html"
+}
diff --git a/tests/auto/declarative/qmlgraphicswebview/data/sethtml.qml b/tests/auto/declarative/qmlgraphicswebview/data/sethtml.qml
new file mode 100644
index 0000000..063b5a8
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicswebview/data/sethtml.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+WebView {
+ html: "<p>This is a <b>string</b> set on the WebView"
+}
diff --git a/tests/auto/declarative/qmlgraphicswebview/qmlgraphicswebview.pro b/tests/auto/declarative/qmlgraphicswebview/qmlgraphicswebview.pro
new file mode 100644
index 0000000..a590616
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicswebview/qmlgraphicswebview.pro
@@ -0,0 +1,10 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+contains(QT_CONFIG,webkit): QT += webkit
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlgraphicswebview.cpp testtypes.cpp
+HEADERS += testtypes.h
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlgraphicswebview/testtypes.cpp b/tests/auto/declarative/qmlgraphicswebview/testtypes.cpp
new file mode 100644
index 0000000..e21f286
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicswebview/testtypes.cpp
@@ -0,0 +1,49 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "testtypes.h"
+
+void MyWebView::drawContents(QPainter *p, const QRect &r)
+{
+ pp += r.width()*r.height();
+ QmlGraphicsWebView::drawContents(p,r);
+}
+
+QML_DEFINE_TYPE(Test,1,0,MyWebView,MyWebView);
diff --git a/tests/auto/declarative/qmlgraphicswebview/testtypes.h b/tests/auto/declarative/qmlgraphicswebview/testtypes.h
new file mode 100644
index 0000000..7ab7c78
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicswebview/testtypes.h
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef TESTTYPES_H
+#define TESTTYPES_H
+
+#include <private/qmlgraphicswebview_p.h>
+
+class MyWebView : public QmlGraphicsWebView
+{
+ Q_OBJECT
+ Q_PROPERTY(int pixelsPainted READ pixelsPainted);
+
+public:
+ MyWebView() : pp(0) {}
+
+ int pixelsPainted() const { return pp; }
+
+ void drawContents(QPainter *p, const QRect &r);
+
+private:
+ int pp;
+};
+
+QML_DECLARE_TYPE(MyWebView);
+
+#endif // TESTTYPES_H
diff --git a/tests/auto/declarative/qmlgraphicswebview/tst_qmlgraphicswebview.cpp b/tests/auto/declarative/qmlgraphicswebview/tst_qmlgraphicswebview.cpp
new file mode 100644
index 0000000..c244030
--- /dev/null
+++ b/tests/auto/declarative/qmlgraphicswebview/tst_qmlgraphicswebview.cpp
@@ -0,0 +1,389 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include "../../../shared/util.h"
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <private/qmlgraphicswebview_p.h>
+#include <private/qmlgraphicswebview_p_p.h>
+#include <private/qmlgraphicspositioners_p.h>
+#include <QtWebKit/qwebpage.h>
+#include <QtWebKit/qwebframe.h>
+#include <QtCore/qdir.h>
+#include <QtCore/qfile.h>
+#include <QtGui/qpainter.h>
+#include "testtypes.h"
+
+class tst_qmlgraphicswebview : public QObject
+{
+ Q_OBJECT
+public:
+ tst_qmlgraphicswebview() {}
+
+private slots:
+ void basicProperties();
+ void settings();
+ void historyNav();
+ void multipleWindows();
+ void elementAreaAt();
+ void loadError();
+ void setHtml();
+ void javaScript();
+ void cleanupTestCase();
+ void pixelCache();
+
+private:
+ void checkNoErrors(const QmlComponent& component);
+ QmlEngine engine;
+ QString tmpDir() const
+ {
+ static QString tmpd = QDir::tempPath()+"/tst_qmlgraphicswebview-"
+ + QDateTime::currentDateTime().toString(QLatin1String("yyyyMMddhhmmss"));
+ return tmpd;
+ }
+};
+
+static QString strippedHtml(QString html)
+{
+ html.replace(QRegExp("\\s+"),"");
+ return html;
+}
+
+static QString fileContents(const QString& filename)
+{
+ QFile file(filename);
+ file.open(QIODevice::ReadOnly);
+ return QString::fromUtf8(file.readAll());
+}
+
+
+static void removeRecursive(const QString& dirname)
+{
+ QDir dir(dirname);
+ QFileInfoList entries(dir.entryInfoList(QDir::Dirs|QDir::Files|QDir::NoDotAndDotDot));
+ for (int i = 0; i < entries.count(); ++i)
+ if (entries[i].isDir())
+ removeRecursive(entries[i].filePath());
+ else
+ dir.remove(entries[i].fileName());
+ QDir().rmdir(dirname);
+}
+
+void tst_qmlgraphicswebview::cleanupTestCase()
+{
+ removeRecursive(tmpDir());
+}
+
+void tst_qmlgraphicswebview::checkNoErrors(const QmlComponent& component)
+{
+ if (component.isError()) {
+ QList<QmlError> errors = component.errors();
+ for (int ii = 0; ii < errors.count(); ++ii) {
+ const QmlError &error = errors.at(ii);
+ QByteArray errorStr = QByteArray::number(error.line()) + ":" +
+ QByteArray::number(error.column()) + ":" +
+ error.description().toUtf8();
+ qWarning() << errorStr;
+ }
+ }
+ QVERIFY(!component.isError());
+}
+
+void tst_qmlgraphicswebview::basicProperties()
+{
+ QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/basic.qml"));
+ checkNoErrors(component);
+ QWebSettings::enablePersistentStorage(tmpDir());
+
+ QmlGraphicsWebView *wv = qobject_cast<QmlGraphicsWebView*>(component.create());
+ QVERIFY(wv != 0);
+ QTRY_COMPARE(wv->progress(), 1.0);
+ QCOMPARE(wv->title(),QString("Basic"));
+ QTRY_COMPARE(wv->icon().width(), 48);
+ QCOMPARE(wv->icon(),QPixmap(SRCDIR "/data/basic.png"));
+ QCOMPARE(wv->statusText(),QString("status here"));
+ QCOMPARE(strippedHtml(fileContents(SRCDIR "/data/basic.html")), strippedHtml(wv->html()));
+ QCOMPARE(wv->width(), 123.0);
+ QCOMPARE(wv->preferredWidth(), 0);
+ QCOMPARE(wv->preferredHeight(), 0);
+ QCOMPARE(wv->zoomFactor(), 1.0);
+ QCOMPARE(wv->url(), QUrl::fromLocalFile(SRCDIR "/data/basic.html"));
+ QCOMPARE(wv->status(), QmlGraphicsWebView::Ready);
+ QVERIFY(wv->reloadAction());
+ QVERIFY(wv->reloadAction()->isEnabled());
+ QVERIFY(wv->backAction());
+ QVERIFY(!wv->backAction()->isEnabled());
+ QVERIFY(wv->forwardAction());
+ QVERIFY(!wv->forwardAction()->isEnabled());
+ QVERIFY(wv->stopAction());
+ QVERIFY(!wv->stopAction()->isEnabled());
+
+ wv->setPixelCacheSize(0); // mainly testing that it doesn't crash or anything!
+ QCOMPARE(wv->pixelCacheSize(),0);
+ wv->reloadAction()->trigger();
+ QTRY_COMPARE(wv->progress(), 1.0);
+}
+
+void tst_qmlgraphicswebview::settings()
+{
+ QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/basic.qml"));
+ checkNoErrors(component);
+ QmlGraphicsWebView *wv = qobject_cast<QmlGraphicsWebView*>(component.create());
+ QVERIFY(wv != 0);
+ QTRY_COMPARE(wv->progress(), 1.0);
+
+ QmlGraphicsWebSettings *s = wv->settingsObject();
+
+ // merely tests that setting gets stored (in QWebSettings)
+ // behavioural tests are in WebKit.
+ for (int b=0; b<=1; ++b) {
+ bool on = !!b;
+
+ s->setAutoLoadImages(on);
+ s->setDeveloperExtrasEnabled(on);
+ s->setJavaEnabled(on);
+ s->setJavascriptCanAccessClipboard(on);
+ s->setJavascriptCanOpenWindows(on);
+ s->setJavascriptEnabled(on);
+ s->setLinksIncludedInFocusChain(on);
+ s->setLocalContentCanAccessRemoteUrls(on);
+ s->setLocalStorageDatabaseEnabled(on);
+ s->setOfflineStorageDatabaseEnabled(on);
+ s->setOfflineWebApplicationCacheEnabled(on);
+ s->setPluginsEnabled(on);
+ s->setPrintElementBackgrounds(on);
+ s->setPrivateBrowsingEnabled(on);
+ s->setZoomTextOnly(on);
+
+ QVERIFY(s->autoLoadImages() == on);
+ QVERIFY(s->developerExtrasEnabled() == on);
+ QVERIFY(s->javaEnabled() == on);
+ QVERIFY(s->javascriptCanAccessClipboard() == on);
+ QVERIFY(s->javascriptCanOpenWindows() == on);
+ QVERIFY(s->javascriptEnabled() == on);
+ QVERIFY(s->linksIncludedInFocusChain() == on);
+ QVERIFY(s->localContentCanAccessRemoteUrls() == on);
+ QVERIFY(s->localStorageDatabaseEnabled() == on);
+ QVERIFY(s->offlineStorageDatabaseEnabled() == on);
+ QVERIFY(s->offlineWebApplicationCacheEnabled() == on);
+ QVERIFY(s->pluginsEnabled() == on);
+ QVERIFY(s->printElementBackgrounds() == on);
+ QVERIFY(s->privateBrowsingEnabled() == on);
+ QVERIFY(s->zoomTextOnly() == on);
+
+ QVERIFY(s->property("autoLoadImages") == on);
+ QVERIFY(s->property("developerExtrasEnabled") == on);
+ QVERIFY(s->property("javaEnabled") == on);
+ QVERIFY(s->property("javascriptCanAccessClipboard") == on);
+ QVERIFY(s->property("javascriptCanOpenWindows") == on);
+ QVERIFY(s->property("javascriptEnabled") == on);
+ QVERIFY(s->property("linksIncludedInFocusChain") == on);
+ QVERIFY(s->property("localContentCanAccessRemoteUrls") == on);
+ QVERIFY(s->property("localStorageDatabaseEnabled") == on);
+ QVERIFY(s->property("offlineStorageDatabaseEnabled") == on);
+ QVERIFY(s->property("offlineWebApplicationCacheEnabled") == on);
+ QVERIFY(s->property("pluginsEnabled") == on);
+ QVERIFY(s->property("printElementBackgrounds") == on);
+ QVERIFY(s->property("privateBrowsingEnabled") == on);
+ QVERIFY(s->property("zoomTextOnly") == on);
+ }
+}
+
+void tst_qmlgraphicswebview::historyNav()
+{
+ QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/basic.qml"));
+ checkNoErrors(component);
+ QWebSettings::enablePersistentStorage(tmpDir());
+
+ QmlGraphicsWebView *wv = qobject_cast<QmlGraphicsWebView*>(component.create());
+ QVERIFY(wv != 0);
+ for (int i=1; i<=2; ++i) {
+ QTRY_COMPARE(wv->progress(), 1.0);
+ QCOMPARE(wv->title(),QString("Basic"));
+ QTRY_COMPARE(wv->icon().width(), 48);
+ QCOMPARE(wv->icon(),QPixmap(SRCDIR "/data/basic.png"));
+ QCOMPARE(wv->statusText(),QString("status here"));
+ QCOMPARE(strippedHtml(fileContents(SRCDIR "/data/basic.html")), strippedHtml(wv->html()));
+ QCOMPARE(wv->width(), 123.0);
+ QCOMPARE(wv->preferredWidth(), 0);
+ QCOMPARE(wv->zoomFactor(), 1.0);
+ QCOMPARE(wv->url(), QUrl::fromLocalFile(SRCDIR "/data/basic.html"));
+ QCOMPARE(wv->status(), QmlGraphicsWebView::Ready);
+ QVERIFY(wv->reloadAction());
+ QVERIFY(wv->reloadAction()->isEnabled());
+ QVERIFY(wv->backAction());
+ QVERIFY(!wv->backAction()->isEnabled());
+ QVERIFY(wv->forwardAction());
+ QVERIFY(!wv->forwardAction()->isEnabled());
+ QVERIFY(wv->stopAction());
+ QVERIFY(!wv->stopAction()->isEnabled());
+
+ wv->reloadAction()->trigger();
+ }
+
+ wv->setUrl(QUrl::fromLocalFile(SRCDIR "/data/forward.html"));
+ QTRY_COMPARE(wv->progress(), 1.0);
+ QCOMPARE(wv->title(),QString("Forward"));
+ QCOMPARE(strippedHtml(fileContents(SRCDIR "/data/forward.html")), strippedHtml(wv->html()));
+ QCOMPARE(wv->url(), QUrl::fromLocalFile(SRCDIR "/data/forward.html"));
+ QCOMPARE(wv->status(), QmlGraphicsWebView::Ready);
+ QCOMPARE(wv->statusText(),QString(""));
+ QVERIFY(wv->reloadAction());
+ QVERIFY(wv->reloadAction()->isEnabled());
+ QVERIFY(wv->backAction());
+ QVERIFY(wv->backAction()->isEnabled());
+ QVERIFY(wv->forwardAction());
+ QVERIFY(!wv->forwardAction()->isEnabled());
+ QVERIFY(wv->stopAction());
+ QVERIFY(!wv->stopAction()->isEnabled());
+
+ wv->backAction()->trigger();
+
+ QTRY_COMPARE(wv->progress(), 1.0);
+ QCOMPARE(wv->title(),QString("Basic"));
+ QCOMPARE(strippedHtml(fileContents(SRCDIR "/data/basic.html")), strippedHtml(wv->html()));
+ QCOMPARE(wv->url(), QUrl::fromLocalFile(SRCDIR "/data/basic.html"));
+ QCOMPARE(wv->status(), QmlGraphicsWebView::Ready);
+ QVERIFY(wv->reloadAction());
+ QVERIFY(wv->reloadAction()->isEnabled());
+ QVERIFY(wv->backAction());
+ QVERIFY(!wv->backAction()->isEnabled());
+ QVERIFY(wv->forwardAction());
+ QVERIFY(wv->forwardAction()->isEnabled());
+ QVERIFY(wv->stopAction());
+ QVERIFY(!wv->stopAction()->isEnabled());
+}
+
+void tst_qmlgraphicswebview::multipleWindows()
+{
+ QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/newwindows.qml"));
+ checkNoErrors(component);
+
+ QmlGraphicsGrid *grid = qobject_cast<QmlGraphicsGrid*>(component.create());
+ QVERIFY(grid != 0);
+ QTRY_COMPARE(grid->children().count(), 2+5); // Component, Loader, 5 WebViews
+}
+
+void tst_qmlgraphicswebview::loadError()
+{
+ QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/loadError.qml"));
+ checkNoErrors(component);
+ QWebSettings::enablePersistentStorage(tmpDir());
+
+ QmlGraphicsWebView *wv = qobject_cast<QmlGraphicsWebView*>(component.create());
+ QVERIFY(wv != 0);
+ for (int i=1; i<=2; ++i) {
+ QTRY_COMPARE(wv->progress(), 1.0);
+ QCOMPARE(wv->title(),QString(""));
+ QCOMPARE(wv->statusText(),QString("")); // HTML 'status bar' text, not error message
+ QCOMPARE(wv->url(), QUrl::fromLocalFile(SRCDIR "/data/does-not-exist.html")); // Unlike QWebPage, which loses url
+ QCOMPARE(wv->status(), QmlGraphicsWebView::Error);
+
+ wv->reloadAction()->trigger();
+ }
+}
+
+void tst_qmlgraphicswebview::setHtml()
+{
+ QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/sethtml.qml"));
+ checkNoErrors(component);
+ QmlGraphicsWebView *wv = qobject_cast<QmlGraphicsWebView*>(component.create());
+ QVERIFY(wv != 0);
+ QCOMPARE(wv->html(),QString("<html><head></head><body><p>This is a <b>string</b> set on the WebView</p></body></html>"));
+}
+
+void tst_qmlgraphicswebview::elementAreaAt()
+{
+ QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/elements.qml"));
+ checkNoErrors(component);
+ QmlGraphicsWebView *wv = qobject_cast<QmlGraphicsWebView*>(component.create());
+ QVERIFY(wv != 0);
+ QTRY_COMPARE(wv->progress(), 1.0);
+
+ QCOMPARE(wv->elementAreaAt(40,30,100,100),QRect(1,1,75,54)); // Area A in data/elements.html
+ QCOMPARE(wv->elementAreaAt(130,30,200,100),QRect(78,3,110,50)); // Area B
+ QCOMPARE(wv->elementAreaAt(40,30,400,400),QRect(0,0,310,100)); // Whole view
+ QCOMPARE(wv->elementAreaAt(130,30,280,280),QRect(76,1,223,54)); // Area BC
+ QCOMPARE(wv->elementAreaAt(130,30,400,400),QRect(0,0,310,100)); // Whole view
+}
+
+void tst_qmlgraphicswebview::javaScript()
+{
+ QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/javaScript.qml"));
+ checkNoErrors(component);
+ QmlGraphicsWebView *wv = qobject_cast<QmlGraphicsWebView*>(component.create());
+ QVERIFY(wv != 0);
+ QTRY_COMPARE(wv->progress(), 1.0);
+ QCOMPARE(wv->evaluateJavaScript("123").toInt(), 123);
+ QCOMPARE(wv->evaluateJavaScript("window.status").toString(), QString("status here"));
+ QCOMPARE(wv->evaluateJavaScript("window.myjsname.qmlprop").toString(), QString("qmlvalue"));
+}
+
+void tst_qmlgraphicswebview::pixelCache()
+{
+ QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/pixelCache.qml"));
+ checkNoErrors(component);
+ MyWebView *wv = qobject_cast<MyWebView*>(component.create());
+ QVERIFY(wv != 0);
+ QTRY_COMPARE(wv->progress(), 1.0);
+ QPixmap pm(150,150);
+ QPainter p(&pm);
+ wv->paint(&p,0,0);
+ const int expected = 120*(150+128); // 120 = width of HTML page, 150=pixmap height, 128=cache extra area
+ QCOMPARE(wv->pixelsPainted(), expected);
+ wv->paint(&p,0,0);
+ QCOMPARE(wv->pixelsPainted(), expected); // nothing new needed to be painted
+ wv->setPixelCacheSize(0); // clears the cache
+ wv->paint(&p,0,0);
+ QCOMPARE(wv->pixelsPainted(), expected*2); // everything needed to be painted
+ // Note that painted things always go into the cache (even if they don't "fit"),
+ // just that they will be removed if anything else needs to be painted.
+ wv->setPixelCacheSize(expected); // won't clear the cache
+ wv->paint(&p,0,0);
+ QCOMPARE(wv->pixelsPainted(), expected*2); // still there
+ wv->setPixelCacheSize(expected-1); // too small - will clear the cache
+ wv->paint(&p,0,0);
+ QCOMPARE(wv->pixelsPainted(), expected*3); // repainted
+}
+
+QTEST_MAIN(tst_qmlgraphicswebview)
+
+#include "tst_qmlgraphicswebview.moc"
diff --git a/tests/auto/declarative/qmlinfo/data/NestedObject.qml b/tests/auto/declarative/qmlinfo/data/NestedObject.qml
new file mode 100644
index 0000000..cd5b426
--- /dev/null
+++ b/tests/auto/declarative/qmlinfo/data/NestedObject.qml
@@ -0,0 +1,8 @@
+import Qt 4.6
+
+QtObject {
+ property var nested
+
+ nested: QtObject {}
+}
+
diff --git a/tests/auto/declarative/qmlinfo/data/nestedQmlObject.qml b/tests/auto/declarative/qmlinfo/data/nestedQmlObject.qml
new file mode 100644
index 0000000..a2ce78a
--- /dev/null
+++ b/tests/auto/declarative/qmlinfo/data/nestedQmlObject.qml
@@ -0,0 +1,8 @@
+import Qt 4.6
+
+QtObject {
+ property var nested
+ nested: NestedObject { }
+ property var nested2: nested.nested
+}
+
diff --git a/tests/auto/declarative/qmlinfo/data/qmlObject.qml b/tests/auto/declarative/qmlinfo/data/qmlObject.qml
new file mode 100644
index 0000000..ce05f89
--- /dev/null
+++ b/tests/auto/declarative/qmlinfo/data/qmlObject.qml
@@ -0,0 +1,8 @@
+import Qt 4.6
+
+QtObject {
+ property var nested
+
+ nested: QtObject {
+ }
+}
diff --git a/tests/auto/declarative/qmlinfo/qmlinfo.pro b/tests/auto/declarative/qmlinfo/qmlinfo.pro
new file mode 100644
index 0000000..dbebf92
--- /dev/null
+++ b/tests/auto/declarative/qmlinfo/qmlinfo.pro
@@ -0,0 +1,7 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlinfo.cpp
+
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlinfo/tst_qmlinfo.cpp b/tests/auto/declarative/qmlinfo/tst_qmlinfo.cpp
new file mode 100644
index 0000000..880f7b8
--- /dev/null
+++ b/tests/auto/declarative/qmlinfo/tst_qmlinfo.cpp
@@ -0,0 +1,139 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qtest.h>
+#include <QmlEngine>
+#include <QmlComponent>
+#include <QPushButton>
+#include <QmlContext>
+#include <qmlinfo.h>
+
+class tst_qmlinfo : public QObject
+{
+ Q_OBJECT
+public:
+ tst_qmlinfo() {}
+
+private slots:
+ void qmlObject();
+ void nestedQmlObject();
+ void nonQmlObject();
+ void nullObject();
+ void nonQmlContextedObject();
+
+private:
+ QmlEngine engine;
+};
+
+inline QUrl TEST_FILE(const QString &filename)
+{
+ return QUrl::fromLocalFile(QLatin1String(SRCDIR) + QLatin1String("/data/") + filename);
+}
+
+void tst_qmlinfo::qmlObject()
+{
+ QmlComponent component(&engine, TEST_FILE("qmlObject.qml"));
+
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QString message = "QML QObject_QML_0 (" + component.url().toString() + ":3:1) Test Message";
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(message));
+ qmlInfo(object) << "Test Message";
+
+ QObject *nested = qvariant_cast<QObject *>(object->property("nested"));
+ QVERIFY(nested != 0);
+
+ message = "QML QtObject (" + component.url().toString() + ":6:13) Second Test Message";
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(message));
+ qmlInfo(nested) << "Second Test Message";
+}
+
+void tst_qmlinfo::nestedQmlObject()
+{
+ QmlComponent component(&engine, TEST_FILE("nestedQmlObject.qml"));
+
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QObject *nested = qvariant_cast<QObject *>(object->property("nested"));
+ QVERIFY(nested != 0);
+ QObject *nested2 = qvariant_cast<QObject *>(object->property("nested2"));
+ QVERIFY(nested2 != 0);
+
+ QString message = "QML NestedObject (" + component.url().toString() + ":5:13) Outer Object";
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(message));
+ qmlInfo(nested) << "Outer Object";
+
+ message = "QML QtObject (" + TEST_FILE("NestedObject.qml").toString() + ":6:14) Inner Object";
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(message));
+ qmlInfo(nested2) << "Inner Object";
+}
+
+void tst_qmlinfo::nonQmlObject()
+{
+ QObject object;
+ QTest::ignoreMessage(QtWarningMsg, "QML QtObject (unknown location) Test Message");
+ qmlInfo(&object) << "Test Message";
+
+ QPushButton pbObject;
+ QTest::ignoreMessage(QtWarningMsg, "QML QPushButton (unknown location) Test Message");
+ qmlInfo(&pbObject) << "Test Message";
+}
+
+void tst_qmlinfo::nullObject()
+{
+ QTest::ignoreMessage(QtWarningMsg, "QML (unknown location) Null Object Test Message");
+ qmlInfo(0) << "Null Object Test Message";
+}
+
+void tst_qmlinfo::nonQmlContextedObject()
+{
+ QObject object;
+ QmlContext context(&engine);
+ QmlEngine::setContextForObject(&object, &context);
+ QTest::ignoreMessage(QtWarningMsg, "QML QtObject (unknown location) Test Message");
+ qmlInfo(&object) << "Test Message";
+}
+
+QTEST_MAIN(tst_qmlinfo)
+
+#include "tst_qmlinfo.moc"
diff --git a/tests/auto/declarative/qmlinstruction/qmlinstruction.pro b/tests/auto/declarative/qmlinstruction/qmlinstruction.pro
new file mode 100644
index 0000000..41be488
--- /dev/null
+++ b/tests/auto/declarative/qmlinstruction/qmlinstruction.pro
@@ -0,0 +1,6 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative script
+SOURCES += tst_qmlinstruction.cpp
+macx:CONFIG -= app_bundle
+
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlinstruction/tst_qmlinstruction.cpp b/tests/auto/declarative/qmlinstruction/tst_qmlinstruction.cpp
new file mode 100644
index 0000000..ea99a9e
--- /dev/null
+++ b/tests/auto/declarative/qmlinstruction/tst_qmlinstruction.cpp
@@ -0,0 +1,603 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qtest.h>
+#include <private/qmlcompiler_p.h>
+
+class tst_qmlinstruction : public QObject
+{
+ Q_OBJECT
+public:
+ tst_qmlinstruction() {}
+
+private slots:
+ void dump();
+};
+
+static QStringList messages;
+static void msgHandler(QtMsgType, const char *msg)
+{
+ messages << QLatin1String(msg);
+}
+
+void tst_qmlinstruction::dump()
+{
+ QmlCompiledData *data = new QmlCompiledData(0);
+ {
+ QmlInstruction i;
+ i.line = 0;
+ i.type = QmlInstruction::Init;
+ i.init.bindingsSize = 0;
+ i.init.parserStatusSize = 3;
+ i.init.contextCache = -1;
+ i.init.compiledBinding = -1;
+ data->bytecode << i;
+ }
+
+ {
+ QmlCompiledData::TypeReference ref;
+ ref.className = "Test";
+ data->types << ref;
+
+ QmlInstruction i;
+ i.line = 1;
+ i.type = QmlInstruction::CreateObject;
+ i.create.type = 0;
+ i.create.data = -1;
+ i.create.bindingBits = -1;
+ i.create.column = 10;
+ data->bytecode << i;
+ }
+
+ {
+ data->primitives << "testId";
+
+ QmlInstruction i;
+ i.line = 2;
+ i.type = QmlInstruction::SetId;
+ i.setId.value = 0;
+ i.setId.index = 0;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 3;
+ i.type = QmlInstruction::SetDefault;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 4;
+ i.type = QmlInstruction::CreateComponent;
+ i.createComponent.count = 3;
+ i.createComponent.column = 4;
+ i.createComponent.endLine = 14;
+ i.createComponent.metaObject = 0;
+
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 5;
+ i.type = QmlInstruction::StoreMetaObject;
+ i.storeMeta.data = 3;
+ i.storeMeta.aliasData = 6;
+ i.storeMeta.propertyCache = 7;
+
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 6;
+ i.type = QmlInstruction::StoreFloat;
+ i.storeFloat.propertyIndex = 3;
+ i.storeFloat.value = 11.3;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 7;
+ i.type = QmlInstruction::StoreDouble;
+ i.storeDouble.propertyIndex = 4;
+ i.storeDouble.value = 14.8;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 8;
+ i.type = QmlInstruction::StoreInteger;
+ i.storeInteger.propertyIndex = 5;
+ i.storeInteger.value = 9;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 9;
+ i.type = QmlInstruction::StoreBool;
+ i.storeBool.propertyIndex = 6;
+ i.storeBool.value = true;
+
+ data->bytecode << i;
+ }
+
+ {
+ data->primitives << "Test String";
+ QmlInstruction i;
+ i.line = 10;
+ i.type = QmlInstruction::StoreString;
+ i.storeString.propertyIndex = 7;
+ i.storeString.value = 1;
+ data->bytecode << i;
+ }
+
+ {
+ data->primitives << "http://www.nokia.com";
+ QmlInstruction i;
+ i.line = 11;
+ i.type = QmlInstruction::StoreUrl;
+ i.storeUrl.propertyIndex = 8;
+ i.storeUrl.value = 2;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 12;
+ i.type = QmlInstruction::StoreColor;
+ i.storeColor.propertyIndex = 9;
+ i.storeColor.value = 0xFF00FF00;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 13;
+ i.type = QmlInstruction::StoreDate;
+ i.storeDate.propertyIndex = 10;
+ i.storeDate.value = 9;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 14;
+ i.type = QmlInstruction::StoreTime;
+ i.storeTime.propertyIndex = 11;
+ i.storeTime.valueIndex = 33;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 15;
+ i.type = QmlInstruction::StoreDateTime;
+ i.storeDateTime.propertyIndex = 12;
+ i.storeDateTime.valueIndex = 44;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 16;
+ i.type = QmlInstruction::StorePoint;
+ i.storeRealPair.propertyIndex = 13;
+ i.storeRealPair.valueIndex = 3;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 17;
+ i.type = QmlInstruction::StorePointF;
+ i.storeRealPair.propertyIndex = 14;
+ i.storeRealPair.valueIndex = 9;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 18;
+ i.type = QmlInstruction::StoreSize;
+ i.storeRealPair.propertyIndex = 15;
+ i.storeRealPair.valueIndex = 8;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 19;
+ i.type = QmlInstruction::StoreSizeF;
+ i.storeRealPair.propertyIndex = 16;
+ i.storeRealPair.valueIndex = 99;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 20;
+ i.type = QmlInstruction::StoreRect;
+ i.storeRect.propertyIndex = 17;
+ i.storeRect.valueIndex = 2;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 21;
+ i.type = QmlInstruction::StoreRectF;
+ i.storeRect.propertyIndex = 18;
+ i.storeRect.valueIndex = 19;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 22;
+ i.type = QmlInstruction::StoreVector3D;
+ i.storeVector3D.propertyIndex = 19;
+ i.storeVector3D.valueIndex = 9;
+ data->bytecode << i;
+ }
+
+ {
+ data->primitives << "color(1, 1, 1, 1)";
+ QmlInstruction i;
+ i.line = 23;
+ i.type = QmlInstruction::StoreVariant;
+ i.storeString.propertyIndex = 20;
+ i.storeString.value = 3;
+
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 24;
+ i.type = QmlInstruction::StoreObject;
+ i.storeObject.propertyIndex = 21;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 25;
+ i.type = QmlInstruction::StoreVariantObject;
+ i.storeObject.propertyIndex = 22;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 26;
+ i.type = QmlInstruction::StoreInterface;
+ i.storeObject.propertyIndex = 23;
+ data->bytecode << i;
+ }
+
+ {
+ data->primitives << "console.log(1921)";
+
+ QmlInstruction i;
+ i.line = 27;
+ i.type = QmlInstruction::StoreSignal;
+ i.storeSignal.signalIndex = 2;
+ i.storeSignal.value = 4;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 28;
+ i.type = QmlInstruction::StoreScript;
+ i.storeScript.value = 2;
+ //i.storeScript.fileName = 18;
+ //i.storeScript.lineNumber = 28;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 29;
+ i.type = QmlInstruction::StoreScriptString;
+ i.storeScriptString.propertyIndex = 24;
+ i.storeScriptString.value = 3;
+ i.storeScriptString.scope = 1;
+ data->bytecode << i;
+ }
+
+ {
+ data->datas << "mySignal";
+
+ QmlInstruction i;
+ i.line = 30;
+ i.type = QmlInstruction::AssignSignalObject;
+ i.assignSignalObject.signal = 0;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 31;
+ i.type = QmlInstruction::AssignCustomType;
+ i.assignCustomType.propertyIndex = 25;
+ i.assignCustomType.valueIndex = 4;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 32;
+ i.type = QmlInstruction::StoreBinding;
+ i.assignBinding.property = 26;
+ i.assignBinding.value = 3;
+ i.assignBinding.context = 2;
+ i.assignBinding.owner = 0;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 33;
+ i.type = QmlInstruction::StoreCompiledBinding;
+ i.assignBinding.property = 27;
+ i.assignBinding.value = 2;
+ i.assignBinding.context = 4;
+ i.assignBinding.owner = 0;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 34;
+ i.type = QmlInstruction::StoreValueSource;
+ i.assignValueSource.property = 29;
+ i.assignValueSource.owner = 1;
+ i.assignValueSource.castValue = 4;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 35;
+ i.type = QmlInstruction::StoreValueInterceptor;
+ i.assignValueInterceptor.property = 30;
+ i.assignValueInterceptor.owner = 2;
+ i.assignValueInterceptor.castValue = -4;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 36;
+ i.type = QmlInstruction::BeginObject;
+ i.begin.castValue = 4;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 37;
+ i.type = QmlInstruction::StoreObjectQmlList;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 38;
+ i.type = QmlInstruction::StoreObjectQList;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 39;
+ i.type = QmlInstruction::AssignObjectList;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 40;
+ i.type = QmlInstruction::FetchAttached;
+ i.fetchAttached.id = 23;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 41;
+ i.type = QmlInstruction::FetchQmlList;
+ i.fetchQmlList.property = 31;
+ i.fetchQmlList.type = 3;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 42;
+ i.type = QmlInstruction::FetchQList;
+ i.fetch.property = 32;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 43;
+ i.type = QmlInstruction::FetchObject;
+ i.fetch.property = 33;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 44;
+ i.type = QmlInstruction::FetchValueType;
+ i.fetchValue.property = 34;
+ i.fetchValue.type = 6;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 45;
+ i.type = QmlInstruction::PopFetchedObject;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 46;
+ i.type = QmlInstruction::PopQList;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 47;
+ i.type = QmlInstruction::PopValueType;
+ i.fetchValue.property = 35;
+ i.fetchValue.type = 8;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 48;
+ i.type = QmlInstruction::Defer;
+ i.defer.deferCount = 7;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = -1;
+ i.type = QmlInstruction::Defer;
+ i.defer.deferCount = 7;
+ data->bytecode << i;
+ }
+
+ {
+ QmlInstruction i;
+ i.line = 50;
+ i.type = (QmlInstruction::Type)(QmlInstruction::Defer + 1); // Non-existant
+ data->bytecode << i;
+ }
+
+ QStringList expect;
+ expect
+ << "Index\tLine\tOperation\t\tData1\tData2\tData3\tComments"
+ << "-------------------------------------------------------------------------------"
+ << "0\t\t0\tINIT\t\t\t0\t3\t-1\t-1"
+ << "1\t\t1\tCREATE\t\t\t0\t\t\t\"Test\""
+ << "2\t\t2\tSETID\t\t\t0\t\t\t\"testId\""
+ << "3\t\t3\tSET_DEFAULT"
+ << "4\t\t4\tCREATE_COMPONENT\t3"
+ << "5\t\t5\tSTORE_META\t\t3"
+ << "6\t\t6\tSTORE_FLOAT\t\t3\t11.3"
+ << "7\t\t7\tSTORE_DOUBLE\t\t4\t14.8"
+ << "8\t\t8\tSTORE_INTEGER\t\t5\t9"
+ << "9\t\t9\tSTORE_BOOL\t\t6\ttrue"
+ << "10\t\t10\tSTORE_STRING\t\t7\t1\t\t\"Test String\""
+ << "11\t\t11\tSTORE_URL\t\t8\t2\t\t\"http://www.nokia.com\""
+ << "12\t\t12\tSTORE_COLOR\t\t9\t\t\t\"ff00ff00\""
+ << "13\t\t13\tSTORE_DATE\t\t10\t9"
+ << "14\t\t14\tSTORE_TIME\t\t11\t33"
+ << "15\t\t15\tSTORE_DATETIME\t\t12\t44"
+ << "16\t\t16\tSTORE_POINT\t\t13\t3"
+ << "17\t\t17\tSTORE_POINTF\t\t14\t9"
+ << "18\t\t18\tSTORE_SIZE\t\t15\t8"
+ << "19\t\t19\tSTORE_SIZEF\t\t16\t99"
+ << "20\t\t20\tSTORE_RECT\t\t17\t2"
+ << "21\t\t21\tSTORE_RECTF\t\t18\t19"
+ << "22\t\t22\tSTORE_VECTOR3D\t\t19\t9"
+ << "23\t\t23\tSTORE_VARIANT\t\t20\t3\t\t\"color(1, 1, 1, 1)\""
+ << "24\t\t24\tSTORE_OBJECT\t\t21"
+ << "25\t\t25\tSTORE_VARIANT_OBJECT\t22"
+ << "26\t\t26\tSTORE_INTERFACE\t\t23"
+ << "27\t\t27\tSTORE_SIGNAL\t\t2\t4\t\t\"console.log(1921)\""
+ << "28\t\t28\tSTORE_SCRIPT\t\t2"
+ << "29\t\t29\tSTORE_SCRIPT_STRING\t24\t3\t1"
+ << "30\t\t30\tASSIGN_SIGNAL_OBJECT\t0\t\t\t\"mySignal\""
+ << "31\t\t31\tASSIGN_CUSTOMTYPE\t25\t4"
+ << "32\t\t32\tSTORE_BINDING\t26\t3\t2"
+ << "33\t\t33\tSTORE_COMPILED_BINDING\t27\t2\t4"
+ << "34\t\t34\tSTORE_VALUE_SOURCE\t29\t4"
+ << "35\t\t35\tSTORE_VALUE_INTERCEPTOR\t30\t-4"
+ << "36\t\t36\tBEGIN\t\t\t4"
+ << "37\t\t37\tSTORE_OBJECT_QMLLIST"
+ << "38\t\t38\tSTORE_OBJECT_QLIST"
+ << "39\t\t39\tASSIGN_OBJECT_LIST"
+ << "40\t\t40\tFETCH_ATTACHED\t\t23"
+ << "41\t\t41\tFETCH_QMLLIST\t\t31\t3"
+ << "42\t\t42\tFETCH_QLIST\t\t32"
+ << "43\t\t43\tFETCH\t\t\t33"
+ << "44\t\t44\tFETCH_VALUE\t\t34\t6"
+ << "45\t\t45\tPOP"
+ << "46\t\t46\tPOP_QLIST"
+ << "47\t\t47\tPOP_VALUE\t\t35\t8"
+ << "48\t\t48\tDEFER\t\t\t7"
+ << "49\t\tNA\tDEFER\t\t\t7"
+ << "50\t\t50\tXXX UNKOWN INSTRUCTION\t49"
+ << "-------------------------------------------------------------------------------";
+
+ messages = QStringList();
+ QtMsgHandler old = qInstallMsgHandler(msgHandler);
+ data->dumpInstructions();
+ qInstallMsgHandler(old);
+
+ QCOMPARE(messages.count(), expect.count());
+ for (int ii = 0; ii < messages.count(); ++ii) {
+ QCOMPARE(messages.at(ii), expect.at(ii));
+ }
+
+ data->release();
+}
+
+QTEST_MAIN(tst_qmlinstruction)
+
+#include "tst_qmlinstruction.moc"
diff --git a/tests/auto/declarative/qmllanguage/data/Alias.qml b/tests/auto/declarative/qmllanguage/data/Alias.qml
new file mode 100644
index 0000000..55aa231
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/Alias.qml
@@ -0,0 +1,8 @@
+import Qt 4.6
+
+QtObject {
+ id: root
+ property int value: 1892
+ property alias aliasValue: root.value
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/Alias2.qml b/tests/auto/declarative/qmllanguage/data/Alias2.qml
new file mode 100644
index 0000000..6362b2d
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/Alias2.qml
@@ -0,0 +1,9 @@
+import Test 1.0
+import Qt 4.6
+
+QtObject {
+ property var other
+ other: MyTypeObject { id: obj }
+ property alias enumAlias: obj.enumProperty;
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/Alias3.qml b/tests/auto/declarative/qmllanguage/data/Alias3.qml
new file mode 100644
index 0000000..d1e78f8
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/Alias3.qml
@@ -0,0 +1,12 @@
+import Test 1.0
+import Qt 4.6
+
+QtObject {
+ property alias obj : otherObj
+ property var child
+ child: QtObject {
+ id: otherObj
+ property int myValue: 10
+ }
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/Alias4.qml b/tests/auto/declarative/qmllanguage/data/Alias4.qml
new file mode 100644
index 0000000..573674c
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/Alias4.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+import Qt 4.6
+
+Alias3 {}
+
diff --git a/tests/auto/declarative/qmllanguage/data/ComponentComposite.qml b/tests/auto/declarative/qmllanguage/data/ComponentComposite.qml
new file mode 100644
index 0000000..05fbc3f
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/ComponentComposite.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+Component {
+ QtObject {}
+}
diff --git a/tests/auto/declarative/qmllanguage/data/CompositeType.qml b/tests/auto/declarative/qmllanguage/data/CompositeType.qml
new file mode 100644
index 0000000..99d010f
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/CompositeType.qml
@@ -0,0 +1,4 @@
+import Qt 4.6
+
+QtObject {
+}
diff --git a/tests/auto/declarative/qmllanguage/data/CompositeType2.qml b/tests/auto/declarative/qmllanguage/data/CompositeType2.qml
new file mode 100644
index 0000000..86210e9
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/CompositeType2.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+
+MyQmlObject {
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/CompositeType3.qml b/tests/auto/declarative/qmllanguage/data/CompositeType3.qml
new file mode 100644
index 0000000..d08f35b
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/CompositeType3.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+QtObject {
+ property int a
+}
diff --git a/tests/auto/declarative/qmllanguage/data/CompositeType4.qml b/tests/auto/declarative/qmllanguage/data/CompositeType4.qml
new file mode 100644
index 0000000..a6a8168
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/CompositeType4.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyQmlObject {
+ property int a
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/DynamicPropertiesNestedType.qml b/tests/auto/declarative/qmllanguage/data/DynamicPropertiesNestedType.qml
new file mode 100644
index 0000000..aefbf9a
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/DynamicPropertiesNestedType.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+QtObject {
+ property int super_a: 10
+ property int super_c: 14
+}
diff --git a/tests/auto/declarative/qmllanguage/data/HelperAlias.qml b/tests/auto/declarative/qmllanguage/data/HelperAlias.qml
new file mode 100644
index 0000000..dc3b382
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/HelperAlias.qml
@@ -0,0 +1,9 @@
+import Test 1.0
+import Qt 4.6
+
+QtObject {
+ property var child
+ child: QtObject { id: obj }
+ property alias objAlias: obj;
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/I18n.qml b/tests/auto/declarative/qmllanguage/data/I18n.qml
new file mode 100644
index 0000000..558c836
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/I18n.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyTypeObject {
+ property int áâãäå: 10
+ stringProperty: "Test áâãäå: " + áâãäå
+}
diff --git a/tests/auto/declarative/qmllanguage/data/I18nType30.qml b/tests/auto/declarative/qmllanguage/data/I18nType30.qml
new file mode 100644
index 0000000..42dbc69
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/I18nType30.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+
+MyTypeObject {
+ stringProperty: "Test áâãäå: 30"
+}
diff --git a/tests/auto/declarative/qmllanguage/data/MyComponent.qml b/tests/auto/declarative/qmllanguage/data/MyComponent.qml
new file mode 100644
index 0000000..1a23277
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/MyComponent.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyQmlObject {
+ property real x;
+ property real y;
+}
diff --git a/tests/auto/declarative/qmllanguage/data/MyCompositeValueSource.qml b/tests/auto/declarative/qmllanguage/data/MyCompositeValueSource.qml
new file mode 100644
index 0000000..e620e26
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/MyCompositeValueSource.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyPropertyValueSource {
+ property int x
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/MyContainerComponent.qml b/tests/auto/declarative/qmllanguage/data/MyContainerComponent.qml
new file mode 100644
index 0000000..61f54c5
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/MyContainerComponent.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+
+MyContainer {
+ property int x
+}
diff --git a/tests/auto/declarative/qmllanguage/data/NestedAlias.qml b/tests/auto/declarative/qmllanguage/data/NestedAlias.qml
new file mode 100644
index 0000000..5155612
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/NestedAlias.qml
@@ -0,0 +1,14 @@
+import Qt 4.6
+
+QtObject {
+ property QtObject o1
+ property QtObject o2
+
+ property alias a: object2.a
+
+ o1: QtObject { id: object1 }
+ o2: QtObject {
+ id: object2
+ property int a: 1923
+ }
+}
diff --git a/tests/auto/declarative/qmllanguage/data/NestedErrorsType.qml b/tests/auto/declarative/qmllanguage/data/NestedErrorsType.qml
new file mode 100644
index 0000000..5cc8d20
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/NestedErrorsType.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+Item {
+ x: "You can't assign a string to a real!"
+}
diff --git a/tests/auto/declarative/qmllanguage/data/OnCompletedType.qml b/tests/auto/declarative/qmllanguage/data/OnCompletedType.qml
new file mode 100644
index 0000000..2889caf
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/OnCompletedType.qml
@@ -0,0 +1,8 @@
+import Test 1.0
+import Qt 4.6
+
+MyQmlObject {
+ property int a: Math.max(10, 9)
+ property int b: 11
+ Component.onCompleted: console.log("Completed " + a + " " + b);
+}
diff --git a/tests/auto/declarative/qmllanguage/data/alias.1.qml b/tests/auto/declarative/qmllanguage/data/alias.1.qml
new file mode 100644
index 0000000..500b0f6
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/alias.1.qml
@@ -0,0 +1,8 @@
+import Test 1.0
+import Qt 4.6
+
+QtObject {
+ id: root
+ property int value: 10
+ property alias valueAlias: root.value
+}
diff --git a/tests/auto/declarative/qmllanguage/data/alias.2.qml b/tests/auto/declarative/qmllanguage/data/alias.2.qml
new file mode 100644
index 0000000..5c92270
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/alias.2.qml
@@ -0,0 +1,8 @@
+import Test 1.0
+
+MyQmlObject {
+ id: root
+ property alias aliasObject: root.qmlobjectProperty
+
+ qmlobjectProperty: MyQmlObject { value : 10 }
+}
diff --git a/tests/auto/declarative/qmllanguage/data/alias.3.qml b/tests/auto/declarative/qmllanguage/data/alias.3.qml
new file mode 100644
index 0000000..e059937
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/alias.3.qml
@@ -0,0 +1,10 @@
+import Qt 4.6
+
+QtObject {
+ property var other
+ other: Alias { id: myAliasObject }
+
+ property alias value: myAliasObject.aliasValue
+ property alias value2: myAliasObject.value
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/alias.4.qml b/tests/auto/declarative/qmllanguage/data/alias.4.qml
new file mode 100644
index 0000000..bd6a769
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/alias.4.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+Alias2 {
+ enumAlias: MyTypeObject.EnumVal2
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/alias.5.qml b/tests/auto/declarative/qmllanguage/data/alias.5.qml
new file mode 100644
index 0000000..4316d0d
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/alias.5.qml
@@ -0,0 +1,13 @@
+import Qt 4.6
+import Test 1.0
+
+QtObject {
+ property alias otherAlias: otherObject
+
+ property var other
+ other: MyQmlObject {
+ id: otherObject
+ value: 10
+ }
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/alias.6.qml b/tests/auto/declarative/qmllanguage/data/alias.6.qml
new file mode 100644
index 0000000..e3af230
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/alias.6.qml
@@ -0,0 +1,8 @@
+import Qt 4.6
+
+QtObject {
+ property QtObject o;
+ property alias a: object.a
+ o: NestedAlias { id: object }
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/alias.7.qml b/tests/auto/declarative/qmllanguage/data/alias.7.qml
new file mode 100644
index 0000000..a9a57eb
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/alias.7.qml
@@ -0,0 +1,14 @@
+import Qt 4.6
+
+QtObject {
+ property QtObject object
+ property alias aliasedObject: target.object
+
+ object: QtObject {
+ id: target
+
+ property QtObject object
+ object: QtObject {}
+ }
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/alias.8.qml b/tests/auto/declarative/qmllanguage/data/alias.8.qml
new file mode 100644
index 0000000..2b9ad85
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/alias.8.qml
@@ -0,0 +1,9 @@
+import Qt 4.6
+
+QtObject {
+ property var other
+ other: Alias3 { id: myAliasObject }
+
+ property int value: myAliasObject.obj.myValue
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/alias.9.qml b/tests/auto/declarative/qmllanguage/data/alias.9.qml
new file mode 100644
index 0000000..a2a41a1
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/alias.9.qml
@@ -0,0 +1,9 @@
+import Qt 4.6
+
+QtObject {
+ property var other
+ other: Alias4 { id: myAliasObject }
+
+ property int value: myAliasObject.obj.myValue
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/assignBasicTypes.qml b/tests/auto/declarative/qmllanguage/data/assignBasicTypes.qml
new file mode 100644
index 0000000..c86c96b
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/assignBasicTypes.qml
@@ -0,0 +1,29 @@
+import Test 1.0
+MyTypeObject {
+ flagProperty: "FlagVal1 | FlagVal3"
+ enumProperty: "EnumVal2"
+ stringProperty: "Hello World!"
+ uintProperty: 10
+ intProperty: -19
+ realProperty: 23.2
+ doubleProperty: -19.7
+ floatProperty: 8.5
+ colorProperty: "red"
+ dateProperty: "1982-11-25"
+ timeProperty: "11:11:31"
+ timeProperty: "11:11:32"
+ timeProperty: "11:11:32"
+ dateTimeProperty: "2009-05-12T13:22:01"
+ pointProperty: "99,13"
+ pointFProperty: "-10.1,12.3"
+ sizeProperty: "99x13"
+ sizeFProperty: "0.1x0.2"
+ rectProperty: "9,7,100x200"
+ rectFProperty: "1000.1,-10.9,400x90.99"
+ boolProperty: true
+ variantProperty: "Hello World!"
+ vectorProperty: "10,1,2.2"
+ urlProperty: "main.qml"
+
+ objectProperty: MyTypeObject { intProperty: 8 }
+}
diff --git a/tests/auto/declarative/qmllanguage/data/assignCompositeToType.qml b/tests/auto/declarative/qmllanguage/data/assignCompositeToType.qml
new file mode 100644
index 0000000..f6422bd
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/assignCompositeToType.qml
@@ -0,0 +1,18 @@
+import Qt 4.6
+import Test 1.0
+
+QtObject {
+ property QtObject myProperty
+ property QtObject myProperty2
+ property QtObject myProperty3
+ property QtObject myProperty4
+ property MyQmlObject myProperty5
+ property MyQmlObject myProperty6
+
+ myProperty: CompositeType {}
+ myProperty2: CompositeType2 {}
+ myProperty3: CompositeType3 {}
+ myProperty4: CompositeType4 {}
+ myProperty5: CompositeType2 {}
+ myProperty6: CompositeType4 {}
+}
diff --git a/tests/auto/declarative/qmllanguage/data/assignLiteralSignalProperty.qml b/tests/auto/declarative/qmllanguage/data/assignLiteralSignalProperty.qml
new file mode 100644
index 0000000..399fcea
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/assignLiteralSignalProperty.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyQmlObject {
+ onLiteralSignal: 10
+}
diff --git a/tests/auto/declarative/qmllanguage/data/assignObjectToSignal.qml b/tests/auto/declarative/qmllanguage/data/assignObjectToSignal.qml
new file mode 100644
index 0000000..789cc66
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/assignObjectToSignal.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyQmlObject {
+ onBasicSignal: MyQmlObject {}
+}
diff --git a/tests/auto/declarative/qmllanguage/data/assignObjectToVariant.qml b/tests/auto/declarative/qmllanguage/data/assignObjectToVariant.qml
new file mode 100644
index 0000000..0ff9370
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/assignObjectToVariant.qml
@@ -0,0 +1,7 @@
+import Test 1.0
+import Qt 4.6
+
+QtObject {
+ property var a;
+ a: MyQmlObject {}
+}
diff --git a/tests/auto/declarative/qmllanguage/data/assignQmlComponent.qml b/tests/auto/declarative/qmllanguage/data/assignQmlComponent.qml
new file mode 100644
index 0000000..20bdc55
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/assignQmlComponent.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyContainer {
+ MyComponent { x: 10; y: 11; }
+}
diff --git a/tests/auto/declarative/qmllanguage/data/assignSignal.qml b/tests/auto/declarative/qmllanguage/data/assignSignal.qml
new file mode 100644
index 0000000..2a48df8
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/assignSignal.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+MyQmlObject {
+ onBasicSignal: basicSlot()
+ onBasicParameterizedSignal: basicSlotWithArgs(parameter)
+}
diff --git a/tests/auto/declarative/qmllanguage/data/assignTypeExtremes.qml b/tests/auto/declarative/qmllanguage/data/assignTypeExtremes.qml
new file mode 100644
index 0000000..60ede52
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/assignTypeExtremes.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+MyTypeObject {
+ uintProperty: 4000000000
+ intProperty: -2000000000
+}
diff --git a/tests/auto/declarative/qmllanguage/data/attachedProperties.qml b/tests/auto/declarative/qmllanguage/data/attachedProperties.qml
new file mode 100644
index 0000000..b46ec34
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/attachedProperties.qml
@@ -0,0 +1,8 @@
+import Test 1.0
+import Test 1.0 as Namespace
+import Qt 4.6
+
+QtObject {
+ MyQmlObject.value: 10
+ Namespace.MyQmlObject.value2: 13
+}
diff --git a/tests/auto/declarative/qmllanguage/data/autoComponentCreation.qml b/tests/auto/declarative/qmllanguage/data/autoComponentCreation.qml
new file mode 100644
index 0000000..5d00144
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/autoComponentCreation.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyTypeObject {
+ componentProperty : MyTypeObject { realProperty: 9 }
+}
diff --git a/tests/auto/declarative/qmllanguage/data/component.1.errors.txt b/tests/auto/declarative/qmllanguage/data/component.1.errors.txt
new file mode 100644
index 0000000..091aad6
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/component.1.errors.txt
@@ -0,0 +1 @@
+3:1:Cannot create empty component specification
diff --git a/tests/auto/declarative/qmllanguage/data/component.1.qml b/tests/auto/declarative/qmllanguage/data/component.1.qml
new file mode 100644
index 0000000..07e463a
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/component.1.qml
@@ -0,0 +1,4 @@
+import Qt 4.6
+
+Component {
+}
diff --git a/tests/auto/declarative/qmllanguage/data/component.2.errors.txt b/tests/auto/declarative/qmllanguage/data/component.2.errors.txt
new file mode 100644
index 0000000..76e7656
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/component.2.errors.txt
@@ -0,0 +1 @@
+6:9:id is not unique
diff --git a/tests/auto/declarative/qmllanguage/data/component.2.qml b/tests/auto/declarative/qmllanguage/data/component.2.qml
new file mode 100644
index 0000000..88e0f73
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/component.2.qml
@@ -0,0 +1,9 @@
+import Qt 4.6
+
+Item {
+ id: myId
+ Component {
+ id: myId
+ QtObject {}
+ }
+}
diff --git a/tests/auto/declarative/qmllanguage/data/component.3.errors.txt b/tests/auto/declarative/qmllanguage/data/component.3.errors.txt
new file mode 100644
index 0000000..9a13142
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/component.3.errors.txt
@@ -0,0 +1 @@
+6:9:Invalid component id specification
diff --git a/tests/auto/declarative/qmllanguage/data/component.3.qml b/tests/auto/declarative/qmllanguage/data/component.3.qml
new file mode 100644
index 0000000..287a959
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/component.3.qml
@@ -0,0 +1,9 @@
+import Qt 4.6
+
+Item {
+ Component {
+ id: myId
+ id: myId2
+ QtObject {}
+ }
+}
diff --git a/tests/auto/declarative/qmllanguage/data/component.4.errors.txt b/tests/auto/declarative/qmllanguage/data/component.4.errors.txt
new file mode 100644
index 0000000..2ab18685
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/component.4.errors.txt
@@ -0,0 +1 @@
+3:1:Invalid component body specification
diff --git a/tests/auto/declarative/qmllanguage/data/component.4.qml b/tests/auto/declarative/qmllanguage/data/component.4.qml
new file mode 100644
index 0000000..ab1e29b
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/component.4.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+Component {
+ QtObject {}
+ QtObject {}
+}
diff --git a/tests/auto/declarative/qmllanguage/data/component.5.errors.txt b/tests/auto/declarative/qmllanguage/data/component.5.errors.txt
new file mode 100644
index 0000000..5e88900
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/component.5.errors.txt
@@ -0,0 +1 @@
+4:5:Invalid component specification
diff --git a/tests/auto/declarative/qmllanguage/data/component.5.qml b/tests/auto/declarative/qmllanguage/data/component.5.qml
new file mode 100644
index 0000000..629e998
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/component.5.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+Component {
+ x: 10
+ QtObject {}
+}
diff --git a/tests/auto/declarative/qmllanguage/data/component.6.errors.txt b/tests/auto/declarative/qmllanguage/data/component.6.errors.txt
new file mode 100644
index 0000000..2b1c6ca
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/component.6.errors.txt
@@ -0,0 +1 @@
+4:5:Invalid component id specification
diff --git a/tests/auto/declarative/qmllanguage/data/component.6.qml b/tests/auto/declarative/qmllanguage/data/component.6.qml
new file mode 100644
index 0000000..2303ebf
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/component.6.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+Component {
+ id: QtObject {}
+ QtObject {}
+}
diff --git a/tests/auto/declarative/qmllanguage/data/componentCompositeType.qml b/tests/auto/declarative/qmllanguage/data/componentCompositeType.qml
new file mode 100644
index 0000000..0a7249a
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/componentCompositeType.qml
@@ -0,0 +1,8 @@
+import Qt 4.6
+
+QtObject {
+ property var test
+
+ test: ComponentComposite {}
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/cppnamespace.2.qml b/tests/auto/declarative/qmllanguage/data/cppnamespace.2.qml
new file mode 100644
index 0000000..e3b32ca
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/cppnamespace.2.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+
+MySecondNamespacedType {
+ list: [ MyNamespacedType {} ]
+}
diff --git a/tests/auto/declarative/qmllanguage/data/cppnamespace.qml b/tests/auto/declarative/qmllanguage/data/cppnamespace.qml
new file mode 100644
index 0000000..e1daf3b
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/cppnamespace.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+
+MyNamespacedType {
+}
diff --git a/tests/auto/declarative/qmllanguage/data/crash2.qml b/tests/auto/declarative/qmllanguage/data/crash2.qml
new file mode 100644
index 0000000..a22c776
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/crash2.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+QtObject {
+ objectName: "Hello" + "World"
+}
diff --git a/tests/auto/declarative/qmllanguage/data/customParserIdNotAllowed.errors.txt b/tests/auto/declarative/qmllanguage/data/customParserIdNotAllowed.errors.txt
new file mode 100644
index 0000000..43a8bb2
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/customParserIdNotAllowed.errors.txt
@@ -0,0 +1 @@
+4:19:ListElement: cannot use reserved "id" property
diff --git a/tests/auto/declarative/qmllanguage/data/customParserIdNotAllowed.qml b/tests/auto/declarative/qmllanguage/data/customParserIdNotAllowed.qml
new file mode 100644
index 0000000..00cc0c4
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/customParserIdNotAllowed.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+ListModel {
+ ListElement { a: 10 }
+ ListElement { id: foo; a: 12 }
+}
diff --git a/tests/auto/declarative/qmllanguage/data/customParserTypes.qml b/tests/auto/declarative/qmllanguage/data/customParserTypes.qml
new file mode 100644
index 0000000..cf2f272
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/customParserTypes.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+ListModel {
+ ListElement { a: 10 }
+ ListElement { a: 12 }
+}
diff --git a/tests/auto/declarative/qmllanguage/data/customVariantTypes.qml b/tests/auto/declarative/qmllanguage/data/customVariantTypes.qml
new file mode 100644
index 0000000..0263ed2
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/customVariantTypes.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyQmlObject {
+ customType: "10"
+}
diff --git a/tests/auto/declarative/qmllanguage/data/declaredPropertyValues.qml b/tests/auto/declarative/qmllanguage/data/declaredPropertyValues.qml
new file mode 100644
index 0000000..3987a3c
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/declaredPropertyValues.qml
@@ -0,0 +1,8 @@
+import Qt 4.6
+
+QtObject {
+ property int a: 10
+ property int b: 10 + a
+ property QtObject c: QtObject {}
+ property list<QtObject> d: [ QtObject {}, QtObject {} ]
+}
diff --git a/tests/auto/declarative/qmllanguage/data/defaultGrouped.errors.txt b/tests/auto/declarative/qmllanguage/data/defaultGrouped.errors.txt
new file mode 100644
index 0000000..945d51b
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/defaultGrouped.errors.txt
@@ -0,0 +1 @@
+7:9:Invalid value in grouped property
diff --git a/tests/auto/declarative/qmllanguage/data/defaultGrouped.qml b/tests/auto/declarative/qmllanguage/data/defaultGrouped.qml
new file mode 100644
index 0000000..0fd1404
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/defaultGrouped.qml
@@ -0,0 +1,10 @@
+import Test 1.0
+import Qt 4.6
+
+MyTypeObject {
+ grouped {
+ script: console.log(1921)
+ QtObject {}
+ }
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/defaultPropertyListOrder.qml b/tests/auto/declarative/qmllanguage/data/defaultPropertyListOrder.qml
new file mode 100644
index 0000000..3651511
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/defaultPropertyListOrder.qml
@@ -0,0 +1,29 @@
+import Test 1.0
+import Qt 4.6
+
+MyContainer {
+ QtObject {
+ property int index: 0
+ }
+
+ QtObject {
+ property int index: 1
+ }
+
+ children: [
+ QtObject {
+ property int index: 2
+ },
+ QtObject {
+ property int index: 3
+ }
+ ]
+
+ QtObject {
+ property int index: 4
+ }
+
+ QtObject {
+ property int index: 5
+ }
+}
diff --git a/tests/auto/declarative/qmllanguage/data/doubleSignal.errors.txt b/tests/auto/declarative/qmllanguage/data/doubleSignal.errors.txt
new file mode 100644
index 0000000..2aea251
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/doubleSignal.errors.txt
@@ -0,0 +1 @@
+5:5:Incorrectly specified signal
diff --git a/tests/auto/declarative/qmllanguage/data/doubleSignal.qml b/tests/auto/declarative/qmllanguage/data/doubleSignal.qml
new file mode 100644
index 0000000..fb07b9f
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/doubleSignal.qml
@@ -0,0 +1,7 @@
+import Test 1.0
+
+MyQmlObject {
+ onBasicSignal: console.log(1921)
+ onBasicSignal: console.log(1921)
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/duplicateIDs.errors.txt b/tests/auto/declarative/qmllanguage/data/duplicateIDs.errors.txt
new file mode 100644
index 0000000..66241cf
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/duplicateIDs.errors.txt
@@ -0,0 +1 @@
+4:19:id is not unique
diff --git a/tests/auto/declarative/qmllanguage/data/duplicateIDs.qml b/tests/auto/declarative/qmllanguage/data/duplicateIDs.qml
new file mode 100644
index 0000000..a993abd
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/duplicateIDs.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+MyContainer {
+ MyQmlObject { id: myID }
+ MyQmlObject { id: myID }
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/dynamicObject.1.qml b/tests/auto/declarative/qmllanguage/data/dynamicObject.1.qml
new file mode 100644
index 0000000..85d1052
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/dynamicObject.1.qml
@@ -0,0 +1,8 @@
+import Test 1.0
+import Qt 4.6
+PropertyChanges {
+ propa: a + 10
+ propb: Math.min(a, 10)
+ propc: MyPropertyValueSource {}
+ onPropA: a
+}
diff --git a/tests/auto/declarative/qmllanguage/data/dynamicObjectProperties.qml b/tests/auto/declarative/qmllanguage/data/dynamicObjectProperties.qml
new file mode 100644
index 0000000..c80a7c0
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/dynamicObjectProperties.qml
@@ -0,0 +1,13 @@
+import Test 1.0
+import Qt 4.6
+import Qt 4.6 as Qt
+
+QtObject {
+ property QtObject objectProperty
+ property QtObject objectProperty2
+ objectProperty2: QtObject {}
+
+ property MyComponent myComponentProperty
+ property MyComponent myComponentProperty2
+ myComponentProperty2: MyComponent {}
+}
diff --git a/tests/auto/declarative/qmllanguage/data/dynamicProperties.qml b/tests/auto/declarative/qmllanguage/data/dynamicProperties.qml
new file mode 100644
index 0000000..aef3269
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/dynamicProperties.qml
@@ -0,0 +1,14 @@
+import Test 1.0
+import Qt 4.6
+QtObject {
+ default property int intProperty : 10
+ property bool boolProperty: false
+ property double doubleProperty: -10.1
+ property real realProperty: -19.9
+ property string stringProperty: "Hello World!"
+ property color colorProperty: "red"
+ property url urlProperty: "main.qml"
+ property date dateProperty: "1945-09-02"
+ property var varProperty: "Hello World!"
+ property variant variantProperty: 12
+}
diff --git a/tests/auto/declarative/qmllanguage/data/dynamicPropertiesNested.qml b/tests/auto/declarative/qmllanguage/data/dynamicPropertiesNested.qml
new file mode 100644
index 0000000..7bfab67
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/dynamicPropertiesNested.qml
@@ -0,0 +1,9 @@
+import Qt 4.6
+
+DynamicPropertiesNestedType {
+ property int a: 13
+ property int b: 12
+
+ super_a: 11
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/dynamicSignalsAndSlots.qml b/tests/auto/declarative/qmllanguage/data/dynamicSignalsAndSlots.qml
new file mode 100644
index 0000000..2a834e8
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/dynamicSignalsAndSlots.qml
@@ -0,0 +1,10 @@
+import Qt 4.6
+QtObject {
+ signal signal1
+ function slot1() {}
+ signal signal2
+ function slot2() {}
+
+ property int test: 0
+ function slot3(a) { console.log(1921); test = a; }
+}
diff --git a/tests/auto/declarative/qmllanguage/data/empty.errors.txt b/tests/auto/declarative/qmllanguage/data/empty.errors.txt
new file mode 100644
index 0000000..d416e76
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/empty.errors.txt
@@ -0,0 +1,2 @@
+0:0:Expected token `numeric literal'
+0:0:Expected a qualified name id
diff --git a/tests/auto/declarative/qmllanguage/data/empty.qml b/tests/auto/declarative/qmllanguage/data/empty.qml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/empty.qml
diff --git a/tests/auto/declarative/qmllanguage/data/emptySignal.errors.txt b/tests/auto/declarative/qmllanguage/data/emptySignal.errors.txt
new file mode 100644
index 0000000..353bbf5
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/emptySignal.errors.txt
@@ -0,0 +1 @@
+4:5:Empty signal assignment
diff --git a/tests/auto/declarative/qmllanguage/data/emptySignal.qml b/tests/auto/declarative/qmllanguage/data/emptySignal.qml
new file mode 100644
index 0000000..4c5a122
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/emptySignal.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyQmlObject {
+ onBasicSignal: " "
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/failingComponent.errors.txt b/tests/auto/declarative/qmllanguage/data/failingComponent.errors.txt
new file mode 100644
index 0000000..0cf0ef3
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/failingComponent.errors.txt
@@ -0,0 +1 @@
+3:5:Type FailingComponent unavailable
diff --git a/tests/auto/declarative/qmllanguage/data/failingComponentTest.qml b/tests/auto/declarative/qmllanguage/data/failingComponentTest.qml
new file mode 100644
index 0000000..74a6acf
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/failingComponentTest.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyContainer {
+ FailingComponent {}
+}
diff --git a/tests/auto/declarative/qmllanguage/data/fakeDotProperty.errors.txt b/tests/auto/declarative/qmllanguage/data/fakeDotProperty.errors.txt
new file mode 100644
index 0000000..3074823
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/fakeDotProperty.errors.txt
@@ -0,0 +1 @@
+3:5:Invalid grouped property access
diff --git a/tests/auto/declarative/qmllanguage/data/fakeDotProperty.qml b/tests/auto/declarative/qmllanguage/data/fakeDotProperty.qml
new file mode 100644
index 0000000..d971eee
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/fakeDotProperty.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyQmlObject {
+ value.something: "hello"
+}
diff --git a/tests/auto/declarative/qmllanguage/data/finalOverride.errors.txt b/tests/auto/declarative/qmllanguage/data/finalOverride.errors.txt
new file mode 100644
index 0000000..49e06cb
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/finalOverride.errors.txt
@@ -0,0 +1 @@
+3:5:Cannot override FINAL property
diff --git a/tests/auto/declarative/qmllanguage/data/finalOverride.qml b/tests/auto/declarative/qmllanguage/data/finalOverride.qml
new file mode 100644
index 0000000..a84393a
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/finalOverride.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyQmlObject {
+ property int value: 10
+}
diff --git a/tests/auto/declarative/qmllanguage/data/i18nDeclaredPropertyNames.qml b/tests/auto/declarative/qmllanguage/data/i18nDeclaredPropertyNames.qml
new file mode 100644
index 0000000..558c836
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/i18nDeclaredPropertyNames.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyTypeObject {
+ property int áâãäå: 10
+ stringProperty: "Test áâãäå: " + áâãäå
+}
diff --git a/tests/auto/declarative/qmllanguage/data/i18nDeclaredPropertyUse.qml b/tests/auto/declarative/qmllanguage/data/i18nDeclaredPropertyUse.qml
new file mode 100644
index 0000000..74918e2
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/i18nDeclaredPropertyUse.qml
@@ -0,0 +1,3 @@
+I18n {
+ áâãäå: 15
+}
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/i18nScript.qml b/tests/auto/declarative/qmllanguage/data/i18nScript.qml
new file mode 100644
index 0000000..942ed90
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/i18nScript.qml
@@ -0,0 +1,12 @@
+import Test 1.0
+
+MyTypeObject {
+ Script {
+ function val() {
+ var áâãäå = 20
+ return "Test áâãäå: " + áâãäå
+ }
+
+ }
+ stringProperty: val()
+}
diff --git a/tests/auto/declarative/qmllanguage/data/i18nStrings.qml b/tests/auto/declarative/qmllanguage/data/i18nStrings.qml
new file mode 100644
index 0000000..764c926
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/i18nStrings.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+
+MyTypeObject {
+ stringProperty: "Test áâãäå (5 accented 'a' letters)"
+}
diff --git a/tests/auto/declarative/qmllanguage/data/i18nType.qml b/tests/auto/declarative/qmllanguage/data/i18nType.qml
new file mode 100644
index 0000000..d7954ef
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/i18nType.qml
@@ -0,0 +1 @@
+I18nTypeÁâãäå { }
diff --git a/tests/auto/declarative/qmllanguage/data/idProperty.qml b/tests/auto/declarative/qmllanguage/data/idProperty.qml
new file mode 100644
index 0000000..90c1483
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/idProperty.qml
@@ -0,0 +1,8 @@
+import Test 1.0
+MyContainer {
+ property var object : myObjectId
+
+ MyTypeObject {
+ id: "myObjectId"
+ }
+}
diff --git a/tests/auto/declarative/qmllanguage/data/importNamespaceConflict.errors.txt b/tests/auto/declarative/qmllanguage/data/importNamespaceConflict.errors.txt
new file mode 100644
index 0000000..231998d
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/importNamespaceConflict.errors.txt
@@ -0,0 +1 @@
+4:1:Namespace Rectangle cannot be used as a type
diff --git a/tests/auto/declarative/qmllanguage/data/importNamespaceConflict.qml b/tests/auto/declarative/qmllanguage/data/importNamespaceConflict.qml
new file mode 100644
index 0000000..cd112af
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/importNamespaceConflict.qml
@@ -0,0 +1,4 @@
+import Test 1.0 as Rectangle
+import Qt 4.6
+
+Rectangle { }
diff --git a/tests/auto/declarative/qmllanguage/data/importVersionMissingBuiltIn.errors.txt b/tests/auto/declarative/qmllanguage/data/importVersionMissingBuiltIn.errors.txt
new file mode 100644
index 0000000..c7d880e
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/importVersionMissingBuiltIn.errors.txt
@@ -0,0 +1 @@
+1:16:Library import requires a version
diff --git a/tests/auto/declarative/qmllanguage/data/importVersionMissingBuiltIn.qml b/tests/auto/declarative/qmllanguage/data/importVersionMissingBuiltIn.qml
new file mode 100644
index 0000000..23ed566
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/importVersionMissingBuiltIn.qml
@@ -0,0 +1,7 @@
+import Test as S
+
+S.MyQmlObject {
+ property real x;
+ property real y;
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/importVersionMissingInstalled.errors.txt b/tests/auto/declarative/qmllanguage/data/importVersionMissingInstalled.errors.txt
new file mode 100644
index 0000000..89e58ee
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/importVersionMissingInstalled.errors.txt
@@ -0,0 +1 @@
+1:35:Library import requires a version
diff --git a/tests/auto/declarative/qmllanguage/data/importVersionMissingInstalled.qml b/tests/auto/declarative/qmllanguage/data/importVersionMissingInstalled.qml
new file mode 100644
index 0000000..97ec222
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/importVersionMissingInstalled.qml
@@ -0,0 +1,3 @@
+import com.nokia.installedtest as T
+
+T.InstalledTest {}
diff --git a/tests/auto/declarative/qmllanguage/data/inlineQmlComponents.qml b/tests/auto/declarative/qmllanguage/data/inlineQmlComponents.qml
new file mode 100644
index 0000000..478f06a
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/inlineQmlComponents.qml
@@ -0,0 +1,10 @@
+import Test 1.0
+import Qt 4.6
+MyContainer {
+ Component {
+ id: myComponent
+ MyQmlObject {
+ value: 11
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmllanguage/data/interfaceProperty.qml b/tests/auto/declarative/qmllanguage/data/interfaceProperty.qml
new file mode 100644
index 0000000..70879ff
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/interfaceProperty.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+import Qt 4.6
+MyQmlObject {
+ interfaceProperty: MyQmlObject {}
+}
diff --git a/tests/auto/declarative/qmllanguage/data/interfaceQList.qml b/tests/auto/declarative/qmllanguage/data/interfaceQList.qml
new file mode 100644
index 0000000..c87dfae
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/interfaceQList.qml
@@ -0,0 +1,7 @@
+import Test 1.0
+MyContainer {
+ qlistInterfaces: [
+ MyQmlObject {},
+ MyQmlObject {}
+ ]
+}
diff --git a/tests/auto/declarative/qmllanguage/data/interfaceQmlList.qml b/tests/auto/declarative/qmllanguage/data/interfaceQmlList.qml
new file mode 100644
index 0000000..8392bea
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/interfaceQmlList.qml
@@ -0,0 +1,7 @@
+import Test 1.0
+MyContainer {
+ qmllistInterfaces: [
+ MyQmlObject {},
+ MyQmlObject {}
+ ]
+}
diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.1.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.1.errors.txt
new file mode 100644
index 0000000..68fe671
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.1.errors.txt
@@ -0,0 +1 @@
+5:17:Cannot assign to non-existant property "foo"
diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.1.qml b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.1.qml
new file mode 100644
index 0000000..324f79c
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.1.qml
@@ -0,0 +1,7 @@
+import Test 1.0
+import Qt 4.6
+
+QtObject {
+ MyQmlObject.foo: 10
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.10.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.10.errors.txt
new file mode 100644
index 0000000..7f630f4
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.10.errors.txt
@@ -0,0 +1 @@
+5:15:Non-existant attached object
diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.10.qml b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.10.qml
new file mode 100644
index 0000000..b768e9f
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.10.qml
@@ -0,0 +1,6 @@
+import Test 1.0 as Namespace
+import Qt 4.6
+
+QtObject {
+ Namespace.MadeUpClass.foo: 10
+}
diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.11.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.11.errors.txt
new file mode 100644
index 0000000..fee5050
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.11.errors.txt
@@ -0,0 +1 @@
+5:15:Not an attached property name
diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.11.qml b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.11.qml
new file mode 100644
index 0000000..7b782be
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.11.qml
@@ -0,0 +1,7 @@
+import Test 1.0 as Namespace
+import Qt 4.6
+
+QtObject {
+ Namespace.madeUpClass.foo: 10
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.2.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.2.errors.txt
new file mode 100644
index 0000000..9f06e07
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.2.errors.txt
@@ -0,0 +1 @@
+5:27:Cannot assign to non-existant property "foo"
diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.2.qml b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.2.qml
new file mode 100644
index 0000000..1f47c61
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.2.qml
@@ -0,0 +1,6 @@
+import Test 1.0 as Namespace
+import Qt 4.6
+
+QtObject {
+ Namespace.MyQmlObject.foo: 10
+}
diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.3.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.3.errors.txt
new file mode 100644
index 0000000..05161c4
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.3.errors.txt
@@ -0,0 +1 @@
+5:5:Invalid attached object assignment
diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.3.qml b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.3.qml
new file mode 100644
index 0000000..79c2981
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.3.qml
@@ -0,0 +1,8 @@
+import Test 1.0
+import Qt 4.6
+
+QtObject {
+ MyQmlObject: 10
+}
+
+
diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.4.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.4.errors.txt
new file mode 100644
index 0000000..a208bcf
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.4.errors.txt
@@ -0,0 +1 @@
+5:15:Invalid attached object assignment
diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.4.qml b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.4.qml
new file mode 100644
index 0000000..af0be80
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.4.qml
@@ -0,0 +1,7 @@
+import Test 1.0 as Namespace
+import Qt 4.6
+
+QtObject {
+ Namespace.MyQmlObject: 10
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.5.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.5.errors.txt
new file mode 100644
index 0000000..05161c4
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.5.errors.txt
@@ -0,0 +1 @@
+5:5:Invalid attached object assignment
diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.5.qml b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.5.qml
new file mode 100644
index 0000000..0546322
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.5.qml
@@ -0,0 +1,7 @@
+import Test 1.0
+import Qt 4.6
+
+QtObject {
+ MyQmlObject: QtObject {}
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.6.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.6.errors.txt
new file mode 100644
index 0000000..e232b23
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.6.errors.txt
@@ -0,0 +1 @@
+5:5:Non-existant attached object
diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.6.qml b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.6.qml
new file mode 100644
index 0000000..108109a
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.6.qml
@@ -0,0 +1,7 @@
+import Test 1.0
+import Qt 4.6
+
+QtObject {
+ Test.MyQmlObject: QtObject {}
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.7.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.7.errors.txt
new file mode 100644
index 0000000..e232b23
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.7.errors.txt
@@ -0,0 +1 @@
+5:5:Non-existant attached object
diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.7.qml b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.7.qml
new file mode 100644
index 0000000..ccf0353
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.7.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+import Qt 4.6
+
+QtObject {
+ MyTypeObject.foo: 10
+}
diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.8.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.8.errors.txt
new file mode 100644
index 0000000..7f630f4
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.8.errors.txt
@@ -0,0 +1 @@
+5:15:Non-existant attached object
diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.8.qml b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.8.qml
new file mode 100644
index 0000000..e736379
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.8.qml
@@ -0,0 +1,6 @@
+import Test 1.0 as Namespace
+import Qt 4.6
+
+QtObject {
+ Namespace.MyTypeObject.foo: 10
+}
diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.9.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.9.errors.txt
new file mode 100644
index 0000000..e232b23
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.9.errors.txt
@@ -0,0 +1 @@
+5:5:Non-existant attached object
diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.9.qml b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.9.qml
new file mode 100644
index 0000000..a095229
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.9.qml
@@ -0,0 +1,7 @@
+import Test 1.0
+import Qt 4.6
+
+QtObject {
+ MadeUpClass.foo: 10
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.1.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.1.errors.txt
new file mode 100644
index 0000000..810fd31
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.1.errors.txt
@@ -0,0 +1 @@
+5:5:Invalid grouped property access
diff --git a/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.1.qml b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.1.qml
new file mode 100644
index 0000000..1167e39
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.1.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+QtObject {
+ property var o;
+ o.blah: 10
+}
diff --git a/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.2.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.2.errors.txt
new file mode 100644
index 0000000..810fd31
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.2.errors.txt
@@ -0,0 +1 @@
+5:5:Invalid grouped property access
diff --git a/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.2.qml b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.2.qml
new file mode 100644
index 0000000..a0c8306
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.2.qml
@@ -0,0 +1,7 @@
+import Qt 4.6
+
+QtObject {
+ property int o;
+ o.blah: 10
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.3.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.3.errors.txt
new file mode 100644
index 0000000..f6d6f29
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.3.errors.txt
@@ -0,0 +1 @@
+4:5:Invalid grouped property access
diff --git a/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.3.qml b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.3.qml
new file mode 100644
index 0000000..0bbfc4f
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.3.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+
+MyQmlObject {
+ customType.x: 10
+}
diff --git a/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.4.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.4.errors.txt
new file mode 100644
index 0000000..19934fa
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.4.errors.txt
@@ -0,0 +1 @@
+4:5:Cannot assign to non-existant property "foo"
diff --git a/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.4.qml b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.4.qml
new file mode 100644
index 0000000..134fef9
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.4.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+
+MyQmlObject {
+ foo.x: 10
+}
diff --git a/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.5.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.5.errors.txt
new file mode 100644
index 0000000..2c8a970
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.5.errors.txt
@@ -0,0 +1 @@
+4:18:Property assignment expected
diff --git a/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.5.qml b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.5.qml
new file mode 100644
index 0000000..55cefe6
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.5.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+
+MyTypeObject {
+ rectProperty.x.foo: 100
+}
diff --git a/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.6.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.6.errors.txt
new file mode 100644
index 0000000..8331725
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.6.errors.txt
@@ -0,0 +1 @@
+5:18:Single property assignment expected
diff --git a/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.6.qml b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.6.qml
new file mode 100644
index 0000000..9ec33ab
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.6.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyTypeObject {
+ rectProperty.x: 100
+ rectProperty.x: 101
+}
diff --git a/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.7.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.7.errors.txt
new file mode 100644
index 0000000..4a7e383
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.7.errors.txt
@@ -0,0 +1 @@
+4:-1:Cannot set properties on nullGrouped as it is null
diff --git a/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.7.qml b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.7.qml
new file mode 100644
index 0000000..977539a
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.7.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+
+MyTypeObject {
+ nullGrouped.script: console.log(1921)
+}
diff --git a/tests/auto/declarative/qmllanguage/data/invalidID.2.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidID.2.errors.txt
new file mode 100644
index 0000000..56e3eeb
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidID.2.errors.txt
@@ -0,0 +1,2 @@
+3:5:"" is not a valid object id
+
diff --git a/tests/auto/declarative/qmllanguage/data/invalidID.2.qml b/tests/auto/declarative/qmllanguage/data/invalidID.2.qml
new file mode 100644
index 0000000..4fb3b29
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidID.2.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+MyQmlObject {
+ id: ""
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/invalidID.3.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidID.3.errors.txt
new file mode 100644
index 0000000..bb811cf
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidID.3.errors.txt
@@ -0,0 +1 @@
+3:5:Invalid use of id property
diff --git a/tests/auto/declarative/qmllanguage/data/invalidID.3.qml b/tests/auto/declarative/qmllanguage/data/invalidID.3.qml
new file mode 100644
index 0000000..6684172
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidID.3.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+MyQmlObject {
+ id.other: 10
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/invalidID.4.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidID.4.errors.txt
new file mode 100644
index 0000000..cfe8756
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidID.4.errors.txt
@@ -0,0 +1 @@
+4:5:Invalid use of id property
diff --git a/tests/auto/declarative/qmllanguage/data/invalidID.4.qml b/tests/auto/declarative/qmllanguage/data/invalidID.4.qml
new file mode 100644
index 0000000..86010bf
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidID.4.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+MyQmlObject {
+ id: hello
+ id: world
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/invalidID.5.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidID.5.errors.txt
new file mode 100644
index 0000000..c167de3
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidID.5.errors.txt
@@ -0,0 +1 @@
+2:20:Invalid import qualifier ID
diff --git a/tests/auto/declarative/qmllanguage/data/invalidID.5.qml b/tests/auto/declarative/qmllanguage/data/invalidID.5.qml
new file mode 100644
index 0000000..5b92a1a
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidID.5.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+import Test 1.0 as hello
+MyQmlObject {
+ id: hello
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/invalidID.6.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidID.6.errors.txt
new file mode 100644
index 0000000..160e8b5
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidID.6.errors.txt
@@ -0,0 +1 @@
+3:5:"StartsWithUpperCase" is not a valid object id
diff --git a/tests/auto/declarative/qmllanguage/data/invalidID.6.qml b/tests/auto/declarative/qmllanguage/data/invalidID.6.qml
new file mode 100644
index 0000000..62187d9
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidID.6.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+MyQmlObject {
+ id: StartsWithUpperCase
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/invalidID.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidID.errors.txt
new file mode 100644
index 0000000..1ca678c
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidID.errors.txt
@@ -0,0 +1 @@
+3:5:"1" is not a valid object id
diff --git a/tests/auto/declarative/qmllanguage/data/invalidID.qml b/tests/auto/declarative/qmllanguage/data/invalidID.qml
new file mode 100644
index 0000000..04db3eb
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidID.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyQmlObject {
+ id: 1
+}
diff --git a/tests/auto/declarative/qmllanguage/data/invalidImportID.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidImportID.errors.txt
new file mode 100644
index 0000000..a65f5fd
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidImportID.errors.txt
@@ -0,0 +1 @@
+2:18:Invalid import qualifier ID
diff --git a/tests/auto/declarative/qmllanguage/data/invalidImportID.qml b/tests/auto/declarative/qmllanguage/data/invalidImportID.qml
new file mode 100644
index 0000000..30d88d5
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidImportID.qml
@@ -0,0 +1,4 @@
+import Qt 4.6
+import Qt 4.6 as qt
+
+QtObject {}
diff --git a/tests/auto/declarative/qmllanguage/data/invalidRoot.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidRoot.errors.txt
new file mode 100644
index 0000000..4bcc948
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidRoot.errors.txt
@@ -0,0 +1 @@
+1:1:Expected type name
diff --git a/tests/auto/declarative/qmllanguage/data/invalidRoot.qml b/tests/auto/declarative/qmllanguage/data/invalidRoot.qml
new file mode 100644
index 0000000..427827c
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/invalidRoot.qml
@@ -0,0 +1,2 @@
+foo {
+}
diff --git a/tests/auto/declarative/qmllanguage/data/lib/com/nokia/installedtest/InstalledTest.qml b/tests/auto/declarative/qmllanguage/data/lib/com/nokia/installedtest/InstalledTest.qml
new file mode 100644
index 0000000..d8a22a8
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/lib/com/nokia/installedtest/InstalledTest.qml
@@ -0,0 +1,2 @@
+import Qt 4.6
+Rectangle {}
diff --git a/tests/auto/declarative/qmllanguage/data/lib/com/nokia/installedtest/InstalledTest2.qml b/tests/auto/declarative/qmllanguage/data/lib/com/nokia/installedtest/InstalledTest2.qml
new file mode 100644
index 0000000..a0706ad
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/lib/com/nokia/installedtest/InstalledTest2.qml
@@ -0,0 +1,2 @@
+import Qt 4.6
+Text {}
diff --git a/tests/auto/declarative/qmllanguage/data/lib/com/nokia/installedtest/PrivateType.qml b/tests/auto/declarative/qmllanguage/data/lib/com/nokia/installedtest/PrivateType.qml
new file mode 100644
index 0000000..93c7630
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/lib/com/nokia/installedtest/PrivateType.qml
@@ -0,0 +1,2 @@
+import Qt 4.6
+Image {}
diff --git a/tests/auto/declarative/qmllanguage/data/lib/com/nokia/installedtest/qmldir b/tests/auto/declarative/qmllanguage/data/lib/com/nokia/installedtest/qmldir
new file mode 100644
index 0000000..eeb9a05
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/lib/com/nokia/installedtest/qmldir
@@ -0,0 +1,4 @@
+Rectangle 1.5 InstalledTest2.qml
+InstalledTest 1.4 InstalledTest2.qml
+InstalledTest 1.0 InstalledTest.qml
+InstalledTestTP 0.0 InstalledTest.qml
diff --git a/tests/auto/declarative/qmllanguage/data/listAssignment.1.errors.txt b/tests/auto/declarative/qmllanguage/data/listAssignment.1.errors.txt
new file mode 100644
index 0000000..d68d487
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/listAssignment.1.errors.txt
@@ -0,0 +1 @@
+3:24:Cannot assign primitives to lists
diff --git a/tests/auto/declarative/qmllanguage/data/listAssignment.1.qml b/tests/auto/declarative/qmllanguage/data/listAssignment.1.qml
new file mode 100644
index 0000000..4240425
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/listAssignment.1.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyContainer {
+ qmllistInterfaces: 1
+}
diff --git a/tests/auto/declarative/qmllanguage/data/listAssignment.2.errors.txt b/tests/auto/declarative/qmllanguage/data/listAssignment.2.errors.txt
new file mode 100644
index 0000000..8b40aa3
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/listAssignment.2.errors.txt
@@ -0,0 +1,2 @@
+3:15:Cannot assign primitives to lists
+
diff --git a/tests/auto/declarative/qmllanguage/data/listAssignment.2.qml b/tests/auto/declarative/qmllanguage/data/listAssignment.2.qml
new file mode 100644
index 0000000..e3baadb
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/listAssignment.2.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyContainer {
+ children: 2
+}
diff --git a/tests/auto/declarative/qmllanguage/data/listAssignment.3.errors.txt b/tests/auto/declarative/qmllanguage/data/listAssignment.3.errors.txt
new file mode 100644
index 0000000..8c7b7e9
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/listAssignment.3.errors.txt
@@ -0,0 +1 @@
+4:15:Can only assign one binding to lists
diff --git a/tests/auto/declarative/qmllanguage/data/listAssignment.3.qml b/tests/auto/declarative/qmllanguage/data/listAssignment.3.qml
new file mode 100644
index 0000000..00c4c6b
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/listAssignment.3.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+MyContainer {
+ children: childBinding.expression
+ children: childBinding2.expression
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/listItemDeleteSelf.qml b/tests/auto/declarative/qmllanguage/data/listItemDeleteSelf.qml
new file mode 100644
index 0000000..779c6d4
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/listItemDeleteSelf.qml
@@ -0,0 +1,38 @@
+import Qt 4.6
+
+Item {
+ ListModel {
+ id: fruitModel
+ ListElement {
+ name: "Apple"
+ cost: 2.45
+ }
+ ListElement {
+ name: "Orange"
+ cost: 3.25
+ }
+ ListElement {
+ name: "Banana"
+ cost: 1.95
+ }
+ }
+
+ Component {
+ id: fruitDelegate
+ Item {
+ width: 200; height: 50
+ Text { text: name }
+ Text { text: '$'+cost; anchors.right: parent.right }
+ MouseRegion {
+ anchors.fill: parent
+ onClicked: fruitModel.remove(index)
+ }
+ }
+ }
+
+ ListView {
+ model: fruitModel
+ delegate: fruitDelegate
+ anchors.fill: parent
+ }
+}
diff --git a/tests/auto/declarative/qmllanguage/data/listProperties.qml b/tests/auto/declarative/qmllanguage/data/listProperties.qml
new file mode 100644
index 0000000..ba9e37c
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/listProperties.qml
@@ -0,0 +1,9 @@
+import Qt 4.6
+
+QtObject {
+ property list<QtObject> listProperty
+ property int test: listProperty.length
+
+ listProperty: [ QtObject{}, QtObject {} ]
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/missingObject.errors.txt b/tests/auto/declarative/qmllanguage/data/missingObject.errors.txt
new file mode 100644
index 0000000..b31b562
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/missingObject.errors.txt
@@ -0,0 +1 @@
+1:10:Expected token `{'
diff --git a/tests/auto/declarative/qmllanguage/data/missingObject.qml b/tests/auto/declarative/qmllanguage/data/missingObject.qml
new file mode 100644
index 0000000..2f17045
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/missingObject.qml
@@ -0,0 +1 @@
+something: 24
diff --git a/tests/auto/declarative/qmllanguage/data/missingSignal.errors.txt b/tests/auto/declarative/qmllanguage/data/missingSignal.errors.txt
new file mode 100644
index 0000000..e243ae5
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/missingSignal.errors.txt
@@ -0,0 +1 @@
+4:5:Cannot assign to non-existant property "onClicked"
diff --git a/tests/auto/declarative/qmllanguage/data/missingSignal.qml b/tests/auto/declarative/qmllanguage/data/missingSignal.qml
new file mode 100644
index 0000000..3bf75f6
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/missingSignal.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+import Qt 4.6
+QtObject {
+ onClicked: console.log("Hello world!")
+}
diff --git a/tests/auto/declarative/qmllanguage/data/missingValueTypeProperty.errors.txt b/tests/auto/declarative/qmllanguage/data/missingValueTypeProperty.errors.txt
new file mode 100644
index 0000000..dfaa218
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/missingValueTypeProperty.errors.txt
@@ -0,0 +1 @@
+4:18:Cannot assign to non-existant property "foo"
diff --git a/tests/auto/declarative/qmllanguage/data/missingValueTypeProperty.qml b/tests/auto/declarative/qmllanguage/data/missingValueTypeProperty.qml
new file mode 100644
index 0000000..9a0fa6a
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/missingValueTypeProperty.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+
+MyTypeObject {
+ rectProperty.foo: 9
+}
diff --git a/tests/auto/declarative/qmllanguage/data/nestedErrors.errors.txt b/tests/auto/declarative/qmllanguage/data/nestedErrors.errors.txt
new file mode 100644
index 0000000..886da55
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/nestedErrors.errors.txt
@@ -0,0 +1,2 @@
+4:5:Unable to create type NestedErrorsType
+4:8:Invalid property assignment: double expected
diff --git a/tests/auto/declarative/qmllanguage/data/nestedErrors.qml b/tests/auto/declarative/qmllanguage/data/nestedErrors.qml
new file mode 100644
index 0000000..c0d755a
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/nestedErrors.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+Item {
+ NestedErrorsType {}
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/nonexistantProperty.1.errors.txt b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.1.errors.txt
new file mode 100644
index 0000000..cfc6fc8
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.1.errors.txt
@@ -0,0 +1 @@
+2:15:Cannot assign to non-existant property "something"
diff --git a/tests/auto/declarative/qmllanguage/data/nonexistantProperty.1.qml b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.1.qml
new file mode 100644
index 0000000..df7406c
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.1.qml
@@ -0,0 +1,2 @@
+import Test 1.0
+MyQmlObject { something: 24 }
diff --git a/tests/auto/declarative/qmllanguage/data/nonexistantProperty.2.errors.txt b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.2.errors.txt
new file mode 100644
index 0000000..8b13585
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.2.errors.txt
@@ -0,0 +1 @@
+3:5:Cannot assign to non-existant property "something"
diff --git a/tests/auto/declarative/qmllanguage/data/nonexistantProperty.2.qml b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.2.qml
new file mode 100644
index 0000000..06ccd37
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.2.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyQmlObject {
+ something: 24
+}
diff --git a/tests/auto/declarative/qmllanguage/data/nonexistantProperty.3.errors.txt b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.3.errors.txt
new file mode 100644
index 0000000..8b13585
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.3.errors.txt
@@ -0,0 +1 @@
+3:5:Cannot assign to non-existant property "something"
diff --git a/tests/auto/declarative/qmllanguage/data/nonexistantProperty.3.qml b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.3.qml
new file mode 100644
index 0000000..5b08608
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.3.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyQmlObject {
+ something: 1 + 1
+}
diff --git a/tests/auto/declarative/qmllanguage/data/nonexistantProperty.4.errors.txt b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.4.errors.txt
new file mode 100644
index 0000000..8b13585
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.4.errors.txt
@@ -0,0 +1 @@
+3:5:Cannot assign to non-existant property "something"
diff --git a/tests/auto/declarative/qmllanguage/data/nonexistantProperty.4.qml b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.4.qml
new file mode 100644
index 0000000..6579191
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.4.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyQmlObject {
+ something: ;
+}
diff --git a/tests/auto/declarative/qmllanguage/data/nonexistantProperty.5.errors.txt b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.5.errors.txt
new file mode 100644
index 0000000..c07f2b9
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.5.errors.txt
@@ -0,0 +1 @@
+3:5:Expected a qualified name id
diff --git a/tests/auto/declarative/qmllanguage/data/nonexistantProperty.5.qml b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.5.qml
new file mode 100644
index 0000000..37af057
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.5.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyQmlObject {
+ 24
+}
diff --git a/tests/auto/declarative/qmllanguage/data/nonexistantProperty.6.errors.txt b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.6.errors.txt
new file mode 100644
index 0000000..c02d7bd
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.6.errors.txt
@@ -0,0 +1 @@
+3:5:Cannot assign to non-existant default property
diff --git a/tests/auto/declarative/qmllanguage/data/nonexistantProperty.6.qml b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.6.qml
new file mode 100644
index 0000000..5cd55d0
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/nonexistantProperty.6.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyQmlObject {
+ MyQmlObject {}
+}
diff --git a/tests/auto/declarative/qmllanguage/data/nullDotProperty.errors.txt b/tests/auto/declarative/qmllanguage/data/nullDotProperty.errors.txt
new file mode 100644
index 0000000..07a4094
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/nullDotProperty.errors.txt
@@ -0,0 +1 @@
+3:-1:Cannot set properties on obj as it is null
diff --git a/tests/auto/declarative/qmllanguage/data/nullDotProperty.qml b/tests/auto/declarative/qmllanguage/data/nullDotProperty.qml
new file mode 100644
index 0000000..4e36779
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/nullDotProperty.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyDotPropertyObject {
+ obj.value: 1
+}
diff --git a/tests/auto/declarative/qmllanguage/data/objectValueTypeProperty.errors.txt b/tests/auto/declarative/qmllanguage/data/objectValueTypeProperty.errors.txt
new file mode 100644
index 0000000..db7d9c0
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/objectValueTypeProperty.errors.txt
@@ -0,0 +1 @@
+4:18:Unexpected object assignment
diff --git a/tests/auto/declarative/qmllanguage/data/objectValueTypeProperty.qml b/tests/auto/declarative/qmllanguage/data/objectValueTypeProperty.qml
new file mode 100644
index 0000000..9924773
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/objectValueTypeProperty.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyTypeObject {
+ rectProperty.x: MyTypeObject {}
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/onCompleted.qml b/tests/auto/declarative/qmllanguage/data/onCompleted.qml
new file mode 100644
index 0000000..5725f85
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/onCompleted.qml
@@ -0,0 +1,17 @@
+import Test 1.0
+import Qt 4.6
+
+MyTypeObject {
+ // We set a and b to ensure that onCompleted is executed after bindings and
+ // constants have been assigned
+ property int a: Math.min(6, 7)
+ Component.onCompleted: console.log("Completed " + a + " " + nestedObject.b)
+
+ objectProperty: OnCompletedType {
+ qmlobjectProperty: MyQmlObject {
+ id: nestedObject
+ property int b: 10
+ Component.onCompleted: console.log("Completed " + a + " " + nestedObject.b)
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmllanguage/data/property.1.errors.txt b/tests/auto/declarative/qmllanguage/data/property.1.errors.txt
new file mode 100644
index 0000000..3ae6c46
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/property.1.errors.txt
@@ -0,0 +1 @@
+4:14:Expected property type
diff --git a/tests/auto/declarative/qmllanguage/data/property.1.qml b/tests/auto/declarative/qmllanguage/data/property.1.qml
new file mode 100644
index 0000000..cadc39a
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/property.1.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+QtObject {
+ property blah a;
+}
diff --git a/tests/auto/declarative/qmllanguage/data/property.2.errors.txt b/tests/auto/declarative/qmllanguage/data/property.2.errors.txt
new file mode 100644
index 0000000..a18e21a
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/property.2.errors.txt
@@ -0,0 +1 @@
+4:14:Unexpected property type modifier
diff --git a/tests/auto/declarative/qmllanguage/data/property.2.qml b/tests/auto/declarative/qmllanguage/data/property.2.qml
new file mode 100644
index 0000000..e810c6c
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/property.2.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+QtObject {
+ property invalidmodifier<int> a;
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/property.3.errors.txt b/tests/auto/declarative/qmllanguage/data/property.3.errors.txt
new file mode 100644
index 0000000..5e09a25
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/property.3.errors.txt
@@ -0,0 +1 @@
+4:14:Invalid property type modifier
diff --git a/tests/auto/declarative/qmllanguage/data/property.3.qml b/tests/auto/declarative/qmllanguage/data/property.3.qml
new file mode 100644
index 0000000..04147c2
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/property.3.qml
@@ -0,0 +1,7 @@
+import Qt 4.6
+
+QtObject {
+ property invalidmodifier<QtObject> a;
+}
+
+
diff --git a/tests/auto/declarative/qmllanguage/data/property.4.errors.txt b/tests/auto/declarative/qmllanguage/data/property.4.errors.txt
new file mode 100644
index 0000000..b447186
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/property.4.errors.txt
@@ -0,0 +1 @@
+5:1:Syntax error
diff --git a/tests/auto/declarative/qmllanguage/data/property.4.qml b/tests/auto/declarative/qmllanguage/data/property.4.qml
new file mode 100644
index 0000000..b2ec482
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/property.4.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+QtObject {
+ readonly property int a
+}
diff --git a/tests/auto/declarative/qmllanguage/data/property.5.errors.txt b/tests/auto/declarative/qmllanguage/data/property.5.errors.txt
new file mode 100644
index 0000000..32a8dc1
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/property.5.errors.txt
@@ -0,0 +1 @@
+4:5:Readonly not yet supported
diff --git a/tests/auto/declarative/qmllanguage/data/property.5.qml b/tests/auto/declarative/qmllanguage/data/property.5.qml
new file mode 100644
index 0000000..65fafbb
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/property.5.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+QtObject {
+ readonly property int a: value
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/propertyValueSource.2.qml b/tests/auto/declarative/qmllanguage/data/propertyValueSource.2.qml
new file mode 100644
index 0000000..57a6070
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/propertyValueSource.2.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+MyTypeObject {
+ intProperty : MyCompositeValueSource {}
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/propertyValueSource.qml b/tests/auto/declarative/qmllanguage/data/propertyValueSource.qml
new file mode 100644
index 0000000..ad71fcf
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/propertyValueSource.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyTypeObject {
+ intProperty : MyPropertyValueSource {}
+}
diff --git a/tests/auto/declarative/qmllanguage/data/qmlAttachedPropertiesObjectMethod.1.qml b/tests/auto/declarative/qmllanguage/data/qmlAttachedPropertiesObjectMethod.1.qml
new file mode 100644
index 0000000..429c327
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/qmlAttachedPropertiesObjectMethod.1.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+import Qt 4.6
+QtObject {
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/qmlAttachedPropertiesObjectMethod.2.qml b/tests/auto/declarative/qmllanguage/data/qmlAttachedPropertiesObjectMethod.2.qml
new file mode 100644
index 0000000..0f57b61
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/qmlAttachedPropertiesObjectMethod.2.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+import Qt 4.6
+QtObject {
+ MyQmlObject.value: 10
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/readOnly.1.errors.txt b/tests/auto/declarative/qmllanguage/data/readOnly.1.errors.txt
new file mode 100644
index 0000000..b8c3404
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/readOnly.1.errors.txt
@@ -0,0 +1 @@
+3:21:Invalid property assignment: "readOnlyString" is a read-only property
diff --git a/tests/auto/declarative/qmllanguage/data/readOnly.1.qml b/tests/auto/declarative/qmllanguage/data/readOnly.1.qml
new file mode 100644
index 0000000..60757bd
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/readOnly.1.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyQmlObject {
+ readOnlyString: "Hello World"
+}
diff --git a/tests/auto/declarative/qmllanguage/data/readOnly.2.errors.txt b/tests/auto/declarative/qmllanguage/data/readOnly.2.errors.txt
new file mode 100644
index 0000000..d857a04
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/readOnly.2.errors.txt
@@ -0,0 +1 @@
+3:5:Invalid property assignment: "readOnlyString" is a read-only property
diff --git a/tests/auto/declarative/qmllanguage/data/readOnly.2.qml b/tests/auto/declarative/qmllanguage/data/readOnly.2.qml
new file mode 100644
index 0000000..8f1633c
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/readOnly.2.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyQmlObject {
+ readOnlyString: "Hello" + "World"
+}
diff --git a/tests/auto/declarative/qmllanguage/data/readOnly.3.errors.txt b/tests/auto/declarative/qmllanguage/data/readOnly.3.errors.txt
new file mode 100644
index 0000000..c7e9e1b
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/readOnly.3.errors.txt
@@ -0,0 +1 @@
+6:36:Invalid property assignment: "objAlias" is a read-only property
diff --git a/tests/auto/declarative/qmllanguage/data/readOnly.3.qml b/tests/auto/declarative/qmllanguage/data/readOnly.3.qml
new file mode 100644
index 0000000..cd86a48
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/readOnly.3.qml
@@ -0,0 +1,8 @@
+import Test 1.0
+import Qt 4.6
+
+QtObject {
+ property var child
+ child: HelperAlias { objAlias: QtObject {} }
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/rootAsQmlComponent.qml b/tests/auto/declarative/qmllanguage/data/rootAsQmlComponent.qml
new file mode 100644
index 0000000..8d72cd3
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/rootAsQmlComponent.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+MyContainerComponent {
+ x: 11
+ MyQmlObject {}
+ MyQmlObject {}
+}
diff --git a/tests/auto/declarative/qmllanguage/data/script.1.errors.txt b/tests/auto/declarative/qmllanguage/data/script.1.errors.txt
new file mode 100644
index 0000000..50518cc
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.1.errors.txt
@@ -0,0 +1 @@
+3:1:Invalid use of Script block
diff --git a/tests/auto/declarative/qmllanguage/data/script.1.qml b/tests/auto/declarative/qmllanguage/data/script.1.qml
new file mode 100644
index 0000000..8dac8b7
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.1.qml
@@ -0,0 +1,4 @@
+import Qt 4.6
+
+Script {
+}
diff --git a/tests/auto/declarative/qmllanguage/data/script.10.errors.txt b/tests/auto/declarative/qmllanguage/data/script.10.errors.txt
new file mode 100644
index 0000000..8299d23
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.10.errors.txt
@@ -0,0 +1 @@
+6:9:Invalid component specification
diff --git a/tests/auto/declarative/qmllanguage/data/script.10.qml b/tests/auto/declarative/qmllanguage/data/script.10.qml
new file mode 100644
index 0000000..516e878
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.10.qml
@@ -0,0 +1,9 @@
+import Qt 4.6
+
+Item {
+ Component {
+ Item {}
+ Script {}
+ }
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/script.11.errors.txt b/tests/auto/declarative/qmllanguage/data/script.11.errors.txt
new file mode 100644
index 0000000..a664203
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.11.errors.txt
@@ -0,0 +1 @@
+5:9:Invalid Script block
diff --git a/tests/auto/declarative/qmllanguage/data/script.11.qml b/tests/auto/declarative/qmllanguage/data/script.11.qml
new file mode 100644
index 0000000..6d2d598
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.11.qml
@@ -0,0 +1,7 @@
+import Qt 4.6
+
+QtObject {
+ Script {
+ QtObject {}
+ }
+}
diff --git a/tests/auto/declarative/qmllanguage/data/script.12.errors.txt b/tests/auto/declarative/qmllanguage/data/script.12.errors.txt
new file mode 100644
index 0000000..85c8396
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.12.errors.txt
@@ -0,0 +1 @@
+4:5:QmlJS declaration outside Script element
diff --git a/tests/auto/declarative/qmllanguage/data/script.12.qml b/tests/auto/declarative/qmllanguage/data/script.12.qml
new file mode 100644
index 0000000..9ecb5d9
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.12.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+QtObject {
+ var a
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/script.2.errors.txt b/tests/auto/declarative/qmllanguage/data/script.2.errors.txt
new file mode 100644
index 0000000..8fb3bbd
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.2.errors.txt
@@ -0,0 +1 @@
+5:9:Properties cannot be set on Script block
diff --git a/tests/auto/declarative/qmllanguage/data/script.2.qml b/tests/auto/declarative/qmllanguage/data/script.2.qml
new file mode 100644
index 0000000..dce1a41
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.2.qml
@@ -0,0 +1,7 @@
+import Qt 4.6
+
+QtObject {
+ Script {
+ id: myScript
+ }
+}
diff --git a/tests/auto/declarative/qmllanguage/data/script.3.errors.txt b/tests/auto/declarative/qmllanguage/data/script.3.errors.txt
new file mode 100644
index 0000000..8fb3bbd
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.3.errors.txt
@@ -0,0 +1 @@
+5:9:Properties cannot be set on Script block
diff --git a/tests/auto/declarative/qmllanguage/data/script.3.qml b/tests/auto/declarative/qmllanguage/data/script.3.qml
new file mode 100644
index 0000000..8621a9a
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.3.qml
@@ -0,0 +1,7 @@
+import Qt 4.6
+
+QtObject {
+ Script {
+ hello: world
+ }
+}
diff --git a/tests/auto/declarative/qmllanguage/data/script.4.errors.txt b/tests/auto/declarative/qmllanguage/data/script.4.errors.txt
new file mode 100644
index 0000000..49a507f
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.4.errors.txt
@@ -0,0 +1 @@
+5:9:Invalid Script source value
diff --git a/tests/auto/declarative/qmllanguage/data/script.4.qml b/tests/auto/declarative/qmllanguage/data/script.4.qml
new file mode 100644
index 0000000..d89817c
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.4.qml
@@ -0,0 +1,8 @@
+import Qt 4.6
+
+QtObject {
+ Script {
+ source: 10
+ }
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/script.5.errors.txt b/tests/auto/declarative/qmllanguage/data/script.5.errors.txt
new file mode 100644
index 0000000..49a507f
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.5.errors.txt
@@ -0,0 +1 @@
+5:9:Invalid Script source value
diff --git a/tests/auto/declarative/qmllanguage/data/script.5.qml b/tests/auto/declarative/qmllanguage/data/script.5.qml
new file mode 100644
index 0000000..8986b3b
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.5.qml
@@ -0,0 +1,9 @@
+import Qt 4.6
+
+QtObject {
+ Script {
+ source: "hello" + ".js"
+ }
+}
+
+
diff --git a/tests/auto/declarative/qmllanguage/data/script.6.errors.txt b/tests/auto/declarative/qmllanguage/data/script.6.errors.txt
new file mode 100644
index 0000000..4e53b6b
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.6.errors.txt
@@ -0,0 +1 @@
+5:9:Invalid Script block. Specify either the source property or inline script
diff --git a/tests/auto/declarative/qmllanguage/data/script.6.qml b/tests/auto/declarative/qmllanguage/data/script.6.qml
new file mode 100644
index 0000000..07e9d78
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.6.qml
@@ -0,0 +1,11 @@
+import Qt 4.6
+
+QtObject {
+ Script {
+ source: "test.js"
+ function helloWorld() {}
+ }
+}
+
+
+
diff --git a/tests/auto/declarative/qmllanguage/data/script.7.errors.txt b/tests/auto/declarative/qmllanguage/data/script.7.errors.txt
new file mode 100644
index 0000000..dc15ddf
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.7.errors.txt
@@ -0,0 +1 @@
+5:9:Variable declarations not allow in inline Script blocks
diff --git a/tests/auto/declarative/qmllanguage/data/script.7.qml b/tests/auto/declarative/qmllanguage/data/script.7.qml
new file mode 100644
index 0000000..fa905e6
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.7.qml
@@ -0,0 +1,11 @@
+import Qt 4.6
+
+QtObject {
+ Script {
+ var a = 10;
+ }
+}
+
+
+
+
diff --git a/tests/auto/declarative/qmllanguage/data/script.8.errors.txt b/tests/auto/declarative/qmllanguage/data/script.8.errors.txt
new file mode 100644
index 0000000..b5bf1a8
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.8.errors.txt
@@ -0,0 +1 @@
+6:9:Invalid Script source value
diff --git a/tests/auto/declarative/qmllanguage/data/script.8.qml b/tests/auto/declarative/qmllanguage/data/script.8.qml
new file mode 100644
index 0000000..f600c88
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.8.qml
@@ -0,0 +1,9 @@
+import Qt 4.6
+
+QtObject {
+ Script {
+ source: "test.js"
+ source: "test2.js"
+ }
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/script.9.errors.txt b/tests/auto/declarative/qmllanguage/data/script.9.errors.txt
new file mode 100644
index 0000000..dc1eb53
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.9.errors.txt
@@ -0,0 +1 @@
+5:9:Invalid component specification
diff --git a/tests/auto/declarative/qmllanguage/data/script.9.qml b/tests/auto/declarative/qmllanguage/data/script.9.qml
new file mode 100644
index 0000000..79aa504
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/script.9.qml
@@ -0,0 +1,7 @@
+import Qt 4.6
+
+Item {
+ Component {
+ Script {}
+ }
+}
diff --git a/tests/auto/declarative/qmllanguage/data/scriptString.qml b/tests/auto/declarative/qmllanguage/data/scriptString.qml
new file mode 100644
index 0000000..40a3bbe
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/scriptString.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyTypeObject {
+ scriptProperty: foo + bar
+ grouped.script: console.log(1921)
+}
diff --git a/tests/auto/declarative/qmllanguage/data/signal.1.errors.txt b/tests/auto/declarative/qmllanguage/data/signal.1.errors.txt
new file mode 100644
index 0000000..78d9960
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/signal.1.errors.txt
@@ -0,0 +1 @@
+4:12:Expected parameter type
diff --git a/tests/auto/declarative/qmllanguage/data/signal.1.qml b/tests/auto/declarative/qmllanguage/data/signal.1.qml
new file mode 100644
index 0000000..fbaf017
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/signal.1.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+QtObject {
+ signal mySignal(nontype a)
+}
diff --git a/tests/auto/declarative/qmllanguage/data/signal.2.errors.txt b/tests/auto/declarative/qmllanguage/data/signal.2.errors.txt
new file mode 100644
index 0000000..fce8928
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/signal.2.errors.txt
@@ -0,0 +1 @@
+4:21:Unexpected token `;'
diff --git a/tests/auto/declarative/qmllanguage/data/signal.2.qml b/tests/auto/declarative/qmllanguage/data/signal.2.qml
new file mode 100644
index 0000000..5049192
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/signal.2.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+QtObject {
+ signal mySignal(,)
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/signal.3.errors.txt b/tests/auto/declarative/qmllanguage/data/signal.3.errors.txt
new file mode 100644
index 0000000..bf043ac
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/signal.3.errors.txt
@@ -0,0 +1 @@
+4:22:Expected token `identifier'
diff --git a/tests/auto/declarative/qmllanguage/data/signal.3.qml b/tests/auto/declarative/qmllanguage/data/signal.3.qml
new file mode 100644
index 0000000..9dd4cc7
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/signal.3.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+QtObject {
+ signal mySignal(a)
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/simpleBindings.qml b/tests/auto/declarative/qmllanguage/data/simpleBindings.qml
new file mode 100644
index 0000000..2fcd1a5
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/simpleBindings.qml
@@ -0,0 +1,18 @@
+import Test 1.0
+MyTypeObject {
+ id: me
+ property int v1: 10
+ property int v2: 11
+
+ property int value1
+ property int value2
+ property int value3
+ property int value4
+
+ value1: v1
+ value2: me.v1
+ value3: v1 + v2
+ value4: Math.min(v1, v2)
+
+ objectProperty: me
+}
diff --git a/tests/auto/declarative/qmllanguage/data/simpleContainer.qml b/tests/auto/declarative/qmllanguage/data/simpleContainer.qml
new file mode 100644
index 0000000..c3a795f
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/simpleContainer.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+MyContainer {
+ MyQmlObject {}
+ MyQmlObject {}
+}
diff --git a/tests/auto/declarative/qmllanguage/data/simpleObject.qml b/tests/auto/declarative/qmllanguage/data/simpleObject.qml
new file mode 100644
index 0000000..30c7823
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/simpleObject.qml
@@ -0,0 +1,2 @@
+import Test 1.0
+MyQmlObject {}
diff --git a/tests/auto/declarative/qmllanguage/data/subdir/Test.qml b/tests/auto/declarative/qmllanguage/data/subdir/Test.qml
new file mode 100644
index 0000000..c4d5905
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/subdir/Test.qml
@@ -0,0 +1,2 @@
+import Qt 4.6
+Rectangle { }
diff --git a/tests/auto/declarative/qmllanguage/data/subdir/subsubdir/SubTest.qml b/tests/auto/declarative/qmllanguage/data/subdir/subsubdir/SubTest.qml
new file mode 100644
index 0000000..c4d5905
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/subdir/subsubdir/SubTest.qml
@@ -0,0 +1,2 @@
+import Qt 4.6
+Rectangle { }
diff --git a/tests/auto/declarative/qmllanguage/data/test.js b/tests/auto/declarative/qmllanguage/data/test.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/test.js
diff --git a/tests/auto/declarative/qmllanguage/data/test2.js b/tests/auto/declarative/qmllanguage/data/test2.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/test2.js
diff --git a/tests/auto/declarative/qmllanguage/data/unregisteredObject.errors.txt b/tests/auto/declarative/qmllanguage/data/unregisteredObject.errors.txt
new file mode 100644
index 0000000..347db05
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/unregisteredObject.errors.txt
@@ -0,0 +1 @@
+2:1:Type UnregisteredObjectType unavailable
diff --git a/tests/auto/declarative/qmllanguage/data/unregisteredObject.qml b/tests/auto/declarative/qmllanguage/data/unregisteredObject.qml
new file mode 100644
index 0000000..4969f62
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/unregisteredObject.qml
@@ -0,0 +1,2 @@
+import Test 1.0
+UnregisteredObjectType {}
diff --git a/tests/auto/declarative/qmllanguage/data/unsupportedProperty.errors.txt b/tests/auto/declarative/qmllanguage/data/unsupportedProperty.errors.txt
new file mode 100644
index 0000000..3cd626d
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/unsupportedProperty.errors.txt
@@ -0,0 +1 @@
+3:13:Invalid property assignment: unsupported type "QMatrix"
diff --git a/tests/auto/declarative/qmllanguage/data/unsupportedProperty.qml b/tests/auto/declarative/qmllanguage/data/unsupportedProperty.qml
new file mode 100644
index 0000000..9f19680
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/unsupportedProperty.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyQmlObject {
+ matrix: "1,0,0,0,1,0,0,0,1"
+}
diff --git a/tests/auto/declarative/qmllanguage/data/valueTypes.qml b/tests/auto/declarative/qmllanguage/data/valueTypes.qml
new file mode 100644
index 0000000..bf325a7
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/valueTypes.qml
@@ -0,0 +1,13 @@
+import Test 1.0
+MyTypeObject {
+ rectProperty.x: 10
+ rectProperty.y: 11
+ rectProperty.width: rectProperty.x + 2
+ rectProperty.height: 13
+
+ intProperty: rectProperty.x
+
+ onAction: { var a = rectProperty; a.x = 12; }
+
+ rectProperty2: rectProperty
+}
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.1.errors.txt b/tests/auto/declarative/qmllanguage/data/wrongType.1.errors.txt
new file mode 100644
index 0000000..ba7a076
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.1.errors.txt
@@ -0,0 +1 @@
+3:12:Invalid property assignment: int expected
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.1.qml b/tests/auto/declarative/qmllanguage/data/wrongType.1.qml
new file mode 100644
index 0000000..289d37f
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.1.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyQmlObject {
+ value: "hello"
+}
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.10.errors.txt b/tests/auto/declarative/qmllanguage/data/wrongType.10.errors.txt
new file mode 100644
index 0000000..ae75b52
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.10.errors.txt
@@ -0,0 +1 @@
+3:23:Invalid property assignment: datetime expected
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.10.qml b/tests/auto/declarative/qmllanguage/data/wrongType.10.qml
new file mode 100644
index 0000000..2cf0e50
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.10.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+MyTypeObject {
+ dateTimeProperty: 12
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.11.errors.txt b/tests/auto/declarative/qmllanguage/data/wrongType.11.errors.txt
new file mode 100644
index 0000000..23a4cda
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.11.errors.txt
@@ -0,0 +1 @@
+3:20:Invalid property assignment: point expected
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.11.qml b/tests/auto/declarative/qmllanguage/data/wrongType.11.qml
new file mode 100644
index 0000000..ae77ba1
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.11.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+MyTypeObject {
+ pointProperty: "apples"
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.12.errors.txt b/tests/auto/declarative/qmllanguage/data/wrongType.12.errors.txt
new file mode 100644
index 0000000..3092100
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.12.errors.txt
@@ -0,0 +1 @@
+3:19:Invalid property assignment: size expected
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.12.qml b/tests/auto/declarative/qmllanguage/data/wrongType.12.qml
new file mode 100644
index 0000000..b7a366f
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.12.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+MyTypeObject {
+ sizeProperty: "red"
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.13.errors.txt b/tests/auto/declarative/qmllanguage/data/wrongType.13.errors.txt
new file mode 100644
index 0000000..ba7a076
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.13.errors.txt
@@ -0,0 +1 @@
+3:12:Invalid property assignment: int expected
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.13.qml b/tests/auto/declarative/qmllanguage/data/wrongType.13.qml
new file mode 100644
index 0000000..477aff1
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.13.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyQmlObject {
+ value: "12"
+}
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.14.errors.txt b/tests/auto/declarative/qmllanguage/data/wrongType.14.errors.txt
new file mode 100644
index 0000000..d621fdd
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.14.errors.txt
@@ -0,0 +1 @@
+3:21:Invalid property assignment: string expected
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.14.qml b/tests/auto/declarative/qmllanguage/data/wrongType.14.qml
new file mode 100644
index 0000000..672d693
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.14.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+MyTypeObject {
+ stringProperty: 10
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.15.errors.txt b/tests/auto/declarative/qmllanguage/data/wrongType.15.errors.txt
new file mode 100644
index 0000000..44768e3
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.15.errors.txt
@@ -0,0 +1 @@
+3:18:Invalid property assignment: url expected
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.15.qml b/tests/auto/declarative/qmllanguage/data/wrongType.15.qml
new file mode 100644
index 0000000..633a5ba
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.15.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyTypeObject {
+ urlProperty: 12
+}
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.2.errors.txt b/tests/auto/declarative/qmllanguage/data/wrongType.2.errors.txt
new file mode 100644
index 0000000..9ff9f25
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.2.errors.txt
@@ -0,0 +1 @@
+3:14:Invalid property assignment: boolean expected
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.2.qml b/tests/auto/declarative/qmllanguage/data/wrongType.2.qml
new file mode 100644
index 0000000..34b74f7
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.2.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyQmlObject {
+ enabled: 5
+}
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.3.errors.txt b/tests/auto/declarative/qmllanguage/data/wrongType.3.errors.txt
new file mode 100644
index 0000000..6d971c6
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.3.errors.txt
@@ -0,0 +1 @@
+3:11:Invalid property assignment: rect expected
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.3.qml b/tests/auto/declarative/qmllanguage/data/wrongType.3.qml
new file mode 100644
index 0000000..384181a
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.3.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyQmlObject {
+ rect: "5,5x10"
+}
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.4.errors.txt b/tests/auto/declarative/qmllanguage/data/wrongType.4.errors.txt
new file mode 100644
index 0000000..ef34d0e
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.4.errors.txt
@@ -0,0 +1 @@
+3:19:Invalid property assignment: unknown enumeration
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.4.qml b/tests/auto/declarative/qmllanguage/data/wrongType.4.qml
new file mode 100644
index 0000000..0787bf5
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.4.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+MyTypeObject {
+ enumProperty: "InvalidEnumName"
+}
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.5.errors.txt b/tests/auto/declarative/qmllanguage/data/wrongType.5.errors.txt
new file mode 100644
index 0000000..cab10bd
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.5.errors.txt
@@ -0,0 +1 @@
+3:19:Invalid property assignment: unsigned int expected
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.5.qml b/tests/auto/declarative/qmllanguage/data/wrongType.5.qml
new file mode 100644
index 0000000..c50ae9a
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.5.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+MyTypeObject {
+ uintProperty: -13
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.6.errors.txt b/tests/auto/declarative/qmllanguage/data/wrongType.6.errors.txt
new file mode 100644
index 0000000..d0a0b00
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.6.errors.txt
@@ -0,0 +1 @@
+3:19:Invalid property assignment: double expected
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.6.qml b/tests/auto/declarative/qmllanguage/data/wrongType.6.qml
new file mode 100644
index 0000000..da10b78
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.6.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+MyTypeObject {
+ realProperty: "Hello"
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.7.errors.txt b/tests/auto/declarative/qmllanguage/data/wrongType.7.errors.txt
new file mode 100644
index 0000000..614346b
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.7.errors.txt
@@ -0,0 +1 @@
+3:20:Invalid property assignment: color expected
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.7.qml b/tests/auto/declarative/qmllanguage/data/wrongType.7.qml
new file mode 100644
index 0000000..ddc3835
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.7.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+MyTypeObject {
+ colorProperty: 12
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.8.errors.txt b/tests/auto/declarative/qmllanguage/data/wrongType.8.errors.txt
new file mode 100644
index 0000000..1773c00
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.8.errors.txt
@@ -0,0 +1 @@
+3:19:Invalid property assignment: date expected
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.8.qml b/tests/auto/declarative/qmllanguage/data/wrongType.8.qml
new file mode 100644
index 0000000..a5f6756
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.8.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+MyTypeObject {
+ dateProperty: 12
+}
+
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.9.errors.txt b/tests/auto/declarative/qmllanguage/data/wrongType.9.errors.txt
new file mode 100644
index 0000000..8630975
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.9.errors.txt
@@ -0,0 +1 @@
+3:19:Invalid property assignment: time expected
diff --git a/tests/auto/declarative/qmllanguage/data/wrongType.9.qml b/tests/auto/declarative/qmllanguage/data/wrongType.9.qml
new file mode 100644
index 0000000..a3db732
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/data/wrongType.9.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+MyTypeObject {
+ timeProperty: 12
+}
+
diff --git a/tests/auto/declarative/qmllanguage/qmllanguage.pro b/tests/auto/declarative/qmllanguage/qmllanguage.pro
new file mode 100644
index 0000000..d1876ef
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/qmllanguage.pro
@@ -0,0 +1,14 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+QT += script network
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmllanguage.cpp \
+ testtypes.cpp
+HEADERS += testtypes.h
+
+INCLUDEPATH += ../shared/
+HEADERS += ../shared/testhttpserver.h
+SOURCES += ../shared/testhttpserver.cpp
+
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/LocalInternal.qml b/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/LocalInternal.qml
new file mode 100644
index 0000000..836c20a
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/LocalInternal.qml
@@ -0,0 +1,3 @@
+import Qt 4.6
+
+Image { source: "pics/blue.png" }
diff --git a/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/Test.qml b/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/Test.qml
new file mode 100644
index 0000000..c4d5905
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/Test.qml
@@ -0,0 +1,2 @@
+import Qt 4.6
+Rectangle { }
diff --git a/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/TestLocal.qml b/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/TestLocal.qml
new file mode 100644
index 0000000..11443ca
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/TestLocal.qml
@@ -0,0 +1 @@
+LocalInternal {}
diff --git a/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/TestSubDir.qml b/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/TestSubDir.qml
new file mode 100644
index 0000000..0dfede4
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/TestSubDir.qml
@@ -0,0 +1,2 @@
+import "subdir"
+SubTest { }
diff --git a/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/pics/blue.png b/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/pics/blue.png
new file mode 100644
index 0000000..46f815f
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/pics/blue.png
Binary files differ
diff --git a/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/qmldir b/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/qmldir
new file mode 100644
index 0000000..b32f82b
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/qmldir
@@ -0,0 +1,3 @@
+Test 0.0 Test.qml
+TestSubDir 0.0 TestSubDir.qml
+TestLocal 0.0 TestLocal.qml
diff --git a/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/subdir/SubTest.qml b/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/subdir/SubTest.qml
new file mode 100644
index 0000000..0ea9ec6
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/subdir/SubTest.qml
@@ -0,0 +1,3 @@
+import Qt 4.6
+
+Text {}
diff --git a/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/subdir/qmldir b/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/subdir/qmldir
new file mode 100644
index 0000000..f7016c7
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/qtest/declarative/qmllanguage/subdir/qmldir
@@ -0,0 +1 @@
+SubTest 0.0 SubTest.qml
diff --git a/tests/auto/declarative/qmllanguage/testtypes.cpp b/tests/auto/declarative/qmllanguage/testtypes.cpp
new file mode 100644
index 0000000..f30f47e
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/testtypes.cpp
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "testtypes.h"
+
+QML_DEFINE_INTERFACE(MyInterface);
+QML_DEFINE_TYPE(Test,1,0,MyQmlObject,MyQmlObject);
+QML_DEFINE_TYPE(Test,1,0,MyTypeObject,MyTypeObject);
+QML_DEFINE_TYPE(Test,1,0,MyContainer,MyContainer);
+QML_DEFINE_TYPE(Test,1,0,MyPropertyValueSource,MyPropertyValueSource);
+QML_DEFINE_TYPE(Test,1,0,MyDotPropertyObject,MyDotPropertyObject);
+QML_DEFINE_TYPE(Test,1,0,MyNamespacedType,MyNamespace::MyNamespacedType);
+QML_DEFINE_TYPE(Test,1,0,MySecondNamespacedType,MyNamespace::MySecondNamespacedType);
+QML_DEFINE_NOCREATE_TYPE(MyGroupedObject);
+
+QVariant myCustomVariantTypeConverter(const QString &data)
+{
+ MyCustomVariantType rv;
+ rv.a = data.toInt();
+ return QVariant::fromValue(rv);
+}
+
diff --git a/tests/auto/declarative/qmllanguage/testtypes.h b/tests/auto/declarative/qmllanguage/testtypes.h
new file mode 100644
index 0000000..d6ca898
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/testtypes.h
@@ -0,0 +1,548 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef TESTTYPES_H
+#define TESTTYPES_H
+
+#include <QtCore/qobject.h>
+#include <QtCore/qrect.h>
+#include <QtCore/qdatetime.h>
+#include <QtGui/qmatrix.h>
+#include <QtGui/qcolor.h>
+#include <QtGui/qvector3d.h>
+#include <QtDeclarative/qml.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <QtDeclarative/qmlparserstatus.h>
+#include <QtDeclarative/qmlpropertyvaluesource.h>
+#include <QtDeclarative/qmlscriptstring.h>
+
+QVariant myCustomVariantTypeConverter(const QString &data);
+
+class MyInterface
+{
+public:
+ MyInterface() : id(913) {}
+ int id;
+};
+Q_DECLARE_INTERFACE(MyInterface, "com.trolltech.Qt.Test.MyInterface");
+QML_DECLARE_INTERFACE(MyInterface);
+
+struct MyCustomVariantType
+{
+ MyCustomVariantType() : a(0) {}
+ int a;
+};
+Q_DECLARE_METATYPE(MyCustomVariantType);
+
+class MyAttachedObject : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int value READ value WRITE setValue)
+ Q_PROPERTY(int value2 READ value2 WRITE setValue2)
+public:
+ MyAttachedObject(QObject *parent) : QObject(parent), m_value(0), m_value2(0) {}
+
+ int value() const { return m_value; }
+ void setValue(int v) { m_value = v; }
+
+ int value2() const { return m_value2; }
+ void setValue2(int v) { m_value2 = v; }
+
+private:
+ int m_value;
+ int m_value2;
+};
+
+class MyQmlObject : public QObject, public MyInterface, public QmlParserStatus
+{
+ Q_OBJECT
+ Q_PROPERTY(int value READ value WRITE setValue FINAL)
+ Q_PROPERTY(QString readOnlyString READ readOnlyString)
+ Q_PROPERTY(bool enabled READ enabled WRITE setEnabled)
+ Q_PROPERTY(QRect rect READ rect WRITE setRect)
+ Q_PROPERTY(QMatrix matrix READ matrix WRITE setMatrix) //assumed to be unsupported by QML
+ Q_PROPERTY(MyInterface *interfaceProperty READ interface WRITE setInterface)
+ Q_PROPERTY(int onLiteralSignal READ onLiteralSignal WRITE setOnLiteralSignal);
+ Q_PROPERTY(MyCustomVariantType customType READ customType WRITE setCustomType);
+ Q_PROPERTY(MyQmlObject *qmlobjectProperty READ qmlobject WRITE setQmlobject)
+
+ Q_INTERFACES(MyInterface QmlParserStatus)
+public:
+ MyQmlObject() : m_value(-1), m_interface(0), m_qmlobject(0) { qRegisterMetaType<MyCustomVariantType>("MyCustomVariantType"); }
+
+ int value() const { return m_value; }
+ void setValue(int v) { m_value = v; }
+
+ QString readOnlyString() const { return QLatin1String(""); }
+
+ bool enabled() const { return false; }
+ void setEnabled(bool) {}
+
+ QRect rect() const { return QRect(); }
+ void setRect(const QRect&) {}
+
+ QMatrix matrix() const { return QMatrix(); }
+ void setMatrix(const QMatrix&) {}
+
+ MyInterface *interface() const { return m_interface; }
+ void setInterface(MyInterface *iface) { m_interface = iface; }
+
+ static MyAttachedObject *qmlAttachedProperties(QObject *other) {
+ return new MyAttachedObject(other);
+ }
+ Q_CLASSINFO("DefaultMethod", "basicSlot()");
+
+ int onLiteralSignal() const { return m_value; }
+ void setOnLiteralSignal(int v) { m_value = v; }
+
+ MyQmlObject *qmlobject() const { return m_qmlobject; }
+ void setQmlobject(MyQmlObject *o) { m_qmlobject = o; }
+
+ MyCustomVariantType customType() const { return m_custom; }
+ void setCustomType(const MyCustomVariantType &v) { m_custom = v; }
+public slots:
+ void basicSlot() { qWarning("MyQmlObject::basicSlot"); }
+ void basicSlotWithArgs(int v) { qWarning("MyQmlObject::basicSlotWithArgs(%d)", v); }
+
+signals:
+ void basicSignal();
+ void basicParameterizedSignal(int parameter);
+
+private:
+ friend class tst_qmllanguage;
+ int m_value;
+ MyInterface *m_interface;
+ MyQmlObject *m_qmlobject;
+ MyCustomVariantType m_custom;
+};
+QML_DECLARE_TYPEINFO(MyQmlObject, QML_HAS_ATTACHED_PROPERTIES)
+QML_DECLARE_TYPE(MyQmlObject);
+
+class MyGroupedObject : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QmlScriptString script READ script WRITE setScript);
+public:
+ QmlScriptString script() const { return m_script; }
+ void setScript(const QmlScriptString &s) { m_script = s; }
+
+private:
+ QmlScriptString m_script;
+};
+
+QML_DECLARE_TYPE(MyGroupedObject);
+
+
+class MyTypeObject : public QObject
+{
+ Q_OBJECT
+ Q_ENUMS(MyEnum)
+ Q_FLAGS(MyFlags)
+
+ Q_PROPERTY(QString id READ id WRITE setId);
+ Q_PROPERTY(QObject *objectProperty READ objectProperty WRITE setObjectProperty);
+ Q_PROPERTY(QmlComponent *componentProperty READ componentProperty WRITE setComponentProperty);
+ Q_PROPERTY(MyFlags flagProperty READ flagProperty WRITE setFlagProperty);
+ Q_PROPERTY(MyEnum enumProperty READ enumProperty WRITE setEnumProperty);
+ Q_PROPERTY(QString stringProperty READ stringProperty WRITE setStringProperty);
+ Q_PROPERTY(uint uintProperty READ uintProperty WRITE setUintProperty);
+ Q_PROPERTY(int intProperty READ intProperty WRITE setIntProperty);
+ Q_PROPERTY(qreal realProperty READ realProperty WRITE setRealProperty);
+ Q_PROPERTY(double doubleProperty READ doubleProperty WRITE setDoubleProperty);
+ Q_PROPERTY(float floatProperty READ floatProperty WRITE setFloatProperty);
+ Q_PROPERTY(QColor colorProperty READ colorProperty WRITE setColorProperty);
+ Q_PROPERTY(QDate dateProperty READ dateProperty WRITE setDateProperty);
+ Q_PROPERTY(QTime timeProperty READ timeProperty WRITE setTimeProperty);
+ Q_PROPERTY(QDateTime dateTimeProperty READ dateTimeProperty WRITE setDateTimeProperty);
+ Q_PROPERTY(QPoint pointProperty READ pointProperty WRITE setPointProperty);
+ Q_PROPERTY(QPointF pointFProperty READ pointFProperty WRITE setPointFProperty);
+ Q_PROPERTY(QSize sizeProperty READ sizeProperty WRITE setSizeProperty);
+ Q_PROPERTY(QSizeF sizeFProperty READ sizeFProperty WRITE setSizeFProperty);
+ Q_PROPERTY(QRect rectProperty READ rectProperty WRITE setRectProperty NOTIFY rectPropertyChanged);
+ Q_PROPERTY(QRect rectProperty2 READ rectProperty2 WRITE setRectProperty2);
+ Q_PROPERTY(QRectF rectFProperty READ rectFProperty WRITE setRectFProperty);
+ Q_PROPERTY(bool boolProperty READ boolProperty WRITE setBoolProperty);
+ Q_PROPERTY(QVariant variantProperty READ variantProperty WRITE setVariantProperty);
+ Q_PROPERTY(QVector3D vectorProperty READ vectorProperty WRITE setVectorProperty);
+ Q_PROPERTY(QUrl urlProperty READ urlProperty WRITE setUrlProperty);
+
+ Q_PROPERTY(QmlScriptString scriptProperty READ scriptProperty WRITE setScriptProperty);
+ Q_PROPERTY(MyGroupedObject *grouped READ grouped CONSTANT);
+ Q_PROPERTY(MyGroupedObject *nullGrouped READ nullGrouped CONSTANT);
+
+public:
+ MyTypeObject()
+ : objectPropertyValue(0), componentPropertyValue(0) {}
+
+ QString idValue;
+ QString id() const {
+ return idValue;
+ }
+ void setId(const QString &v) {
+ idValue = v;
+ }
+
+ QObject *objectPropertyValue;
+ QObject *objectProperty() const {
+ return objectPropertyValue;
+ }
+ void setObjectProperty(QObject *v) {
+ objectPropertyValue = v;
+ }
+
+ QmlComponent *componentPropertyValue;
+ QmlComponent *componentProperty() const {
+ return componentPropertyValue;
+ }
+ void setComponentProperty(QmlComponent *v) {
+ componentPropertyValue = v;
+ }
+
+ enum MyFlag { FlagVal1 = 0x01, FlagVal2 = 0x02, FlagVal3 = 0x04 };
+ Q_DECLARE_FLAGS(MyFlags, MyFlag)
+ MyFlags flagPropertyValue;
+ MyFlags flagProperty() const {
+ return flagPropertyValue;
+ }
+ void setFlagProperty(MyFlags v) {
+ flagPropertyValue = v;
+ }
+
+ enum MyEnum { EnumVal1, EnumVal2 };
+ MyEnum enumPropertyValue;
+ MyEnum enumProperty() const {
+ return enumPropertyValue;
+ }
+ void setEnumProperty(MyEnum v) {
+ enumPropertyValue = v;
+ }
+
+ QString stringPropertyValue;
+ QString stringProperty() const {
+ return stringPropertyValue;
+ }
+ void setStringProperty(const QString &v) {
+ stringPropertyValue = v;
+ }
+
+ uint uintPropertyValue;
+ uint uintProperty() const {
+ return uintPropertyValue;
+ }
+ void setUintProperty(const uint &v) {
+ uintPropertyValue = v;
+ }
+
+ int intPropertyValue;
+ int intProperty() const {
+ return intPropertyValue;
+ }
+ void setIntProperty(const int &v) {
+ intPropertyValue = v;
+ }
+
+ qreal realPropertyValue;
+ qreal realProperty() const {
+ return realPropertyValue;
+ }
+ void setRealProperty(const qreal &v) {
+ realPropertyValue = v;
+ }
+
+ double doublePropertyValue;
+ double doubleProperty() const {
+ return doublePropertyValue;
+ }
+ void setDoubleProperty(const double &v) {
+ doublePropertyValue = v;
+ }
+
+ float floatPropertyValue;
+ float floatProperty() const {
+ return floatPropertyValue;
+ }
+ void setFloatProperty(const float &v) {
+ floatPropertyValue = v;
+ }
+
+ QColor colorPropertyValue;
+ QColor colorProperty() const {
+ return colorPropertyValue;
+ }
+ void setColorProperty(const QColor &v) {
+ colorPropertyValue = v;
+ }
+
+ QDate datePropertyValue;
+ QDate dateProperty() const {
+ return datePropertyValue;
+ }
+ void setDateProperty(const QDate &v) {
+ datePropertyValue = v;
+ }
+
+ QTime timePropertyValue;
+ QTime timeProperty() const {
+ return timePropertyValue;
+ }
+ void setTimeProperty(const QTime &v) {
+ timePropertyValue = v;
+ }
+
+ QDateTime dateTimePropertyValue;
+ QDateTime dateTimeProperty() const {
+ return dateTimePropertyValue;
+ }
+ void setDateTimeProperty(const QDateTime &v) {
+ dateTimePropertyValue = v;
+ }
+
+ QPoint pointPropertyValue;
+ QPoint pointProperty() const {
+ return pointPropertyValue;
+ }
+ void setPointProperty(const QPoint &v) {
+ pointPropertyValue = v;
+ }
+
+ QPointF pointFPropertyValue;
+ QPointF pointFProperty() const {
+ return pointFPropertyValue;
+ }
+ void setPointFProperty(const QPointF &v) {
+ pointFPropertyValue = v;
+ }
+
+ QSize sizePropertyValue;
+ QSize sizeProperty() const {
+ return sizePropertyValue;
+ }
+ void setSizeProperty(const QSize &v) {
+ sizePropertyValue = v;
+ }
+
+ QSizeF sizeFPropertyValue;
+ QSizeF sizeFProperty() const {
+ return sizeFPropertyValue;
+ }
+ void setSizeFProperty(const QSizeF &v) {
+ sizeFPropertyValue = v;
+ }
+
+ QRect rectPropertyValue;
+ QRect rectProperty() const {
+ return rectPropertyValue;
+ }
+ void setRectProperty(const QRect &v) {
+ rectPropertyValue = v;
+ emit rectPropertyChanged();
+ }
+
+ QRect rectPropertyValue2;
+ QRect rectProperty2() const {
+ return rectPropertyValue2;
+ }
+ void setRectProperty2(const QRect &v) {
+ rectPropertyValue2 = v;
+ }
+
+ QRectF rectFPropertyValue;
+ QRectF rectFProperty() const {
+ return rectFPropertyValue;
+ }
+ void setRectFProperty(const QRectF &v) {
+ rectFPropertyValue = v;
+ }
+
+ bool boolPropertyValue;
+ bool boolProperty() const {
+ return boolPropertyValue;
+ }
+ void setBoolProperty(const bool &v) {
+ boolPropertyValue = v;
+ }
+
+ QVariant variantPropertyValue;
+ QVariant variantProperty() const {
+ return variantPropertyValue;
+ }
+ void setVariantProperty(const QVariant &v) {
+ variantPropertyValue = v;
+ }
+
+ QVector3D vectorPropertyValue;
+ QVector3D vectorProperty() const {
+ return vectorPropertyValue;
+ }
+ void setVectorProperty(const QVector3D &v) {
+ vectorPropertyValue = v;
+ }
+
+ QUrl urlPropertyValue;
+ QUrl urlProperty() const {
+ return urlPropertyValue;
+ }
+ void setUrlProperty(const QUrl &v) {
+ urlPropertyValue = v;
+ }
+
+ QmlScriptString scriptPropertyValue;
+ QmlScriptString scriptProperty() const {
+ return scriptPropertyValue;
+ }
+ void setScriptProperty(const QmlScriptString &v) {
+ scriptPropertyValue = v;
+ }
+
+ MyGroupedObject groupedValue;
+ MyGroupedObject *grouped() { return &groupedValue; }
+
+ MyGroupedObject *nullGrouped() { return 0; }
+
+ void doAction() { emit action(); }
+signals:
+ void action();
+ void rectPropertyChanged();
+};
+Q_DECLARE_OPERATORS_FOR_FLAGS(MyTypeObject::MyFlags)
+QML_DECLARE_TYPE(MyTypeObject);
+
+class MyContainer : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QList<QObject*>* children READ children)
+ Q_PROPERTY(QList<MyInterface*>* qlistInterfaces READ qlistInterfaces)
+ Q_PROPERTY(QmlList<MyInterface*>* qmllistInterfaces READ qmllistInterfaces)
+ Q_CLASSINFO("DefaultProperty", "children");
+public:
+ MyContainer() {}
+
+ QList<QObject*> *children() { return &m_children; }
+ QList<MyInterface *> *qlistInterfaces() { return &m_interfaces; }
+ QmlList<MyInterface *> *qmllistInterfaces() { return &m_qmlinterfaces; }
+ const QmlConcreteList<MyInterface *> &qmllistAccessor() const { return m_qmlinterfaces; }
+
+private:
+ QList<QObject*> m_children;
+ QList<MyInterface *> m_interfaces;
+ QmlConcreteList<MyInterface *> m_qmlinterfaces;
+};
+
+QML_DECLARE_TYPE(MyContainer);
+
+
+class MyPropertyValueSource : public QObject, public QmlPropertyValueSource
+{
+ Q_OBJECT
+ Q_INTERFACES(QmlPropertyValueSource)
+public:
+ MyPropertyValueSource()
+ : QmlPropertyValueSource() {}
+
+ QmlMetaProperty prop;
+ virtual void setTarget(const QmlMetaProperty &p)
+ {
+ prop = p;
+ }
+};
+QML_DECLARE_TYPE(MyPropertyValueSource);
+
+class MyDotPropertyObject : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(MyQmlObject *obj READ obj)
+ Q_PROPERTY(MyQmlObject *readWriteObj READ readWriteObj WRITE setReadWriteObj)
+public:
+ MyDotPropertyObject() : m_rwobj(0), m_ownRWObj(false) {}
+ ~MyDotPropertyObject()
+ {
+ if (m_ownRWObj)
+ delete m_rwobj;
+ }
+
+ MyQmlObject *obj() { return 0; }
+
+ MyQmlObject *readWriteObj()
+ {
+ if (!m_rwobj) {
+ m_rwobj = new MyQmlObject;
+ m_ownRWObj = true;
+ }
+ return m_rwobj;
+ }
+
+ void setReadWriteObj(MyQmlObject *obj)
+ {
+ if (m_ownRWObj) {
+ delete m_rwobj;
+ m_ownRWObj = false;
+ }
+
+ m_rwobj = obj;
+ }
+
+private:
+ MyQmlObject *m_rwobj;
+ bool m_ownRWObj;
+};
+
+QML_DECLARE_TYPE(MyDotPropertyObject);
+
+namespace MyNamespace {
+ class MyNamespacedType : public QObject
+ {
+ Q_OBJECT
+ };
+
+ class MySecondNamespacedType : public QObject
+ {
+ Q_OBJECT
+ Q_PROPERTY(QmlList<MyNamespace::MyNamespacedType *> *list READ list);
+ public:
+ QmlList<MyNamespacedType *> *list() { return &m_list; }
+
+ private:
+ QmlConcreteList<MyNamespacedType *> m_list;
+ };
+}
+QML_DECLARE_TYPE(MyNamespace::MyNamespacedType);
+QML_DECLARE_TYPE(MyNamespace::MySecondNamespacedType);
+
+#endif // TESTTYPES_H
diff --git a/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp b/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp
new file mode 100644
index 0000000..3029501
--- /dev/null
+++ b/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp
@@ -0,0 +1,1396 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <QtCore/qfile.h>
+#include <QtCore/qdebug.h>
+#include <QtCore/qfileinfo.h>
+#include <QtCore/qdir.h>
+#include <private/qmlmetaproperty_p.h>
+#include "testtypes.h"
+
+#include "../../../shared/util.h"
+
+/*
+This test case covers QML language issues. This covers everything that does not
+involve evaluating ECMAScript expressions and bindings.
+
+Evaluation of expressions and bindings is covered in qmlecmascript
+*/
+class tst_qmllanguage : public QObject
+{
+ Q_OBJECT
+public:
+ tst_qmllanguage() {
+ QmlMetaType::registerCustomStringConverter(qMetaTypeId<MyCustomVariantType>(), myCustomVariantTypeConverter);
+ QFileInfo fileInfo(__FILE__);
+ engine.addImportPath(fileInfo.absoluteDir().filePath(QLatin1String("data/lib")));
+ }
+
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+
+ void errors_data();
+ void errors();
+
+ void simpleObject();
+ void simpleContainer();
+ void interfaceProperty();
+ void interfaceQmlList();
+ void interfaceQList();
+ void assignObjectToSignal();
+ void assignObjectToVariant();
+ void assignLiteralSignalProperty();
+ void assignQmlComponent();
+ void assignBasicTypes();
+ void assignTypeExtremes();
+ void assignCompositeToType();
+ void customParserTypes();
+ void rootAsQmlComponent();
+ void inlineQmlComponents();
+ void idProperty();
+ void assignSignal();
+ void dynamicProperties();
+ void dynamicPropertiesNested();
+ void listProperties();
+ void dynamicObjectProperties();
+ void dynamicSignalsAndSlots();
+ void simpleBindings();
+ void autoComponentCreation();
+ void propertyValueSource();
+ void attachedProperties();
+ void dynamicObjects();
+ void customVariantTypes();
+ void valueTypes();
+ void cppnamespace();
+ void aliasProperties();
+ void componentCompositeType();
+ void i18n();
+ void i18n_data();
+ void onCompleted();
+ void scriptString();
+ void defaultPropertyListOrder();
+ void declaredPropertyValues();
+
+ void importsBuiltin_data();
+ void importsBuiltin();
+ void importsLocal_data();
+ void importsLocal();
+ void importsRemote_data();
+ void importsRemote();
+ void importsInstalled_data();
+ void importsInstalled();
+ void importsOrder_data();
+ void importsOrder();
+
+ void qmlAttachedPropertiesObjectMethod();
+
+ // regression tests for crashes
+ void crash1();
+ void crash2();
+
+private:
+ QmlEngine engine;
+ void testType(const QString& qml, const QString& type);
+};
+
+#define VERIFY_ERRORS(errorfile) \
+ if (!errorfile) { \
+ if (qgetenv("DEBUG") != "" && !component.errors().isEmpty()) \
+ qWarning() << "Unexpected Errors:" << component.errors(); \
+ QVERIFY(!component.isError()); \
+ QVERIFY(component.errors().isEmpty()); \
+ } else { \
+ QFile file(QLatin1String(SRCDIR) + QLatin1String("/data/") + QLatin1String(errorfile)); \
+ QVERIFY(file.open(QIODevice::ReadOnly)); \
+ QByteArray data = file.readAll(); \
+ file.close(); \
+ QList<QByteArray> expected = data.split('\n'); \
+ expected.removeAll(QByteArray("")); \
+ QList<QmlError> errors = component.errors(); \
+ QList<QByteArray> actual; \
+ for (int ii = 0; ii < errors.count(); ++ii) { \
+ const QmlError &error = errors.at(ii); \
+ QByteArray errorStr = QByteArray::number(error.line()) + ":" + \
+ QByteArray::number(error.column()) + ":" + \
+ error.description().toUtf8(); \
+ actual << errorStr; \
+ } \
+ if (qgetenv("DEBUG") != "" && expected != actual) \
+ qWarning() << "Expected:" << expected << "Actual:" << actual; \
+ if (qgetenv("QMLLANGUAGE_UPDATEERRORS") != "" && expected != actual) {\
+ QFile file(QLatin1String("data/") + QLatin1String(errorfile)); \
+ QVERIFY(file.open(QIODevice::WriteOnly)); \
+ for (int ii = 0; ii < actual.count(); ++ii) { \
+ file.write(actual.at(ii)); file.write("\n"); \
+ } \
+ file.close(); \
+ } else { \
+ QCOMPARE(expected, actual); \
+ } \
+ }
+
+inline QUrl TEST_FILE(const QString &filename)
+{
+ QFileInfo fileInfo(__FILE__);
+ return QUrl::fromLocalFile(fileInfo.absoluteDir().filePath(QLatin1String("data/") + filename));
+}
+
+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");
+ QTest::addColumn<QString>("errorFile");
+ QTest::addColumn<bool>("create");
+
+ QTest::newRow("nonexistantProperty.1") << "nonexistantProperty.1.qml" << "nonexistantProperty.1.errors.txt" << false;
+ QTest::newRow("nonexistantProperty.2") << "nonexistantProperty.2.qml" << "nonexistantProperty.2.errors.txt" << false;
+ QTest::newRow("nonexistantProperty.3") << "nonexistantProperty.3.qml" << "nonexistantProperty.3.errors.txt" << false;
+ QTest::newRow("nonexistantProperty.4") << "nonexistantProperty.4.qml" << "nonexistantProperty.4.errors.txt" << false;
+ QTest::newRow("nonexistantProperty.5") << "nonexistantProperty.5.qml" << "nonexistantProperty.5.errors.txt" << false;
+ QTest::newRow("nonexistantProperty.6") << "nonexistantProperty.6.qml" << "nonexistantProperty.6.errors.txt" << false;
+
+ QTest::newRow("wrongType (string for int)") << "wrongType.1.qml" << "wrongType.1.errors.txt" << false;
+ QTest::newRow("wrongType (int for bool)") << "wrongType.2.qml" << "wrongType.2.errors.txt" << false;
+ QTest::newRow("wrongType (bad rect)") << "wrongType.3.qml" << "wrongType.3.errors.txt" << false;
+
+ QTest::newRow("wrongType (invalid enum)") << "wrongType.4.qml" << "wrongType.4.errors.txt" << false;
+ QTest::newRow("wrongType (int for uint)") << "wrongType.5.qml" << "wrongType.5.errors.txt" << false;
+ QTest::newRow("wrongType (string for real)") << "wrongType.6.qml" << "wrongType.6.errors.txt" << false;
+ QTest::newRow("wrongType (int for color)") << "wrongType.7.qml" << "wrongType.7.errors.txt" << false;
+ QTest::newRow("wrongType (int for date)") << "wrongType.8.qml" << "wrongType.8.errors.txt" << false;
+ QTest::newRow("wrongType (int for time)") << "wrongType.9.qml" << "wrongType.9.errors.txt" << false;
+ QTest::newRow("wrongType (int for datetime)") << "wrongType.10.qml" << "wrongType.10.errors.txt" << false;
+ QTest::newRow("wrongType (string for point)") << "wrongType.11.qml" << "wrongType.11.errors.txt" << false;
+ QTest::newRow("wrongType (color for size)") << "wrongType.12.qml" << "wrongType.12.errors.txt" << false;
+ QTest::newRow("wrongType (number string for int)") << "wrongType.13.qml" << "wrongType.13.errors.txt" << false;
+ QTest::newRow("wrongType (int for string)") << "wrongType.14.qml" << "wrongType.14.errors.txt" << false;
+ QTest::newRow("wrongType (int for url)") << "wrongType.15.qml" << "wrongType.15.errors.txt" << false;
+
+ QTest::newRow("readOnly.1") << "readOnly.1.qml" << "readOnly.1.errors.txt" << false;
+ QTest::newRow("readOnly.2") << "readOnly.2.qml" << "readOnly.2.errors.txt" << false;
+ QTest::newRow("readOnly.3") << "readOnly.3.qml" << "readOnly.3.errors.txt" << false;
+
+ QTest::newRow("listAssignment.1") << "listAssignment.1.qml" << "listAssignment.1.errors.txt" << false;
+ QTest::newRow("listAssignment.2") << "listAssignment.2.qml" << "listAssignment.2.errors.txt" << false;
+ QTest::newRow("listAssignment.3") << "listAssignment.3.qml" << "listAssignment.3.errors.txt" << false;
+
+ QTest::newRow("invalidID.1") << "invalidID.qml" << "invalidID.errors.txt" << false;
+ QTest::newRow("invalidID.2") << "invalidID.2.qml" << "invalidID.2.errors.txt" << false;
+ QTest::newRow("invalidID.3") << "invalidID.3.qml" << "invalidID.3.errors.txt" << false;
+ QTest::newRow("invalidID.4") << "invalidID.4.qml" << "invalidID.4.errors.txt" << false;
+ QTest::newRow("invalidID.5") << "invalidID.5.qml" << "invalidID.5.errors.txt" << false;
+ QTest::newRow("invalidID.6") << "invalidID.6.qml" << "invalidID.6.errors.txt" << false;
+
+ QTest::newRow("unsupportedProperty") << "unsupportedProperty.qml" << "unsupportedProperty.errors.txt" << false;
+ QTest::newRow("nullDotProperty") << "nullDotProperty.qml" << "nullDotProperty.errors.txt" << true;
+ QTest::newRow("fakeDotProperty") << "fakeDotProperty.qml" << "fakeDotProperty.errors.txt" << false;
+ QTest::newRow("duplicateIDs") << "duplicateIDs.qml" << "duplicateIDs.errors.txt" << false;
+ QTest::newRow("unregisteredObject") << "unregisteredObject.qml" << "unregisteredObject.errors.txt" << false;
+ QTest::newRow("empty") << "empty.qml" << "empty.errors.txt" << false;
+ QTest::newRow("missingObject") << "missingObject.qml" << "missingObject.errors.txt" << false;
+ QTest::newRow("failingComponent") << "failingComponentTest.qml" << "failingComponent.errors.txt" << false;
+ QTest::newRow("missingSignal") << "missingSignal.qml" << "missingSignal.errors.txt" << false;
+ QTest::newRow("finalOverride") << "finalOverride.qml" << "finalOverride.errors.txt" << false;
+ QTest::newRow("customParserIdNotAllowed") << "customParserIdNotAllowed.qml" << "customParserIdNotAllowed.errors.txt" << false;
+
+ QTest::newRow("invalidGroupedProperty.1") << "invalidGroupedProperty.1.qml" << "invalidGroupedProperty.1.errors.txt" << false;
+ QTest::newRow("invalidGroupedProperty.2") << "invalidGroupedProperty.2.qml" << "invalidGroupedProperty.2.errors.txt" << false;
+ QTest::newRow("invalidGroupedProperty.3") << "invalidGroupedProperty.3.qml" << "invalidGroupedProperty.3.errors.txt" << false;
+ QTest::newRow("invalidGroupedProperty.4") << "invalidGroupedProperty.4.qml" << "invalidGroupedProperty.4.errors.txt" << false;
+ QTest::newRow("invalidGroupedProperty.5") << "invalidGroupedProperty.5.qml" << "invalidGroupedProperty.5.errors.txt" << false;
+ QTest::newRow("invalidGroupedProperty.6") << "invalidGroupedProperty.6.qml" << "invalidGroupedProperty.6.errors.txt" << false;
+ QTest::newRow("invalidGroupedProperty.7") << "invalidGroupedProperty.7.qml" << "invalidGroupedProperty.7.errors.txt" << true;
+
+ QTest::newRow("importNamespaceConflict") << "importNamespaceConflict.qml" << "importNamespaceConflict.errors.txt" << false;
+ QTest::newRow("importVersionMissing (builtin)") << "importVersionMissingBuiltIn.qml" << "importVersionMissingBuiltIn.errors.txt" << false;
+ QTest::newRow("importVersionMissing (installed)") << "importVersionMissingInstalled.qml" << "importVersionMissingInstalled.errors.txt" << false;
+ QTest::newRow("invalidImportID") << "invalidImportID.qml" << "invalidImportID.errors.txt" << false;
+
+ QTest::newRow("signal.1") << "signal.1.qml" << "signal.1.errors.txt" << false;
+ QTest::newRow("signal.2") << "signal.2.qml" << "signal.2.errors.txt" << false;
+ QTest::newRow("signal.3") << "signal.3.qml" << "signal.3.errors.txt" << false;
+
+ QTest::newRow("property.1") << "property.1.qml" << "property.1.errors.txt" << false;
+ QTest::newRow("property.2") << "property.2.qml" << "property.2.errors.txt" << false;
+ QTest::newRow("property.3") << "property.3.qml" << "property.3.errors.txt" << false;
+ QTest::newRow("property.4") << "property.4.qml" << "property.4.errors.txt" << false;
+ QTest::newRow("property.5") << "property.5.qml" << "property.5.errors.txt" << false;
+
+ QTest::newRow("Script.1") << "script.1.qml" << "script.1.errors.txt" << false;
+ QTest::newRow("Script.2") << "script.2.qml" << "script.2.errors.txt" << false;
+ QTest::newRow("Script.3") << "script.3.qml" << "script.3.errors.txt" << false;
+ QTest::newRow("Script.4") << "script.4.qml" << "script.4.errors.txt" << false;
+ QTest::newRow("Script.5") << "script.5.qml" << "script.5.errors.txt" << false;
+ QTest::newRow("Script.6") << "script.6.qml" << "script.6.errors.txt" << false;
+ QTest::newRow("Script.7") << "script.7.qml" << "script.7.errors.txt" << false;
+ QTest::newRow("Script.8") << "script.8.qml" << "script.8.errors.txt" << false;
+ QTest::newRow("Script.9") << "script.9.qml" << "script.9.errors.txt" << false;
+ QTest::newRow("Script.10") << "script.10.qml" << "script.10.errors.txt" << false;
+ QTest::newRow("Script.11") << "script.11.qml" << "script.11.errors.txt" << false;
+ QTest::newRow("Script.12") << "script.12.qml" << "script.12.errors.txt" << false;
+
+ QTest::newRow("Component.1") << "component.1.qml" << "component.1.errors.txt" << false;
+ QTest::newRow("Component.2") << "component.2.qml" << "component.2.errors.txt" << false;
+ QTest::newRow("Component.3") << "component.3.qml" << "component.3.errors.txt" << false;
+ QTest::newRow("Component.4") << "component.4.qml" << "component.4.errors.txt" << false;
+ QTest::newRow("Component.5") << "component.5.qml" << "component.5.errors.txt" << false;
+ QTest::newRow("Component.6") << "component.6.qml" << "component.6.errors.txt" << false;
+
+ QTest::newRow("invalidAttachedProperty.1") << "invalidAttachedProperty.1.qml" << "invalidAttachedProperty.1.errors.txt" << false;
+ QTest::newRow("invalidAttachedProperty.2") << "invalidAttachedProperty.2.qml" << "invalidAttachedProperty.2.errors.txt" << false;
+ QTest::newRow("invalidAttachedProperty.3") << "invalidAttachedProperty.3.qml" << "invalidAttachedProperty.3.errors.txt" << false;
+ QTest::newRow("invalidAttachedProperty.4") << "invalidAttachedProperty.4.qml" << "invalidAttachedProperty.4.errors.txt" << false;
+ QTest::newRow("invalidAttachedProperty.5") << "invalidAttachedProperty.5.qml" << "invalidAttachedProperty.5.errors.txt" << false;
+ QTest::newRow("invalidAttachedProperty.6") << "invalidAttachedProperty.6.qml" << "invalidAttachedProperty.6.errors.txt" << false;
+ QTest::newRow("invalidAttachedProperty.7") << "invalidAttachedProperty.7.qml" << "invalidAttachedProperty.7.errors.txt" << false;
+ QTest::newRow("invalidAttachedProperty.8") << "invalidAttachedProperty.8.qml" << "invalidAttachedProperty.8.errors.txt" << false;
+ QTest::newRow("invalidAttachedProperty.9") << "invalidAttachedProperty.9.qml" << "invalidAttachedProperty.9.errors.txt" << false;
+ QTest::newRow("invalidAttachedProperty.10") << "invalidAttachedProperty.10.qml" << "invalidAttachedProperty.10.errors.txt" << false;
+ QTest::newRow("invalidAttachedProperty.11") << "invalidAttachedProperty.11.qml" << "invalidAttachedProperty.11.errors.txt" << false;
+
+ QTest::newRow("nestedErrors") << "nestedErrors.qml" << "nestedErrors.errors.txt" << false;
+ QTest::newRow("defaultGrouped") << "defaultGrouped.qml" << "defaultGrouped.errors.txt" << false;
+ QTest::newRow("emptySignal") << "emptySignal.qml" << "emptySignal.errors.txt" << false;
+ QTest::newRow("doubleSignal") << "doubleSignal.qml" << "doubleSignal.errors.txt" << false;
+ QTest::newRow("invalidRoot") << "invalidRoot.qml" << "invalidRoot.errors.txt" << false;
+ QTest::newRow("missingValueTypeProperty") << "missingValueTypeProperty.qml" << "missingValueTypeProperty.errors.txt" << false;
+ QTest::newRow("objectValueTypeProperty") << "objectValueTypeProperty.qml" << "objectValueTypeProperty.errors.txt" << false;
+}
+
+
+void tst_qmllanguage::errors()
+{
+ QFETCH(QString, file);
+ QFETCH(QString, errorFile);
+ QFETCH(bool, create);
+
+ if (file == "invalidID.6.qml")
+ QSKIP("Test disabled until we strictly disallow ids from beginning with uppercase letters", SkipSingle);
+
+ QmlComponent component(&engine, TEST_FILE(file));
+
+ if(create) {
+ QObject *object = component.create();
+ QVERIFY(object == 0);
+ }
+
+ VERIFY_ERRORS(errorFile.toLatin1().constData());
+}
+
+void tst_qmllanguage::simpleObject()
+{
+ QmlComponent component(&engine, TEST_FILE("simpleObject.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+}
+
+void tst_qmllanguage::simpleContainer()
+{
+ QmlComponent component(&engine, TEST_FILE("simpleContainer.qml"));
+ VERIFY_ERRORS(0);
+ MyContainer *container= qobject_cast<MyContainer*>(component.create());
+ QVERIFY(container != 0);
+ QCOMPARE(container->children()->count(),2);
+}
+
+void tst_qmllanguage::interfaceProperty()
+{
+ QmlComponent component(&engine, TEST_FILE("interfaceProperty.qml"));
+ VERIFY_ERRORS(0);
+ MyQmlObject *object = qobject_cast<MyQmlObject*>(component.create());
+ QVERIFY(object != 0);
+ QVERIFY(object->interface());
+ QVERIFY(object->interface()->id == 913);
+}
+
+void tst_qmllanguage::interfaceQmlList()
+{
+ QmlComponent component(&engine, TEST_FILE("interfaceQmlList.qml"));
+ VERIFY_ERRORS(0);
+ MyContainer *container= qobject_cast<MyContainer*>(component.create());
+ QVERIFY(container != 0);
+ QVERIFY(container->qmllistAccessor().count() == 2);
+ for(int ii = 0; ii < 2; ++ii)
+ QVERIFY(container->qmllistAccessor().at(ii)->id == 913);
+}
+
+void tst_qmllanguage::interfaceQList()
+{
+ QmlComponent component(&engine, TEST_FILE("interfaceQList.qml"));
+ VERIFY_ERRORS(0);
+ MyContainer *container= qobject_cast<MyContainer*>(component.create());
+ QVERIFY(container != 0);
+ QVERIFY(container->qlistInterfaces()->count() == 2);
+ for(int ii = 0; ii < 2; ++ii)
+ QVERIFY(container->qlistInterfaces()->at(ii)->id == 913);
+}
+
+void tst_qmllanguage::assignObjectToSignal()
+{
+ QmlComponent component(&engine, TEST_FILE("assignObjectToSignal.qml"));
+ VERIFY_ERRORS(0);
+ MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
+ QVERIFY(object != 0);
+ QTest::ignoreMessage(QtWarningMsg, "MyQmlObject::basicSlot");
+ emit object->basicSignal();
+}
+
+void tst_qmllanguage::assignObjectToVariant()
+{
+ QmlComponent component(&engine, TEST_FILE("assignObjectToVariant.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ QVariant v = object->property("a");
+ QVERIFY(v.userType() == qMetaTypeId<QObject *>());
+}
+
+void tst_qmllanguage::assignLiteralSignalProperty()
+{
+ QmlComponent component(&engine, TEST_FILE("assignLiteralSignalProperty.qml"));
+ VERIFY_ERRORS(0);
+ MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
+ QVERIFY(object != 0);
+ QCOMPARE(object->onLiteralSignal(), 10);
+}
+
+// Test is an external component can be loaded and assigned (to a qlist)
+void tst_qmllanguage::assignQmlComponent()
+{
+ QmlComponent component(&engine, TEST_FILE("assignQmlComponent.qml"));
+ VERIFY_ERRORS(0);
+ MyContainer *object = qobject_cast<MyContainer *>(component.create());
+ QVERIFY(object != 0);
+ QVERIFY(object->children()->count() == 1);
+ QObject *child = object->children()->at(0);
+ QCOMPARE(child->property("x"), QVariant(10));
+ QCOMPARE(child->property("y"), QVariant(11));
+}
+
+// Test literal assignment to all the basic types
+void tst_qmllanguage::assignBasicTypes()
+{
+ QmlComponent component(&engine, TEST_FILE("assignBasicTypes.qml"));
+ VERIFY_ERRORS(0);
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+ QCOMPARE(object->flagProperty(), MyTypeObject::FlagVal1 | MyTypeObject::FlagVal3);
+ QCOMPARE(object->enumProperty(), MyTypeObject::EnumVal2);
+ QCOMPARE(object->stringProperty(), QString("Hello World!"));
+ QCOMPARE(object->uintProperty(), uint(10));
+ QCOMPARE(object->intProperty(), -19);
+ QCOMPARE((float)object->realProperty(), float(23.2));
+ QCOMPARE((float)object->doubleProperty(), float(-19.7));
+ QCOMPARE((float)object->floatProperty(), float(8.5));
+ QCOMPARE(object->colorProperty(), QColor("red"));
+ QCOMPARE(object->dateProperty(), QDate(1982, 11, 25));
+ QCOMPARE(object->timeProperty(), QTime(11, 11, 32));
+ QCOMPARE(object->dateTimeProperty(), QDateTime(QDate(2009, 5, 12), QTime(13, 22, 1)));
+ QCOMPARE(object->pointProperty(), QPoint(99,13));
+ QCOMPARE(object->pointFProperty(), QPointF((float)-10.1, (float)12.3));
+ QCOMPARE(object->sizeProperty(), QSize(99, 13));
+ QCOMPARE(object->sizeFProperty(), QSizeF((float)0.1, (float)0.2));
+ QCOMPARE(object->rectProperty(), QRect(9, 7, 100, 200));
+ QCOMPARE(object->rectFProperty(), QRectF((float)1000.1, (float)-10.9, (float)400, (float)90.99));
+ QCOMPARE(object->boolProperty(), true);
+ QCOMPARE(object->variantProperty(), QVariant("Hello World!"));
+ QCOMPARE(object->vectorProperty(), QVector3D(10, 1, 2.2));
+ QCOMPARE(object->urlProperty(), component.url().resolved(QUrl("main.qml")));
+ QVERIFY(object->objectProperty() != 0);
+ MyTypeObject *child = qobject_cast<MyTypeObject *>(object->objectProperty());
+ QVERIFY(child != 0);
+ QCOMPARE(child->intProperty(), 8);
+}
+
+// Test edge case type assignments
+void tst_qmllanguage::assignTypeExtremes()
+{
+ QmlComponent component(&engine, TEST_FILE("assignTypeExtremes.qml"));
+ VERIFY_ERRORS(0);
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+ QCOMPARE(object->uintProperty(), 0xEE6B2800);
+ QCOMPARE(object->intProperty(), -0x77359400);
+}
+
+// Test that a composite type can assign to a property of its base type
+void tst_qmllanguage::assignCompositeToType()
+{
+ QmlComponent component(&engine, TEST_FILE("assignCompositeToType.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+}
+
+// Tests that custom parser types can be instantiated
+void tst_qmllanguage::customParserTypes()
+{
+ QmlComponent component(&engine, TEST_FILE("customParserTypes.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ QVERIFY(object->property("count") == QVariant(2));
+}
+
+// Tests that the root item can be a custom component
+void tst_qmllanguage::rootAsQmlComponent()
+{
+ QmlComponent component(&engine, TEST_FILE("rootAsQmlComponent.qml"));
+ VERIFY_ERRORS(0);
+ MyContainer *object = qobject_cast<MyContainer *>(component.create());
+ QVERIFY(object != 0);
+ QCOMPARE(object->property("x"), QVariant(11));
+ QCOMPARE(object->children()->count(), 2);
+}
+
+// Tests that components can be specified inline
+void tst_qmllanguage::inlineQmlComponents()
+{
+ QmlComponent component(&engine, TEST_FILE("inlineQmlComponents.qml"));
+ VERIFY_ERRORS(0);
+ MyContainer *object = qobject_cast<MyContainer *>(component.create());
+ QVERIFY(object != 0);
+ QCOMPARE(object->children()->count(), 1);
+ QmlComponent *comp = qobject_cast<QmlComponent *>(object->children()->at(0));
+ QVERIFY(comp != 0);
+ MyQmlObject *compObject = qobject_cast<MyQmlObject *>(comp->create());
+ QVERIFY(compObject != 0);
+ QCOMPARE(compObject->value(), 11);
+}
+
+// Tests that types that have an id property have it set
+void tst_qmllanguage::idProperty()
+{
+ QmlComponent component(&engine, TEST_FILE("idProperty.qml"));
+ VERIFY_ERRORS(0);
+ MyContainer *object = qobject_cast<MyContainer *>(component.create());
+ QVERIFY(object != 0);
+ QCOMPARE(object->children()->count(), 1);
+ MyTypeObject *child =
+ qobject_cast<MyTypeObject *>(object->children()->at(0));
+ QVERIFY(child != 0);
+ QCOMPARE(child->id(), QString("myObjectId"));
+ QCOMPARE(object->property("object"), QVariant::fromValue((QObject *)child));
+}
+
+// Tests that signals can be assigned to
+void tst_qmllanguage::assignSignal()
+{
+ QmlComponent component(&engine, TEST_FILE("assignSignal.qml"));
+ VERIFY_ERRORS(0);
+ MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
+ QVERIFY(object != 0);
+ QTest::ignoreMessage(QtWarningMsg, "MyQmlObject::basicSlot");
+ emit object->basicSignal();
+ QTest::ignoreMessage(QtWarningMsg, "MyQmlObject::basicSlotWithArgs(9)");
+ emit object->basicParameterizedSignal(9);
+}
+
+// Tests the creation and assignment of dynamic properties
+void tst_qmllanguage::dynamicProperties()
+{
+ QmlComponent component(&engine, TEST_FILE("dynamicProperties.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ QCOMPARE(object->property("intProperty"), QVariant(10));
+ QCOMPARE(object->property("boolProperty"), QVariant(false));
+ QCOMPARE(object->property("doubleProperty"), QVariant(-10.1));
+ QCOMPARE(object->property("realProperty"), QVariant((qreal)-19.9));
+ QCOMPARE(object->property("stringProperty"), QVariant("Hello World!"));
+ QCOMPARE(object->property("urlProperty"), QVariant(TEST_FILE("main.qml")));
+ QCOMPARE(object->property("colorProperty"), QVariant(QColor("red")));
+ QCOMPARE(object->property("dateProperty"), QVariant(QDate(1945, 9, 2)));
+ QCOMPARE(object->property("varProperty"), QVariant("Hello World!"));
+ QCOMPARE(object->property("variantProperty"), QVariant(12));
+}
+
+// Test that nested types can use dynamic properties
+void tst_qmllanguage::dynamicPropertiesNested()
+{
+ QmlComponent component(&engine, TEST_FILE("dynamicPropertiesNested.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("super_a").toInt(), 11); // Overridden
+ QCOMPARE(object->property("super_c").toInt(), 14); // Inherited
+ QCOMPARE(object->property("a").toInt(), 13); // New
+ QCOMPARE(object->property("b").toInt(), 12); // New
+
+ delete object;
+}
+
+// Tests the creation and assignment to dynamic list properties
+void tst_qmllanguage::listProperties()
+{
+ QmlComponent component(&engine, TEST_FILE("listProperties.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test").toInt(), 2);
+}
+
+// Tests the creation and assignment of dynamic object properties
+// ### Not complete
+void tst_qmllanguage::dynamicObjectProperties()
+{
+ QmlComponent component(&engine, TEST_FILE("dynamicObjectProperties.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QVERIFY(object->property("objectProperty") == qVariantFromValue((QObject*)0));
+ QVERIFY(object->property("objectProperty2") != qVariantFromValue((QObject*)0));
+}
+
+// Tests the declaration of dynamic signals and slots
+void tst_qmllanguage::dynamicSignalsAndSlots()
+{
+ QTest::ignoreMessage(QtDebugMsg, "1921");
+
+ QmlComponent component(&engine, TEST_FILE("dynamicSignalsAndSlots.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ QVERIFY(object->metaObject()->indexOfMethod("signal1()") != -1);
+ QVERIFY(object->metaObject()->indexOfMethod("signal2()") != -1);
+ QVERIFY(object->metaObject()->indexOfMethod("slot1()") != -1);
+ QVERIFY(object->metaObject()->indexOfMethod("slot2()") != -1);
+
+ QCOMPARE(object->property("test").toInt(), 0);
+ QMetaObject::invokeMethod(object, "slot3", Qt::DirectConnection, Q_ARG(QVariant, QVariant(10)));
+ QCOMPARE(object->property("test").toInt(), 10);
+}
+
+void tst_qmllanguage::simpleBindings()
+{
+ QmlComponent component(&engine, TEST_FILE("simpleBindings.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ QCOMPARE(object->property("value1"), QVariant(10));
+ QCOMPARE(object->property("value2"), QVariant(10));
+ QCOMPARE(object->property("value3"), QVariant(21));
+ QCOMPARE(object->property("value4"), QVariant(10));
+ QCOMPARE(object->property("objectProperty"), QVariant::fromValue(object));
+}
+
+void tst_qmllanguage::autoComponentCreation()
+{
+ QmlComponent component(&engine, TEST_FILE("autoComponentCreation.qml"));
+ VERIFY_ERRORS(0);
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+ QVERIFY(object->componentProperty() != 0);
+ MyTypeObject *child = qobject_cast<MyTypeObject *>(object->componentProperty()->create());
+ QVERIFY(child != 0);
+ QCOMPARE(child->realProperty(), qreal(9));
+}
+
+void tst_qmllanguage::propertyValueSource()
+{
+ {
+ QmlComponent component(&engine, TEST_FILE("propertyValueSource.qml"));
+ VERIFY_ERRORS(0);
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QList<QObject *> valueSources;
+ QObjectList allChildren = object->findChildren<QObject*>();
+ foreach (QObject *child, allChildren) {
+ if (qobject_cast<QmlPropertyValueSource *>(child))
+ valueSources.append(child);
+ }
+
+ QCOMPARE(valueSources.count(), 1);
+ MyPropertyValueSource *valueSource =
+ qobject_cast<MyPropertyValueSource *>(valueSources.at(0));
+ QVERIFY(valueSource != 0);
+ QCOMPARE(valueSource->prop.object(), object);
+ QCOMPARE(valueSource->prop.name(), QString(QLatin1String("intProperty")));
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("propertyValueSource.2.qml"));
+ VERIFY_ERRORS(0);
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QList<QObject *> valueSources;
+ QObjectList allChildren = object->findChildren<QObject*>();
+ foreach (QObject *child, allChildren) {
+ if (qobject_cast<QmlPropertyValueSource *>(child))
+ valueSources.append(child);
+ }
+
+ QCOMPARE(valueSources.count(), 1);
+ MyPropertyValueSource *valueSource =
+ qobject_cast<MyPropertyValueSource *>(valueSources.at(0));
+ QVERIFY(valueSource != 0);
+ QCOMPARE(valueSource->prop.object(), object);
+ QCOMPARE(valueSource->prop.name(), QString(QLatin1String("intProperty")));
+ }
+}
+
+void tst_qmllanguage::attachedProperties()
+{
+ QmlComponent component(&engine, TEST_FILE("attachedProperties.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ QObject *attached = qmlAttachedPropertiesObject<MyQmlObject>(object);
+ QVERIFY(attached != 0);
+ QCOMPARE(attached->property("value"), QVariant(10));
+ QCOMPARE(attached->property("value2"), QVariant(13));
+}
+
+// Tests non-static object properties
+void tst_qmllanguage::dynamicObjects()
+{
+ QmlComponent component(&engine, TEST_FILE("dynamicObject.1.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+}
+
+// Tests the registration of custom variant string converters
+void tst_qmllanguage::customVariantTypes()
+{
+ QmlComponent component(&engine, TEST_FILE("customVariantTypes.qml"));
+ VERIFY_ERRORS(0);
+ MyQmlObject *object = qobject_cast<MyQmlObject*>(component.create());
+ QVERIFY(object != 0);
+ QCOMPARE(object->customType().a, 10);
+}
+
+void tst_qmllanguage::valueTypes()
+{
+ QmlComponent component(&engine, TEST_FILE("valueTypes.qml"));
+ VERIFY_ERRORS(0);
+
+ QString message = QLatin1String("QML MyTypeObject (") + component.url().toString() +
+ QLatin1String(":2:1) Binding loop detected for property \"rectProperty.width\"");
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(message));
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(message));
+
+ MyTypeObject *object = qobject_cast<MyTypeObject*>(component.create());
+ QVERIFY(object != 0);
+
+
+ QCOMPARE(object->rectProperty(), QRect(10, 11, 12, 13));
+ QCOMPARE(object->rectProperty2(), QRect(10, 11, 12, 13));
+ QCOMPARE(object->intProperty(), 10);
+ object->doAction();
+ QCOMPARE(object->rectProperty(), QRect(12, 11, 14, 13));
+ QCOMPARE(object->rectProperty2(), QRect(12, 11, 14, 13));
+ QCOMPARE(object->intProperty(), 12);
+
+ // ###
+#if 0
+ QmlMetaProperty p = QmlMetaProperty::createProperty(object, "rectProperty.x");
+ QCOMPARE(p.read(), QVariant(12));
+ p.write(13);
+ QCOMPARE(p.read(), QVariant(13));
+
+ quint32 r = QmlMetaPropertyPrivate::saveValueType(p.coreIndex(), p.valueTypeCoreIndex());
+ QmlMetaProperty p2;
+ QmlMetaPropertyPrivate::restore(p2, r, object);
+ QCOMPARE(p2.read(), QVariant(13));
+#endif
+}
+
+void tst_qmllanguage::cppnamespace()
+{
+ {
+ QmlComponent component(&engine, TEST_FILE("cppnamespace.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ delete object;
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("cppnamespace.2.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ delete object;
+ }
+}
+
+void tst_qmllanguage::aliasProperties()
+{
+ // Simple "int" alias
+ {
+ QmlComponent component(&engine, TEST_FILE("alias.1.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ // Read through alias
+ QCOMPARE(object->property("valueAlias").toInt(), 10);
+ object->setProperty("value", QVariant(13));
+ QCOMPARE(object->property("valueAlias").toInt(), 13);
+
+ // Write throught alias
+ object->setProperty("valueAlias", QVariant(19));
+ QCOMPARE(object->property("valueAlias").toInt(), 19);
+ QCOMPARE(object->property("value").toInt(), 19);
+
+ delete object;
+ }
+
+ // Complex object alias
+ {
+ QmlComponent component(&engine, TEST_FILE("alias.2.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ // Read through alias
+ MyQmlObject *v =
+ qvariant_cast<MyQmlObject *>(object->property("aliasObject"));
+ QVERIFY(v != 0);
+ QCOMPARE(v->value(), 10);
+
+ // Write through alias
+ MyQmlObject *v2 = new MyQmlObject();
+ v2->setParent(object);
+ object->setProperty("aliasObject", qVariantFromValue(v2));
+ MyQmlObject *v3 =
+ qvariant_cast<MyQmlObject *>(object->property("aliasObject"));
+ QVERIFY(v3 != 0);
+ QCOMPARE(v3, v2);
+
+ delete object;
+ }
+
+ // Nested aliases
+ {
+ QmlComponent component(&engine, TEST_FILE("alias.3.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("value").toInt(), 1892);
+ QCOMPARE(object->property("value2").toInt(), 1892);
+
+ object->setProperty("value", QVariant(1313));
+ QCOMPARE(object->property("value").toInt(), 1313);
+ QCOMPARE(object->property("value2").toInt(), 1313);
+
+ object->setProperty("value2", QVariant(8080));
+ QCOMPARE(object->property("value").toInt(), 8080);
+ QCOMPARE(object->property("value2").toInt(), 8080);
+
+ delete object;
+ }
+
+ // Enum aliases
+ {
+ QmlComponent component(&engine, TEST_FILE("alias.4.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("enumAlias").toInt(), 1);
+
+ delete object;
+ }
+
+ // Id aliases
+ {
+ QmlComponent component(&engine, TEST_FILE("alias.5.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QVariant v = object->property("otherAlias");
+ QCOMPARE(v.userType(), qMetaTypeId<MyQmlObject*>());
+ MyQmlObject *o = qvariant_cast<MyQmlObject*>(v);
+ QCOMPARE(o->value(), 10);
+
+ delete o;
+
+ v = object->property("otherAlias");
+ QCOMPARE(v.userType(), qMetaTypeId<MyQmlObject*>());
+ o = qvariant_cast<MyQmlObject*>(v);
+ QVERIFY(o == 0);
+
+ delete object;
+ }
+
+ // Nested aliases - this used to cause a crash
+ {
+ QmlComponent component(&engine, TEST_FILE("alias.6.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("a").toInt(), 1923);
+ }
+
+ // Ptr Alias Cleanup - check that aliases to ptr types return 0
+ // if the object aliased to is removed
+ {
+ QmlComponent component(&engine, TEST_FILE("alias.7.qml"));
+ VERIFY_ERRORS(0);
+
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QObject *object1 = qvariant_cast<QObject *>(object->property("object"));
+ QVERIFY(object1 != 0);
+ QObject *object2 = qvariant_cast<QObject *>(object1->property("object"));
+ QVERIFY(object2 != 0);
+
+ QObject *alias = qvariant_cast<QObject *>(object->property("aliasedObject"));
+ QVERIFY(alias == object2);
+
+ delete object1;
+
+ QObject *alias2 = object; // "Random" start value
+ int status = -1;
+ void *a[] = { &alias2, 0, &status };
+ QMetaObject::metacall(object, QMetaObject::ReadProperty,
+ object->metaObject()->indexOfProperty("aliasedObject"), a);
+ QVERIFY(alias2 == 0);
+ }
+
+ // Simple composite type
+ {
+ QmlComponent component(&engine, TEST_FILE("alias.8.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("value").toInt(), 10);
+
+ delete object;
+ }
+
+ // Complex composite type
+ {
+ QmlComponent component(&engine, TEST_FILE("alias.9.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("value").toInt(), 10);
+
+ delete object;
+ }
+}
+
+// Test that the root element in a composite type can be a Component
+void tst_qmllanguage::componentCompositeType()
+{
+ QmlComponent component(&engine, TEST_FILE("componentCompositeType.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+}
+
+class TestType : public QObject {
+ Q_OBJECT
+public:
+ TestType(QObject *p=0) : QObject(p) {}
+};
+
+class TestType2 : public QObject {
+ Q_OBJECT
+public:
+ TestType2(QObject *p=0) : QObject(p) {}
+};
+
+void tst_qmllanguage::i18n_data()
+{
+ QTest::addColumn<QString>("file");
+ QTest::addColumn<QString>("stringProperty");
+ 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()
+{
+ QFETCH(QString, file);
+ QFETCH(QString, stringProperty);
+ QmlComponent component(&engine, TEST_FILE(file));
+ VERIFY_ERRORS(0);
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+ QCOMPARE(object->stringProperty(), stringProperty);
+
+ delete object;
+}
+
+// Check that the Component::onCompleted attached property works
+void tst_qmllanguage::onCompleted()
+{
+ QmlComponent component(&engine, TEST_FILE("onCompleted.qml"));
+ VERIFY_ERRORS(0);
+ QTest::ignoreMessage(QtDebugMsg, "Completed 6 10");
+ QTest::ignoreMessage(QtDebugMsg, "Completed 6 10");
+ QTest::ignoreMessage(QtDebugMsg, "Completed 10 11");
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+}
+
+// Check that assignments to QmlScriptString properties work
+void tst_qmllanguage::scriptString()
+{
+ QmlComponent component(&engine, TEST_FILE("scriptString.qml"));
+ VERIFY_ERRORS(0);
+
+ MyTypeObject *object = qobject_cast<MyTypeObject*>(component.create());
+ QVERIFY(object != 0);
+ QCOMPARE(object->scriptProperty().script(), QString("foo + bar"));
+ QCOMPARE(object->scriptProperty().scopeObject(), object);
+ QCOMPARE(object->scriptProperty().context(), qmlContext(object));
+
+ QVERIFY(object->grouped() != 0);
+ QCOMPARE(object->grouped()->script().script(), QString("console.log(1921)"));
+ QCOMPARE(object->grouped()->script().scopeObject(), object);
+ QCOMPARE(object->grouped()->script().context(), qmlContext(object));
+}
+
+// Check that default property assignments are correctly spliced into explicit
+// property assignments
+void tst_qmllanguage::defaultPropertyListOrder()
+{
+ QmlComponent component(&engine, TEST_FILE("defaultPropertyListOrder.qml"));
+ VERIFY_ERRORS(0);
+
+ MyContainer *container = qobject_cast<MyContainer *>(component.create());
+ QVERIFY(container != 0);
+
+ QCOMPARE(container->children()->count(), 6);
+ QCOMPARE(container->children()->at(0)->property("index"), QVariant(0));
+ QCOMPARE(container->children()->at(1)->property("index"), QVariant(1));
+ QCOMPARE(container->children()->at(2)->property("index"), QVariant(2));
+ QCOMPARE(container->children()->at(3)->property("index"), QVariant(3));
+ QCOMPARE(container->children()->at(4)->property("index"), QVariant(4));
+ QCOMPARE(container->children()->at(5)->property("index"), QVariant(5));
+}
+
+void tst_qmllanguage::declaredPropertyValues()
+{
+ QmlComponent component(&engine, TEST_FILE("declaredPropertyValues.qml"));
+ QEXPECT_FAIL("", "QTBUG-7860", Abort);
+ VERIFY_ERRORS(0);
+}
+
+// Check that first child of qml is of given type. Empty type insists on error.
+void tst_qmllanguage::testType(const QString& qml, const QString& type)
+{
+ QmlComponent component(&engine);
+ component.setData(qml.toUtf8(), TEST_FILE("empty.qml")); // just a file for relative local imports
+
+ QTRY_VERIFY(!component.isLoading());
+
+ if (type.isEmpty()) {
+ QVERIFY(component.isError());
+ } else {
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ QCOMPARE(QString(object->metaObject()->className()), type);
+ }
+}
+
+QML_DECLARE_TYPE(TestType)
+QML_DECLARE_TYPE(TestType2)
+
+QML_DEFINE_TYPE(com.nokia.Test, 0, 0, TestTP, TestType)
+QML_DEFINE_TYPE(com.nokia.Test, 1, 0, Test, TestType)
+QML_DEFINE_TYPE(com.nokia.Test, 1, 5, Test, TestType)
+QML_DEFINE_TYPE(com.nokia.Test, 1, 8, Test, TestType2)
+QML_DEFINE_TYPE(com.nokia.Test, 1, 9, OldTest, TestType)
+QML_DEFINE_TYPE(com.nokia.Test, 1, 12, Test, TestType2)
+
+// Import tests (QT-558)
+
+void tst_qmllanguage::importsBuiltin_data()
+{
+ // QT-610
+
+ QTest::addColumn<QString>("qml");
+ QTest::addColumn<QString>("type");
+
+ // import built-ins
+ QTest::newRow("missing import")
+ << "Test {}"
+ << "";
+ QTest::newRow("not in version 0.0")
+ << "import com.nokia.Test 0.0\n"
+ "Test {}"
+ << "";
+ QTest::newRow("in version 0.0")
+ << "import com.nokia.Test 0.0\n"
+ "TestTP {}"
+ << "TestType";
+ QTest::newRow("qualified in version 0.0")
+ << "import com.nokia.Test 0.0 as T\n"
+ "T.TestTP {}"
+ << "TestType";
+ QTest::newRow("in version 1.0")
+ << "import com.nokia.Test 1.0\n"
+ "Test {}"
+ << "TestType";
+ QTest::newRow("qualified wrong")
+ << "import com.nokia.Test 1.0 as T\n" // QT-610
+ "Test {}"
+ << "";
+ QTest::newRow("qualified right")
+ << "import com.nokia.Test 1.0 as T\n"
+ "T.Test {}"
+ << "TestType";
+ QTest::newRow("qualified right but not in version 0.0")
+ << "import com.nokia.Test 0.0 as T\n"
+ "T.Test {}"
+ << "";
+ QTest::newRow("in version 1.1")
+ << "import com.nokia.Test 1.1\n"
+ "Test {}"
+ << "TestType";
+ QTest::newRow("in version 1.3")
+ << "import com.nokia.Test 1.3\n"
+ "Test {}"
+ << "TestType";
+ QTest::newRow("in version 1.5")
+ << "import com.nokia.Test 1.5\n"
+ "Test {}"
+ << "TestType";
+ QTest::newRow("changed in version 1.8")
+ << "import com.nokia.Test 1.8\n"
+ "Test {}"
+ << "TestType2";
+ QTest::newRow("in version 1.12")
+ << "import com.nokia.Test 1.12\n"
+ "Test {}"
+ << "TestType2";
+ QTest::newRow("old in version 1.9")
+ << "import com.nokia.Test 1.9\n"
+ "OldTest {}"
+ << "TestType";
+ QTest::newRow("old in version 1.11")
+ << "import com.nokia.Test 1.11\n"
+ "OldTest {}"
+ << "TestType";
+ QTest::newRow("multiversion 1")
+ << "import com.nokia.Test 1.11\n"
+ "import com.nokia.Test 1.12\n"
+ "Test {}"
+ << "TestType2";
+ QTest::newRow("multiversion 2")
+ << "import com.nokia.Test 1.11\n"
+ "import com.nokia.Test 1.12\n"
+ "OldTest {}"
+ << "TestType";
+ QTest::newRow("qualified multiversion 3")
+ << "import com.nokia.Test 1.0 as T0\n"
+ "import com.nokia.Test 1.8 as T8\n"
+ "T0.Test {}"
+ << "TestType";
+ QTest::newRow("qualified multiversion 4")
+ << "import com.nokia.Test 1.0 as T0\n"
+ "import com.nokia.Test 1.8 as T8\n"
+ "T8.Test {}"
+ << "TestType2";
+}
+
+void tst_qmllanguage::importsBuiltin()
+{
+ QFETCH(QString, qml);
+ QFETCH(QString, type);
+ testType(qml,type);
+}
+
+void tst_qmllanguage::importsLocal_data()
+{
+ QTest::addColumn<QString>("qml");
+ QTest::addColumn<QString>("type");
+
+ // import locals
+ QTest::newRow("local import")
+ << "import \"subdir\"\n" // QT-613
+ "Test {}"
+ << "QmlGraphicsRectangle";
+ QTest::newRow("local import second")
+ << "import Qt 4.6\nimport \"subdir\"\n"
+ "Test {}"
+ << "QmlGraphicsRectangle";
+ QTest::newRow("local import subsubdir")
+ << "import Qt 4.6\nimport \"subdir/subsubdir\"\n"
+ "SubTest {}"
+ << "QmlGraphicsRectangle";
+ QTest::newRow("local import QTBUG-7721 A")
+ << "subdir.Test {}" // no longer allowed (QTBUG-7721)
+ << "";
+ QTest::newRow("local import QTBUG-7721 B")
+ << "import \"subdir\" as X\n"
+ "X.subsubdir.SubTest {}" // no longer allowed (QTBUG-7721)
+ << "";
+ QTest::newRow("local import as")
+ << "import \"subdir\" as T\n"
+ "T.Test {}"
+ << "QmlGraphicsRectangle";
+ QTest::newRow("wrong local import as")
+ << "import \"subdir\" as T\n"
+ "Test {}"
+ << "";
+ QTest::newRow("library precedence over local import")
+ << "import \"subdir\"\n"
+ "import com.nokia.Test 1.0\n"
+ "Test {}"
+ << "TestType";
+}
+
+void tst_qmllanguage::importsLocal()
+{
+ QFETCH(QString, qml);
+ QFETCH(QString, type);
+ testType(qml,type);
+}
+
+void tst_qmllanguage::importsRemote_data()
+{
+ QTest::addColumn<QString>("qml");
+ QTest::addColumn<QString>("type");
+
+ QString serverdir = "http://127.0.0.1:14445/qtest/declarative/qmllanguage";
+
+ QTest::newRow("remote import") << "import \""+serverdir+"\"\nTest {}" << "QmlGraphicsRectangle";
+ QTest::newRow("remote import with subdir") << "import \""+serverdir+"\"\nTestSubDir {}" << "QmlGraphicsText";
+ QTest::newRow("remote import with local") << "import \""+serverdir+"\"\nTestLocal {}" << "QmlGraphicsImage";
+}
+
+#include "testhttpserver.h"
+
+void tst_qmllanguage::importsRemote()
+{
+ QFETCH(QString, qml);
+ QFETCH(QString, type);
+
+ TestHTTPServer server(14445);
+ server.serveDirectory(SRCDIR);
+
+ testType(qml,type);
+}
+
+void tst_qmllanguage::importsInstalled_data()
+{
+ // QT-610
+
+ QTest::addColumn<QString>("qml");
+ QTest::addColumn<QString>("type");
+
+ // import installed
+ QTest::newRow("installed import 0")
+ << "import com.nokia.installedtest 0.0\n"
+ "InstalledTestTP {}"
+ << "QmlGraphicsRectangle";
+ QTest::newRow("installed import 0 as TP")
+ << "import com.nokia.installedtest 0.0 as TP\n"
+ "TP.InstalledTestTP {}"
+ << "QmlGraphicsRectangle";
+ QTest::newRow("installed import 1")
+ << "import com.nokia.installedtest 1.0\n"
+ "InstalledTest {}"
+ << "QmlGraphicsRectangle";
+ QTest::newRow("installed import 2")
+ << "import com.nokia.installedtest 1.3\n"
+ "InstalledTest {}"
+ << "QmlGraphicsRectangle";
+ QTest::newRow("installed import 3")
+ << "import com.nokia.installedtest 1.4\n"
+ "InstalledTest {}"
+ << "QmlGraphicsText";
+ QTest::newRow("installed import 4")
+ << "import com.nokia.installedtest 1.10\n"
+ "InstalledTest {}"
+ << "QmlGraphicsText";
+ QTest::newRow("installed import visibility") // QT-614
+ << "import com.nokia.installedtest 1.4\n"
+ "PrivateType {}"
+ << "";
+}
+
+void tst_qmllanguage::importsInstalled()
+{
+ QFETCH(QString, qml);
+ QFETCH(QString, type);
+ testType(qml,type);
+}
+
+
+void tst_qmllanguage::importsOrder_data()
+{
+ QTest::addColumn<QString>("qml");
+ QTest::addColumn<QString>("type");
+
+ QTest::newRow("installed import overrides 1") <<
+ "import com.nokia.installedtest 1.0\n"
+ "import com.nokia.installedtest 1.4\n"
+ "InstalledTest {}"
+ << "QmlGraphicsText";
+ QTest::newRow("installed import overrides 2") <<
+ "import com.nokia.installedtest 1.4\n"
+ "import com.nokia.installedtest 1.0\n"
+ "InstalledTest {}"
+ << "QmlGraphicsRectangle";
+ QTest::newRow("installed import re-overrides 1") <<
+ "import com.nokia.installedtest 1.4\n"
+ "import com.nokia.installedtest 1.0\n"
+ "import com.nokia.installedtest 1.4\n"
+ "InstalledTest {}"
+ << "QmlGraphicsText";
+ QTest::newRow("installed import re-overrides 2") <<
+ "import com.nokia.installedtest 1.4\n"
+ "import com.nokia.installedtest 1.0\n"
+ "import com.nokia.installedtest 1.4\n"
+ "import com.nokia.installedtest 1.0\n"
+ "InstalledTest {}"
+ << "QmlGraphicsRectangle";
+
+ QTest::newRow("installed import versus builtin 1") <<
+ "import com.nokia.installedtest 1.5\n"
+ "import Qt 4.6\n"
+ "Rectangle {}"
+ << "QmlGraphicsRectangle";
+ QTest::newRow("installed import versus builtin 2") <<
+ "import Qt 4.6\n"
+ "import com.nokia.installedtest 1.5\n"
+ "Rectangle {}"
+ << "QmlGraphicsText";
+ QTest::newRow("namespaces cannot be overridden by types 1") <<
+ "import Qt 4.6 as Rectangle\n"
+ "import com.nokia.installedtest 1.5\n"
+ "Rectangle {}"
+ << "";
+ QTest::newRow("namespaces cannot be overridden by types 2") <<
+ "import Qt 4.6 as Rectangle\n"
+ "import com.nokia.installedtest 1.5\n"
+ "Rectangle.Image {}"
+ << "QmlGraphicsImage";
+}
+
+void tst_qmllanguage::importsOrder()
+{
+ QFETCH(QString, qml);
+ QFETCH(QString, type);
+ testType(qml,type);
+}
+
+void tst_qmllanguage::qmlAttachedPropertiesObjectMethod()
+{
+ QObject object;
+
+ QCOMPARE(qmlAttachedPropertiesObject<MyQmlObject>(&object, false), (QObject *)0);
+ QCOMPARE(qmlAttachedPropertiesObject<MyQmlObject>(&object, true), (QObject *)0);
+
+ {
+ QmlComponent component(&engine, TEST_FILE("qmlAttachedPropertiesObjectMethod.1.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(qmlAttachedPropertiesObject<MyQmlObject>(object, false), (QObject *)0);
+ QVERIFY(qmlAttachedPropertiesObject<MyQmlObject>(object, true) != 0);
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("qmlAttachedPropertiesObjectMethod.2.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QVERIFY(qmlAttachedPropertiesObject<MyQmlObject>(object, false) != 0);
+ QVERIFY(qmlAttachedPropertiesObject<MyQmlObject>(object, true) != 0);
+ }
+}
+
+void tst_qmllanguage::crash1()
+{
+ QmlComponent component(&engine);
+ component.setData("import Qt 4.6\nComponent {}", QUrl());
+}
+
+void tst_qmllanguage::crash2()
+{
+ QmlComponent component(&engine, TEST_FILE("crash2.qml"));
+}
+
+QTEST_MAIN(tst_qmllanguage)
+
+#include "tst_qmllanguage.moc"
diff --git a/tests/auto/declarative/qmllist/qmllist.pro b/tests/auto/declarative/qmllist/qmllist.pro
new file mode 100644
index 0000000..b2145ed
--- /dev/null
+++ b/tests/auto/declarative/qmllist/qmllist.pro
@@ -0,0 +1,5 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmllist.cpp
diff --git a/tests/auto/declarative/qmllist/tst_qmllist.cpp b/tests/auto/declarative/qmllist/tst_qmllist.cpp
new file mode 100644
index 0000000..c59ff1d
--- /dev/null
+++ b/tests/auto/declarative/qmllist/tst_qmllist.cpp
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/qml.h>
+#include <QtDeclarative/qmlprivate.h>
+
+class tst_QmlList : public QObject
+{
+ Q_OBJECT
+public:
+ tst_QmlList() {}
+
+private slots:
+ void interface();
+};
+
+void tst_QmlList::interface()
+{
+ QmlConcreteList<QObject*> list;
+ QObject *obj = new QObject;
+ obj->setObjectName("foo");
+ list.append(obj);
+ QVERIFY(list.count() == 1);
+ QCOMPARE(list.at(0), obj);
+
+ QmlPrivate::ListInterface *li = (QmlPrivate::ListInterface*)&list;
+
+ void *ptr[1];
+ li->at(0, ptr);
+ QVERIFY(li->count() == 1);
+ QCOMPARE(ptr[0], obj);
+
+ li->removeAt(0);
+ QVERIFY(li->count() == 0);
+ QVERIFY(list.count() == 0);
+}
+
+QTEST_MAIN(tst_QmlList)
+
+#include "tst_qmllist.moc"
diff --git a/tests/auto/declarative/qmllistaccessor/qmllistaccessor.pro b/tests/auto/declarative/qmllistaccessor/qmllistaccessor.pro
new file mode 100644
index 0000000..ce2915e
--- /dev/null
+++ b/tests/auto/declarative/qmllistaccessor/qmllistaccessor.pro
@@ -0,0 +1,5 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmllistaccessor.cpp
diff --git a/tests/auto/declarative/qmllistaccessor/tst_qmllistaccessor.cpp b/tests/auto/declarative/qmllistaccessor/tst_qmllistaccessor.cpp
new file mode 100644
index 0000000..ddf9a07
--- /dev/null
+++ b/tests/auto/declarative/qmllistaccessor/tst_qmllistaccessor.cpp
@@ -0,0 +1,452 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/qml.h>
+#include <private/qmllistaccessor_p.h>
+#include <QDebug>
+
+class tst_QmlListAccessor : public QObject
+{
+ Q_OBJECT
+public:
+ tst_QmlListAccessor() {}
+
+private slots:
+ void invalid();
+ void qmllist();
+ void qlist();
+ void qstringlist();
+ void qvariantlist();
+ void qobject();
+ void instance();
+ void integer();
+};
+
+void tst_QmlListAccessor::invalid()
+{
+ QmlListAccessor accessor;
+
+ QCOMPARE(accessor.list(), QVariant());
+ QVERIFY(!accessor.isValid());
+ QCOMPARE(accessor.type(), QmlListAccessor::Invalid);
+
+ QCOMPARE(accessor.count(), 0);
+ QVERIFY(!accessor.append(QVariant(10)));
+ QVERIFY(!accessor.insert(0, QVariant(10)));
+ QVERIFY(!accessor.removeAt(0));
+ QVERIFY(!accessor.clear());
+
+ accessor.setList(QVariant());
+
+ QCOMPARE(accessor.list(), QVariant());
+ QVERIFY(!accessor.isValid());
+ QCOMPARE(accessor.type(), QmlListAccessor::Invalid);
+
+ QCOMPARE(accessor.count(), 0);
+ QVERIFY(!accessor.append(QVariant(10)));
+ QVERIFY(!accessor.insert(0, QVariant(10)));
+ QVERIFY(!accessor.removeAt(0));
+ QVERIFY(!accessor.clear());
+}
+
+void tst_QmlListAccessor::qmllist()
+{
+ QmlConcreteList<QObject*> list;
+ QObject *obj = new QObject(this);
+ QObject *obj2 = new QObject(this);
+ QObject *obj3 = new QObject(this);
+
+ list.append(obj);
+ QVERIFY(list.count() == 1);
+ QCOMPARE(list.at(0), obj);
+
+ QmlListAccessor accessor;
+ accessor.setList(qVariantFromValue((QmlList<QObject*>*)&list));
+ QCOMPARE(accessor.list(), qVariantFromValue((QmlList<QObject*>*)&list));
+
+ // type
+ QCOMPARE(accessor.type(), QmlListAccessor::QmlList);
+
+ // isValid
+ QVERIFY(accessor.isValid());
+
+ // count
+ QCOMPARE(accessor.count(), 1);
+
+ // at
+ QCOMPARE(qvariant_cast<QObject*>(accessor.at(0)), obj);
+
+ // append
+ accessor.append(qVariantFromValue(obj2));
+ QVERIFY(accessor.isValid());
+ QCOMPARE(accessor.count(), 2);
+ QCOMPARE(qvariant_cast<QObject*>(accessor.at(1)), obj2);
+ QCOMPARE(list.count(), 2);
+ QCOMPARE(list.at(0), obj);
+ QCOMPARE(list.at(1), obj2);
+
+ // insert
+ accessor.insert(1, qVariantFromValue(obj3));
+ QVERIFY(accessor.isValid());
+ QCOMPARE(accessor.count(), 3);
+ QCOMPARE(qvariant_cast<QObject*>(accessor.at(1)), obj3);
+ QCOMPARE(list.count(), 3);
+ QCOMPARE(list.at(0), obj);
+ QCOMPARE(list.at(1), obj3);
+ QCOMPARE(list.at(2), obj2);
+
+ // removeAt
+ accessor.removeAt(1);
+ QVERIFY(accessor.isValid());
+ QCOMPARE(accessor.count(), 2);
+ QCOMPARE(qvariant_cast<QObject*>(accessor.at(1)), obj2);
+ QCOMPARE(list.count(), 2);
+ QCOMPARE(list.at(0), obj);
+ QCOMPARE(list.at(1), obj2);
+
+ // clear
+ accessor.clear();
+ QVERIFY(accessor.isValid());
+ QCOMPARE(accessor.count(), 0);
+ QCOMPARE(list.count(), 0);
+}
+
+void tst_QmlListAccessor::qlist()
+{
+ QList<QObject*> list;
+ QObject *obj = new QObject(this);
+ QObject *obj2 = new QObject(this);
+ QObject *obj3 = new QObject(this);
+
+ list.append(obj);
+ QVERIFY(list.count() == 1);
+ QCOMPARE(list.at(0), obj);
+
+ QmlListAccessor accessor;
+ accessor.setList(qVariantFromValue((QList<QObject*>*)&list));
+ QCOMPARE(accessor.list(), qVariantFromValue((QList<QObject*>*)&list));
+
+ // type
+ QCOMPARE(accessor.type(), QmlListAccessor::QListPtr);
+
+ // isValid
+ QVERIFY(accessor.isValid());
+
+ // count
+ QCOMPARE(accessor.count(), 1);
+
+ // at
+ QCOMPARE(qvariant_cast<QObject*>(accessor.at(0)), obj);
+
+ // append
+ accessor.append(qVariantFromValue(obj2));
+ QVERIFY(accessor.isValid());
+ QCOMPARE(accessor.count(), 2);
+ QCOMPARE(qvariant_cast<QObject*>(accessor.at(1)), obj2);
+ QCOMPARE(list.count(), 2);
+ QCOMPARE(list.at(0), obj);
+ QCOMPARE(list.at(1), obj2);
+
+ // insert
+ accessor.insert(1, qVariantFromValue(obj3));
+ QVERIFY(accessor.isValid());
+ QCOMPARE(accessor.count(), 3);
+ QCOMPARE(qvariant_cast<QObject*>(accessor.at(1)), obj3);
+ QCOMPARE(list.count(), 3);
+ QCOMPARE(list.at(0), obj);
+ QCOMPARE(list.at(1), obj3);
+ QCOMPARE(list.at(2), obj2);
+
+ // removeAt
+ accessor.removeAt(1);
+ QVERIFY(accessor.isValid());
+ QCOMPARE(accessor.count(), 2);
+ QCOMPARE(qvariant_cast<QObject*>(accessor.at(1)), obj2);
+ QCOMPARE(list.count(), 2);
+ QCOMPARE(list.at(0), obj);
+ QCOMPARE(list.at(1), obj2);
+
+ // clear
+ accessor.clear();
+ QVERIFY(accessor.isValid());
+ QCOMPARE(accessor.count(), 0);
+ QCOMPARE(list.count(), 0);
+}
+
+void tst_QmlListAccessor::qstringlist()
+{
+ QStringList list;
+ list.append(QLatin1String("Item1"));
+ list.append(QLatin1String("Item2"));
+ QVERIFY(list.count() == 2);
+
+ QmlListAccessor accessor;
+ accessor.setList(list);
+
+ // type
+ QCOMPARE(accessor.type(), QmlListAccessor::StringList);
+
+ // isValid
+ QVERIFY(accessor.isValid());
+
+ // count
+ QVERIFY(accessor.count() == 2);
+
+ // at
+ QCOMPARE(qvariant_cast<QString>(accessor.at(0)), QLatin1String("Item1"));
+ QCOMPARE(qvariant_cast<QString>(accessor.at(1)), QLatin1String("Item2"));
+
+ // append
+ QVERIFY(!accessor.append(QVariant("Item3")));
+ QVERIFY(accessor.isValid());
+ QVERIFY(accessor.count() == 2);
+ QCOMPARE(qvariant_cast<QString>(accessor.at(0)), QLatin1String("Item1"));
+ QCOMPARE(qvariant_cast<QString>(accessor.at(1)), QLatin1String("Item2"));
+
+ // insert
+ QVERIFY(!accessor.insert(1, QVariant("MiddleItem")));
+ QVERIFY(accessor.isValid());
+ QVERIFY(accessor.count() == 2);
+ QCOMPARE(qvariant_cast<QString>(accessor.at(0)), QLatin1String("Item1"));
+ QCOMPARE(qvariant_cast<QString>(accessor.at(1)), QLatin1String("Item2"));
+
+ // removeAt
+ QVERIFY(!accessor.removeAt(1));
+ QVERIFY(accessor.isValid());
+ QVERIFY(accessor.count() == 2);
+ QCOMPARE(qvariant_cast<QString>(accessor.at(0)), QLatin1String("Item1"));
+ QCOMPARE(qvariant_cast<QString>(accessor.at(1)), QLatin1String("Item2"));
+
+ // clear
+ QVERIFY(!accessor.clear());
+ QVERIFY(accessor.isValid());
+ QVERIFY(accessor.count() == 2);
+ QCOMPARE(qvariant_cast<QString>(accessor.at(0)), QLatin1String("Item1"));
+ QCOMPARE(qvariant_cast<QString>(accessor.at(1)), QLatin1String("Item2"));
+}
+
+void tst_QmlListAccessor::qvariantlist()
+{
+ QVariantList list;
+ list.append(QLatin1String("Item1"));
+ list.append(QLatin1String("Item2"));
+ QVERIFY(list.count() == 2);
+
+ QmlListAccessor accessor;
+ accessor.setList(list);
+
+ // type
+ QCOMPARE(accessor.type(), QmlListAccessor::VariantList);
+
+ // isValid
+ QVERIFY(accessor.isValid());
+
+ // count
+ QVERIFY(accessor.count() == 2);
+
+ // at
+ QCOMPARE(qvariant_cast<QString>(accessor.at(0)), QLatin1String("Item1"));
+ QCOMPARE(qvariant_cast<QString>(accessor.at(1)), QLatin1String("Item2"));
+
+ // append
+ QVERIFY(!accessor.append(QVariant("Item3")));
+ QVERIFY(accessor.isValid());
+ QVERIFY(accessor.count() == 2);
+ QCOMPARE(qvariant_cast<QString>(accessor.at(0)), QLatin1String("Item1"));
+ QCOMPARE(qvariant_cast<QString>(accessor.at(1)), QLatin1String("Item2"));
+
+ // insert
+ QVERIFY(!accessor.insert(1, QVariant("MiddleItem")));
+ QVERIFY(accessor.isValid());
+ QVERIFY(accessor.count() == 2);
+ QCOMPARE(qvariant_cast<QString>(accessor.at(0)), QLatin1String("Item1"));
+ QCOMPARE(qvariant_cast<QString>(accessor.at(1)), QLatin1String("Item2"));
+
+ // removeAt
+ QVERIFY(!accessor.removeAt(1));
+ QVERIFY(accessor.isValid());
+ QVERIFY(accessor.count() == 2);
+ QCOMPARE(qvariant_cast<QString>(accessor.at(0)), QLatin1String("Item1"));
+ QCOMPARE(qvariant_cast<QString>(accessor.at(1)), QLatin1String("Item2"));
+
+ // clear
+ QVERIFY(!accessor.clear());
+ QVERIFY(accessor.isValid());
+ QVERIFY(accessor.count() == 2);
+ QCOMPARE(qvariant_cast<QString>(accessor.at(0)), QLatin1String("Item1"));
+ QCOMPARE(qvariant_cast<QString>(accessor.at(1)), QLatin1String("Item2"));
+}
+
+void tst_QmlListAccessor::qobject()
+{
+ QObject *obj = new QObject(this);
+
+ QmlListAccessor accessor;
+ accessor.setList(qVariantFromValue(obj));
+
+ // type
+ QCOMPARE(accessor.type(), QmlListAccessor::Instance);
+
+ // isValid
+ QVERIFY(accessor.isValid());
+
+ // count
+ QVERIFY(accessor.count() == 1);
+
+ // at
+ QCOMPARE(accessor.at(0), qVariantFromValue(obj));
+
+ // append
+ QVERIFY(!accessor.append(qVariantFromValue((QObject *)0)));
+ QVERIFY(accessor.isValid());
+ QVERIFY(accessor.count() == 1);
+ QCOMPARE(accessor.at(0), qVariantFromValue(obj));
+
+ // insert
+ QVERIFY(!accessor.insert(0, qVariantFromValue((QObject *)0)));
+ QVERIFY(accessor.isValid());
+ QVERIFY(accessor.count() == 1);
+ QCOMPARE(accessor.at(0), qVariantFromValue(obj));
+
+ // removeAt
+ QVERIFY(!accessor.removeAt(0));
+ QVERIFY(accessor.isValid());
+ QVERIFY(accessor.count() == 1);
+ QCOMPARE(accessor.at(0), qVariantFromValue(obj));
+
+ // clear
+ QVERIFY(!accessor.clear());
+ QVERIFY(accessor.isValid());
+ QVERIFY(accessor.count() == 1);
+ QCOMPARE(accessor.at(0), qVariantFromValue(obj));
+}
+
+void tst_QmlListAccessor::instance()
+{
+ QRect r;
+
+ QmlListAccessor accessor;
+ accessor.setList(r);
+
+ // type
+ QCOMPARE(accessor.type(), QmlListAccessor::Instance);
+
+ // isValid
+ QVERIFY(accessor.isValid());
+
+ // count
+ QVERIFY(accessor.count() == 1);
+
+ // at
+ QCOMPARE(accessor.at(0), qVariantFromValue(r));
+
+ // append
+ QVERIFY(!accessor.append(qVariantFromValue(r)));
+ QVERIFY(accessor.isValid());
+ QVERIFY(accessor.count() == 1);
+ QCOMPARE(accessor.at(0), qVariantFromValue(r));
+
+ // insert
+ QVERIFY(!accessor.insert(0, qVariantFromValue(r)));
+ QVERIFY(accessor.isValid());
+ QVERIFY(accessor.count() == 1);
+ QCOMPARE(accessor.at(0), qVariantFromValue(r));
+
+ // removeAt
+ QVERIFY(!accessor.removeAt(0));
+ QVERIFY(accessor.isValid());
+ QVERIFY(accessor.count() == 1);
+ QCOMPARE(accessor.at(0), qVariantFromValue(r));
+
+ // clear
+ QVERIFY(!accessor.clear());
+ QVERIFY(accessor.isValid());
+ QVERIFY(accessor.count() == 1);
+ QCOMPARE(accessor.at(0), qVariantFromValue(r));
+}
+
+void tst_QmlListAccessor::integer()
+{
+ int r = 13;
+
+ QmlListAccessor accessor;
+ accessor.setList(r);
+
+ // type
+ QCOMPARE(accessor.type(), QmlListAccessor::Integer);
+
+ // isValid
+ QVERIFY(accessor.isValid());
+
+ // count
+ QVERIFY(accessor.count() == 13);
+
+ // at
+ QCOMPARE(accessor.at(4), qVariantFromValue(4));
+
+ // append
+ QVERIFY(!accessor.append(qVariantFromValue(r)));
+ QVERIFY(accessor.isValid());
+ QVERIFY(accessor.count() == 13);
+ QCOMPARE(accessor.at(4), qVariantFromValue(4));
+
+ // insert
+ QVERIFY(!accessor.insert(0, qVariantFromValue(r)));
+ QVERIFY(accessor.isValid());
+ QVERIFY(accessor.count() == 13);
+ QCOMPARE(accessor.at(4), qVariantFromValue(4));
+
+ // removeAt
+ QVERIFY(!accessor.removeAt(0));
+ QVERIFY(accessor.isValid());
+ QVERIFY(accessor.count() == 13);
+ QCOMPARE(accessor.at(4), qVariantFromValue(4));
+
+ // clear
+ QVERIFY(!accessor.clear());
+ QVERIFY(accessor.isValid());
+ QVERIFY(accessor.count() == 13);
+ QCOMPARE(accessor.at(4), qVariantFromValue(4));
+}
+
+QTEST_MAIN(tst_QmlListAccessor)
+
+#include "tst_qmllistaccessor.moc"
diff --git a/tests/auto/declarative/qmllistmodel/qmllistmodel.pro b/tests/auto/declarative/qmllistmodel/qmllistmodel.pro
new file mode 100644
index 0000000..60b0c4b
--- /dev/null
+++ b/tests/auto/declarative/qmllistmodel/qmllistmodel.pro
@@ -0,0 +1,6 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+QT += script
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmllistmodel.cpp
diff --git a/tests/auto/declarative/qmllistmodel/tst_qmllistmodel.cpp b/tests/auto/declarative/qmllistmodel/tst_qmllistmodel.cpp
new file mode 100644
index 0000000..9d072dd
--- /dev/null
+++ b/tests/auto/declarative/qmllistmodel/tst_qmllistmodel.cpp
@@ -0,0 +1,283 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/private/qmllistmodel_p.h>
+#include <QtDeclarative/private/qmlexpression_p.h>
+#include <QmlComponent>
+#include <QDebug>
+
+class tst_QmlListModel : public QObject
+{
+ Q_OBJECT
+public:
+ tst_QmlListModel() {}
+
+private slots:
+ void static_i18n();
+ void static_nestedElements();
+ void static_nestedElements_data();
+ void dynamic_data();
+ void dynamic();
+ void error_data();
+ void error();
+};
+
+void tst_QmlListModel::static_i18n()
+{
+ QString expect = QString::fromUtf8("na\303\257ve");
+ QString componentStr = "import Qt 4.6\nListModel { ListElement { prop1: \""+expect+"\" } }";
+ QmlEngine engine;
+ QmlComponent component(&engine);
+ component.setData(componentStr.toUtf8(), QUrl::fromLocalFile(""));
+ QmlListModel *obj = qobject_cast<QmlListModel*>(component.create());
+ QVERIFY(obj != 0);
+ QString prop = obj->get(0).property(QLatin1String("prop1")).toString();
+ QCOMPARE(prop,expect);
+ delete obj;
+}
+
+void tst_QmlListModel::static_nestedElements()
+{
+ QFETCH(int, elementCount);
+
+ QStringList elements;
+ for (int i=0; i<elementCount; i++)
+ elements.append("ListElement { a: 1; b: 2 }");
+ QString elementsStr = elements.join(",\n") + "\n";
+
+ QString componentStr =
+ "import Qt 4.6\n"
+ "ListModel {\n"
+ " ListElement {\n"
+ " attributes: [\n";
+ componentStr += elementsStr.toUtf8().constData();
+ componentStr +=
+ " ]\n"
+ " }\n"
+ "}";
+
+ QmlEngine engine;
+ QmlComponent component(&engine);
+ component.setData(componentStr.toUtf8(), QUrl::fromLocalFile(""));
+
+ QmlListModel *obj = qobject_cast<QmlListModel*>(component.create());
+ QVERIFY(obj != 0);
+
+ QScriptValue prop = obj->get(0).property(QLatin1String("attributes")).property(QLatin1String("count"));
+ QVERIFY(prop.isNumber());
+ QCOMPARE(prop.toInt32(), qint32(elementCount));
+
+ delete obj;
+}
+
+void tst_QmlListModel::static_nestedElements_data()
+{
+ QTest::addColumn<int>("elementCount");
+
+ QTest::newRow("0 items") << 0;
+ QTest::newRow("1 item") << 1;
+ QTest::newRow("2 items") << 2;
+ QTest::newRow("many items") << 5;
+}
+
+void tst_QmlListModel::dynamic_data()
+{
+ QTest::addColumn<QString>("script");
+ QTest::addColumn<int>("result");
+ QTest::addColumn<QString>("warning");
+
+ // Simple flat model
+
+ QTest::newRow("count") << "count" << 0 << "";
+
+ QTest::newRow("get1") << "{get(0)}" << 0 << "QML ListModel (unknown location) get: index 0 out of range";
+ QTest::newRow("get2") << "{get(-1)}" << 0 << "QML ListModel (unknown location) get: index -1 out of range";
+
+ QTest::newRow("append1") << "{append({'foo':123});count}" << 1 << "";
+ QTest::newRow("append2") << "{append({'foo':123,'bar':456});count}" << 1 << "";
+ QTest::newRow("append3a") << "{append({'foo':123});append({'foo':456});get(0).foo}" << 123 << "";
+ QTest::newRow("append3b") << "{append({'foo':123});append({'foo':456});get(1).foo}" << 456 << "";
+ QTest::newRow("append4a") << "{append(123)}" << 0 << "QML ListModel (unknown location) append: value is not an object";
+ QTest::newRow("append4b") << "{append([1,2,3])}" << 0 << "QML ListModel (unknown location) append: value is not an object";
+
+ QTest::newRow("clear1") << "{append({'foo':456});clear();count}" << 0 << "";
+ QTest::newRow("clear2") << "{append({'foo':123});append({'foo':456});clear();count}" << 0 << "";
+ QTest::newRow("clear2") << "{append({'foo':123});clear();get(0).foo}" << 0 << "QML ListModel (unknown location) get: index 0 out of range";
+
+ QTest::newRow("remove1") << "{append({'foo':123});remove(0);count}" << 0 << "";
+ QTest::newRow("remove2a") << "{append({'foo':123});append({'foo':456});remove(0);count}" << 1 << "";
+ QTest::newRow("remove2b") << "{append({'foo':123});append({'foo':456});remove(0);get(0).foo}" << 456 << "";
+ QTest::newRow("remove2c") << "{append({'foo':123});append({'foo':456});remove(1);get(0).foo}" << 123 << "";
+ QTest::newRow("remove3") << "{append({'foo':123});remove(0);get(0).foo}" << 0 << "QML ListModel (unknown location) get: index 0 out of range";
+ QTest::newRow("remove3a") << "{append({'foo':123});remove(-1)}" << 0 << "QML ListModel (unknown location) remove: index -1 out of range";
+ QTest::newRow("remove4a") << "{remove(0)}" << 0 << "QML ListModel (unknown location) remove: index 0 out of range";
+ QTest::newRow("remove4b") << "{append({'foo':123});remove(0);remove(0)}" << 0 << "QML ListModel (unknown location) remove: index 0 out of range";
+ QTest::newRow("remove4c") << "{append({'foo':123});remove(1)}" << 0 << "QML ListModel (unknown location) remove: index 1 out of range";
+
+ QTest::newRow("insert1") << "{insert(0,{'foo':123});count}" << 1 << "";
+ QTest::newRow("insert2") << "{insert(1,{'foo':123});count}" << 0 << "QML ListModel (unknown location) insert: index 1 out of range";
+ QTest::newRow("insert3a") << "{append({'foo':123});insert(1,{'foo':456});count}" << 2 << "";
+ QTest::newRow("insert3b") << "{append({'foo':123});insert(1,{'foo':456});get(0).foo}" << 123 << "";
+ QTest::newRow("insert3c") << "{append({'foo':123});insert(1,{'foo':456});get(1).foo}" << 456 << "";
+ QTest::newRow("insert3d") << "{append({'foo':123});insert(0,{'foo':456});get(0).foo}" << 456 << "";
+ QTest::newRow("insert3e") << "{append({'foo':123});insert(0,{'foo':456});get(1).foo}" << 123 << "";
+ QTest::newRow("insert4") << "{append({'foo':123});insert(-1,{'foo':456})}" << 0 << "QML ListModel (unknown location) insert: index -1 out of range";
+ QTest::newRow("insert5a") << "{insert(0,123)}" << 0 << "QML ListModel (unknown location) insert: value is not an object";
+ QTest::newRow("insert5b") << "{insert(0,[1,2,3])}" << 0 << "QML ListModel (unknown location) insert: value is not an object";
+
+ QTest::newRow("set1") << "{append({'foo':123});set(0,{'foo':456});count}" << 1 << "";
+ QTest::newRow("set2") << "{append({'foo':123});set(0,{'foo':456});get(0).foo}" << 456 << "";
+ QTest::newRow("set3a") << "{append({'foo':123,'bar':456});set(0,{'foo':999});get(0).foo}" << 999 << "";
+ QTest::newRow("set3b") << "{append({'foo':123,'bar':456});set(0,{'foo':999});get(0).bar}" << 456 << "";
+ QTest::newRow("set4a") << "{set(0,{'foo':456})}" << 0 << "QML ListModel (unknown location) set: index 0 out of range";
+ QTest::newRow("set4c") << "{set(-1,{'foo':456})}" << 0 << "QML ListModel (unknown location) set: index -1 out of range";
+ QTest::newRow("set5a") << "{append({'foo':123,'bar':456});set(0,123)}" << 0 << "QML ListModel (unknown location) set: value is not an object";
+ QTest::newRow("set5b") << "{append({'foo':123,'bar':456});set(0,[1,2,3])}" << 0 << "QML ListModel (unknown location) set: value is not an object";
+ QTest::newRow("set6") << "{append({'foo':123});set(1,{'foo':456});count}" << 2 << "";
+
+ QTest::newRow("setprop1") << "{append({'foo':123});setProperty(0,'foo',456);count}" << 1 << "";
+ QTest::newRow("setprop2") << "{append({'foo':123});setProperty(0,'foo',456);get(0).foo}" << 456 << "";
+ QTest::newRow("setprop3a") << "{append({'foo':123,'bar':456});setProperty(0,'foo',999);get(0).foo}" << 999 << "";
+ QTest::newRow("setprop3b") << "{append({'foo':123,'bar':456});setProperty(0,'foo',999);get(0).bar}" << 456 << "";
+ QTest::newRow("setprop4a") << "{setProperty(0,'foo',456)}" << 0 << "QML ListModel (unknown location) set: index 0 out of range";
+ QTest::newRow("setprop4b") << "{setProperty(-1,'foo',456)}" << 0 << "QML ListModel (unknown location) set: index -1 out of range";
+ QTest::newRow("setprop4c") << "{append({'foo':123,'bar':456});setProperty(1,'foo',456)}" << 0 << "QML ListModel (unknown location) set: index 1 out of range";
+ QTest::newRow("setprop5") << "{append({'foo':123,'bar':456});append({'foo':111});setProperty(1,'bar',222);get(1).bar}" << 222 << "";
+
+ QTest::newRow("move1a") << "{append({'foo':123});append({'foo':456});move(0,1,1);count}" << 2 << "";
+ QTest::newRow("move1b") << "{append({'foo':123});append({'foo':456});move(0,1,1);get(0).foo}" << 456 << "";
+ QTest::newRow("move1c") << "{append({'foo':123});append({'foo':456});move(0,1,1);get(1).foo}" << 123 << "";
+ QTest::newRow("move1d") << "{append({'foo':123});append({'foo':456});move(1,0,1);get(0).foo}" << 456 << "";
+ QTest::newRow("move1e") << "{append({'foo':123});append({'foo':456});move(1,0,1);get(1).foo}" << 123 << "";
+ QTest::newRow("move2a") << "{append({'foo':123});append({'foo':456});append({'foo':789});move(0,1,2);count}" << 3 << "";
+ QTest::newRow("move2b") << "{append({'foo':123});append({'foo':456});append({'foo':789});move(0,1,2);get(0).foo}" << 789 << "";
+ QTest::newRow("move2c") << "{append({'foo':123});append({'foo':456});append({'foo':789});move(0,1,2);get(1).foo}" << 123 << "";
+ QTest::newRow("move2d") << "{append({'foo':123});append({'foo':456});append({'foo':789});move(0,1,2);get(2).foo}" << 456 << "";
+ QTest::newRow("move3a") << "{append({'foo':123});append({'foo':456});append({'foo':789});move(1,0,3)}" << 0 << "QML ListModel (unknown location) move: out of range";
+ QTest::newRow("move3b") << "{append({'foo':123});append({'foo':456});append({'foo':789});move(1,-1,1)}" << 0 << "QML ListModel (unknown location) move: out of range";
+ QTest::newRow("move3c") << "{append({'foo':123});append({'foo':456});append({'foo':789});move(1,0,-1)}" << 0 << "QML ListModel (unknown location) move: out of range";
+ QTest::newRow("move3d") << "{append({'foo':123});append({'foo':456});append({'foo':789});move(0,3,1)}" << 0 << "QML ListModel (unknown location) move: out of range";
+
+ // Structured model
+
+ QTest::newRow("listprop1a") << "{append({'foo':123,'bars':[{'a':1},{'a':2},{'a':3}]});count}" << 1 << "";
+ QTest::newRow("listprop1b") << "{append({'foo':123,'bars':[{'a':1},{'a':2},{'a':3}]});get(0).bars.get(1).a}" << 2 << "";
+ QTest::newRow("listprop2a") << "{append({'foo':123,'bars':[{'a':1},{'a':2},{'a':3}]});get(0).bars.append({'a':4});get(0).bars.get(3).a}" << 4 << "";
+}
+
+void tst_QmlListModel::dynamic()
+{
+ QFETCH(QString, script);
+ QFETCH(int, result);
+ QFETCH(QString, warning);
+
+ QmlEngine engine;
+ QmlListModel model;
+ QmlEngine::setContextForObject(&model,engine.rootContext());
+ engine.rootContext()->addDefaultObject(&model);
+ QmlExpression e(engine.rootContext(), script, &model);
+ if (!warning.isEmpty())
+ QTest::ignoreMessage(QtWarningMsg, warning.toLatin1());
+ int actual = e.value().toInt();
+ if (e.hasError())
+ qDebug() << e.error(); // errors not expected
+ QVERIFY(!e.hasError());
+ QCOMPARE(actual,result);
+}
+
+void tst_QmlListModel::error_data()
+{
+ QTest::addColumn<QString>("qml");
+ QTest::addColumn<QString>("error");
+
+ QTest::newRow("id not allowed in ListElement")
+ << "import Qt 4.6\nListModel { ListElement { id: fred } }"
+ << "ListElement: cannot use reserved \"id\" property";
+
+ QTest::newRow("id allowed in ListModel")
+ << "import Qt 4.6\nListModel { id:model }"
+ << "";
+
+ QTest::newRow("random properties not allowed in ListModel")
+ << "import Qt 4.6\nListModel { foo:123 }"
+ << "ListModel: undefined property 'foo'";
+
+ QTest::newRow("random properties allowed in ListElement")
+ << "import Qt 4.6\nListModel { ListElement { foo:123 } }"
+ << "";
+
+ QTest::newRow("bindings not allowed in ListElement")
+ << "import Qt 4.6\nRectangle { id: rect; ListModel { ListElement { foo: rect.color } } }"
+ << "QTBUG-6203 ListElement should not allow binding its data to something";
+
+ QTest::newRow("random object list properties allowed in ListElement")
+ << "import Qt 4.6\nListModel { ListElement { foo: [ ListElement { bar: 123 } ] } }"
+ << "";
+
+ QTest::newRow("default properties not allowed in ListElement")
+ << "import Qt 4.6\nListModel { ListElement { Item { } } }"
+ << "QTBUG-6082 ListElement should not allow child objects";
+}
+
+void tst_QmlListModel::error()
+{
+ QFETCH(QString, qml);
+ QFETCH(QString, error);
+
+ QmlEngine engine;
+ QmlComponent component(&engine);
+ component.setData(qml.toUtf8(),
+ QUrl::fromLocalFile(QString("dummy.qml")));
+ if (error.isEmpty()) {
+ QVERIFY(!component.isError());
+ } else {
+ if (error.startsWith(QLatin1String("QTBUG-")))
+ QEXPECT_FAIL("",error.toLatin1(),Abort);
+ QVERIFY(component.isError());
+ QList<QmlError> errors = component.errors();
+ QCOMPARE(errors.count(),1);
+ QCOMPARE(errors.at(0).description(),error);
+ }
+}
+
+QTEST_MAIN(tst_QmlListModel)
+
+#include "tst_qmllistmodel.moc"
diff --git a/tests/auto/declarative/qmlmetaproperty/qmlmetaproperty.pro b/tests/auto/declarative/qmlmetaproperty/qmlmetaproperty.pro
new file mode 100644
index 0000000..542c14e
--- /dev/null
+++ b/tests/auto/declarative/qmlmetaproperty/qmlmetaproperty.pro
@@ -0,0 +1,5 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlmetaproperty.cpp
diff --git a/tests/auto/declarative/qmlmetaproperty/tst_qmlmetaproperty.cpp b/tests/auto/declarative/qmlmetaproperty/tst_qmlmetaproperty.cpp
new file mode 100644
index 0000000..ec6b87f
--- /dev/null
+++ b/tests/auto/declarative/qmlmetaproperty/tst_qmlmetaproperty.cpp
@@ -0,0 +1,1123 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <QtDeclarative/qmlmetaproperty.h>
+#include <private/qguard_p.h>
+#include <QtDeclarative/qmlbinding.h>
+#include <QtGui/QLineEdit>
+
+class MyQmlObject : public QObject
+{
+ Q_OBJECT
+public:
+ MyQmlObject() {}
+};
+
+QML_DECLARE_TYPE(MyQmlObject);
+QML_DEFINE_TYPE(Test,1,0,MyQmlObject,MyQmlObject);
+
+class MyAttached : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int foo READ foo WRITE setFoo)
+public:
+ MyAttached(QObject *parent) : QObject(parent), m_foo(13) {}
+
+ int foo() const { return m_foo; }
+ void setFoo(int f) { m_foo = f; }
+
+private:
+ int m_foo;
+};
+
+class MyContainer : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QList<MyQmlObject*>* children READ children)
+ Q_PROPERTY(QmlList<MyQmlObject*>* qmlChildren READ qmlChildren)
+public:
+ MyContainer() {}
+
+ QList<MyQmlObject*> *children() { return &m_children; }
+ QmlConcreteList<MyQmlObject *> *qmlChildren() { return &m_qmlChildren; }
+
+ static MyAttached *qmlAttachedProperties(QObject *o) {
+ return new MyAttached(o);
+ }
+
+private:
+ QList<MyQmlObject*> m_children;
+ QmlConcreteList<MyQmlObject *> m_qmlChildren;
+};
+
+QML_DECLARE_TYPE(MyContainer);
+QML_DEFINE_TYPE(Test,1,0,MyContainer,MyContainer);
+QML_DECLARE_TYPEINFO(MyContainer, QML_HAS_ATTACHED_PROPERTIES)
+
+class tst_qmlmetaproperty : public QObject
+{
+ Q_OBJECT
+public:
+ tst_qmlmetaproperty() {}
+
+private slots:
+
+ // Constructors
+ void qmlmetaproperty();
+ void qmlmetaproperty_object();
+ void qmlmetaproperty_object_string();
+ void qmlmetaproperty_object_context();
+ void qmlmetaproperty_object_string_context();
+
+ // Methods
+ void name();
+ void read();
+ void write();
+ void reset();
+
+ // Functionality
+ void writeObjectToList();
+ void writeListToList();
+ void writeObjectToQmlList();
+
+ //writeToReadOnly();
+
+private:
+ QmlEngine engine;
+};
+
+void tst_qmlmetaproperty::qmlmetaproperty()
+{
+ QmlMetaProperty prop;
+
+ QGuard<QmlBinding> binding(new QmlBinding(QString(), 0, 0));
+ QVERIFY(binding != 0);
+ QGuard<QmlExpression> expression(new QmlExpression());
+ QVERIFY(expression != 0);
+
+ QObject *obj = new QObject;
+
+ QCOMPARE(prop.name(), QString());
+ QCOMPARE(prop.read(), QVariant());
+ QCOMPARE(prop.write(QVariant()), false);
+ QCOMPARE(prop.hasChangedNotifier(), false);
+ QCOMPARE(prop.needsChangedNotifier(), false);
+ QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false);
+ QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false);
+ QCOMPARE(prop.connectNotifier(obj, 0), false);
+ QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false);
+ QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false);
+ QCOMPARE(prop.connectNotifier(obj, -1), false);
+ QVERIFY(prop.method().signature() == 0);
+ QCOMPARE(prop.type(), QmlMetaProperty::Invalid);
+ QCOMPARE(prop.isProperty(), false);
+ QCOMPARE(prop.isDefault(), false);
+ QCOMPARE(prop.isWritable(), false);
+ QCOMPARE(prop.isDesignable(), false);
+ QCOMPARE(prop.isResettable(), false);
+ QCOMPARE(prop.isValid(), false);
+ QCOMPARE(prop.object(), (QObject *)0);
+ QCOMPARE(prop.propertyCategory(), QmlMetaProperty::InvalidProperty);
+ QCOMPARE(prop.propertyType(), 0);
+ QCOMPARE(prop.propertyTypeName(), (const char *)0);
+ QVERIFY(prop.property().name() == 0);
+ QVERIFY(prop.binding() == 0);
+ QVERIFY(prop.setBinding(binding) == 0);
+ QVERIFY(binding == 0);
+ QVERIFY(prop.signalExpression() == 0);
+ QVERIFY(prop.setSignalExpression(expression) == 0);
+ QVERIFY(expression == 0);
+ QCOMPARE(prop.coreIndex(), -1);
+ QCOMPARE(prop.valueTypeCoreIndex(), -1);
+
+ delete obj;
+}
+
+class PropertyObject : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int defaultProperty READ defaultProperty);
+ Q_PROPERTY(QRect rectProperty READ rectProperty);
+ Q_PROPERTY(QRect wrectProperty READ wrectProperty WRITE setWRectProperty);
+ Q_PROPERTY(QUrl url READ url WRITE setUrl);
+ Q_PROPERTY(int resettableProperty READ resettableProperty WRITE setResettableProperty RESET resetProperty);
+
+ Q_CLASSINFO("DefaultProperty", "defaultProperty");
+public:
+ PropertyObject() : m_resetProperty(9) {}
+
+ int defaultProperty() { return 10; }
+ QRect rectProperty() { return QRect(10, 10, 1, 209); }
+
+ QRect wrectProperty() { return m_rect; }
+ void setWRectProperty(const QRect &r) { m_rect = r; }
+
+ QUrl url() { return m_url; }
+ void setUrl(const QUrl &u) { m_url = u; }
+
+ int resettableProperty() const { return m_resetProperty; }
+ void setResettableProperty(int r) { m_resetProperty = r; }
+ void resetProperty() { m_resetProperty = 9; }
+
+signals:
+ void clicked();
+
+private:
+ int m_resetProperty;
+ QRect m_rect;
+ QUrl m_url;
+};
+
+void tst_qmlmetaproperty::qmlmetaproperty_object()
+{
+ QObject object; // Has no default property
+ PropertyObject dobject; // Has default property
+
+ {
+ QmlMetaProperty prop(&object);
+
+ QGuard<QmlBinding> binding(new QmlBinding(QString(), 0, 0));
+ QVERIFY(binding != 0);
+ QGuard<QmlExpression> expression(new QmlExpression());
+ QVERIFY(expression != 0);
+
+ QObject *obj = new QObject;
+
+ QCOMPARE(prop.name(), QString());
+ QCOMPARE(prop.read(), QVariant());
+ QCOMPARE(prop.write(QVariant()), false);
+ QCOMPARE(prop.hasChangedNotifier(), false);
+ QCOMPARE(prop.needsChangedNotifier(), false);
+ QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false);
+ QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false);
+ QCOMPARE(prop.connectNotifier(obj, 0), false);
+ QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false);
+ QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false);
+ QCOMPARE(prop.connectNotifier(obj, -1), false);
+ QVERIFY(prop.method().signature() == 0);
+ QCOMPARE(prop.type(), QmlMetaProperty::Invalid);
+ QCOMPARE(prop.isProperty(), false);
+ QCOMPARE(prop.isDefault(), false);
+ QCOMPARE(prop.isWritable(), false);
+ QCOMPARE(prop.isDesignable(), false);
+ QCOMPARE(prop.isResettable(), false);
+ QCOMPARE(prop.isValid(), false);
+ QCOMPARE(prop.object(), (QObject *)0);
+ QCOMPARE(prop.propertyCategory(), QmlMetaProperty::InvalidProperty);
+ QCOMPARE(prop.propertyType(), 0);
+ QCOMPARE(prop.propertyTypeName(), (const char *)0);
+ QVERIFY(prop.property().name() == 0);
+ QVERIFY(prop.binding() == 0);
+ QVERIFY(prop.setBinding(binding) == 0);
+ QVERIFY(binding == 0);
+ QVERIFY(prop.signalExpression() == 0);
+ QVERIFY(prop.setSignalExpression(expression) == 0);
+ QVERIFY(expression == 0);
+ QCOMPARE(prop.coreIndex(), -1);
+ QCOMPARE(prop.valueTypeCoreIndex(), -1);
+
+ delete obj;
+ }
+
+ {
+ QmlMetaProperty prop(&dobject);
+
+ QGuard<QmlBinding> binding(new QmlBinding(QString(), 0, 0));
+ binding->setTarget(prop);
+ QVERIFY(binding != 0);
+ QGuard<QmlExpression> expression(new QmlExpression());
+ QVERIFY(expression != 0);
+
+ QObject *obj = new QObject;
+
+ QCOMPARE(prop.name(), QString("defaultProperty"));
+ QCOMPARE(prop.read(), QVariant(10));
+ QCOMPARE(prop.write(QVariant()), false);
+ QCOMPARE(prop.hasChangedNotifier(), false);
+ QCOMPARE(prop.needsChangedNotifier(), true);
+ QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false);
+ QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false);
+ QCOMPARE(prop.connectNotifier(obj, 0), false);
+ QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false);
+ QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false);
+ QCOMPARE(prop.connectNotifier(obj, -1), false);
+ QVERIFY(prop.method().signature() == 0);
+ QCOMPARE(prop.type(), (QmlMetaProperty::Type)(QmlMetaProperty::Property | QmlMetaProperty::Default));
+ QCOMPARE(prop.isProperty(), true);
+ QCOMPARE(prop.isDefault(), true);
+ QCOMPARE(prop.isWritable(), false);
+ QCOMPARE(prop.isDesignable(), true);
+ QCOMPARE(prop.isResettable(), false);
+ QCOMPARE(prop.isValid(), true);
+ QCOMPARE(prop.object(), &dobject);
+ QCOMPARE(prop.propertyCategory(), QmlMetaProperty::Normal);
+ QCOMPARE(prop.propertyType(), (int)QVariant::Int);
+ QCOMPARE(prop.propertyTypeName(), "int");
+ QCOMPARE(QString(prop.property().name()), QString("defaultProperty"));
+ QVERIFY(prop.binding() == 0);
+ QTest::ignoreMessage(QtWarningMsg, "<Unknown File>:-1: Unable to assign null to int");
+ QVERIFY(prop.setBinding(binding) == 0);
+ QVERIFY(binding != 0);
+ QVERIFY(prop.binding() == binding);
+ QVERIFY(prop.signalExpression() == 0);
+ QVERIFY(prop.setSignalExpression(expression) == 0);
+ QVERIFY(expression == 0);
+ QCOMPARE(prop.coreIndex(), dobject.metaObject()->indexOfProperty("defaultProperty"));
+ QCOMPARE(prop.valueTypeCoreIndex(), -1);
+
+ delete obj;
+ }
+}
+
+void tst_qmlmetaproperty::qmlmetaproperty_object_string()
+{
+ QObject object;
+ PropertyObject dobject;
+
+ {
+ QmlMetaProperty prop(&object, QString("defaultProperty"));
+
+ QGuard<QmlBinding> binding(new QmlBinding(QString(), 0, 0));
+ QVERIFY(binding != 0);
+ QGuard<QmlExpression> expression(new QmlExpression());
+ QVERIFY(expression != 0);
+
+ QObject *obj = new QObject;
+
+ QCOMPARE(prop.name(), QString());
+ QCOMPARE(prop.read(), QVariant());
+ QCOMPARE(prop.write(QVariant()), false);
+ QCOMPARE(prop.hasChangedNotifier(), false);
+ QCOMPARE(prop.needsChangedNotifier(), false);
+ QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false);
+ QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false);
+ QCOMPARE(prop.connectNotifier(obj, 0), false);
+ QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false);
+ QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false);
+ QCOMPARE(prop.connectNotifier(obj, -1), false);
+ QVERIFY(prop.method().signature() == 0);
+ QCOMPARE(prop.type(), QmlMetaProperty::Invalid);
+ QCOMPARE(prop.isProperty(), false);
+ QCOMPARE(prop.isDefault(), false);
+ QCOMPARE(prop.isWritable(), false);
+ QCOMPARE(prop.isDesignable(), false);
+ QCOMPARE(prop.isResettable(), false);
+ QCOMPARE(prop.isValid(), false);
+ QCOMPARE(prop.object(), (QObject *)0);
+ QCOMPARE(prop.propertyCategory(), QmlMetaProperty::InvalidProperty);
+ QCOMPARE(prop.propertyType(), 0);
+ QCOMPARE(prop.propertyTypeName(), (const char *)0);
+ QVERIFY(prop.property().name() == 0);
+ QVERIFY(prop.binding() == 0);
+ QVERIFY(prop.setBinding(binding) == 0);
+ QVERIFY(binding == 0);
+ QVERIFY(prop.signalExpression() == 0);
+ QVERIFY(prop.setSignalExpression(expression) == 0);
+ QVERIFY(expression == 0);
+ QCOMPARE(prop.coreIndex(), -1);
+ QCOMPARE(prop.valueTypeCoreIndex(), -1);
+
+ delete obj;
+ }
+
+ {
+ QmlMetaProperty prop(&dobject, QString("defaultProperty"));
+
+ QGuard<QmlBinding> binding(new QmlBinding(QString(), 0, 0));
+ binding->setTarget(prop);
+ QVERIFY(binding != 0);
+ QGuard<QmlExpression> expression(new QmlExpression());
+ QVERIFY(expression != 0);
+
+ QObject *obj = new QObject;
+
+ QCOMPARE(prop.name(), QString("defaultProperty"));
+ QCOMPARE(prop.read(), QVariant(10));
+ QCOMPARE(prop.write(QVariant()), false);
+ QCOMPARE(prop.hasChangedNotifier(), false);
+ QCOMPARE(prop.needsChangedNotifier(), true);
+ QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false);
+ QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false);
+ QCOMPARE(prop.connectNotifier(obj, 0), false);
+ QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false);
+ QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false);
+ QCOMPARE(prop.connectNotifier(obj, -1), false);
+ QVERIFY(prop.method().signature() == 0);
+ QCOMPARE(prop.type(), QmlMetaProperty::Property);
+ QCOMPARE(prop.isProperty(), true);
+ QCOMPARE(prop.isDefault(), false);
+ QCOMPARE(prop.isWritable(), false);
+ QCOMPARE(prop.isDesignable(), true);
+ QCOMPARE(prop.isResettable(), false);
+ QCOMPARE(prop.isValid(), true);
+ QCOMPARE(prop.object(), &dobject);
+ QCOMPARE(prop.propertyCategory(), QmlMetaProperty::Normal);
+ QCOMPARE(prop.propertyType(), (int)QVariant::Int);
+ QCOMPARE(prop.propertyTypeName(), "int");
+ QCOMPARE(QString(prop.property().name()), QString("defaultProperty"));
+ QVERIFY(prop.binding() == 0);
+ QTest::ignoreMessage(QtWarningMsg, "<Unknown File>:-1: Unable to assign null to int");
+ QVERIFY(prop.setBinding(binding) == 0);
+ QVERIFY(binding != 0);
+ QVERIFY(prop.binding() == binding);
+ QVERIFY(prop.signalExpression() == 0);
+ QVERIFY(prop.setSignalExpression(expression) == 0);
+ QVERIFY(expression == 0);
+ QCOMPARE(prop.coreIndex(), dobject.metaObject()->indexOfProperty("defaultProperty"));
+ QCOMPARE(prop.valueTypeCoreIndex(), -1);
+
+ delete obj;
+ }
+
+ {
+ QmlMetaProperty prop(&dobject, QString("onClicked"));
+
+ QGuard<QmlBinding> binding(new QmlBinding(QString(), 0, 0));
+ binding->setTarget(prop);
+ QVERIFY(binding != 0);
+ QGuard<QmlExpression> expression(new QmlExpression());
+ QVERIFY(expression != 0);
+
+ QObject *obj = new QObject;
+
+ QCOMPARE(prop.name(), QString("onClicked"));
+ QCOMPARE(prop.read(), QVariant());
+ QCOMPARE(prop.write(QVariant("Hello")), false);
+ QCOMPARE(prop.hasChangedNotifier(), false);
+ QCOMPARE(prop.needsChangedNotifier(), false);
+ QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false);
+ QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false);
+ QCOMPARE(prop.connectNotifier(obj, 0), false);
+ QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false);
+ QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false);
+ QCOMPARE(prop.connectNotifier(obj, -1), false);
+ QCOMPARE(QString(prop.method().signature()), QString("clicked()"));
+ QCOMPARE(prop.type(), QmlMetaProperty::SignalProperty);
+ QCOMPARE(prop.isProperty(), false);
+ QCOMPARE(prop.isDefault(), false);
+ QCOMPARE(prop.isWritable(), false);
+ QCOMPARE(prop.isDesignable(), false);
+ QCOMPARE(prop.isResettable(), false);
+ QCOMPARE(prop.isValid(), true);
+ QCOMPARE(prop.object(), &dobject);
+ QCOMPARE(prop.propertyCategory(), QmlMetaProperty::InvalidProperty);
+ QCOMPARE(prop.propertyType(), 0);
+ QCOMPARE(prop.propertyTypeName(), (const char *)0);
+ QCOMPARE(prop.property().name(), (const char *)0);
+ QVERIFY(prop.binding() == 0);
+ QVERIFY(prop.setBinding(binding) == 0);
+ QVERIFY(binding == 0);
+ QVERIFY(prop.signalExpression() == 0);
+ QVERIFY(prop.setSignalExpression(expression) == 0);
+ QVERIFY(expression != 0);
+ QVERIFY(prop.signalExpression() == expression);
+ QCOMPARE(prop.coreIndex(), dobject.metaObject()->indexOfMethod("clicked()"));
+ QCOMPARE(prop.valueTypeCoreIndex(), -1);
+
+ delete obj;
+ }
+}
+
+void tst_qmlmetaproperty::qmlmetaproperty_object_context()
+{
+ QObject object; // Has no default property
+ PropertyObject dobject; // Has default property
+
+ {
+ QmlMetaProperty prop(&object, engine.rootContext());
+
+ QGuard<QmlBinding> binding(new QmlBinding(QString(), 0, 0));
+ QVERIFY(binding != 0);
+ QGuard<QmlExpression> expression(new QmlExpression());
+ QVERIFY(expression != 0);
+
+ QObject *obj = new QObject;
+
+ QCOMPARE(prop.name(), QString());
+ QCOMPARE(prop.read(), QVariant());
+ QCOMPARE(prop.write(QVariant()), false);
+ QCOMPARE(prop.hasChangedNotifier(), false);
+ QCOMPARE(prop.needsChangedNotifier(), false);
+ QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false);
+ QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false);
+ QCOMPARE(prop.connectNotifier(obj, 0), false);
+ QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false);
+ QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false);
+ QCOMPARE(prop.connectNotifier(obj, -1), false);
+ QVERIFY(prop.method().signature() == 0);
+ QCOMPARE(prop.type(), QmlMetaProperty::Invalid);
+ QCOMPARE(prop.isProperty(), false);
+ QCOMPARE(prop.isDefault(), false);
+ QCOMPARE(prop.isWritable(), false);
+ QCOMPARE(prop.isDesignable(), false);
+ QCOMPARE(prop.isResettable(), false);
+ QCOMPARE(prop.isValid(), false);
+ QCOMPARE(prop.object(), (QObject *)0);
+ QCOMPARE(prop.propertyCategory(), QmlMetaProperty::InvalidProperty);
+ QCOMPARE(prop.propertyType(), 0);
+ QCOMPARE(prop.propertyTypeName(), (const char *)0);
+ QVERIFY(prop.property().name() == 0);
+ QVERIFY(prop.binding() == 0);
+ QVERIFY(prop.setBinding(binding) == 0);
+ QVERIFY(binding == 0);
+ QVERIFY(prop.signalExpression() == 0);
+ QVERIFY(prop.setSignalExpression(expression) == 0);
+ QVERIFY(expression == 0);
+ QCOMPARE(prop.coreIndex(), -1);
+ QCOMPARE(prop.valueTypeCoreIndex(), -1);
+
+ delete obj;
+ }
+
+ {
+ QmlMetaProperty prop(&dobject, engine.rootContext());
+
+ QGuard<QmlBinding> binding(new QmlBinding(QString(), 0, 0));
+ binding->setTarget(prop);
+ QVERIFY(binding != 0);
+ QGuard<QmlExpression> expression(new QmlExpression());
+ QVERIFY(expression != 0);
+
+ QObject *obj = new QObject;
+
+ QCOMPARE(prop.name(), QString("defaultProperty"));
+ QCOMPARE(prop.read(), QVariant(10));
+ QCOMPARE(prop.write(QVariant()), false);
+ QCOMPARE(prop.hasChangedNotifier(), false);
+ QCOMPARE(prop.needsChangedNotifier(), true);
+ QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false);
+ QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false);
+ QCOMPARE(prop.connectNotifier(obj, 0), false);
+ QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false);
+ QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false);
+ QCOMPARE(prop.connectNotifier(obj, -1), false);
+ QVERIFY(prop.method().signature() == 0);
+ QCOMPARE(prop.type(), (QmlMetaProperty::Type)(QmlMetaProperty::Property | QmlMetaProperty::Default));
+ QCOMPARE(prop.isProperty(), true);
+ QCOMPARE(prop.isDefault(), true);
+ QCOMPARE(prop.isWritable(), false);
+ QCOMPARE(prop.isDesignable(), true);
+ QCOMPARE(prop.isResettable(), false);
+ QCOMPARE(prop.isValid(), true);
+ QCOMPARE(prop.object(), &dobject);
+ QCOMPARE(prop.propertyCategory(), QmlMetaProperty::Normal);
+ QCOMPARE(prop.propertyType(), (int)QVariant::Int);
+ QCOMPARE(prop.propertyTypeName(), "int");
+ QCOMPARE(QString(prop.property().name()), QString("defaultProperty"));
+ QVERIFY(prop.binding() == 0);
+ QTest::ignoreMessage(QtWarningMsg, "<Unknown File>:-1: Unable to assign null to int");
+ QVERIFY(prop.setBinding(binding) == 0);
+ QVERIFY(binding != 0);
+ QVERIFY(prop.binding() == binding);
+ QVERIFY(prop.signalExpression() == 0);
+ QVERIFY(prop.setSignalExpression(expression) == 0);
+ QVERIFY(expression == 0);
+ QCOMPARE(prop.coreIndex(), dobject.metaObject()->indexOfProperty("defaultProperty"));
+ QCOMPARE(prop.valueTypeCoreIndex(), -1);
+
+ delete obj;
+ }
+}
+
+void tst_qmlmetaproperty::qmlmetaproperty_object_string_context()
+{
+ QObject object;
+ PropertyObject dobject;
+
+ {
+ QmlMetaProperty prop(&object, QString("defaultProperty"), engine.rootContext());
+
+ QGuard<QmlBinding> binding(new QmlBinding(QString(), 0, 0));
+ QVERIFY(binding != 0);
+ QGuard<QmlExpression> expression(new QmlExpression());
+ QVERIFY(expression != 0);
+
+ QObject *obj = new QObject;
+
+ QCOMPARE(prop.name(), QString());
+ QCOMPARE(prop.read(), QVariant());
+ QCOMPARE(prop.write(QVariant()), false);
+ QCOMPARE(prop.hasChangedNotifier(), false);
+ QCOMPARE(prop.needsChangedNotifier(), false);
+ QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false);
+ QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false);
+ QCOMPARE(prop.connectNotifier(obj, 0), false);
+ QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false);
+ QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false);
+ QCOMPARE(prop.connectNotifier(obj, -1), false);
+ QVERIFY(prop.method().signature() == 0);
+ QCOMPARE(prop.type(), QmlMetaProperty::Invalid);
+ QCOMPARE(prop.isProperty(), false);
+ QCOMPARE(prop.isDefault(), false);
+ QCOMPARE(prop.isWritable(), false);
+ QCOMPARE(prop.isDesignable(), false);
+ QCOMPARE(prop.isResettable(), false);
+ QCOMPARE(prop.isValid(), false);
+ QCOMPARE(prop.object(), (QObject *)0);
+ QCOMPARE(prop.propertyCategory(), QmlMetaProperty::InvalidProperty);
+ QCOMPARE(prop.propertyType(), 0);
+ QCOMPARE(prop.propertyTypeName(), (const char *)0);
+ QVERIFY(prop.property().name() == 0);
+ QVERIFY(prop.binding() == 0);
+ QVERIFY(prop.setBinding(binding) == 0);
+ QVERIFY(binding == 0);
+ QVERIFY(prop.signalExpression() == 0);
+ QVERIFY(prop.setSignalExpression(expression) == 0);
+ QVERIFY(expression == 0);
+ QCOMPARE(prop.coreIndex(), -1);
+ QCOMPARE(prop.valueTypeCoreIndex(), -1);
+
+ delete obj;
+ }
+
+ {
+ QmlMetaProperty prop(&dobject, QString("defaultProperty"), engine.rootContext());
+
+ QGuard<QmlBinding> binding(new QmlBinding(QString(), 0, 0));
+ binding->setTarget(prop);
+ QVERIFY(binding != 0);
+ QGuard<QmlExpression> expression(new QmlExpression());
+ QVERIFY(expression != 0);
+
+ QObject *obj = new QObject;
+
+ QCOMPARE(prop.name(), QString("defaultProperty"));
+ QCOMPARE(prop.read(), QVariant(10));
+ QCOMPARE(prop.write(QVariant()), false);
+ QCOMPARE(prop.hasChangedNotifier(), false);
+ QCOMPARE(prop.needsChangedNotifier(), true);
+ QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false);
+ QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false);
+ QCOMPARE(prop.connectNotifier(obj, 0), false);
+ QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false);
+ QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false);
+ QCOMPARE(prop.connectNotifier(obj, -1), false);
+ QVERIFY(prop.method().signature() == 0);
+ QCOMPARE(prop.type(), QmlMetaProperty::Property);
+ QCOMPARE(prop.isProperty(), true);
+ QCOMPARE(prop.isDefault(), false);
+ QCOMPARE(prop.isWritable(), false);
+ QCOMPARE(prop.isDesignable(), true);
+ QCOMPARE(prop.isResettable(), false);
+ QCOMPARE(prop.isValid(), true);
+ QCOMPARE(prop.object(), &dobject);
+ QCOMPARE(prop.propertyCategory(), QmlMetaProperty::Normal);
+ QCOMPARE(prop.propertyType(), (int)QVariant::Int);
+ QCOMPARE(prop.propertyTypeName(), "int");
+ QCOMPARE(QString(prop.property().name()), QString("defaultProperty"));
+ QVERIFY(prop.binding() == 0);
+ QTest::ignoreMessage(QtWarningMsg, "<Unknown File>:-1: Unable to assign null to int");
+ QVERIFY(prop.setBinding(binding) == 0);
+ QVERIFY(binding != 0);
+ QVERIFY(prop.binding() == binding);
+ QVERIFY(prop.signalExpression() == 0);
+ QVERIFY(prop.setSignalExpression(expression) == 0);
+ QVERIFY(expression == 0);
+ QCOMPARE(prop.coreIndex(), dobject.metaObject()->indexOfProperty("defaultProperty"));
+ QCOMPARE(prop.valueTypeCoreIndex(), -1);
+
+ delete obj;
+ }
+
+ {
+ QmlMetaProperty prop(&dobject, QString("onClicked"), engine.rootContext());
+
+ QGuard<QmlBinding> binding(new QmlBinding(QString(), 0, 0));
+ binding->setTarget(prop);
+ QVERIFY(binding != 0);
+ QGuard<QmlExpression> expression(new QmlExpression());
+ QVERIFY(expression != 0);
+
+ QObject *obj = new QObject;
+
+ QCOMPARE(prop.name(), QString("onClicked"));
+ QCOMPARE(prop.read(), QVariant());
+ QCOMPARE(prop.write(QVariant("Hello")), false);
+ QCOMPARE(prop.hasChangedNotifier(), false);
+ QCOMPARE(prop.needsChangedNotifier(), false);
+ QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false);
+ QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false);
+ QCOMPARE(prop.connectNotifier(obj, 0), false);
+ QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false);
+ QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false);
+ QCOMPARE(prop.connectNotifier(obj, -1), false);
+ QCOMPARE(QString(prop.method().signature()), QString("clicked()"));
+ QCOMPARE(prop.type(), QmlMetaProperty::SignalProperty);
+ QCOMPARE(prop.isProperty(), false);
+ QCOMPARE(prop.isDefault(), false);
+ QCOMPARE(prop.isWritable(), false);
+ QCOMPARE(prop.isDesignable(), false);
+ QCOMPARE(prop.isResettable(), false);
+ QCOMPARE(prop.isValid(), true);
+ QCOMPARE(prop.object(), &dobject);
+ QCOMPARE(prop.propertyCategory(), QmlMetaProperty::InvalidProperty);
+ QCOMPARE(prop.propertyType(), 0);
+ QCOMPARE(prop.propertyTypeName(), (const char *)0);
+ QCOMPARE(prop.property().name(), (const char *)0);
+ QVERIFY(prop.binding() == 0);
+ QVERIFY(prop.setBinding(binding) == 0);
+ QVERIFY(binding == 0);
+ QVERIFY(prop.signalExpression() == 0);
+ QVERIFY(prop.setSignalExpression(expression) == 0);
+ QVERIFY(expression != 0);
+ QVERIFY(prop.signalExpression() == expression);
+ QCOMPARE(prop.coreIndex(), dobject.metaObject()->indexOfMethod("clicked()"));
+ QCOMPARE(prop.valueTypeCoreIndex(), -1);
+
+ delete obj;
+ }
+}
+
+void tst_qmlmetaproperty::name()
+{
+ {
+ QmlMetaProperty p;
+ QCOMPARE(p.name(), QString());
+ }
+
+ {
+ PropertyObject o;
+ QmlMetaProperty p(&o);
+ QCOMPARE(p.name(), QString("defaultProperty"));
+ }
+
+ {
+ QObject o;
+ QmlMetaProperty p(&o, QString("objectName"));
+ QCOMPARE(p.name(), QString("objectName"));
+ }
+
+ {
+ PropertyObject o;
+ QmlMetaProperty p(&o, "onClicked");
+ QCOMPARE(p.name(), QString("onClicked"));
+ }
+
+ {
+ QObject o;
+ QmlMetaProperty p(&o, "onClicked");
+ QCOMPARE(p.name(), QString());
+ }
+
+ {
+ QObject o;
+ QmlMetaProperty p(&o, "foo");
+ QCOMPARE(p.name(), QString());
+ }
+
+ {
+ QmlMetaProperty p(0, "foo");
+ QCOMPARE(p.name(), QString());
+ }
+
+ {
+ PropertyObject o;
+ QmlMetaProperty p = QmlMetaProperty::createProperty(&o, "rectProperty");
+ QCOMPARE(p.name(), QString("rectProperty"));
+ }
+
+ {
+ PropertyObject o;
+ QmlMetaProperty p = QmlMetaProperty::createProperty(&o, "rectProperty.x");
+ QCOMPARE(p.name(), QString("rectProperty.x"));
+ }
+
+ {
+ PropertyObject o;
+ QmlMetaProperty p = QmlMetaProperty::createProperty(&o, "rectProperty.foo");
+ QCOMPARE(p.name(), QString());
+ }
+}
+
+void tst_qmlmetaproperty::read()
+{
+ // Invalid
+ {
+ QmlMetaProperty p;
+ QCOMPARE(p.read(), QVariant());
+ }
+
+ // Default prop
+ {
+ PropertyObject o;
+ QmlMetaProperty p(&o);
+ QCOMPARE(p.read(), QVariant(10));
+ }
+
+ // Invalid default prop
+ {
+ QObject o;
+ QmlMetaProperty p(&o);
+ QCOMPARE(p.read(), QVariant());
+ }
+
+ // Value prop by name
+ {
+ QObject o;
+
+ QmlMetaProperty p(&o, "objectName");
+ QCOMPARE(p.read(), QVariant(QString()));
+
+ o.setObjectName("myName");
+
+ QCOMPARE(p.read(), QVariant("myName"));
+ }
+
+ // Value-type prop
+ {
+ PropertyObject o;
+ QmlMetaProperty p = QmlMetaProperty::createProperty(&o, "rectProperty.x");
+ QCOMPARE(p.read(), QVariant(10));
+ }
+
+ // Invalid value-type prop
+ {
+ PropertyObject o;
+ QmlMetaProperty p = QmlMetaProperty::createProperty(&o, "rectProperty.foo");
+ QCOMPARE(p.read(), QVariant());
+ }
+
+ // Signal property
+ {
+ PropertyObject o;
+ QmlMetaProperty p(&o, "onClicked");
+ QCOMPARE(p.read(), QVariant());
+
+ QVERIFY(0 == p.setSignalExpression(new QmlExpression()));
+ QVERIFY(0 != p.signalExpression());
+
+ QCOMPARE(p.read(), QVariant());
+ }
+
+ // Deleted object
+ {
+ PropertyObject *o = new PropertyObject;
+ QmlMetaProperty p = QmlMetaProperty::createProperty(o, "rectProperty.x");
+ QCOMPARE(p.read(), QVariant(10));
+ delete o;
+ QCOMPARE(p.read(), QVariant());
+ }
+
+ // Attached property
+ {
+ QmlComponent component(&engine);
+ component.setData("import Test 1.0\nMyContainer { }", QUrl());
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QmlMetaProperty p = QmlMetaProperty::createProperty(object, "MyContainer.foo", qmlContext(object));
+ QCOMPARE(p.read(), QVariant(13));
+ delete object;
+ }
+ {
+ QmlComponent component(&engine);
+ component.setData("import Test 1.0\nMyContainer { MyContainer.foo: 10 }", QUrl());
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QmlMetaProperty p = QmlMetaProperty::createProperty(object, "MyContainer.foo", qmlContext(object));
+ QCOMPARE(p.read(), QVariant(10));
+ delete object;
+ }
+ {
+ QmlComponent component(&engine);
+ component.setData("import Test 1.0 as Foo\nFoo.MyContainer { Foo.MyContainer.foo: 10 }", QUrl());
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QmlMetaProperty p = QmlMetaProperty::createProperty(object, "Foo.MyContainer.foo", qmlContext(object));
+ QCOMPARE(p.read(), QVariant(10));
+ delete object;
+ }
+}
+
+void tst_qmlmetaproperty::write()
+{
+ // Invalid
+ {
+ QmlMetaProperty p;
+ QCOMPARE(p.write(QVariant(10)), false);
+ }
+
+ // Read-only default prop
+ {
+ PropertyObject o;
+ QmlMetaProperty p(&o);
+ QCOMPARE(p.write(QVariant(10)), false);
+ }
+
+ // Invalid default prop
+ {
+ QObject o;
+ QmlMetaProperty p(&o);
+ QCOMPARE(p.write(QVariant(10)), false);
+ }
+
+ // Read-only prop by name
+ {
+ PropertyObject o;
+ QmlMetaProperty p(&o, QString("defaultProperty"));
+ QCOMPARE(p.write(QVariant(10)), false);
+ }
+
+ // Writable prop by name
+ {
+ PropertyObject o;
+ QmlMetaProperty p(&o, QString("objectName"));
+ QCOMPARE(o.objectName(), QString());
+ QCOMPARE(p.write(QVariant(QString("myName"))), true);
+ QCOMPARE(o.objectName(), QString("myName"));
+ }
+
+ // Deleted object
+ {
+ PropertyObject *o = new PropertyObject;
+ QmlMetaProperty p(o, QString("objectName"));
+ QCOMPARE(p.write(QVariant(QString("myName"))), true);
+ QCOMPARE(o->objectName(), QString("myName"));
+
+ delete o;
+
+ QCOMPARE(p.write(QVariant(QString("myName"))), false);
+ }
+
+ // Signal property
+ {
+ PropertyObject o;
+ QmlMetaProperty p(&o, "onClicked");
+ QCOMPARE(p.write(QVariant("console.log(1921)")), false);
+
+ QVERIFY(0 == p.setSignalExpression(new QmlExpression()));
+ QVERIFY(0 != p.signalExpression());
+
+ QCOMPARE(p.write(QVariant("console.log(1921)")), false);
+
+ QVERIFY(0 != p.signalExpression());
+ }
+
+ // Value-type property
+ {
+ PropertyObject o;
+ QmlMetaProperty p(&o, "wrectProperty");
+
+ QCOMPARE(o.wrectProperty(), QRect());
+ QCOMPARE(p.write(QRect(1, 13, 99, 8)), true);
+ QCOMPARE(o.wrectProperty(), QRect(1, 13, 99, 8));
+
+ QmlMetaProperty p2 = QmlMetaProperty::createProperty(&o, "wrectProperty.x");
+ QCOMPARE(p2.read(), QVariant(1));
+ QCOMPARE(p2.write(QVariant(6)), true);
+ QCOMPARE(p2.read(), QVariant(6));
+ QCOMPARE(o.wrectProperty(), QRect(6, 13, 99, 8));
+ }
+
+ // URL-property
+ {
+ PropertyObject o;
+ QmlMetaProperty p(&o, "url");
+
+ QCOMPARE(p.write(QUrl("main.qml")), true);
+ QCOMPARE(o.url(), QUrl("main.qml"));
+
+ QmlMetaProperty p2(&o, "url", engine.rootContext());
+
+ QUrl result = engine.baseUrl().resolved(QUrl("main.qml"));
+ QVERIFY(result != QUrl("main.qml"));
+
+ QCOMPARE(p2.write(QUrl("main.qml")), true);
+ QCOMPARE(o.url(), result);
+ }
+
+ // Attached property
+ {
+ QmlComponent component(&engine);
+ component.setData("import Test 1.0\nMyContainer { }", QUrl());
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QmlMetaProperty p = QmlMetaProperty::createProperty(object, "MyContainer.foo", qmlContext(object));
+ p.write(QVariant(99));
+ QCOMPARE(p.read(), QVariant(99));
+ delete object;
+ }
+ {
+ QmlComponent component(&engine);
+ component.setData("import Test 1.0 as Foo\nFoo.MyContainer { Foo.MyContainer.foo: 10 }", QUrl());
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QmlMetaProperty p = QmlMetaProperty::createProperty(object, "Foo.MyContainer.foo", qmlContext(object));
+ p.write(QVariant(99));
+ QCOMPARE(p.read(), QVariant(99));
+ delete object;
+ }
+}
+
+void tst_qmlmetaproperty::reset()
+{
+ // Invalid
+ {
+ QmlMetaProperty p;
+ QCOMPARE(p.isResettable(), false);
+ QCOMPARE(p.reset(), false);
+ }
+
+ // Read-only default prop
+ {
+ PropertyObject o;
+ QmlMetaProperty p(&o);
+ QCOMPARE(p.isResettable(), false);
+ QCOMPARE(p.reset(), false);
+ }
+
+ // Invalid default prop
+ {
+ QObject o;
+ QmlMetaProperty p(&o);
+ QCOMPARE(p.isResettable(), false);
+ QCOMPARE(p.reset(), false);
+ }
+
+ // Non-resettable-only prop by name
+ {
+ PropertyObject o;
+ QmlMetaProperty p(&o, QString("defaultProperty"));
+ QCOMPARE(p.isResettable(), false);
+ QCOMPARE(p.reset(), false);
+ }
+
+ // Resettable prop by name
+ {
+ PropertyObject o;
+ QmlMetaProperty p(&o, QString("resettableProperty"));
+
+ QCOMPARE(p.read(), QVariant(9));
+ QCOMPARE(p.write(QVariant(11)), true);
+ QCOMPARE(p.read(), QVariant(11));
+
+ QCOMPARE(p.isResettable(), true);
+ QCOMPARE(p.reset(), true);
+
+ QCOMPARE(p.read(), QVariant(9));
+ }
+
+ // Deleted object
+ {
+ PropertyObject *o = new PropertyObject;
+
+ QmlMetaProperty p(o, QString("resettableProperty"));
+
+ QCOMPARE(p.isResettable(), true);
+ QCOMPARE(p.reset(), true);
+
+ delete o;
+
+ QCOMPARE(p.isResettable(), false);
+ QCOMPARE(p.reset(), false);
+ }
+
+ // Signal property
+ {
+ PropertyObject o;
+ QmlMetaProperty p(&o, "onClicked");
+
+ QCOMPARE(p.isResettable(), false);
+ QCOMPARE(p.reset(), false);
+ }
+}
+
+void tst_qmlmetaproperty::writeObjectToList()
+{
+ QmlComponent containerComponent(&engine);
+ containerComponent.setData("import Test 1.0\nMyContainer { children: MyQmlObject {} }", QUrl());
+ MyContainer *container = qobject_cast<MyContainer*>(containerComponent.create());
+ QVERIFY(container != 0);
+ QVERIFY(container->children()->size() == 1);
+
+ MyQmlObject *object = new MyQmlObject;
+ QmlMetaProperty prop(container, "children");
+ prop.write(qVariantFromValue(object));
+ QCOMPARE(container->children()->size(), 2);
+ QCOMPARE(container->children()->at(1), object);
+}
+
+Q_DECLARE_METATYPE(QList<QObject *>);
+void tst_qmlmetaproperty::writeListToList()
+{
+ QmlComponent containerComponent(&engine);
+ containerComponent.setData("import Test 1.0\nMyContainer { children: MyQmlObject {} }", QUrl());
+ MyContainer *container = qobject_cast<MyContainer*>(containerComponent.create());
+ QVERIFY(container != 0);
+ QVERIFY(container->children()->size() == 1);
+
+ QList<QObject*> objList;
+ objList << new MyQmlObject() << new MyQmlObject() << new MyQmlObject() << new MyQmlObject();
+ QmlMetaProperty prop(container, "children");
+ prop.write(qVariantFromValue(objList));
+ QCOMPARE(container->children()->size(), 4);
+
+ //XXX need to try this with read/write prop (for read-only it correctly doesn't write)
+ /*QList<MyQmlObject*> typedObjList;
+ typedObjList << new MyQmlObject();
+ prop.write(qVariantFromValue(&typedObjList));
+ QCOMPARE(container->children()->size(), 1);*/
+}
+
+void tst_qmlmetaproperty::writeObjectToQmlList()
+{
+ QmlComponent containerComponent(&engine);
+ containerComponent.setData("import Test 1.0\nMyContainer { qmlChildren: MyQmlObject {} }", QUrl());
+ MyContainer *container = qobject_cast<MyContainer*>(containerComponent.create());
+ QVERIFY(container != 0);
+ QVERIFY(container->qmlChildren()->size() == 1);
+
+ MyQmlObject *object = new MyQmlObject;
+ QmlMetaProperty prop(container, "qmlChildren");
+ prop.write(qVariantFromValue(object));
+ QCOMPARE(container->qmlChildren()->size(), 2);
+ QCOMPARE(container->qmlChildren()->at(1), object);
+}
+
+QTEST_MAIN(tst_qmlmetaproperty)
+
+#include "tst_qmlmetaproperty.moc"
diff --git a/tests/auto/declarative/qmlmetatype/qmlmetatype.pro b/tests/auto/declarative/qmlmetatype/qmlmetatype.pro
new file mode 100644
index 0000000..3a9a400
--- /dev/null
+++ b/tests/auto/declarative/qmlmetatype/qmlmetatype.pro
@@ -0,0 +1,6 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+SOURCES += tst_qmlmetatype.cpp
+macx:CONFIG -= app_bundle
+
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlmetatype/tst_qmlmetatype.cpp b/tests/auto/declarative/qmlmetatype/tst_qmlmetatype.cpp
new file mode 100644
index 0000000..abc1fbe
--- /dev/null
+++ b/tests/auto/declarative/qmlmetatype/tst_qmlmetatype.cpp
@@ -0,0 +1,436 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qtest.h>
+#include <QmlMetaType>
+#include <QLocale>
+#include <QPixmap>
+#include <QBitmap>
+#include <QPen>
+#include <QTextLength>
+#include <QMatrix4x4>
+#include <QVector2D>
+#include <QVector3D>
+#include <QVector4D>
+#include <QQuaternion>
+#include <qml.h>
+
+class tst_qmlmetatype : public QObject
+{
+ Q_OBJECT
+public:
+ tst_qmlmetatype() {}
+
+private slots:
+ void copy();
+
+ void qmlParserStatusCast();
+ void qmlPropertyValueSourceCast();
+ void qmlPropertyValueInterceptorCast();
+
+ void isList();
+ void isQmlList();
+
+ void listCount();
+ void listAt();
+
+ void defaultObject();
+};
+
+class TestType : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int foo READ foo);
+
+ Q_CLASSINFO("DefaultProperty", "foo");
+public:
+ int foo() { return 0; }
+};
+QML_DECLARE_TYPE(TestType);
+QML_DEFINE_TYPE(Test, 1, 0, TestType, TestType);
+
+class ParserStatusTestType : public QObject, public QmlParserStatus
+{
+ Q_OBJECT
+ Q_CLASSINFO("DefaultProperty", "foo"); // Missing default property
+};
+QML_DECLARE_TYPE(ParserStatusTestType);
+QML_DEFINE_TYPE(Test, 1, 0, ParserStatusTestType, ParserStatusTestType);
+
+class ValueSourceTestType : public QObject, public QmlPropertyValueSource
+{
+ Q_OBJECT
+ Q_INTERFACES(QmlPropertyValueSource)
+public:
+ virtual void setTarget(const QmlMetaProperty &) {}
+};
+QML_DECLARE_TYPE(ValueSourceTestType);
+QML_DEFINE_TYPE(Test, 1, 0, ValueSourceTestType, ValueSourceTestType);
+
+class ValueInterceptorTestType : public QObject, public QmlPropertyValueInterceptor
+{
+ Q_OBJECT
+ Q_INTERFACES(QmlPropertyValueInterceptor)
+public:
+ virtual void setTarget(const QmlMetaProperty &) {}
+ virtual void write(const QVariant &) {}
+};
+QML_DECLARE_TYPE(ValueInterceptorTestType);
+QML_DEFINE_TYPE(Test, 1, 0, ValueInterceptorTestType, ValueInterceptorTestType);
+
+
+#define COPY_TEST(cpptype, metatype, value, defaultvalue) \
+{ \
+ cpptype v = (value); cpptype v2 = (value); \
+ QVERIFY(QmlMetaType::copy(QMetaType:: metatype, &v, 0)); \
+ QVERIFY(v == (defaultvalue)); \
+ QVERIFY(QmlMetaType::copy(QMetaType:: metatype, &v, &v2)); \
+ QVERIFY(v == (value)); \
+}
+
+#define QT_COPY_TEST(type, value) \
+{ \
+ type v = (value); type v2 = (value); \
+ QVERIFY(QmlMetaType::copy(QMetaType:: type, &v, 0)); \
+ QVERIFY(v == (type ())); \
+ QVERIFY(QmlMetaType::copy(QMetaType:: type, &v, &v2)); \
+ QVERIFY(v == (value)); \
+}
+
+void tst_qmlmetatype::copy()
+{
+ QVERIFY(QmlMetaType::copy(QMetaType::Void, 0, 0));
+
+ COPY_TEST(bool, Bool, true, false);
+ COPY_TEST(int, Int, 10, 0);
+ COPY_TEST(unsigned int, UInt, 10, 0);
+ COPY_TEST(long long, LongLong, 10, 0);
+ COPY_TEST(unsigned long long, ULongLong, 10, 0);
+ COPY_TEST(double, Double, 19.2, 0);
+
+ QT_COPY_TEST(QChar, QChar('a'));
+
+ QVariantMap variantMap;
+ variantMap.insert("Hello World!", QVariant(10));
+ QT_COPY_TEST(QVariantMap, variantMap);
+
+ QT_COPY_TEST(QVariantList, QVariantList() << QVariant(19.2));
+ QT_COPY_TEST(QString, QString("QML Rocks!"));
+ QT_COPY_TEST(QStringList, QStringList() << "QML" << "Rocks");
+ QT_COPY_TEST(QByteArray, QByteArray("0x1102DDD"));
+ QT_COPY_TEST(QBitArray, QBitArray(102, true));
+ QT_COPY_TEST(QDate, QDate::currentDate());
+ QT_COPY_TEST(QTime, QTime::currentTime());
+ QT_COPY_TEST(QDateTime, QDateTime::currentDateTime());
+ QT_COPY_TEST(QUrl, QUrl("http://www.nokia.com"));
+ QT_COPY_TEST(QLocale, QLocale(QLocale::English, QLocale::Australia));
+ QT_COPY_TEST(QRect, QRect(-10, 10, 102, 99));
+ QT_COPY_TEST(QRectF, QRectF(-10.2, 1.2, 102, 99.6));
+ QT_COPY_TEST(QSize, QSize(100, 2));
+ QT_COPY_TEST(QSizeF, QSizeF(20.2, -100234.2));
+ QT_COPY_TEST(QLine, QLine(0, 0, 100, 100));
+ QT_COPY_TEST(QLineF, QLineF(-10.2, 0, 103, 1));
+ QT_COPY_TEST(QPoint, QPoint(-1912, 1613));
+ QT_COPY_TEST(QPointF, QPointF(-908.1, 1612));
+ QT_COPY_TEST(QRegExp, QRegExp("(\\d+)(?:\\s*)(cm|inch)"));
+
+ QVariantHash variantHash;
+ variantHash.insert("Hello World!", QVariant(19));
+ QT_COPY_TEST(QVariantHash, variantHash);
+
+#ifdef QT3_SUPPORT
+ QT_COPY_TEST(QColorGroup, QColorGroup(Qt::red, Qt::red, Qt::red, Qt::red, Qt::red, Qt::red, Qt::red));
+#endif
+
+ QT_COPY_TEST(QFont, QFont("Helvetica", 1024));
+
+ {
+ QPixmap v = QPixmap(100, 100); QPixmap v2 = QPixmap(100, 100);
+ QVERIFY(QmlMetaType::copy(QMetaType::QPixmap, &v, 0));
+ QVERIFY(v.size() == QPixmap().size());
+ QVERIFY(QmlMetaType::copy(QMetaType::QPixmap , &v, &v2));
+ QVERIFY(v.size() == QPixmap(100,100).size());
+ }
+
+ QT_COPY_TEST(QBrush, QBrush(Qt::blue));
+ QT_COPY_TEST(QColor, QColor("lightsteelblue"));
+ QT_COPY_TEST(QPalette, QPalette(Qt::green));
+
+ {
+ QPixmap icon(100, 100);
+
+ QIcon v = QIcon(icon); QIcon v2 = QIcon(icon);
+ QVERIFY(QmlMetaType::copy(QMetaType::QIcon, &v, 0));
+ QVERIFY(v.isNull() == QIcon().isNull());
+ QVERIFY(QmlMetaType::copy(QMetaType::QIcon , &v, &v2));
+ QVERIFY(v.isNull() == QIcon(icon).isNull());
+ }
+
+ {
+ QImage v = QImage(100, 100, QImage::Format_RGB32);
+ QImage v2 = QImage(100, 100, QImage::Format_RGB32);
+ QVERIFY(QmlMetaType::copy(QMetaType::QImage, &v, 0));
+ QVERIFY(v.size() == QImage().size());
+ QVERIFY(QmlMetaType::copy(QMetaType::QImage , &v, &v2));
+ QVERIFY(v.size() == QImage(100,100, QImage::Format_RGB32).size());
+ }
+
+ QT_COPY_TEST(QPolygon, QPolygon(QRect(100, 100, 200, 103)));
+ QT_COPY_TEST(QRegion, QRegion(QRect(0, 10, 99, 87)));
+
+ {
+ QBitmap v = QBitmap(100, 100); QBitmap v2 = QBitmap(100, 100);
+ QVERIFY(QmlMetaType::copy(QMetaType::QBitmap, &v, 0));
+ QVERIFY(v.size() == QBitmap().size());
+ QVERIFY(QmlMetaType::copy(QMetaType::QBitmap , &v, &v2));
+ QVERIFY(v.size() == QBitmap(100,100).size());
+ }
+
+ {
+ QCursor v = QCursor(Qt::SizeFDiagCursor); QCursor v2 = QCursor(Qt::SizeFDiagCursor);
+ QVERIFY(QmlMetaType::copy(QMetaType::QCursor, &v, 0));
+ QVERIFY(v.shape() == QCursor().shape());
+ QVERIFY(QmlMetaType::copy(QMetaType::QCursor , &v, &v2));
+ QVERIFY(v.shape() == QCursor(Qt::SizeFDiagCursor).shape());
+ }
+
+ QT_COPY_TEST(QSizePolicy, QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Maximum));
+ QT_COPY_TEST(QKeySequence, QKeySequence("Ctrl+O"));
+ QT_COPY_TEST(QPen, QPen(Qt::red));
+ QT_COPY_TEST(QTextLength, QTextLength(QTextLength::FixedLength, 10.2));
+ QT_COPY_TEST(QTextFormat, QTextFormat(QTextFormat::ListFormat));
+ QT_COPY_TEST(QMatrix, QMatrix().translate(10, 10));
+ QT_COPY_TEST(QTransform, QTransform().translate(10, 10));
+ QT_COPY_TEST(QMatrix4x4, QMatrix4x4(1,0,2,3,0,1,0,0,9,0,1,0,0,0,10,1));
+ QT_COPY_TEST(QVector2D, QVector2D(10.2, 1));
+ QT_COPY_TEST(QVector3D, QVector3D(10.2, 1, -2));
+ QT_COPY_TEST(QVector4D, QVector4D(10.2, 1, -2, 1.2));
+ QT_COPY_TEST(QQuaternion, QQuaternion(1.0, 10.2, 1, -2));
+
+ int voidValue;
+ COPY_TEST(void *, VoidStar, (void *)&voidValue, (void *)0);
+ COPY_TEST(long, Long, 10, 0);
+ COPY_TEST(short, Short, 10, 0);
+ COPY_TEST(char, Char, 'a', 0);
+ COPY_TEST(unsigned long, ULong, 10, 0);
+ COPY_TEST(unsigned short, UShort, 10, 0);
+ COPY_TEST(unsigned char, UChar, 'a', 0);
+ COPY_TEST(float, Float, 10.5, 0);
+
+ QObject objectValue;
+ QWidget widgetValue;
+ COPY_TEST(QObject *, QObjectStar, &objectValue, 0);
+ COPY_TEST(QWidget *, QWidgetStar, &widgetValue, 0);
+ COPY_TEST(qreal, QReal, 10.2, 0);
+
+ {
+ QVariant tv = QVariant::fromValue(QVariant(10));
+ QVariant v(tv); QVariant v2(tv);
+ QVERIFY(QmlMetaType::copy(qMetaTypeId<QVariant>(), &v, 0));
+ QVERIFY(v == QVariant());
+ QVERIFY(QmlMetaType::copy(qMetaTypeId<QVariant>(), &v, &v2));
+ QVERIFY(v == tv);
+ }
+
+ {
+ TestType t; QVariant tv = QVariant::fromValue(&t);
+
+ QVariant v(tv); QVariant v2(tv);
+ QVERIFY(QmlMetaType::copy(qMetaTypeId<TestType *>(), &v, 0));
+ QVERIFY(v == QVariant::fromValue((TestType *)0));
+ QVERIFY(QmlMetaType::copy(qMetaTypeId<TestType *>(), &v, &v2));
+ QVERIFY(v == tv);
+ }
+}
+
+void tst_qmlmetatype::qmlParserStatusCast()
+{
+ QCOMPARE(QmlMetaType::qmlParserStatusCast(QVariant::Int), -1);
+ QCOMPARE(QmlMetaType::qmlParserStatusCast(qMetaTypeId<TestType *>()), -1);
+ QCOMPARE(QmlMetaType::qmlParserStatusCast(qMetaTypeId<ValueSourceTestType *>()), -1);
+
+ int cast = QmlMetaType::qmlParserStatusCast(qMetaTypeId<ParserStatusTestType *>());
+ QVERIFY(cast != -1);
+ QVERIFY(cast != 0);
+
+ ParserStatusTestType t;
+ QVERIFY(reinterpret_cast<char *>((QObject *)&t) != reinterpret_cast<char *>((QmlParserStatus *)&t));
+
+ QmlParserStatus *status = reinterpret_cast<QmlParserStatus *>(reinterpret_cast<char *>((QObject *)&t) + cast);
+ QCOMPARE(status, &t);
+}
+
+void tst_qmlmetatype::qmlPropertyValueSourceCast()
+{
+ QCOMPARE(QmlMetaType::qmlPropertyValueSourceCast(QVariant::Int), -1);
+ QCOMPARE(QmlMetaType::qmlPropertyValueSourceCast(qMetaTypeId<TestType *>()), -1);
+ QCOMPARE(QmlMetaType::qmlPropertyValueSourceCast(qMetaTypeId<ParserStatusTestType *>()), -1);
+
+ int cast = QmlMetaType::qmlPropertyValueSourceCast(qMetaTypeId<ValueSourceTestType *>());
+ QVERIFY(cast != -1);
+ QVERIFY(cast != 0);
+
+ ValueSourceTestType t;
+ QVERIFY(reinterpret_cast<char *>((QObject *)&t) != reinterpret_cast<char *>((QmlPropertyValueSource *)&t));
+
+ QmlPropertyValueSource *source = reinterpret_cast<QmlPropertyValueSource *>(reinterpret_cast<char *>((QObject *)&t) + cast);
+ QCOMPARE(source, &t);
+}
+
+void tst_qmlmetatype::qmlPropertyValueInterceptorCast()
+{
+ QCOMPARE(QmlMetaType::qmlPropertyValueInterceptorCast(QVariant::Int), -1);
+ QCOMPARE(QmlMetaType::qmlPropertyValueInterceptorCast(qMetaTypeId<TestType *>()), -1);
+ QCOMPARE(QmlMetaType::qmlPropertyValueInterceptorCast(qMetaTypeId<ParserStatusTestType *>()), -1);
+
+ int cast = QmlMetaType::qmlPropertyValueInterceptorCast(qMetaTypeId<ValueInterceptorTestType *>());
+ QVERIFY(cast != -1);
+ QVERIFY(cast != 0);
+
+ ValueInterceptorTestType t;
+ QVERIFY(reinterpret_cast<char *>((QObject *)&t) != reinterpret_cast<char *>((QmlPropertyValueInterceptor *)&t));
+
+ QmlPropertyValueInterceptor *interceptor = reinterpret_cast<QmlPropertyValueInterceptor *>(reinterpret_cast<char *>((QObject *)&t) + cast);
+ QCOMPARE(interceptor, &t);
+}
+
+void tst_qmlmetatype::isList()
+{
+ QCOMPARE(QmlMetaType::isList(QVariant()), false);
+ QCOMPARE(QmlMetaType::isList(QVariant::Invalid), false);
+ QCOMPARE(QmlMetaType::isList(QVariant::Int), false);
+ QCOMPARE(QmlMetaType::isList(QVariant(10)), false);
+
+ QList<TestType *> list;
+ QmlConcreteList<TestType *> qmllist;
+
+ QCOMPARE(QmlMetaType::isList(qMetaTypeId<QList<TestType *>*>()), true);
+ QCOMPARE(QmlMetaType::isList(QVariant::fromValue(&list)), true);
+ QCOMPARE(QmlMetaType::isList(qMetaTypeId<QmlList<TestType *>*>()), false);
+ QCOMPARE(QmlMetaType::isList(QVariant::fromValue((QmlList<TestType *>*)&qmllist)), false);
+}
+
+void tst_qmlmetatype::isQmlList()
+{
+ QCOMPARE(QmlMetaType::isQmlList(QVariant::Invalid), false);
+ QCOMPARE(QmlMetaType::isQmlList(QVariant::Int), false);
+
+ QCOMPARE(QmlMetaType::isQmlList(qMetaTypeId<QList<TestType *>*>()), false);
+ QCOMPARE(QmlMetaType::isQmlList(qMetaTypeId<QmlList<TestType *>*>()), true);
+}
+
+void tst_qmlmetatype::listCount()
+{
+ QCOMPARE(QmlMetaType::listCount(QVariant()), 0);
+ QCOMPARE(QmlMetaType::listCount(QVariant(10)), 0);
+
+ QList<TestType *> list;
+ QVariant listVar = QVariant::fromValue(&list);
+ QmlConcreteList<TestType *> qmllist;
+ QVariant qmllistVar = QVariant::fromValue((QmlList<TestType *>*)&qmllist);
+
+ QCOMPARE(QmlMetaType::listCount(listVar), 0);
+ QCOMPARE(QmlMetaType::listCount(qmllistVar), 0);
+
+ list.append(0); list.append(0); list.append(0);
+ qmllist.append(0); qmllist.append(0); qmllist.append(0);
+
+ QCOMPARE(QmlMetaType::listCount(listVar), 3);
+ QCOMPARE(QmlMetaType::listCount(qmllistVar), 0);
+}
+
+void tst_qmlmetatype::listAt()
+{
+ QCOMPARE(QmlMetaType::listAt(QVariant(), 0), QVariant());
+ QCOMPARE(QmlMetaType::listAt(QVariant(10), 0), QVariant());
+ QCOMPARE(QmlMetaType::listAt(QVariant(), 10), QVariant());
+ QCOMPARE(QmlMetaType::listAt(QVariant(10), 10), QVariant());
+ QCOMPARE(QmlMetaType::listAt(QVariant(), -10), QVariant());
+ QCOMPARE(QmlMetaType::listAt(QVariant(10), -10), QVariant());
+
+ QList<TestType *> list;
+ QVariant listVar = QVariant::fromValue(&list);
+ QmlConcreteList<TestType *> qmllist;
+ QVariant qmllistVar = QVariant::fromValue((QmlList<TestType *>*)&qmllist);
+
+ QCOMPARE(QmlMetaType::listAt(listVar, 0), QVariant());
+ QCOMPARE(QmlMetaType::listAt(listVar, 2), QVariant());
+ QCOMPARE(QmlMetaType::listAt(listVar, -1), QVariant());
+
+ QCOMPARE(QmlMetaType::listAt(qmllistVar, 0), QVariant());
+ QCOMPARE(QmlMetaType::listAt(qmllistVar, 2), QVariant());
+ QCOMPARE(QmlMetaType::listAt(qmllistVar, -1), QVariant());
+
+ TestType ttype;
+ QVariant ttypeVar = QVariant::fromValue(&ttype);
+ QVariant nullttypeVar = QVariant::fromValue((TestType *)0);
+
+ list.append(0); list.append(&ttype); list.append(0);
+ qmllist.append(0); qmllist.append(&ttype); qmllist.append(0);
+
+ QCOMPARE(QmlMetaType::listAt(listVar, 0), nullttypeVar);
+ QCOMPARE(QmlMetaType::listAt(listVar, 1), ttypeVar);
+ QCOMPARE(QmlMetaType::listAt(listVar, -1), QVariant());
+
+ QCOMPARE(QmlMetaType::listAt(qmllistVar, 0), QVariant());
+ QCOMPARE(QmlMetaType::listAt(qmllistVar, 2), QVariant());
+ QCOMPARE(QmlMetaType::listAt(qmllistVar, -1), QVariant());
+}
+
+void tst_qmlmetatype::defaultObject()
+{
+ QVERIFY(QmlMetaType::defaultProperty(&QObject::staticMetaObject).name() == 0);
+ QVERIFY(QmlMetaType::defaultProperty(&ParserStatusTestType::staticMetaObject).name() == 0);
+ QCOMPARE(QString(QmlMetaType::defaultProperty(&TestType::staticMetaObject).name()), QString("foo"));
+
+ QObject o;
+ TestType t;
+ ParserStatusTestType p;
+
+ QVERIFY(QmlMetaType::defaultProperty((QObject *)0).name() == 0);
+ QVERIFY(QmlMetaType::defaultProperty(&o).name() == 0);
+ QVERIFY(QmlMetaType::defaultProperty(&p).name() == 0);
+ QCOMPARE(QString(QmlMetaType::defaultProperty(&t).name()), QString("foo"));
+}
+
+QTEST_MAIN(tst_qmlmetatype)
+
+#include "tst_qmlmetatype.moc"
diff --git a/tests/auto/declarative/qmlmoduleplugin/plugin.qml b/tests/auto/declarative/qmlmoduleplugin/plugin.qml
new file mode 100644
index 0000000..f29ae24
--- /dev/null
+++ b/tests/auto/declarative/qmlmoduleplugin/plugin.qml
@@ -0,0 +1,3 @@
+import com.nokia.AutoTestQmlPluginType 1.0
+
+MyPluginType { value: 123 }
diff --git a/tests/auto/declarative/qmlmoduleplugin/plugin/plugin.cpp b/tests/auto/declarative/qmlmoduleplugin/plugin/plugin.cpp
new file mode 100644
index 0000000..10adda0
--- /dev/null
+++ b/tests/auto/declarative/qmlmoduleplugin/plugin/plugin.cpp
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtDeclarative/qmlmoduleplugin.h>
+#include <QtDeclarative/qml.h>
+#include <QDebug>
+
+class MyPluginType : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int value READ value WRITE setValue)
+
+public:
+ MyPluginType(QObject *parent=0) : QObject(parent)
+ {
+ qWarning("import worked");
+ }
+
+ int value() const { return v; }
+ void setValue(int i) { v = i; }
+
+private:
+ int v;
+};
+
+QML_DECLARE_TYPE(MyPluginType);
+QML_DEFINE_TYPE(com.nokia.AutoTestQmlPluginType,1,0,MyPluginType,MyPluginType);
+
+
+class MyPlugin : public QmlModulePlugin
+{
+ Q_OBJECT
+public:
+ MyPlugin()
+ {
+ qWarning("plugin created");
+ }
+
+ QStringList keys() const
+ {
+ return QStringList() << QLatin1String("com.nokia.AutoTestQmlPluginType");
+ }
+};
+
+#include "plugin.moc"
+
+Q_EXPORT_PLUGIN2(plugin, MyPlugin);
diff --git a/tests/auto/declarative/qmlmoduleplugin/plugin/plugin.pro b/tests/auto/declarative/qmlmoduleplugin/plugin/plugin.pro
new file mode 100644
index 0000000..0625ea3
--- /dev/null
+++ b/tests/auto/declarative/qmlmoduleplugin/plugin/plugin.pro
@@ -0,0 +1,5 @@
+TEMPLATE = lib
+CONFIG += plugin
+SOURCES = plugin.cpp
+QT = core declarative
+DESTDIR = qmlmodules
diff --git a/tests/auto/declarative/qmlmoduleplugin/qmlmoduleplugin.pro b/tests/auto/declarative/qmlmoduleplugin/qmlmoduleplugin.pro
new file mode 100644
index 0000000..c60743d
--- /dev/null
+++ b/tests/auto/declarative/qmlmoduleplugin/qmlmoduleplugin.pro
@@ -0,0 +1,7 @@
+QT = core
+TEMPLATE = subdirs
+SUBDIRS = plugin
+tst_qmlmoduleplugin_pro.depends += plugin
+SUBDIRS += tst_qmlmoduleplugin.pro
+
+
diff --git a/tests/auto/declarative/qmlmoduleplugin/tst_qmlmoduleplugin.cpp b/tests/auto/declarative/qmlmoduleplugin/tst_qmlmoduleplugin.cpp
new file mode 100644
index 0000000..3f97abd
--- /dev/null
+++ b/tests/auto/declarative/qmlmoduleplugin/tst_qmlmoduleplugin.cpp
@@ -0,0 +1,117 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <qdir.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <QDebug>
+
+class tst_qmlmoduleplugin : public QObject
+{
+ Q_OBJECT
+public:
+ tst_qmlmoduleplugin() {
+ QCoreApplication::addLibraryPath(QLatin1String(SRCDIR) + QDir::separator() + QLatin1String("plugin"));
+qDebug() << QLatin1String(SRCDIR) + QDir::separator() + QLatin1String("plugin");
+ }
+
+private slots:
+ void importsPlugin();
+};
+
+#define VERIFY_ERRORS(errorfile) \
+ if (!errorfile) { \
+ if (qgetenv("DEBUG") != "" && !component.errors().isEmpty()) \
+ qWarning() << "Unexpected Errors:" << component.errors(); \
+ QVERIFY(!component.isError()); \
+ QVERIFY(component.errors().isEmpty()); \
+ } else { \
+ QFile file(QLatin1String("data/") + QLatin1String(errorfile)); \
+ QVERIFY(file.open(QIODevice::ReadOnly)); \
+ QByteArray data = file.readAll(); \
+ file.close(); \
+ QList<QByteArray> expected = data.split('\n'); \
+ expected.removeAll(QByteArray("")); \
+ QList<QmlError> errors = component.errors(); \
+ QList<QByteArray> actual; \
+ for (int ii = 0; ii < errors.count(); ++ii) { \
+ const QmlError &error = errors.at(ii); \
+ QByteArray errorStr = QByteArray::number(error.line()) + ":" + \
+ QByteArray::number(error.column()) + ":" + \
+ error.description().toUtf8(); \
+ actual << errorStr; \
+ } \
+ if (qgetenv("DEBUG") != "" && expected != actual) \
+ qWarning() << "Expected:" << expected << "Actual:" << actual; \
+ if (qgetenv("QMLLANGUAGE_UPDATEERRORS") != "" && expected != actual) {\
+ QFile file(QLatin1String("data/") + QLatin1String(errorfile)); \
+ QVERIFY(file.open(QIODevice::WriteOnly)); \
+ for (int ii = 0; ii < actual.count(); ++ii) { \
+ file.write(actual.at(ii)); file.write("\n"); \
+ } \
+ file.close(); \
+ } else { \
+ QCOMPARE(expected, actual); \
+ } \
+ }
+
+inline QUrl TEST_FILE(const QString &filename)
+{
+ QFileInfo fileInfo(__FILE__);
+ return QUrl::fromLocalFile(fileInfo.absoluteDir().filePath(filename));
+}
+
+
+void tst_qmlmoduleplugin::importsPlugin()
+{
+ QmlEngine engine;
+ QTest::ignoreMessage(QtWarningMsg, "plugin created");
+ QTest::ignoreMessage(QtWarningMsg, "import worked");
+ QmlComponent component(&engine, TEST_FILE("plugin.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ QCOMPARE(object->property("value").toInt(),123);
+}
+
+QTEST_MAIN(tst_qmlmoduleplugin)
+
+#include "tst_qmlmoduleplugin.moc"
diff --git a/tests/auto/declarative/qmlmoduleplugin/tst_qmlmoduleplugin.pro b/tests/auto/declarative/qmlmoduleplugin/tst_qmlmoduleplugin.pro
new file mode 100644
index 0000000..3c8a568
--- /dev/null
+++ b/tests/auto/declarative/qmlmoduleplugin/tst_qmlmoduleplugin.pro
@@ -0,0 +1,4 @@
+load(qttest_p4)
+SOURCES = tst_qmlmoduleplugin.cpp
+QT += declarative
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlnumberformatter/qmlnumberformatter.pro b/tests/auto/declarative/qmlnumberformatter/qmlnumberformatter.pro
new file mode 100644
index 0000000..8113278
--- /dev/null
+++ b/tests/auto/declarative/qmlnumberformatter/qmlnumberformatter.pro
@@ -0,0 +1,5 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlnumberformatter.cpp
diff --git a/tests/auto/declarative/qmlnumberformatter/tst_qmlnumberformatter.cpp b/tests/auto/declarative/qmlnumberformatter/tst_qmlnumberformatter.cpp
new file mode 100644
index 0000000..bf71625
--- /dev/null
+++ b/tests/auto/declarative/qmlnumberformatter/tst_qmlnumberformatter.cpp
@@ -0,0 +1,222 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QDebug>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <private/qnumberformat_p.h>
+#include <private/qmlnumberformatter_p.h>
+
+class tst_numberformat : public QObject
+{
+ Q_OBJECT
+public:
+ tst_numberformat();
+
+ void init() {}
+ void initTestCase() {}
+
+ void cleanup() {}
+ void cleanupTestCase() {}
+
+private slots:
+ void text_data();
+ void text();
+
+private:
+ QStringList strings;
+ QStringList formats;
+ QStringList texts;
+};
+
+tst_numberformat::tst_numberformat()
+{
+ strings << "100.0"
+ << "12345"
+ << "1234567"
+ << "0.123"
+ << "0.9999"
+ << "0.989"
+ << "1"
+ << "1.0"
+ << "1.01";
+
+ formats << ""
+ << "0000"
+ << "0000.00"
+ << "##"
+ << "##.##"
+ << "#0.00#"
+ << "##,##0.##"
+ << "(000) 000 - 000"
+ << "00000,000.0000";
+
+ //US locale only.
+ texts << "100.000000"
+ << "12345.000000"
+ << "1234567.000000"
+ << "0.123000"
+ << "0.999900"
+ << "0.989000"
+ << "1.000000"
+ << "1.000000"
+ << "1.010000" //end ""
+ << "0100"
+ << "12345"
+ << "1234567"
+ << "0000"
+ << "0001"
+ << "0001"
+ << "0001"
+ << "0001"
+ << "0001" // end "0000"
+ << "0100.00"
+ << "12345.00"
+ << "1234567.00"
+ << "0000.12"
+ << "0001.00"
+ << "0000.99"
+ << "0001.00"
+ << "0001.00"
+ << "0001.01" // end "0000.00"
+ << "100"
+ << "12345"
+ << "1234567"
+ << "0"
+ << "1"
+ << "1"
+ << "1"
+ << "1"
+ << "1" // end "##"
+ << "100"//start "##.##"
+ << "12345"
+ << "1234567"
+ << "0.12"
+ << "1"
+ << "0.99"
+ << "1"
+ << "1"
+ << "1.01" // end "##.##" -- ### EXPECT FAIL ### QNumberFormat::formatDecimal() bug
+ << "100.00" //start "#0.00#"
+ << "12345.00"
+ << "1234567.00"
+ << "0.123"
+ << "1.00"
+ << "0.989"
+ << "1.00"
+ << "1.00"
+ << "1.01" //end "#0.00#"
+ << "100" //start "##,##0.##"
+ << "12,345"
+ << "1,234,567"
+ << "0.12"
+ << "1"
+ << "0.99"
+ << "1"
+ << "1"
+ << "1.01" //end "##,##0.##" -- ### EXPECT FAIL ### QNumberFormat::formatDecimal() bug
+ << "(000) 000 - 100" //start "(000) 000 - 000"
+ << "(000) 012 - 345"
+ << "(001) 234 - 567"
+ << "(000) 000 - 000"
+ << "(000) 000 - 001"
+ << "(000) 000 - 001"
+ << "(000) 000 - 001"
+ << "(000) 000 - 001"
+ << "(000) 000 - 001" // end "(000) 000 - 000"
+ << "00,000,100.0000" // start "00000,000.0000"
+ << "00,012,345.0000"
+ << "01,234,567.0000"
+ << "00,000,000.1230"
+ << "00,000,000.9999"
+ << "00,000,000.9890"
+ << "00,000,001.0000"
+ << "00,000,001.0000"
+ << "00,000,001.0100"; // end
+
+ qDebug() << "strings.size()" << strings.size()
+ << "\nformats.size()" << formats.size()
+ << "texts.size()" << texts.size();
+}
+
+void tst_numberformat::text_data()
+{
+ QTest::addColumn<QString>("string");
+ QTest::addColumn<QString>("format");
+ QTest::addColumn<QString>("text");
+
+ for (int j=0; j < formats.size(); j++)
+ {
+ for (int i=0; i < strings.size(); i++)
+ {
+ QTest::newRow(QString("%1, %2").arg(strings.at(i)).arg(formats.at(j)).toAscii())
+ << strings.at(i) << formats.at(j) << texts.at(j*formats.size()+i);
+ }
+ }
+
+}
+
+void tst_numberformat::text()
+{
+ QFETCH(QString, string);
+ QFETCH(QString, format);
+ QFETCH(QString, text);
+
+ QString componentStr = QString("import Qt 4.6\nNumberFormatter { number: ") + string + QString("; format: \"") + format + QString("\" }");
+
+ QmlEngine engine;
+ QmlComponent formatterComponent(&engine);
+ formatterComponent.setData(componentStr.toUtf8(), QUrl::fromLocalFile(""));
+ if(formatterComponent.isError())
+ qDebug() << formatterComponent.errors();
+ QVERIFY(formatterComponent.isReady());
+ QmlNumberFormatter *formatter = qobject_cast<QmlNumberFormatter*>(formatterComponent.create());
+ QVERIFY(formatter != 0);
+
+ QCOMPARE(formatter->format(), format);
+ QCOMPARE(formatter->text(), text);
+
+ delete formatter;
+}
+
+QTEST_MAIN(tst_numberformat)
+
+#include "tst_qmlnumberformatter.moc"
diff --git a/tests/auto/declarative/qmlpixmapcache/data/exists.png b/tests/auto/declarative/qmlpixmapcache/data/exists.png
new file mode 100644
index 0000000..399bd0b
--- /dev/null
+++ b/tests/auto/declarative/qmlpixmapcache/data/exists.png
Binary files differ
diff --git a/tests/auto/declarative/qmlpixmapcache/data/exists1.png b/tests/auto/declarative/qmlpixmapcache/data/exists1.png
new file mode 100644
index 0000000..399bd0b
--- /dev/null
+++ b/tests/auto/declarative/qmlpixmapcache/data/exists1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlpixmapcache/data/exists2.png b/tests/auto/declarative/qmlpixmapcache/data/exists2.png
new file mode 100644
index 0000000..399bd0b
--- /dev/null
+++ b/tests/auto/declarative/qmlpixmapcache/data/exists2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlpixmapcache/qmlpixmapcache.pro b/tests/auto/declarative/qmlpixmapcache/qmlpixmapcache.pro
new file mode 100644
index 0000000..423fa2f
--- /dev/null
+++ b/tests/auto/declarative/qmlpixmapcache/qmlpixmapcache.pro
@@ -0,0 +1,9 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+QT += network
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlpixmapcache.cpp
+
+# QMAKE_CXXFLAGS = -fprofile-arcs -ftest-coverage
+# LIBS += -lgcov
diff --git a/tests/auto/declarative/qmlpixmapcache/tst_qmlpixmapcache.cpp b/tests/auto/declarative/qmlpixmapcache/tst_qmlpixmapcache.cpp
new file mode 100644
index 0000000..50de8d5
--- /dev/null
+++ b/tests/auto/declarative/qmlpixmapcache/tst_qmlpixmapcache.cpp
@@ -0,0 +1,282 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtTest/QtTest>
+#include <private/qmlpixmapcache_p.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QNetworkReply>
+
+// These don't let normal people run tests!
+//#include "../network-settings.h"
+
+class tst_qmlpixmapcache : public QObject
+{
+ Q_OBJECT
+public:
+ tst_qmlpixmapcache() :
+ thisfile(QUrl::fromLocalFile(__FILE__))
+ {
+ }
+
+private slots:
+ void single();
+ void single_data();
+ void parallel();
+ void parallel_data();
+
+private:
+ QmlEngine engine;
+ QUrl thisfile;
+};
+
+
+static int slotters=0;
+
+class Slotter : public QObject
+{
+ Q_OBJECT
+public:
+ Slotter()
+ {
+ gotslot = false;
+ slotters++;
+ }
+ bool gotslot;
+
+public slots:
+ void got()
+ {
+ gotslot = true;
+ --slotters;
+ if (slotters==0)
+ QTestEventLoop::instance().exitLoop();
+ }
+};
+
+#ifndef QT_NO_LOCALFILE_OPTIMIZED_QML
+static const bool localfile_optimized = true;
+#else
+static const bool localfile_optimized = false;
+#endif
+
+void tst_qmlpixmapcache::single_data()
+{
+ // Note, since QmlPixmapCache is shared, tests affect each other!
+ // so use different files fore all test functions.
+
+ QTest::addColumn<QUrl>("target");
+ QTest::addColumn<bool>("incache");
+ QTest::addColumn<bool>("exists");
+ QTest::addColumn<bool>("neterror");
+
+ // File URLs are optimized
+ QTest::newRow("local") << thisfile.resolved(QUrl("data/exists.png")) << localfile_optimized << true << false;
+ QTest::newRow("local") << thisfile.resolved(QUrl("data/notexists.png")) << localfile_optimized << false << false;
+ QTest::newRow("remote") << QUrl("http://qt.nokia.com/logo.png") << false << true << false;
+ QTest::newRow("remote") << QUrl("http://qt.nokia.com/thereisnologo.png") << false << false << true;
+}
+
+void tst_qmlpixmapcache::single()
+{
+ QFETCH(QUrl, target);
+ QFETCH(bool, incache);
+ QFETCH(bool, exists);
+ QFETCH(bool, neterror);
+
+ if (neterror) {
+ QString expected = "\"Error downloading " + target.toString() + " - server replied: Not Found\" ";
+ QTest::ignoreMessage(QtWarningMsg, expected.toLatin1());
+ } else if (!exists) {
+ QString expected = "Cannot open QUrl( \"" + target.toString() + "\" ) ";
+ QTest::ignoreMessage(QtWarningMsg, expected.toLatin1());
+ }
+
+ QPixmap pixmap;
+ QVERIFY(pixmap.width() <= 0); // Check Qt assumption
+ QmlPixmapReply::Status status = QmlPixmapCache::get(target, &pixmap);
+
+ if (incache) {
+ if (exists) {
+ QVERIFY(status == QmlPixmapReply::Ready);
+ QVERIFY(pixmap.width() > 0);
+ } else {
+ QVERIFY(status == QmlPixmapReply::Error);
+ QVERIFY(pixmap.width() <= 0);
+ }
+ } else {
+ QmlPixmapReply *reply = QmlPixmapCache::request(&engine, target);
+ QVERIFY(reply);
+ QVERIFY(pixmap.width() <= 0);
+
+ Slotter getter;
+ connect(reply, SIGNAL(finished()), &getter, SLOT(got()));
+ QTestEventLoop::instance().enterLoop(10);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+ QVERIFY(getter.gotslot);
+ if (exists) {
+ QVERIFY(QmlPixmapCache::get(target, &pixmap) == QmlPixmapReply::Ready);
+ QVERIFY(pixmap.width() > 0);
+ } else {
+ QVERIFY(QmlPixmapCache::get(target, &pixmap) == QmlPixmapReply::Error);
+ QVERIFY(pixmap.width() <= 0);
+ }
+ }
+
+ QCOMPARE(QmlPixmapCache::pendingRequests(), 0);
+}
+
+void tst_qmlpixmapcache::parallel_data()
+{
+ // Note, since QmlPixmapCache is shared, tests affect each other!
+ // so use different files fore all test functions.
+
+ QTest::addColumn<QUrl>("target1");
+ QTest::addColumn<QUrl>("target2");
+ QTest::addColumn<int>("incache");
+ QTest::addColumn<int>("cancel"); // which one to cancel
+ QTest::addColumn<int>("requests");
+
+ QTest::newRow("local")
+ << thisfile.resolved(QUrl("data/exists1.png"))
+ << thisfile.resolved(QUrl("data/exists2.png"))
+ << (localfile_optimized ? 2 : 0)
+ << -1
+ << (localfile_optimized ? 0 : 2)
+ ;
+
+ QTest::newRow("remote")
+ << QUrl("http://qt.nokia.com/images/template/checkbox-on.png")
+ << QUrl("http://qt.nokia.com/images/products/qt-logo/image_tile")
+ << 0
+ << -1
+ << 2
+ ;
+
+ QTest::newRow("remoteagain")
+ << QUrl("http://qt.nokia.com/images/template/checkbox-on.png")
+ << QUrl("http://qt.nokia.com/images/products/qt-logo/image_tile")
+ << 2
+ << -1
+ << 0
+ ;
+
+ QTest::newRow("remotecopy")
+ << QUrl("http://qt.nokia.com/images/template/checkbox-off.png")
+ << QUrl("http://qt.nokia.com/images/template/checkbox-off.png")
+ << 0
+ << -1
+ << 1
+ ;
+
+ QTest::newRow("remotecopycancel")
+ << QUrl("http://qt.nokia.com/rounded_block_bg.png")
+ << QUrl("http://qt.nokia.com/rounded_block_bg.png")
+ << 0
+ << 0
+ << 1
+ ;
+}
+
+void tst_qmlpixmapcache::parallel()
+{
+ QFETCH(QUrl, target1);
+ QFETCH(QUrl, target2);
+ QFETCH(int, incache);
+ QFETCH(int, cancel);
+ QFETCH(int, requests);
+
+ QList<QUrl> targets;
+ targets << target1 << target2;
+
+ QList<QmlPixmapReply*> replies;
+ QList<Slotter*> getters;
+ for (int i=0; i<targets.count(); ++i) {
+ QUrl target = targets.at(i);
+ QPixmap pixmap;
+ QmlPixmapReply::Status status = QmlPixmapCache::get(target, &pixmap);
+ QmlPixmapReply *reply = 0;
+ if (status != QmlPixmapReply::Error && status != QmlPixmapReply::Ready)
+ reply = QmlPixmapCache::request(&engine, target);
+ replies.append(reply);
+ if (!reply) {
+ QVERIFY(pixmap.width() > 0);
+ getters.append(0);
+ } else {
+ QVERIFY(pixmap.width() <= 0);
+ getters.append(new Slotter);
+ connect(reply, SIGNAL(finished()), getters[i], SLOT(got()));
+ }
+ }
+
+ QCOMPARE(incache+slotters, targets.count());
+ QCOMPARE(QmlPixmapCache::pendingRequests(), requests);
+
+ if (cancel >= 0) {
+ QmlPixmapCache::cancel(targets.at(cancel), getters[cancel]);
+ slotters--;
+ }
+
+ if (slotters) {
+ QTestEventLoop::instance().enterLoop(10);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+ }
+
+ for (int i=0; i<targets.count(); ++i) {
+ QmlPixmapReply *reply = replies[i];
+ if (reply) {
+ if (i == cancel) {
+ QVERIFY(!getters[i]->gotslot);
+ } else {
+ QVERIFY(getters[i]->gotslot);
+ QPixmap pixmap;
+ QVERIFY(QmlPixmapCache::get(targets[i], &pixmap) == QmlPixmapReply::Ready);
+ QVERIFY(pixmap.width() > 0);
+ }
+ delete getters[i];
+ }
+ }
+
+ QCOMPARE(QmlPixmapCache::pendingRequests(), 0);
+}
+
+QTEST_MAIN(tst_qmlpixmapcache)
+
+#include "tst_qmlpixmapcache.moc"
diff --git a/tests/auto/declarative/qmlpropertymap/qmlpropertymap.pro b/tests/auto/declarative/qmlpropertymap/qmlpropertymap.pro
new file mode 100644
index 0000000..967ab76
--- /dev/null
+++ b/tests/auto/declarative/qmlpropertymap/qmlpropertymap.pro
@@ -0,0 +1,5 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlpropertymap.cpp
diff --git a/tests/auto/declarative/qmlpropertymap/tst_qmlpropertymap.cpp b/tests/auto/declarative/qmlpropertymap/tst_qmlpropertymap.cpp
new file mode 100644
index 0000000..8c457e6
--- /dev/null
+++ b/tests/auto/declarative/qmlpropertymap/tst_qmlpropertymap.cpp
@@ -0,0 +1,171 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcontext.h>
+#include <QtDeclarative/qmlpropertymap.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <private/qmlgraphicstext_p.h>
+#include <QSignalSpy>
+
+class tst_QmlPropertyMap : public QObject
+{
+ Q_OBJECT
+public:
+ tst_QmlPropertyMap() {}
+
+private slots:
+ void insert();
+ void operatorInsert();
+ void operatorValue();
+ void clear();
+ void changed();
+ void count();
+};
+
+void tst_QmlPropertyMap::insert()
+{
+ QmlPropertyMap map;
+ map.insert(QLatin1String("key1"),100);
+ map.insert(QLatin1String("key2"),200);
+ QVERIFY(map.keys().count() == 2);
+ QVERIFY(map.contains(QLatin1String("key1")));
+
+ QCOMPARE(map.value(QLatin1String("key1")), QVariant(100));
+ QCOMPARE(map.value(QLatin1String("key2")), QVariant(200));
+
+ map.insert(QLatin1String("key1"),"Hello World");
+ QCOMPARE(map.value(QLatin1String("key1")), QVariant("Hello World"));
+}
+
+void tst_QmlPropertyMap::operatorInsert()
+{
+ QmlPropertyMap map;
+ map[QLatin1String("key1")] = 100;
+ map[QLatin1String("key2")] = 200;
+ QVERIFY(map.keys().count() == 2);
+
+ QCOMPARE(map.value(QLatin1String("key1")), QVariant(100));
+ QCOMPARE(map.value(QLatin1String("key2")), QVariant(200));
+
+ map[QLatin1String("key1")] = "Hello World";
+ QCOMPARE(map.value(QLatin1String("key1")), QVariant("Hello World"));
+}
+
+void tst_QmlPropertyMap::operatorValue()
+{
+ QmlPropertyMap map;
+ map.insert(QLatin1String("key1"),100);
+ map.insert(QLatin1String("key2"),200);
+ QVERIFY(map.count() == 2);
+ QVERIFY(map.contains(QLatin1String("key1")));
+
+ const QmlPropertyMap &constMap = map;
+
+ QCOMPARE(constMap.value(QLatin1String("key1")), QVariant(100));
+ QCOMPARE(constMap.value(QLatin1String("key2")), QVariant(200));
+ QCOMPARE(constMap[QLatin1String("key1")], constMap.value(QLatin1String("key1")));
+ QCOMPARE(constMap[QLatin1String("key2")], constMap.value(QLatin1String("key2")));
+}
+
+void tst_QmlPropertyMap::clear()
+{
+ QmlPropertyMap map;
+ map.insert(QLatin1String("key1"),100);
+ QVERIFY(map.keys().count() == 1);
+
+ QCOMPARE(map.value(QLatin1String("key1")), QVariant(100));
+
+ map.clear(QLatin1String("key1"));
+ QVERIFY(map.keys().count() == 1);
+ QVERIFY(map.contains(QLatin1String("key1")));
+ QCOMPARE(map.value(QLatin1String("key1")), QVariant());
+}
+
+void tst_QmlPropertyMap::changed()
+{
+ QmlPropertyMap map;
+ QSignalSpy spy(&map, SIGNAL(valueChanged(const QString&)));
+ map.insert(QLatin1String("key1"),100);
+ map.insert(QLatin1String("key2"),200);
+ QCOMPARE(spy.count(), 0);
+
+ map.clear(QLatin1String("key1"));
+ QCOMPARE(spy.count(), 0);
+
+ //make changes in QML
+ QmlEngine engine;
+ QmlContext *ctxt = engine.rootContext();
+ ctxt->setContextProperty(QLatin1String("testdata"), &map);
+ QmlComponent component(&engine);
+ component.setData("import Qt 4.6\nText { text: { testdata.key1 = 'Hello World'; 'X' } }",
+ QUrl::fromLocalFile(""));
+ QVERIFY(component.isReady());
+ QmlGraphicsText *txt = qobject_cast<QmlGraphicsText*>(component.create());
+ QVERIFY(txt);
+ QCOMPARE(txt->text(), QString('X'));
+ QCOMPARE(spy.count(), 1);
+ QList<QVariant> arguments = spy.takeFirst();
+ QCOMPARE(arguments.at(0).toString(),QLatin1String("key1"));
+ QCOMPARE(map.value(QLatin1String("key1")), QVariant("Hello World"));
+}
+
+void tst_QmlPropertyMap::count()
+{
+ QmlPropertyMap map;
+ QCOMPARE(map.isEmpty(), true);
+ map.insert(QLatin1String("key1"),100);
+ map.insert(QLatin1String("key2"),200);
+ QCOMPARE(map.count(), 2);
+ QCOMPARE(map.isEmpty(), false);
+
+ map.insert(QLatin1String("key3"),"Hello World");
+ QCOMPARE(map.count(), 3);
+
+ //clearing doesn't remove the key
+ map.clear(QLatin1String("key3"));
+ QCOMPARE(map.count(), 3);
+ QCOMPARE(map.size(), map.count());
+}
+
+QTEST_MAIN(tst_QmlPropertyMap)
+
+#include "tst_qmlpropertymap.moc"
diff --git a/tests/auto/declarative/qmlqt/data/closestangle.qml b/tests/auto/declarative/qmlqt/data/closestangle.qml
new file mode 100644
index 0000000..b5f7fc6
--- /dev/null
+++ b/tests/auto/declarative/qmlqt/data/closestangle.qml
@@ -0,0 +1,12 @@
+import Qt 4.6
+
+QtObject {
+ property var testSame: Qt.closestAngle(0,1)
+ property var testLess: Qt.closestAngle(0,-359)
+ property var testMore: Qt.closestAngle(0,361)
+ property var testFail: Qt.closestAngle(0)
+ property var test5: Qt.closestAngle(0,1,2)
+ property var test6: Qt.closestAngle(123.45465768,1.11)
+ property var test7: Qt.closestAngle(-3.1415,1.11)
+}
+
diff --git a/tests/auto/declarative/qmlqt/data/consoleLog.qml b/tests/auto/declarative/qmlqt/data/consoleLog.qml
new file mode 100644
index 0000000..e657ff1
--- /dev/null
+++ b/tests/auto/declarative/qmlqt/data/consoleLog.qml
@@ -0,0 +1,8 @@
+import Qt 4.6
+
+QtObject {
+ Component.onCompleted: {
+ console.log("completed", "ok")
+ console.log("completed ok")
+ }
+}
diff --git a/tests/auto/declarative/qmlqt/data/createComponent.qml b/tests/auto/declarative/qmlqt/data/createComponent.qml
new file mode 100644
index 0000000..d9b70ec
--- /dev/null
+++ b/tests/auto/declarative/qmlqt/data/createComponent.qml
@@ -0,0 +1,23 @@
+import Qt 4.6
+
+QtObject {
+ property bool incorrectArgCount1: false
+ property bool incorrectArgCount2: false
+ property bool emptyArg: false
+
+ property string relativeUrl
+ property string absoluteUrl
+
+ Component.onCompleted: {
+ // Test that using incorrect argument count returns a null object
+ incorrectArgCount1 = (createComponent() == null);
+ incorrectArgCount2 = (createComponent("main.qml", 10) == null);
+ emptyArg = (createComponent("") == null);
+
+ var r = createComponent("createComponentData.qml");
+ relativeUrl = r.url;
+
+ var a = createComponent("http://www.example.com/test.qml");
+ absoluteUrl = a.url;
+ }
+}
diff --git a/tests/auto/declarative/qmlqt/data/createComponentData.qml b/tests/auto/declarative/qmlqt/data/createComponentData.qml
new file mode 100644
index 0000000..a5e99a0
--- /dev/null
+++ b/tests/auto/declarative/qmlqt/data/createComponentData.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+QtObject {
+ property int test: 1913
+}
diff --git a/tests/auto/declarative/qmlqt/data/createQmlObject.qml b/tests/auto/declarative/qmlqt/data/createQmlObject.qml
new file mode 100644
index 0000000..9150782
--- /dev/null
+++ b/tests/auto/declarative/qmlqt/data/createQmlObject.qml
@@ -0,0 +1,31 @@
+import Qt 4.6
+
+Item {
+ id: root
+
+ property bool incorrectArgCount1: false
+ property bool incorrectArgCount2: false
+ property bool emptyArg: false
+ property bool noParent: false
+ property bool notReady: false
+ property bool runtimeError: false
+ property bool errors: false
+
+ property bool success: false
+
+ Component.onCompleted: {
+ // errors
+ incorrectArgCount1 = (createQmlObject() == null);
+ incorrectArgCount2 = (createQmlObject("import Qt 4.6\nQtObject{}", root, "main.qml", 10) == null);
+ emptyArg = (createQmlObject("", root) == null);
+ errors = (createQmlObject("import Qt 4.6\nQtObject{\nproperty int test: 13\nproperty int test: 13\n}", root, "main.qml") == null);
+ noParent = (createQmlObject("import Qt 4.6\nQtObject{\nproperty int test: 13}", 0) == null);
+ notReady = (createQmlObject("import Qt 4.6\nQtObject{\nBlah{}\n}", root, "http://www.example.com/main.qml") == null);
+ runtimeError = (createQmlObject("import Qt 4.6\nQtObject{property int test\nonTestChanged: QtObject{}\n}", root) == null);
+
+ var o = createQmlObject("import Qt 4.6\nQtObject{\nproperty int test: 13\n}", root);
+ success = (o.test == 13);
+
+ createQmlObject("import Qt 4.6\nItem {}\n", root);
+ }
+}
diff --git a/tests/auto/declarative/qmlqt/data/darker.qml b/tests/auto/declarative/qmlqt/data/darker.qml
new file mode 100644
index 0000000..2df067e
--- /dev/null
+++ b/tests/auto/declarative/qmlqt/data/darker.qml
@@ -0,0 +1,11 @@
+import Qt 4.6
+
+QtObject {
+ property var test1: Qt.darker(Qt.rgba(1, 0.8, 0.3))
+ property var test2: Qt.darker()
+ property var test3: Qt.darker(Qt.rgba(1, 0.8, 0.3), 10)
+ property var test4: Qt.darker("red");
+ property var test5: Qt.darker("perfectred"); // Non-existant color
+ property var test6: Qt.darker(10);
+}
+
diff --git a/tests/auto/declarative/qmlqt/data/enums.qml b/tests/auto/declarative/qmlqt/data/enums.qml
new file mode 100644
index 0000000..1efa6f5
--- /dev/null
+++ b/tests/auto/declarative/qmlqt/data/enums.qml
@@ -0,0 +1,9 @@
+import Qt 4.6
+
+QtObject {
+ property int test1: Qt.Key_Escape
+ property int test2: Qt.DescendingOrder
+ property int test3: Qt.ElideMiddle
+ property int test4: Qt.AlignRight
+}
+
diff --git a/tests/auto/declarative/qmlqt/data/hsla.qml b/tests/auto/declarative/qmlqt/data/hsla.qml
new file mode 100644
index 0000000..df51ccd
--- /dev/null
+++ b/tests/auto/declarative/qmlqt/data/hsla.qml
@@ -0,0 +1,11 @@
+import Qt 4.6
+
+QtObject {
+ property color test1: Qt.hsla(1, 0, 0, 0.8);
+ property color test2: Qt.hsla(1, 0.5, 0.3);
+ property color test3: Qt.hsla(1, 1);
+ property color test4: Qt.hsla(1, 1, 1, 1, 1);
+ property color test5: Qt.hsla(1.2, 1, 1);
+ property color test6: Qt.hsla(-0.1, 1, 1);
+}
+
diff --git a/tests/auto/declarative/qmlqt/data/lighter.qml b/tests/auto/declarative/qmlqt/data/lighter.qml
new file mode 100644
index 0000000..4e0c431
--- /dev/null
+++ b/tests/auto/declarative/qmlqt/data/lighter.qml
@@ -0,0 +1,10 @@
+import Qt 4.6
+
+QtObject {
+ property var test1: Qt.lighter(Qt.rgba(1, 0.8, 0.3))
+ property var test2: Qt.lighter()
+ property var test3: Qt.lighter(Qt.rgba(1, 0.8, 0.3), 10)
+ property var test4: Qt.lighter("red");
+ property var test5: Qt.lighter("perfectred"); // Non-existant color
+ property var test6: Qt.lighter(10);
+}
diff --git a/tests/auto/declarative/qmlqt/data/md5.qml b/tests/auto/declarative/qmlqt/data/md5.qml
new file mode 100644
index 0000000..c474b71
--- /dev/null
+++ b/tests/auto/declarative/qmlqt/data/md5.qml
@@ -0,0 +1,6 @@
+import Qt 4.6
+
+QtObject {
+ property string test1: Qt.md5()
+ property string test2: Qt.md5("Hello World")
+}
diff --git a/tests/auto/declarative/qmlqt/data/point.qml b/tests/auto/declarative/qmlqt/data/point.qml
new file mode 100644
index 0000000..c383beb
--- /dev/null
+++ b/tests/auto/declarative/qmlqt/data/point.qml
@@ -0,0 +1,9 @@
+import Qt 4.6
+
+QtObject {
+ property var test1: Qt.point(19, 34);
+ property var test2: Qt.point(-3, 109.2);
+ property var test3: Qt.point(-3);
+ property var test4: Qt.point(-3, 109.2, 1);
+}
+
diff --git a/tests/auto/declarative/qmlqt/data/rect.qml b/tests/auto/declarative/qmlqt/data/rect.qml
new file mode 100644
index 0000000..82b6428
--- /dev/null
+++ b/tests/auto/declarative/qmlqt/data/rect.qml
@@ -0,0 +1,9 @@
+import Qt 4.6
+
+QtObject {
+ property var test1: Qt.rect(10, 13, 100, 109)
+ property var test2: Qt.rect(-10, 13, 100, 109.6)
+ property var test3: Qt.rect(10, 13);
+ property var test4: Qt.rect(10, 13, 100, 109, 10)
+ property var test5: Qt.rect(10, 13, 100, -109)
+}
diff --git a/tests/auto/declarative/qmlqt/data/rgba.qml b/tests/auto/declarative/qmlqt/data/rgba.qml
new file mode 100644
index 0000000..6dd6565
--- /dev/null
+++ b/tests/auto/declarative/qmlqt/data/rgba.qml
@@ -0,0 +1,10 @@
+import Qt 4.6
+
+QtObject {
+ property color test1: Qt.rgba(1, 0, 0, 0.8);
+ property color test2: Qt.rgba(1, 0.5, 0.3);
+ property color test3: Qt.rgba(1, 1);
+ property color test4: Qt.rgba(1, 1, 1, 1, 1);
+ property color test5: Qt.rgba(1.2, 1, 1);
+ property color test6: Qt.rgba(-0.1, 1, 1);
+}
diff --git a/tests/auto/declarative/qmlqt/data/size.qml b/tests/auto/declarative/qmlqt/data/size.qml
new file mode 100644
index 0000000..05b0317
--- /dev/null
+++ b/tests/auto/declarative/qmlqt/data/size.qml
@@ -0,0 +1,11 @@
+import Qt 4.6
+
+QtObject {
+ property var test1: Qt.size(19, 34);
+ property var test2: Qt.size(3, 109.2);
+ property var test3: Qt.size(-3, 10);
+ property var test4: Qt.size(3);
+ property var test5: Qt.size(3, 109.2, 1);
+}
+
+
diff --git a/tests/auto/declarative/qmlqt/data/tint.qml b/tests/auto/declarative/qmlqt/data/tint.qml
new file mode 100644
index 0000000..da8afe2
--- /dev/null
+++ b/tests/auto/declarative/qmlqt/data/tint.qml
@@ -0,0 +1,9 @@
+import Qt 4.6
+
+QtObject {
+ property color test1: Qt.tint("red", "blue");
+ property color test2: Qt.tint(Qt.rgba(1, 0, 0), Qt.rgba(0, 0, 0, 0));
+ property color test3: Qt.tint("red", Qt.rgba(0, 0, 1, 0.5)); // XXX - what should this be?
+ property color test4: Qt.tint("red", Qt.rgba(0, 0, 1, 0.5), 10);
+ property color test5: Qt.tint("red")
+}
diff --git a/tests/auto/declarative/qmlqt/data/vector.qml b/tests/auto/declarative/qmlqt/data/vector.qml
new file mode 100644
index 0000000..a471c7a
--- /dev/null
+++ b/tests/auto/declarative/qmlqt/data/vector.qml
@@ -0,0 +1,8 @@
+import Qt 4.6
+
+QtObject {
+ property var test1: Qt.vector3d(1, 0, 0.9);
+ property var test2: Qt.vector3d(102, -10, -982.1);
+ property var test3: Qt.vector3d(102, -10);
+ property var test4: Qt.vector3d(102, -10, -982.1, 10);
+}
diff --git a/tests/auto/declarative/qmlqt/qmlqt.pro b/tests/auto/declarative/qmlqt/qmlqt.pro
new file mode 100644
index 0000000..5e79ea6
--- /dev/null
+++ b/tests/auto/declarative/qmlqt/qmlqt.pro
@@ -0,0 +1,9 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+SOURCES += tst_qmlqt.cpp
+macx:CONFIG -= app_bundle
+
+DEFINES += SRCDIR=\\\"$$PWD\\\"
+
+# QMAKE_CXXFLAGS = -fprofile-arcs -ftest-coverage
+# LIBS += -lgcov
diff --git a/tests/auto/declarative/qmlqt/tst_qmlqt.cpp b/tests/auto/declarative/qmlqt/tst_qmlqt.cpp
new file mode 100644
index 0000000..78f39be
--- /dev/null
+++ b/tests/auto/declarative/qmlqt/tst_qmlqt.cpp
@@ -0,0 +1,369 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qtest.h>
+#include <QDebug>
+#include <QmlEngine>
+#include <QFileInfo>
+#include <QmlComponent>
+#include <QDir>
+#include <QVector3D>
+#include <QCryptographicHash>
+#include <QmlGraphicsItem>
+
+class tst_qmlqt : public QObject
+{
+ Q_OBJECT
+public:
+ tst_qmlqt() {}
+
+private slots:
+ void enums();
+ void rgba();
+ void hsla();
+ void rect();
+ void point();
+ void size();
+ void vector();
+ void lighter();
+ void darker();
+ void tint();
+ void closestAngle();
+ void playSound();
+ void openUrlExternally();
+ void md5();
+ void createComponent();
+ void createQmlObject();
+ void consoleLog();
+
+private:
+ QmlEngine engine;
+};
+
+inline QUrl TEST_FILE(const QString &filename)
+{
+ return QUrl::fromLocalFile(QLatin1String(SRCDIR) + QLatin1String("/data/") + filename);
+}
+
+void tst_qmlqt::enums()
+{
+ QmlComponent component(&engine, TEST_FILE("enums.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test1").toInt(), (int)Qt::Key_Escape);
+ QCOMPARE(object->property("test2").toInt(), (int)Qt::DescendingOrder);
+ QCOMPARE(object->property("test3").toInt(), (int)Qt::ElideMiddle);
+ QCOMPARE(object->property("test4").toInt(), (int)Qt::AlignRight);
+
+ delete object;
+}
+
+void tst_qmlqt::rgba()
+{
+ QmlComponent component(&engine, TEST_FILE("rgba.qml"));
+
+ QString warning1 = component.url().toString() + ":6: Unable to assign null to QColor";
+ QString warning2 = component.url().toString() + ":7: Unable to assign null to QColor";
+ QString warning3 = component.url().toString() + ":8: Unable to assign null to QColor";
+ QString warning4 = component.url().toString() + ":9: Unable to assign null to QColor";
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1));
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2));
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(warning3));
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(warning4));
+
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+
+ QCOMPARE(qvariant_cast<QColor>(object->property("test1")), QColor::fromRgbF(1, 0, 0, 0.8));
+ QCOMPARE(qvariant_cast<QColor>(object->property("test2")), QColor::fromRgbF(1, 0.5, 0.3, 1));
+ QCOMPARE(qvariant_cast<QColor>(object->property("test3")), QColor());
+ QCOMPARE(qvariant_cast<QColor>(object->property("test4")), QColor());
+ QCOMPARE(qvariant_cast<QColor>(object->property("test5")), QColor());
+ QCOMPARE(qvariant_cast<QColor>(object->property("test6")), QColor());
+
+ delete object;
+}
+
+void tst_qmlqt::hsla()
+{
+ QmlComponent component(&engine, TEST_FILE("hsla.qml"));
+
+ QString warning1 = component.url().toString() + ":6: Unable to assign null to QColor";
+ QString warning2 = component.url().toString() + ":7: Unable to assign null to QColor";
+ QString warning3 = component.url().toString() + ":8: Unable to assign null to QColor";
+ QString warning4 = component.url().toString() + ":9: Unable to assign null to QColor";
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1));
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2));
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(warning3));
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(warning4));
+
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(qvariant_cast<QColor>(object->property("test1")), QColor::fromHslF(1, 0, 0, 0.8));
+ QCOMPARE(qvariant_cast<QColor>(object->property("test2")), QColor::fromHslF(1, 0.5, 0.3, 1));
+ QCOMPARE(qvariant_cast<QColor>(object->property("test3")), QColor());
+ QCOMPARE(qvariant_cast<QColor>(object->property("test4")), QColor());
+ QCOMPARE(qvariant_cast<QColor>(object->property("test5")), QColor());
+ QCOMPARE(qvariant_cast<QColor>(object->property("test6")), QColor());
+
+ delete object;
+}
+
+void tst_qmlqt::rect()
+{
+ QmlComponent component(&engine, TEST_FILE("rect.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(qvariant_cast<QRectF>(object->property("test1")), QRectF(10, 13, 100, 109));
+ QCOMPARE(qvariant_cast<QRectF>(object->property("test2")), QRectF(-10, 13, 100, 109.6));
+ QCOMPARE(qvariant_cast<QRectF>(object->property("test3")), QRectF());
+ QCOMPARE(qvariant_cast<QRectF>(object->property("test4")), QRectF());
+ QCOMPARE(qvariant_cast<QRectF>(object->property("test5")), QRectF());
+
+ delete object;
+}
+
+void tst_qmlqt::point()
+{
+ QmlComponent component(&engine, TEST_FILE("point.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(qvariant_cast<QPointF>(object->property("test1")), QPointF(19, 34));
+ QCOMPARE(qvariant_cast<QPointF>(object->property("test2")), QPointF(-3, 109.2));
+ QCOMPARE(qvariant_cast<QPointF>(object->property("test3")), QPointF());
+ QCOMPARE(qvariant_cast<QPointF>(object->property("test4")), QPointF());
+
+ delete object;
+}
+
+void tst_qmlqt::size()
+{
+ QmlComponent component(&engine, TEST_FILE("size.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(qvariant_cast<QSizeF>(object->property("test1")), QSizeF(19, 34));
+ QCOMPARE(qvariant_cast<QSizeF>(object->property("test2")), QSizeF(3, 109.2));
+ QCOMPARE(qvariant_cast<QSizeF>(object->property("test3")), QSizeF(-3, 10));
+ QCOMPARE(qvariant_cast<QSizeF>(object->property("test4")), QSizeF());
+ QCOMPARE(qvariant_cast<QSizeF>(object->property("test5")), QSizeF());
+
+ delete object;
+}
+
+void tst_qmlqt::vector()
+{
+ QmlComponent component(&engine, TEST_FILE("vector.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(qvariant_cast<QVector3D>(object->property("test1")), QVector3D(1, 0, 0.9));
+ QCOMPARE(qvariant_cast<QVector3D>(object->property("test2")), QVector3D(102, -10, -982.1));
+ QCOMPARE(qvariant_cast<QVector3D>(object->property("test3")), QVector3D());
+ QCOMPARE(qvariant_cast<QVector3D>(object->property("test4")), QVector3D());
+
+ delete object;
+}
+
+void tst_qmlqt::lighter()
+{
+ QmlComponent component(&engine, TEST_FILE("lighter.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(qvariant_cast<QColor>(object->property("test1")), QColor::fromRgbF(1, 0.8, 0.3).lighter());
+ QCOMPARE(qvariant_cast<QColor>(object->property("test2")), QColor());
+ QCOMPARE(qvariant_cast<QColor>(object->property("test3")), QColor());
+ QCOMPARE(qvariant_cast<QColor>(object->property("test4")), QColor("red").lighter());
+ QCOMPARE(qvariant_cast<QColor>(object->property("test5")), QColor());
+ QCOMPARE(qvariant_cast<QColor>(object->property("test6")), QColor());
+
+ delete object;
+}
+
+void tst_qmlqt::darker()
+{
+ QmlComponent component(&engine, TEST_FILE("darker.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(qvariant_cast<QColor>(object->property("test1")), QColor::fromRgbF(1, 0.8, 0.3).darker());
+ QCOMPARE(qvariant_cast<QColor>(object->property("test2")), QColor());
+ QCOMPARE(qvariant_cast<QColor>(object->property("test3")), QColor());
+ QCOMPARE(qvariant_cast<QColor>(object->property("test4")), QColor("red").darker());
+ QCOMPARE(qvariant_cast<QColor>(object->property("test5")), QColor());
+ QCOMPARE(qvariant_cast<QColor>(object->property("test6")), QColor());
+
+ delete object;
+}
+
+void tst_qmlqt::tint()
+{
+ QmlComponent component(&engine, TEST_FILE("tint.qml"));
+
+ QString warning1 = component.url().toString() + ":7: Unable to assign null to QColor";
+ QString warning2 = component.url().toString() + ":8: Unable to assign null to QColor";
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1));
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2));
+
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(qvariant_cast<QColor>(object->property("test1")), QColor::fromRgbF(0, 0, 1));
+ QCOMPARE(qvariant_cast<QColor>(object->property("test2")), QColor::fromRgbF(1, 0, 0));
+ QEXPECT_FAIL("", "QT-2424",Continue);
+ QCOMPARE(qvariant_cast<QColor>(object->property("test3")), QColor::fromRgbF(1, 0, 0));
+ QCOMPARE(qvariant_cast<QColor>(object->property("test4")), QColor());
+ QCOMPARE(qvariant_cast<QColor>(object->property("test5")), QColor());
+
+ delete object;
+}
+
+void tst_qmlqt::closestAngle()
+{
+ QmlComponent component(&engine, TEST_FILE("closestangle.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(qvariant_cast<qreal>(object->property("testSame")), 1.0);
+ QCOMPARE(qvariant_cast<qreal>(object->property("testLess")), 1.0);
+ QCOMPARE(qvariant_cast<qreal>(object->property("testMore")), 1.0);
+ QCOMPARE(qvariant_cast<qreal>(object->property("testFail")), 0.0);
+ QCOMPARE(qvariant_cast<qreal>(object->property("test5")), 1.0);
+ QCOMPARE(qvariant_cast<qreal>(object->property("test6")), 1.11);
+ QCOMPARE(qvariant_cast<qreal>(object->property("test7")), 1.11);
+
+ delete object;
+}
+
+void tst_qmlqt::playSound()
+{
+ QEXPECT_FAIL("", "How do we test this?", Abort);
+ QVERIFY(false);
+}
+
+void tst_qmlqt::openUrlExternally()
+{
+ QEXPECT_FAIL("", "How do we test this?", Abort);
+ QVERIFY(false);
+}
+
+void tst_qmlqt::md5()
+{
+ QmlComponent component(&engine, TEST_FILE("md5.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test1").toString(), QLatin1String(QCryptographicHash::hash(QByteArray(), QCryptographicHash::Md5).toHex()));
+ QCOMPARE(object->property("test2").toString(), QLatin1String(QCryptographicHash::hash("Hello World", QCryptographicHash::Md5).toHex()));
+
+ delete object;
+}
+
+void tst_qmlqt::createComponent()
+{
+ QmlComponent component(&engine, TEST_FILE("createComponent.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("incorrectArgCount1").toBool(), true);
+ QCOMPARE(object->property("incorrectArgCount2").toBool(), true);
+ QCOMPARE(object->property("emptyArg").toBool(), true);
+
+ QCOMPARE(object->property("absoluteUrl").toString(), QString("http://www.example.com/test.qml"));
+ QCOMPARE(object->property("relativeUrl").toString(), TEST_FILE("createComponentData.qml").toString());
+
+ delete object;
+}
+
+void tst_qmlqt::createQmlObject()
+{
+ QmlComponent component(&engine, TEST_FILE("createQmlObject.qml"));
+
+ QString warning1 = "QmlEngine::createQmlObject():";
+ QString warning2 = " " + TEST_FILE("main.qml").toString() + ":4:1: Duplicate property name";
+ QString warning3 = "QmlEngine::createQmlObject(): Component is not ready";
+ QString warning4 = "QmlEngine::createQmlObject():";
+ QString warning5 = " " + TEST_FILE("inline").toString() + ":3: Cannot assign object type QObject with no default method";
+
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1));
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2));
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(warning3));
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(warning4));
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(warning5));
+
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("incorrectArgCount1").toBool(), true);
+ QCOMPARE(object->property("incorrectArgCount2").toBool(), true);
+ QCOMPARE(object->property("emptyArg").toBool(), true);
+ QCOMPARE(object->property("errors").toBool(), true);
+ QCOMPARE(object->property("noParent").toBool(), true);
+ QCOMPARE(object->property("notReady").toBool(), true);
+ QCOMPARE(object->property("runtimeError").toBool(), true);
+ QCOMPARE(object->property("success").toBool(), true);
+
+ QmlGraphicsItem *item = qobject_cast<QmlGraphicsItem *>(object);
+ QVERIFY(item != 0);
+ QVERIFY(item->childItems().count() == 1);
+
+ delete object;
+}
+
+void tst_qmlqt::consoleLog()
+{
+ QTest::ignoreMessage(QtDebugMsg, "completed ok");
+ QTest::ignoreMessage(QtDebugMsg, "completed ok");
+ QmlComponent component(&engine, TEST_FILE("consoleLog.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ delete object;
+}
+
+QTEST_MAIN(tst_qmlqt)
+
+#include "tst_qmlqt.moc"
diff --git a/tests/auto/declarative/qmlspringfollow/data/springfollow1.qml b/tests/auto/declarative/qmlspringfollow/data/springfollow1.qml
new file mode 100644
index 0000000..959d206
--- /dev/null
+++ b/tests/auto/declarative/qmlspringfollow/data/springfollow1.qml
@@ -0,0 +1,4 @@
+import Qt 4.6
+
+SpringFollow {
+}
diff --git a/tests/auto/declarative/qmlspringfollow/data/springfollow2.qml b/tests/auto/declarative/qmlspringfollow/data/springfollow2.qml
new file mode 100644
index 0000000..7c81fb5
--- /dev/null
+++ b/tests/auto/declarative/qmlspringfollow/data/springfollow2.qml
@@ -0,0 +1,8 @@
+import Qt 4.6
+
+SpringFollow {
+ source: 1.44; velocity: 0.9
+ spring: 1.0; damping: 0.5
+ epsilon: 0.25; modulus: 360.0
+ mass: 2.0; enabled: true
+}
diff --git a/tests/auto/declarative/qmlspringfollow/data/springfollow3.qml b/tests/auto/declarative/qmlspringfollow/data/springfollow3.qml
new file mode 100644
index 0000000..6fec55b
--- /dev/null
+++ b/tests/auto/declarative/qmlspringfollow/data/springfollow3.qml
@@ -0,0 +1,8 @@
+import Qt 4.6
+
+SpringFollow {
+ source: 1.44; velocity: 0.9
+ spring: 1.0; damping: 0.5
+ epsilon: 0.25; modulus: 360.0
+ mass: 2.0; enabled: false
+}
diff --git a/tests/auto/declarative/qmlspringfollow/qmlspringfollow.pro b/tests/auto/declarative/qmlspringfollow/qmlspringfollow.pro
new file mode 100644
index 0000000..ffaa97f
--- /dev/null
+++ b/tests/auto/declarative/qmlspringfollow/qmlspringfollow.pro
@@ -0,0 +1,8 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative gui
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlspringfollow.cpp
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlspringfollow/tst_qmlspringfollow.cpp b/tests/auto/declarative/qmlspringfollow/tst_qmlspringfollow.cpp
new file mode 100644
index 0000000..f17b5d4
--- /dev/null
+++ b/tests/auto/declarative/qmlspringfollow/tst_qmlspringfollow.cpp
@@ -0,0 +1,137 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <private/qmlspringfollow_p.h>
+#include <private/qmlvaluetype_p.h>
+#include "../../../shared/util.h"
+
+class tst_qmlspringfollow : public QObject
+{
+ Q_OBJECT
+public:
+ tst_qmlspringfollow();
+
+private slots:
+ void defaultValues();
+ void values();
+ void disabled();
+
+private:
+ QmlEngine engine;
+};
+
+tst_qmlspringfollow::tst_qmlspringfollow()
+{
+}
+
+void tst_qmlspringfollow::defaultValues()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/springfollow1.qml"));
+ QmlSpringFollow *obj = qobject_cast<QmlSpringFollow*>(c.create());
+
+ QVERIFY(obj != 0);
+
+ QCOMPARE(obj->sourceValue(), 0.);
+ QCOMPARE(obj->velocity(), 0.);
+ QCOMPARE(obj->spring(), 0.);
+ QCOMPARE(obj->damping(), 0.);
+ QCOMPARE(obj->epsilon(), 0.01);
+ QCOMPARE(obj->modulus(), 0.);
+ QCOMPARE(obj->value(), 0.);
+ QCOMPARE(obj->mass(), 1.);
+ QCOMPARE(obj->enabled(), true);
+ QCOMPARE(obj->inSync(), true);
+
+ delete obj;
+}
+
+void tst_qmlspringfollow::values()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/springfollow2.qml"));
+ QmlSpringFollow *obj = qobject_cast<QmlSpringFollow*>(c.create());
+
+ QVERIFY(obj != 0);
+
+ QCOMPARE(obj->sourceValue(), 1.44);
+ QCOMPARE(obj->velocity(), 0.9);
+ QCOMPARE(obj->spring(), 1.0);
+ QCOMPARE(obj->damping(), 0.5);
+ QCOMPARE(obj->epsilon(), 0.25);
+ QCOMPARE(obj->modulus(), 360.0);
+ QCOMPARE(obj->mass(), 2.0);
+ QCOMPARE(obj->enabled(), true);
+
+ QTRY_COMPARE(obj->value(), 1.44);
+ QTRY_COMPARE(obj->inSync(), true);
+
+ delete obj;
+}
+
+void tst_qmlspringfollow::disabled()
+{
+ QmlEngine engine;
+ QmlComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/springfollow3.qml"));
+ QmlSpringFollow *obj = qobject_cast<QmlSpringFollow*>(c.create());
+
+ QVERIFY(obj != 0);
+
+ QCOMPARE(obj->sourceValue(), 1.44);
+ QCOMPARE(obj->velocity(), 0.9);
+ QCOMPARE(obj->spring(), 1.0);
+ QCOMPARE(obj->damping(), 0.5);
+ QCOMPARE(obj->epsilon(), 0.25);
+ QCOMPARE(obj->modulus(), 360.0);
+ QCOMPARE(obj->mass(), 2.0);
+ QCOMPARE(obj->enabled(), false);
+
+ QCOMPARE(obj->value(), 0.0);
+ QCOMPARE(obj->inSync(), false);
+
+ delete obj;
+}
+
+QTEST_MAIN(tst_qmlspringfollow)
+
+#include "tst_qmlspringfollow.moc"
diff --git a/tests/auto/declarative/qmlstates/data/ExtendedRectangle.qml b/tests/auto/declarative/qmlstates/data/ExtendedRectangle.qml
new file mode 100644
index 0000000..8d64663
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/ExtendedRectangle.qml
@@ -0,0 +1,19 @@
+import Qt 4.6
+Rectangle {
+ id: extendedRect
+ objectName: "extendedRect"
+ property color extendedColor: "orange"
+
+ width: 100; height: 100
+ color: "red"
+ states: State {
+ name: "green"
+ PropertyChanges {
+ target: rect
+ onDidSomething: {
+ extendedRect.color = "green"
+ extendedColor = "green"
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/anchorChanges.qml b/tests/auto/declarative/qmlstates/data/anchorChanges.qml
new file mode 100644
index 0000000..7dce889
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/anchorChanges.qml
@@ -0,0 +1,23 @@
+import Qt 4.6
+
+Rectangle {
+ id: container
+ width: 200; height: 200
+ Rectangle {
+ id: myRect
+ objectName: "MyRect"
+ width: 50; height: 50
+ color: "green";
+ anchors.left: parent.left
+ anchors.leftMargin: 5
+ }
+ states: State {
+ name: "right"
+ AnchorChanges {
+ id: ancCh
+ target: myRect;
+ reset: "left"
+ right: container.right
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/anchorChanges2.qml b/tests/auto/declarative/qmlstates/data/anchorChanges2.qml
new file mode 100644
index 0000000..545345e
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/anchorChanges2.qml
@@ -0,0 +1,21 @@
+import Qt 4.6
+
+Rectangle {
+ width: 200; height: 200
+ Rectangle {
+ id: myRect
+ objectName: "MyRect"
+ width: 50; height: 50
+ color: "green";
+ anchors.left: parent.left
+ anchors.leftMargin: 5
+ }
+ states: State {
+ name: "right"
+ AnchorChanges {
+ target: myRect;
+ reset: "left"
+ right: parent.right
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/anchorChanges3.qml b/tests/auto/declarative/qmlstates/data/anchorChanges3.qml
new file mode 100644
index 0000000..9d5b317
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/anchorChanges3.qml
@@ -0,0 +1,29 @@
+import Qt 4.6
+
+Rectangle {
+ id: container
+ width: 200; height: 200
+ Rectangle {
+ id: myRect
+ objectName: "MyRect"
+ color: "green";
+ anchors.left: parent.left
+ anchors.right: rightGuideline.left
+ anchors.top: topGuideline.top
+ anchors.bottom: container.bottom
+ }
+ Item { objectName: "LeftGuideline"; id: leftGuideline; x: 10 }
+ Item { id: rightGuideline; x: 150 }
+ Item { id: topGuideline; y: 10 }
+ Item { objectName: "BottomGuideline"; id: bottomGuideline; y: 150 }
+ states: State {
+ name: "reanchored"
+ AnchorChanges {
+ target: myRect;
+ left: leftGuideline.left
+ right: container.right
+ top: container.top
+ bottom: bottomGuideline.bottom
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/anchorChanges4.qml b/tests/auto/declarative/qmlstates/data/anchorChanges4.qml
new file mode 100644
index 0000000..f128989
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/anchorChanges4.qml
@@ -0,0 +1,22 @@
+import Qt 4.6
+
+Rectangle {
+ width: 200; height: 200
+ Rectangle {
+ id: myRect
+ objectName: "MyRect"
+ color: "green";
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ }
+ Item { objectName: "LeftGuideline"; id: leftGuideline; x: 10 }
+ Item { objectName: "BottomGuideline"; id: bottomGuideline; y: 150 }
+ states: State {
+ name: "reanchored"
+ AnchorChanges {
+ target: myRect;
+ horizontalCenter: bottomGuideline.horizontalCenter
+ verticalCenter: leftGuideline.verticalCenter
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/anchorChanges5.qml b/tests/auto/declarative/qmlstates/data/anchorChanges5.qml
new file mode 100644
index 0000000..4e6d34b
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/anchorChanges5.qml
@@ -0,0 +1,22 @@
+import Qt 4.6
+
+Rectangle {
+ width: 200; height: 200
+ Rectangle {
+ id: myRect
+ objectName: "MyRect"
+ color: "green";
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.baseline: parent.baseline
+ }
+ Item { objectName: "LeftGuideline"; id: leftGuideline; x: 10 }
+ Item { objectName: "BottomGuideline"; id: bottomGuideline; y: 150 }
+ states: State {
+ name: "reanchored"
+ AnchorChanges {
+ target: myRect;
+ horizontalCenter: bottomGuideline.horizontalCenter
+ baseline: leftGuideline.baseline
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/autoStateAtStartupRestoreBug.qml b/tests/auto/declarative/qmlstates/data/autoStateAtStartupRestoreBug.qml
new file mode 100644
index 0000000..693a5c5
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/autoStateAtStartupRestoreBug.qml
@@ -0,0 +1,18 @@
+import Qt 4.6
+
+Item {
+ id: root
+ property int input: 1
+ property int test: 9
+
+ states: [
+ State {
+ name: "portrait"
+ when: root.input == 1
+ PropertyChanges {
+ target: root
+ test: 3
+ }
+ }
+ ]
+}
diff --git a/tests/auto/declarative/qmlstates/data/basicBinding.qml b/tests/auto/declarative/qmlstates/data/basicBinding.qml
new file mode 100644
index 0000000..6528113
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/basicBinding.qml
@@ -0,0 +1,12 @@
+import Qt 4.6
+Rectangle {
+ id: myRectangle
+
+ property color sourceColor: "blue"
+ width: 100; height: 100
+ color: "red"
+ states: State {
+ name: "blue"
+ PropertyChanges { target: myRectangle; color: sourceColor }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/basicBinding2.qml b/tests/auto/declarative/qmlstates/data/basicBinding2.qml
new file mode 100644
index 0000000..2e7b4cf
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/basicBinding2.qml
@@ -0,0 +1,12 @@
+import Qt 4.6
+Rectangle {
+ id: myRectangle
+
+ property color sourceColor: "red"
+ width: 100; height: 100
+ color: sourceColor
+ states: State {
+ name: "blue"
+ PropertyChanges { target: myRectangle; color: "blue" }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/basicBinding3.qml b/tests/auto/declarative/qmlstates/data/basicBinding3.qml
new file mode 100644
index 0000000..a3c47d9
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/basicBinding3.qml
@@ -0,0 +1,13 @@
+import Qt 4.6
+Rectangle {
+ id: myRectangle
+
+ property color sourceColor: "red"
+ property color sourceColor2: "blue"
+ width: 100; height: 100
+ color: sourceColor
+ states: State {
+ name: "blue"
+ PropertyChanges { target: myRectangle; color: sourceColor2 }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/basicBinding4.qml b/tests/auto/declarative/qmlstates/data/basicBinding4.qml
new file mode 100644
index 0000000..1f52d0e
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/basicBinding4.qml
@@ -0,0 +1,17 @@
+import Qt 4.6
+Rectangle {
+ id: myRectangle
+
+ property color sourceColor: "blue"
+ width: 100; height: 100
+ color: "red"
+ states: [
+ State {
+ name: "blue"
+ PropertyChanges { target: myRectangle; color: sourceColor }
+ },
+ State {
+ name: "green"
+ PropertyChanges { target: myRectangle; color: "green" }
+ }]
+}
diff --git a/tests/auto/declarative/qmlstates/data/basicChanges.qml b/tests/auto/declarative/qmlstates/data/basicChanges.qml
new file mode 100644
index 0000000..88ea256
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/basicChanges.qml
@@ -0,0 +1,10 @@
+import Qt 4.6
+Rectangle {
+ id: myRectangle
+ width: 100; height: 100
+ color: "red"
+ states: State {
+ name: "blue"
+ PropertyChanges { target: myRectangle; color: "blue" }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/basicChanges2.qml b/tests/auto/declarative/qmlstates/data/basicChanges2.qml
new file mode 100644
index 0000000..4dd293f
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/basicChanges2.qml
@@ -0,0 +1,15 @@
+import Qt 4.6
+Rectangle {
+ id: myRectangle
+ width: 100; height: 100
+ color: "red"
+ states: [
+ State {
+ name: "blue"
+ PropertyChanges { target: myRectangle; color: "blue" }
+ },
+ State {
+ name: "green"
+ PropertyChanges { target: myRectangle; color: "green" }
+ }]
+}
diff --git a/tests/auto/declarative/qmlstates/data/basicChanges3.qml b/tests/auto/declarative/qmlstates/data/basicChanges3.qml
new file mode 100644
index 0000000..62ab1d5
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/basicChanges3.qml
@@ -0,0 +1,15 @@
+import Qt 4.6
+Rectangle {
+ id: myRectangle
+ width: 100; height: 100
+ color: "red"
+ states: [
+ State {
+ name: "blue"
+ PropertyChanges { target: myRectangle; color: "blue" }
+ },
+ State {
+ name: "bordered"
+ PropertyChanges { target: myRectangle; border.width: 2 }
+ }]
+}
diff --git a/tests/auto/declarative/qmlstates/data/basicExtension.qml b/tests/auto/declarative/qmlstates/data/basicExtension.qml
new file mode 100644
index 0000000..1836f8a
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/basicExtension.qml
@@ -0,0 +1,16 @@
+import Qt 4.6
+Rectangle {
+ id: myRectangle
+ width: 100; height: 100
+ color: "red"
+ states: [
+ State {
+ name: "blue"
+ PropertyChanges { target: myRectangle; color: "blue" }
+ },
+ State {
+ name: "bordered"
+ extend: "blue"
+ PropertyChanges { target: myRectangle; border.width: 2 }
+ }]
+}
diff --git a/tests/auto/declarative/qmlstates/data/deleting.qml b/tests/auto/declarative/qmlstates/data/deleting.qml
new file mode 100644
index 0000000..3da0b12
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/deleting.qml
@@ -0,0 +1,11 @@
+import Qt 4.6
+Rectangle {
+ id: myRectangle
+ width: 100; height: 100
+ color: "red"
+ states: State {
+ name: "blue"
+ PropertyChanges { target: myRectangle; color: "blue"; objectName: "pc1" }
+ PropertyChanges { target: myRectangle; radius: 5; objectName: "pc2" }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/deletingState.qml b/tests/auto/declarative/qmlstates/data/deletingState.qml
new file mode 100644
index 0000000..a5e8ed3
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/deletingState.qml
@@ -0,0 +1,13 @@
+import Qt 4.6
+Rectangle {
+ id: myRectangle
+ width: 100; height: 100
+ color: "red"
+ StateGroup {
+ id: stateGroup
+ states: State {
+ name: "blue"
+ PropertyChanges { target: myRectangle; color: "blue" }
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/explicit.qml b/tests/auto/declarative/qmlstates/data/explicit.qml
new file mode 100644
index 0000000..7543f84
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/explicit.qml
@@ -0,0 +1,15 @@
+import Qt 4.6
+Rectangle {
+ id: myRectangle
+ property color sourceColor: "blue"
+ width: 100; height: 100
+ color: "red"
+ states: State {
+ name: "blue"
+ PropertyChanges {
+ objectName: "changes"
+ target: myRectangle; explicit: true
+ color: sourceColor
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/fakeExtension.qml b/tests/auto/declarative/qmlstates/data/fakeExtension.qml
new file mode 100644
index 0000000..c7975e1
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/fakeExtension.qml
@@ -0,0 +1,16 @@
+import Qt 4.6
+Rectangle {
+ id: myRectangle
+ width: 100; height: 100
+ color: "red"
+ states: [
+ State {
+ name: "blue"
+ PropertyChanges { target: myRectangle; color: "blue" }
+ },
+ State {
+ name: "green"
+ extend: "blue"
+ PropertyChanges { target: myRectangle; color: "green" }
+ }]
+}
diff --git a/tests/auto/declarative/qmlstates/data/illegalTempState.qml b/tests/auto/declarative/qmlstates/data/illegalTempState.qml
new file mode 100644
index 0000000..2702be4
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/illegalTempState.qml
@@ -0,0 +1,21 @@
+import Qt 4.6
+
+Rectangle {
+ id: card
+ width: 100; height: 100
+
+ states: [
+ State {
+ name: "placed"
+ PropertyChanges { target: card; state: "idle" }
+ },
+ State {
+ name: "idle"
+ }
+ ]
+
+ MouseRegion {
+ anchors.fill: parent
+ onClicked: card.state = "placed"
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/legalTempState.qml b/tests/auto/declarative/qmlstates/data/legalTempState.qml
new file mode 100644
index 0000000..54c97b9
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/legalTempState.qml
@@ -0,0 +1,23 @@
+import Qt 4.6
+
+Rectangle {
+ id: card
+ width: 100; height: 100
+
+ states: [
+ State {
+ name: "placed"
+ onCompleted: card.state = "idle"
+ StateChangeScript { script: console.log("entering placed") }
+ },
+ State {
+ name: "idle"
+ StateChangeScript { script: console.log("entering idle") }
+ }
+ ]
+
+ MouseRegion {
+ anchors.fill: parent
+ onClicked: card.state = "placed"
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/nonExistantProp.qml b/tests/auto/declarative/qmlstates/data/nonExistantProp.qml
new file mode 100644
index 0000000..a5dd86a
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/nonExistantProp.qml
@@ -0,0 +1,11 @@
+import Qt 4.6
+Rectangle {
+ id: myRectangle
+
+ width: 100; height: 100
+ color: "red"
+ states: State {
+ name: "blue"
+ PropertyChanges { target: myRectangle; colr: "blue" }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/parentChange.qml b/tests/auto/declarative/qmlstates/data/parentChange.qml
new file mode 100644
index 0000000..087da6b
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/parentChange.qml
@@ -0,0 +1,37 @@
+import Qt 4.6
+
+Rectangle {
+ width: 400; height: 400
+ Item {
+ x: 10; y: 10
+ Rectangle {
+ id: myRect
+ objectName: "MyRect"
+ x: 5
+ width: 100; height: 100
+ color: "red"
+ }
+ }
+ MouseRegion {
+ id: clickable
+ anchors.fill: parent
+ }
+
+ Item {
+ x: -100; y: -50
+ Item {
+ id: newParent
+ objectName: "NewParent"
+ x: 248; y: 360
+ }
+ }
+
+ states: State {
+ name: "reparented"
+ when: clickable.pressed
+ ParentChange {
+ target: myRect
+ parent: newParent
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/parentChange2.qml b/tests/auto/declarative/qmlstates/data/parentChange2.qml
new file mode 100644
index 0000000..f0b00f5
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/parentChange2.qml
@@ -0,0 +1,31 @@
+import Qt 4.6
+
+Rectangle {
+ id: newParent
+ width: 400; height: 400
+ Item {
+ scale: .5
+ rotation: 15
+ x: 10; y: 10
+ Rectangle {
+ id: myRect
+ objectName: "MyRect"
+ x: 5
+ width: 100; height: 100
+ color: "red"
+ }
+ }
+ MouseRegion {
+ id: clickable
+ anchors.fill: parent
+ }
+
+ states: State {
+ name: "reparented"
+ when: clickable.pressed
+ ParentChange {
+ target: myRect
+ parent: newParent
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/parentChange3.qml b/tests/auto/declarative/qmlstates/data/parentChange3.qml
new file mode 100644
index 0000000..2aa507c
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/parentChange3.qml
@@ -0,0 +1,42 @@
+import Qt 4.6
+
+Rectangle {
+ width: 400; height: 400
+ Item {
+ scale: .5
+ rotation: 15
+ transformOrigin: "Center"
+ x: 10; y: 10
+ Rectangle {
+ id: myRect
+ objectName: "MyRect"
+ x: 5
+ width: 100; height: 100
+ transformOrigin: "BottomLeft"
+ color: "red"
+ }
+ }
+ MouseRegion {
+ id: clickable
+ anchors.fill: parent
+ }
+
+ Item {
+ x: 200; y: 200
+ rotation: 52;
+ scale: 2
+ Item {
+ id: newParent
+ x: 100; y: 100
+ }
+ }
+
+ states: State {
+ name: "reparented"
+ when: clickable.pressed
+ ParentChange {
+ target: myRect
+ parent: newParent
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/parentChange4.qml b/tests/auto/declarative/qmlstates/data/parentChange4.qml
new file mode 100644
index 0000000..d00274b
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/parentChange4.qml
@@ -0,0 +1,30 @@
+import Qt 4.6
+
+Rectangle {
+ width: 400; height: 400
+ Rectangle {
+ id: myRect
+ objectName: "MyRect"
+ x: 5; y: 5
+ width: 100; height: 100
+ color: "red"
+ }
+ MouseRegion {
+ id: clickable
+ anchors.fill: parent
+ }
+
+ Item {
+ id: newParent
+ transform: Scale { xScale: .5; yScale: .7}
+ }
+
+ states: State {
+ name: "reparented"
+ when: clickable.pressed
+ ParentChange {
+ target: myRect
+ parent: newParent
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/parentChange5.qml b/tests/auto/declarative/qmlstates/data/parentChange5.qml
new file mode 100644
index 0000000..f75e2a3
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/parentChange5.qml
@@ -0,0 +1,30 @@
+import Qt 4.6
+
+Rectangle {
+ width: 400; height: 400
+ Rectangle {
+ id: myRect
+ objectName: "MyRect"
+ x: 5; y: 5
+ width: 100; height: 100
+ color: "red"
+ }
+ MouseRegion {
+ id: clickable
+ anchors.fill: parent
+ }
+
+ Item {
+ id: newParent
+ transform: Rotation { angle: 30; axis { x: 0; y: 1; z: 0 } }
+ }
+
+ states: State {
+ name: "reparented"
+ when: clickable.pressed
+ ParentChange {
+ target: myRect
+ parent: newParent
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/propertyErrors.qml b/tests/auto/declarative/qmlstates/data/propertyErrors.qml
new file mode 100644
index 0000000..080e833
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/propertyErrors.qml
@@ -0,0 +1,10 @@
+import Qt 4.6
+Rectangle {
+ id: myRectangle
+ width: 100; height: 100
+ color: "red"
+ states: State {
+ name: "blue"
+ PropertyChanges { target: myRectangle; colr: "blue"; wantsFocus: true }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/restoreEntryValues.qml b/tests/auto/declarative/qmlstates/data/restoreEntryValues.qml
new file mode 100644
index 0000000..088c608
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/restoreEntryValues.qml
@@ -0,0 +1,14 @@
+import Qt 4.6
+Rectangle {
+ id: myRectangle
+ width: 100; height: 100
+ color: "red"
+ states: State {
+ name: "blue"
+ PropertyChanges {
+ target: myRectangle
+ restoreEntryValues: false
+ color: "blue"
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/script.qml b/tests/auto/declarative/qmlstates/data/script.qml
new file mode 100644
index 0000000..3c5f33e
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/script.qml
@@ -0,0 +1,10 @@
+import Qt 4.6
+Rectangle {
+ id: myRectangle
+ width: 100; height: 100
+ color: "red"
+ states: State {
+ name: "blue"
+ StateChangeScript { script: myRectangle.color = "blue"; }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/signalOverride.qml b/tests/auto/declarative/qmlstates/data/signalOverride.qml
new file mode 100644
index 0000000..5ba1566
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/signalOverride.qml
@@ -0,0 +1,18 @@
+import Qt 4.6
+import Qt.test 1.0
+
+MyRectangle {
+ id: rect
+
+ onDidSomething: color = "blue"
+
+ width: 100; height: 100
+ color: "red"
+ states: State {
+ name: "green"
+ PropertyChanges {
+ target: rect
+ onDidSomething: color = "green"
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/data/signalOverride2.qml b/tests/auto/declarative/qmlstates/data/signalOverride2.qml
new file mode 100644
index 0000000..527e165
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/signalOverride2.qml
@@ -0,0 +1,9 @@
+import Qt 4.6
+import Qt.test 1.0
+
+MyRectangle {
+ id: rect
+ onDidSomething: color = "blue"
+ width: 100; height: 100
+ ExtendedRectangle {}
+}
diff --git a/tests/auto/declarative/qmlstates/data/signalOverrideCrash.qml b/tests/auto/declarative/qmlstates/data/signalOverrideCrash.qml
new file mode 100644
index 0000000..702fa86
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/data/signalOverrideCrash.qml
@@ -0,0 +1,15 @@
+import Qt 4.6
+import Qt.test 1.0
+
+MyRectangle {
+ id: rect
+
+ width: 100; height: 100
+ states: State {
+ name: "overridden"
+ PropertyChanges {
+ target: rect
+ onDidSomething: rect.state = ""
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlstates/qmlstates.pro b/tests/auto/declarative/qmlstates/qmlstates.pro
new file mode 100644
index 0000000..538734a
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/qmlstates.pro
@@ -0,0 +1,8 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlstates.cpp
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlstates/tst_qmlstates.cpp b/tests/auto/declarative/qmlstates/tst_qmlstates.cpp
new file mode 100644
index 0000000..fc348a5
--- /dev/null
+++ b/tests/auto/declarative/qmlstates/tst_qmlstates.cpp
@@ -0,0 +1,887 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <private/qmlgraphicsanchors_p_p.h>
+#include <private/qmlgraphicsrectangle_p.h>
+#include <private/qmlpropertychanges_p.h>
+#include <private/qmlstategroup_p.h>
+
+class tst_states : public QObject
+{
+ Q_OBJECT
+public:
+ tst_states() {}
+
+private:
+ static QByteArray fullDataPath(const QString &path);
+
+private slots:
+ void basicChanges();
+ void basicExtension();
+ void basicBinding();
+ void signalOverride();
+ void signalOverrideCrash();
+ void parentChange();
+ void parentChangeErrors();
+ void anchorChanges();
+ void anchorChanges2();
+ void anchorChanges3();
+ void anchorChanges4();
+ void anchorChanges5();
+ void script();
+ void restoreEntryValues();
+ void explicitChanges();
+ void propertyErrors();
+ void incorrectRestoreBug();
+ void autoStateAtStartupRestoreBug();
+ void deletingChange();
+ void deletingState();
+ void tempState();
+ void illegalTempState();
+ void nonExistantProperty();
+};
+
+QByteArray tst_states::fullDataPath(const QString &path)
+{
+ return QUrl::fromLocalFile(SRCDIR + path).toString().toUtf8();
+}
+
+void tst_states::basicChanges()
+{
+ QmlEngine engine;
+
+ {
+ QmlComponent rectComponent(&engine, SRCDIR "/data/basicChanges.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QCOMPARE(rect->color(),QColor("red"));
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("blue"));
+
+ rect->setState("");
+ QCOMPARE(rect->color(),QColor("red"));
+ }
+
+ {
+ QmlComponent rectComponent(&engine, SRCDIR "/data/basicChanges2.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QCOMPARE(rect->color(),QColor("red"));
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("blue"));
+
+ rect->setState("green");
+ QCOMPARE(rect->color(),QColor("green"));
+
+ rect->setState("");
+ QCOMPARE(rect->color(),QColor("red"));
+
+ rect->setState("green");
+ QCOMPARE(rect->color(),QColor("green"));
+ }
+
+ {
+ QmlComponent rectComponent(&engine, SRCDIR "/data/basicChanges3.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QCOMPARE(rect->color(),QColor("red"));
+ QCOMPARE(rect->border()->width(),1);
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("blue"));
+ QCOMPARE(rect->border()->width(),1);
+
+ rect->setState("bordered");
+ QCOMPARE(rect->color(),QColor("red"));
+ QCOMPARE(rect->border()->width(),2);
+
+ rect->setState("");
+ QCOMPARE(rect->color(),QColor("red"));
+ QCOMPARE(rect->border()->width(),1);
+ //### we should be checking that this is an implicit rather than explicit 1 (which currently fails)
+
+ rect->setState("bordered");
+ QCOMPARE(rect->color(),QColor("red"));
+ QCOMPARE(rect->border()->width(),2);
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("blue"));
+ QCOMPARE(rect->border()->width(),1);
+
+ }
+}
+
+void tst_states::basicExtension()
+{
+ QmlEngine engine;
+
+ {
+ QmlComponent rectComponent(&engine, SRCDIR "/data/basicExtension.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QCOMPARE(rect->color(),QColor("red"));
+ QCOMPARE(rect->border()->width(),1);
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("blue"));
+ QCOMPARE(rect->border()->width(),1);
+
+ rect->setState("bordered");
+ QCOMPARE(rect->color(),QColor("blue"));
+ QCOMPARE(rect->border()->width(),2);
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("blue"));
+ QCOMPARE(rect->border()->width(),1);
+
+ rect->setState("");
+ QCOMPARE(rect->color(),QColor("red"));
+ QCOMPARE(rect->border()->width(),1);
+
+ rect->setState("bordered");
+ QCOMPARE(rect->color(),QColor("blue"));
+ QCOMPARE(rect->border()->width(),2);
+
+ rect->setState("");
+ QCOMPARE(rect->color(),QColor("red"));
+ QCOMPARE(rect->border()->width(),1);
+ }
+
+ {
+ QmlComponent rectComponent(&engine, SRCDIR "/data/fakeExtension.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QCOMPARE(rect->color(),QColor("red"));
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("blue"));
+
+ rect->setState("green");
+ QCOMPARE(rect->color(),QColor("green"));
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("blue"));
+
+ rect->setState("green");
+ QCOMPARE(rect->color(),QColor("green"));
+
+ rect->setState("");
+ QCOMPARE(rect->color(),QColor("red"));
+
+ rect->setState("green");
+ QCOMPARE(rect->color(),QColor("green"));
+ }
+}
+
+void tst_states::basicBinding()
+{
+ QmlEngine engine;
+
+ {
+ QmlComponent rectComponent(&engine, SRCDIR "/data/basicBinding.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QCOMPARE(rect->color(),QColor("red"));
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("blue"));
+
+ rect->setState("");
+ QCOMPARE(rect->color(),QColor("red"));
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("blue"));
+ rect->setProperty("sourceColor", QColor("green"));
+ QCOMPARE(rect->color(),QColor("green"));
+
+ rect->setState("");
+ QCOMPARE(rect->color(),QColor("red"));
+ rect->setProperty("sourceColor", QColor("yellow"));
+ QCOMPARE(rect->color(),QColor("red"));
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("yellow"));
+ }
+
+ {
+ QmlComponent rectComponent(&engine, SRCDIR "/data/basicBinding2.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QCOMPARE(rect->color(),QColor("red"));
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("blue"));
+
+ rect->setState("");
+ QCOMPARE(rect->color(),QColor("red"));
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("blue"));
+ rect->setProperty("sourceColor", QColor("green"));
+ QCOMPARE(rect->color(),QColor("blue"));
+
+ rect->setState("");
+ QCOMPARE(rect->color(),QColor("green"));
+ rect->setProperty("sourceColor", QColor("yellow"));
+ QCOMPARE(rect->color(),QColor("yellow"));
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("blue"));
+
+ rect->setState("");
+ QCOMPARE(rect->color(),QColor("yellow"));
+ }
+
+ {
+ QmlComponent rectComponent(&engine, SRCDIR "/data/basicBinding3.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QCOMPARE(rect->color(),QColor("red"));
+ rect->setProperty("sourceColor", QColor("green"));
+ QCOMPARE(rect->color(),QColor("green"));
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("blue"));
+ rect->setProperty("sourceColor", QColor("red"));
+ QCOMPARE(rect->color(),QColor("blue"));
+ rect->setProperty("sourceColor2", QColor("yellow"));
+ QCOMPARE(rect->color(),QColor("yellow"));
+
+ rect->setState("");
+ QCOMPARE(rect->color(),QColor("red"));
+ rect->setProperty("sourceColor2", QColor("green"));
+ QCOMPARE(rect->color(),QColor("red"));
+ rect->setProperty("sourceColor", QColor("yellow"));
+ QCOMPARE(rect->color(),QColor("yellow"));
+ }
+
+ {
+ QmlComponent rectComponent(&engine, SRCDIR "/data/basicBinding4.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QCOMPARE(rect->color(),QColor("red"));
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("blue"));
+ rect->setProperty("sourceColor", QColor("yellow"));
+ QCOMPARE(rect->color(),QColor("yellow"));
+
+ rect->setState("green");
+ QCOMPARE(rect->color(),QColor("green"));
+ rect->setProperty("sourceColor", QColor("purple"));
+ QCOMPARE(rect->color(),QColor("green"));
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("purple"));
+
+ rect->setState("green");
+ QCOMPARE(rect->color(),QColor("green"));
+
+ rect->setState("");
+ QCOMPARE(rect->color(),QColor("red"));
+ }
+}
+
+class MyRect : public QmlGraphicsRectangle
+{
+ Q_OBJECT
+public:
+ MyRect() {}
+ void doSomething() { emit didSomething(); }
+Q_SIGNALS:
+ void didSomething();
+};
+
+QML_DECLARE_TYPE(MyRect)
+QML_DEFINE_TYPE(Qt.test, 1, 0, MyRectangle,MyRect);
+
+void tst_states::signalOverride()
+{
+ QmlEngine engine;
+
+ {
+ QmlComponent rectComponent(&engine, SRCDIR "/data/signalOverride.qml");
+ MyRect *rect = qobject_cast<MyRect*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QCOMPARE(rect->color(),QColor("red"));
+ rect->doSomething();
+ QCOMPARE(rect->color(),QColor("blue"));
+
+ rect->setState("green");
+ rect->doSomething();
+ QCOMPARE(rect->color(),QColor("green"));
+ }
+
+ {
+ QmlComponent rectComponent(&engine, SRCDIR "/data/signalOverride2.qml");
+ MyRect *rect = qobject_cast<MyRect*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QCOMPARE(rect->color(),QColor("white"));
+ rect->doSomething();
+ QCOMPARE(rect->color(),QColor("blue"));
+
+ QmlGraphicsRectangle *innerRect = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("extendedRect"));
+
+ innerRect->setState("green");
+ rect->doSomething();
+ QCOMPARE(rect->color(),QColor("blue"));
+ QCOMPARE(innerRect->color(),QColor("green"));
+ QCOMPARE(innerRect->property("extendedColor").value<QColor>(),QColor("green"));
+ }
+}
+
+void tst_states::signalOverrideCrash()
+{
+ QmlEngine engine;
+
+ QmlComponent rectComponent(&engine, SRCDIR "/data/signalOverrideCrash.qml");
+ MyRect *rect = qobject_cast<MyRect*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ rect->setState("overridden");
+ rect->doSomething();
+}
+
+void tst_states::parentChange()
+{
+ QmlEngine engine;
+
+ {
+ QmlComponent rectComponent(&engine, SRCDIR "/data/parentChange.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QmlGraphicsRectangle *innerRect = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect"));
+ QVERIFY(innerRect != 0);
+
+ qmlExecuteDeferred(rect->states()->at(0));
+ QmlParentChange *pChange = qobject_cast<QmlParentChange*>(rect->states()->at(0)->changes()->at(0));
+ QVERIFY(pChange != 0);
+ QmlGraphicsItem *nParent = qobject_cast<QmlGraphicsItem*>(rect->findChild<QmlGraphicsItem*>("NewParent"));
+ QVERIFY(nParent != 0);
+
+ QCOMPARE(pChange->parent(), nParent);
+
+ rect->setState("reparented");
+ QCOMPARE(innerRect->rotation(), qreal(0));
+ QCOMPARE(innerRect->scale(), qreal(1));
+ QCOMPARE(innerRect->x(), qreal(-133));
+ QCOMPARE(innerRect->y(), qreal(-300));
+ }
+
+ {
+ QmlComponent rectComponent(&engine, SRCDIR "/data/parentChange2.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QmlGraphicsRectangle *innerRect = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect"));
+ QVERIFY(innerRect != 0);
+
+ rect->setState("reparented");
+ QCOMPARE(innerRect->rotation(), qreal(15));
+ QCOMPARE(innerRect->scale(), qreal(.5));
+ QEXPECT_FAIL("", "QTBUG-2919", Continue);
+ QCOMPARE(QString("%1").arg(innerRect->x()), QString("%1").arg(12.4148145657));
+ QEXPECT_FAIL("", "QTBUG-2919", Continue);
+ QCOMPARE(QString("%1").arg(innerRect->y()), QString("%1").arg(10.6470476128));
+ }
+
+ {
+ QmlComponent rectComponent(&engine, SRCDIR "/data/parentChange3.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QmlGraphicsRectangle *innerRect = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect"));
+ QVERIFY(innerRect != 0);
+
+ rect->setState("reparented");
+ QCOMPARE(innerRect->rotation(), qreal(-37));
+ QCOMPARE(innerRect->scale(), qreal(.25));
+ QCOMPARE(QString("%1").arg(innerRect->x()), QString("%1").arg(-217.305));
+ QCOMPARE(QString("%1").arg(innerRect->y()), QString("%1").arg(-164.413));
+
+ rect->setState("");
+ QCOMPARE(innerRect->rotation(), qreal(0));
+ QCOMPARE(innerRect->scale(), qreal(1));
+ QCOMPARE(innerRect->x(), qreal(5));
+ QEXPECT_FAIL("", "QTBUG-2919", Continue);
+ QCOMPARE(innerRect->y(), qreal(0));
+ }
+}
+
+void tst_states::parentChangeErrors()
+{
+ QmlEngine engine;
+
+ {
+ QmlComponent rectComponent(&engine, SRCDIR "/data/parentChange4.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QmlGraphicsRectangle *innerRect = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect"));
+ QVERIFY(innerRect != 0);
+
+ QTest::ignoreMessage(QtWarningMsg, QByteArray("QML ParentChange (" + fullDataPath("/data/parentChange4.qml") + ":25:9) Unable to preserve appearance under non-uniform scale").constData());
+ rect->setState("reparented");
+ QCOMPARE(innerRect->rotation(), qreal(0));
+ QCOMPARE(innerRect->scale(), qreal(1));
+ QCOMPARE(innerRect->x(), qreal(5));
+ QCOMPARE(innerRect->y(), qreal(5));
+ }
+
+ {
+ QmlComponent rectComponent(&engine, SRCDIR "/data/parentChange5.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QmlGraphicsRectangle *innerRect = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect"));
+ QVERIFY(innerRect != 0);
+
+ QTest::ignoreMessage(QtWarningMsg, QByteArray("QML ParentChange (" + fullDataPath("/data/parentChange5.qml") + ":25:9) Unable to preserve appearance under complex transform").constData());
+ rect->setState("reparented");
+ QCOMPARE(innerRect->rotation(), qreal(0));
+ QCOMPARE(innerRect->scale(), qreal(1));
+ QCOMPARE(innerRect->x(), qreal(5));
+ QCOMPARE(innerRect->y(), qreal(5));
+ }
+}
+
+void tst_states::anchorChanges()
+{
+ QmlEngine engine;
+
+ QmlComponent rectComponent(&engine, SRCDIR "/data/anchorChanges.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QmlGraphicsRectangle *innerRect = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect"));
+ QVERIFY(innerRect != 0);
+
+ qmlExecuteDeferred(rect->states()->at(0));
+ QmlAnchorChanges *aChanges = qobject_cast<QmlAnchorChanges*>(rect->states()->at(0)->changes()->at(0));
+ QVERIFY(aChanges != 0);
+
+ rect->setState("right");
+ QCOMPARE(innerRect->x(), qreal(150));
+ QCOMPARE(aChanges->reset(), QString("left"));
+ QCOMPARE(aChanges->object(), innerRect);
+ QCOMPARE(aChanges->right().item, rect->right().item);
+ QCOMPARE(aChanges->right().anchorLine, rect->right().anchorLine);
+
+ rect->setState("");
+ QCOMPARE(innerRect->x(), qreal(5));
+
+ delete rect;
+}
+
+void tst_states::anchorChanges2()
+{
+ QmlEngine engine;
+
+ QmlComponent rectComponent(&engine, SRCDIR "/data/anchorChanges2.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QmlGraphicsRectangle *innerRect = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect"));
+ QVERIFY(innerRect != 0);
+
+ rect->setState("right");
+ QEXPECT_FAIL("", "QTBUG-5338", Continue);
+ QCOMPARE(innerRect->x(), qreal(150));
+
+ rect->setState("");
+ QCOMPARE(innerRect->x(), qreal(5));
+
+ delete rect;
+}
+
+void tst_states::anchorChanges3()
+{
+ QmlEngine engine;
+
+ QmlComponent rectComponent(&engine, SRCDIR "/data/anchorChanges3.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QmlGraphicsRectangle *innerRect = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect"));
+ QVERIFY(innerRect != 0);
+
+ QmlGraphicsItem *leftGuideline = qobject_cast<QmlGraphicsItem*>(rect->findChild<QmlGraphicsItem*>("LeftGuideline"));
+ QVERIFY(leftGuideline != 0);
+
+ QmlGraphicsItem *bottomGuideline = qobject_cast<QmlGraphicsItem*>(rect->findChild<QmlGraphicsItem*>("BottomGuideline"));
+ QVERIFY(bottomGuideline != 0);
+
+ qmlExecuteDeferred(rect->states()->at(0));
+ QmlAnchorChanges *aChanges = qobject_cast<QmlAnchorChanges*>(rect->states()->at(0)->changes()->at(0));
+ QVERIFY(aChanges != 0);
+
+ rect->setState("reanchored");
+ QCOMPARE(aChanges->object(), innerRect);
+ QCOMPARE(aChanges->left().item, leftGuideline->left().item);
+ QCOMPARE(aChanges->left().anchorLine, leftGuideline->left().anchorLine);
+ QCOMPARE(aChanges->right().item, rect->right().item);
+ QCOMPARE(aChanges->right().anchorLine, rect->right().anchorLine);
+ QCOMPARE(aChanges->top().item, rect->top().item);
+ QCOMPARE(aChanges->top().anchorLine, rect->top().anchorLine);
+ QCOMPARE(aChanges->bottom().item, bottomGuideline->bottom().item);
+ QCOMPARE(aChanges->bottom().anchorLine, bottomGuideline->bottom().anchorLine);
+
+ QCOMPARE(innerRect->x(), qreal(10));
+ QCOMPARE(innerRect->y(), qreal(0));
+ QCOMPARE(innerRect->width(), qreal(190));
+ QCOMPARE(innerRect->height(), qreal(150));
+
+ rect->setState("");
+ QCOMPARE(innerRect->x(), qreal(0));
+ QCOMPARE(innerRect->y(), qreal(10));
+ QCOMPARE(innerRect->width(), qreal(150));
+ QCOMPARE(innerRect->height(), qreal(190));
+
+ delete rect;
+}
+
+void tst_states::anchorChanges4()
+{
+ QmlEngine engine;
+
+ QmlComponent rectComponent(&engine, SRCDIR "/data/anchorChanges4.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QmlGraphicsRectangle *innerRect = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect"));
+ QVERIFY(innerRect != 0);
+
+ QmlGraphicsItem *leftGuideline = qobject_cast<QmlGraphicsItem*>(rect->findChild<QmlGraphicsItem*>("LeftGuideline"));
+ QVERIFY(leftGuideline != 0);
+
+ QmlGraphicsItem *bottomGuideline = qobject_cast<QmlGraphicsItem*>(rect->findChild<QmlGraphicsItem*>("BottomGuideline"));
+ QVERIFY(bottomGuideline != 0);
+
+ qmlExecuteDeferred(rect->states()->at(0));
+ QmlAnchorChanges *aChanges = qobject_cast<QmlAnchorChanges*>(rect->states()->at(0)->changes()->at(0));
+ QVERIFY(aChanges != 0);
+
+ rect->setState("reanchored");
+ QCOMPARE(aChanges->object(), innerRect);
+ QCOMPARE(aChanges->horizontalCenter().item, bottomGuideline->horizontalCenter().item);
+ QCOMPARE(aChanges->horizontalCenter().anchorLine, bottomGuideline->horizontalCenter().anchorLine);
+ QCOMPARE(aChanges->verticalCenter().item, leftGuideline->verticalCenter().item);
+ QCOMPARE(aChanges->verticalCenter().anchorLine, leftGuideline->verticalCenter().anchorLine);
+
+ delete rect;
+}
+
+void tst_states::anchorChanges5()
+{
+ QmlEngine engine;
+
+ QmlComponent rectComponent(&engine, SRCDIR "/data/anchorChanges5.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QmlGraphicsRectangle *innerRect = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect"));
+ QVERIFY(innerRect != 0);
+
+ QmlGraphicsItem *leftGuideline = qobject_cast<QmlGraphicsItem*>(rect->findChild<QmlGraphicsItem*>("LeftGuideline"));
+ QVERIFY(leftGuideline != 0);
+
+ QmlGraphicsItem *bottomGuideline = qobject_cast<QmlGraphicsItem*>(rect->findChild<QmlGraphicsItem*>("BottomGuideline"));
+ QVERIFY(bottomGuideline != 0);
+
+ qmlExecuteDeferred(rect->states()->at(0));
+ QmlAnchorChanges *aChanges = qobject_cast<QmlAnchorChanges*>(rect->states()->at(0)->changes()->at(0));
+ QVERIFY(aChanges != 0);
+
+ rect->setState("reanchored");
+ QCOMPARE(aChanges->object(), innerRect);
+ QCOMPARE(aChanges->horizontalCenter().item, bottomGuideline->horizontalCenter().item);
+ QCOMPARE(aChanges->horizontalCenter().anchorLine, bottomGuideline->horizontalCenter().anchorLine);
+ QCOMPARE(aChanges->baseline().item, leftGuideline->baseline().item);
+ QCOMPARE(aChanges->baseline().anchorLine, leftGuideline->baseline().anchorLine);
+
+ delete rect;
+}
+
+void tst_states::script()
+{
+ QmlEngine engine;
+
+ {
+ QmlComponent rectComponent(&engine, SRCDIR "/data/script.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QCOMPARE(rect->color(),QColor("red"));
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("blue"));
+
+ rect->setState("");
+ QCOMPARE(rect->color(),QColor("blue")); // a script isn't reverted
+ }
+}
+
+void tst_states::restoreEntryValues()
+{
+ QmlEngine engine;
+
+ QmlComponent rectComponent(&engine, SRCDIR "/data/restoreEntryValues.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QCOMPARE(rect->color(),QColor("red"));
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("blue"));
+
+ rect->setState("");
+ QCOMPARE(rect->color(),QColor("blue"));
+}
+
+void tst_states::explicitChanges()
+{
+ QmlEngine engine;
+
+ QmlComponent rectComponent(&engine, SRCDIR "/data/explicit.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ qmlExecuteDeferred(rect->states()->at(0));
+ QmlPropertyChanges *changes = qobject_cast<QmlPropertyChanges*>(rect->findChild<QmlPropertyChanges*>("changes"));
+ QVERIFY(changes != 0);
+ QVERIFY(changes->isExplicit());
+
+ QCOMPARE(rect->color(),QColor("red"));
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("blue"));
+
+ rect->setProperty("sourceColor", QColor("green"));
+ QCOMPARE(rect->color(),QColor("blue"));
+
+ rect->setState("");
+ QCOMPARE(rect->color(),QColor("red"));
+ rect->setProperty("sourceColor", QColor("yellow"));
+ QCOMPARE(rect->color(),QColor("red"));
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("yellow"));
+}
+
+void tst_states::propertyErrors()
+{
+ QmlEngine engine;
+ QmlComponent rectComponent(&engine, SRCDIR "/data/propertyErrors.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QCOMPARE(rect->color(),QColor("red"));
+
+ QTest::ignoreMessage(QtWarningMsg, QByteArray("QML PropertyChanges (" + fullDataPath("/data/propertyErrors.qml") + ":8:9) Cannot assign to non-existant property \"colr\"").constData());
+ QTest::ignoreMessage(QtWarningMsg, QByteArray("QML PropertyChanges (" + fullDataPath("/data/propertyErrors.qml") + ":8:9) Cannot assign to read-only property \"wantsFocus\"").constData());
+ rect->setState("blue");
+}
+
+void tst_states::incorrectRestoreBug()
+{
+ QmlEngine engine;
+
+ QmlComponent rectComponent(&engine, SRCDIR "/data/basicChanges.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QCOMPARE(rect->color(),QColor("red"));
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("blue"));
+
+ rect->setState("");
+ QCOMPARE(rect->color(),QColor("red"));
+
+ // make sure if we change the base state value, we then restore to it correctly
+ rect->setColor(QColor("green"));
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("blue"));
+
+ rect->setState("");
+ QCOMPARE(rect->color(),QColor("green"));
+}
+
+void tst_states::autoStateAtStartupRestoreBug()
+{
+ QmlEngine engine;
+
+ QmlComponent component(&engine, SRCDIR "/data/autoStateAtStartupRestoreBug.qml");
+ QObject *obj = component.create();
+
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->property("test").toInt(), 3);
+
+ obj->setProperty("input", 2);
+
+ QCOMPARE(obj->property("test").toInt(), 9);
+
+ delete obj;
+}
+
+void tst_states::deletingChange()
+{
+ QmlEngine engine;
+
+ QmlComponent rectComponent(&engine, SRCDIR "/data/deleting.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("blue"));
+ QCOMPARE(rect->radius(),qreal(5));
+
+ rect->setState("");
+ QCOMPARE(rect->color(),QColor("red"));
+ QCOMPARE(rect->radius(),qreal(0));
+
+ QmlPropertyChanges *pc = rect->findChild<QmlPropertyChanges*>("pc1");
+ QVERIFY(pc != 0);
+ delete pc;
+
+ QmlState *state = rect->findChild<QmlState*>();
+ QVERIFY(state != 0);
+ qmlExecuteDeferred(state);
+ QCOMPARE(state->changes()->count(), 1);
+
+ rect->setState("blue");
+ QCOMPARE(rect->color(),QColor("red"));
+ QCOMPARE(rect->radius(),qreal(5));
+
+ delete rect;
+}
+
+void tst_states::deletingState()
+{
+ QmlEngine engine;
+
+ QmlComponent rectComponent(&engine, SRCDIR "/data/deletingState.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QmlStateGroup *sg = rect->findChild<QmlStateGroup*>();
+ QVERIFY(sg != 0);
+ QVERIFY(sg->findState("blue") != 0);
+
+ sg->setState("blue");
+ QCOMPARE(rect->color(),QColor("blue"));
+
+ sg->setState("");
+ QCOMPARE(rect->color(),QColor("red"));
+
+ QmlState *state = rect->findChild<QmlState*>();
+ QVERIFY(state != 0);
+ delete state;
+
+ QVERIFY(sg->findState("blue") == 0);
+
+ //### should we warn that state doesn't exist
+ sg->setState("blue");
+ QCOMPARE(rect->color(),QColor("red"));
+
+ delete rect;
+}
+
+void tst_states::tempState()
+{
+ QmlEngine engine;
+
+ QmlComponent rectComponent(&engine, SRCDIR "/data/legalTempState.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QTest::ignoreMessage(QtDebugMsg, "entering placed");
+ QTest::ignoreMessage(QtDebugMsg, "entering idle");
+ rect->setState("placed");
+ QCOMPARE(rect->state(), QLatin1String("idle"));
+}
+
+void tst_states::illegalTempState()
+{
+ QmlEngine engine;
+
+ QmlComponent rectComponent(&engine, SRCDIR "/data/illegalTempState.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QTest::ignoreMessage(QtWarningMsg, "Can't apply a state change as part of a state definition. ");
+ rect->setState("placed");
+ QCOMPARE(rect->state(), QLatin1String("placed"));
+}
+
+void tst_states::nonExistantProperty()
+{
+ QmlEngine engine;
+
+ QmlComponent rectComponent(&engine, SRCDIR "/data/nonExistantProp.qml");
+ QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QTest::ignoreMessage(QtWarningMsg, QByteArray("QML PropertyChanges (" + fullDataPath("/data/nonExistantProp.qml") + ":9:9) Cannot assign to non-existant property \"colr\"").constData());
+ rect->setState("blue");
+ QCOMPARE(rect->state(), QLatin1String("blue"));
+}
+
+QTEST_MAIN(tst_states)
+
+#include "tst_qmlstates.moc"
diff --git a/tests/auto/declarative/qmlsystempalette/qmlsystempalette.pro b/tests/auto/declarative/qmlsystempalette/qmlsystempalette.pro
new file mode 100644
index 0000000..4d55b46
--- /dev/null
+++ b/tests/auto/declarative/qmlsystempalette/qmlsystempalette.pro
@@ -0,0 +1,5 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative gui
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlsystempalette.cpp
diff --git a/tests/auto/declarative/qmlsystempalette/tst_qmlsystempalette.cpp b/tests/auto/declarative/qmlsystempalette/tst_qmlsystempalette.cpp
new file mode 100644
index 0000000..7da7f68
--- /dev/null
+++ b/tests/auto/declarative/qmlsystempalette/tst_qmlsystempalette.cpp
@@ -0,0 +1,187 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qtest.h>
+#include <QDebug>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <private/qmlsystempalette_p.h>
+#include <qpalette.h>
+#include "../../../shared/util.h"
+
+class tst_qmlsystempalette : public QObject
+
+{
+ Q_OBJECT
+public:
+ tst_qmlsystempalette();
+
+private slots:
+ void activePalette();
+ void inactivePalette();
+ void disabledPalette();
+ void paletteChanged();
+
+private:
+ QmlEngine engine;
+};
+
+tst_qmlsystempalette::tst_qmlsystempalette()
+{
+}
+
+void tst_qmlsystempalette::activePalette()
+{
+ QString componentStr = "import Qt 4.6\nSystemPalette { }";
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlSystemPalette *object = qobject_cast<QmlSystemPalette*>(component.create());
+
+ QVERIFY(object != 0);
+
+ QPalette palette;
+ palette.setCurrentColorGroup(QPalette::Active);
+ QCOMPARE(palette.window().color(), object->window());
+ QCOMPARE(palette.windowText().color(), object->windowText());
+ QCOMPARE(palette.base().color(), object->base());
+ QCOMPARE(palette.text().color(), object->text());
+ QCOMPARE(palette.alternateBase().color(), object->alternateBase());
+ QCOMPARE(palette.button().color(), object->button());
+ QCOMPARE(palette.buttonText().color(), object->buttonText());
+ QCOMPARE(palette.light().color(), object->light());
+ QCOMPARE(palette.midlight().color(), object->midlight());
+ QCOMPARE(palette.dark().color(), object->dark());
+ QCOMPARE(palette.mid().color(), object->mid());
+ QCOMPARE(palette.shadow().color(), object->shadow());
+ QCOMPARE(palette.highlight().color(), object->highlight());
+ QCOMPARE(palette.highlightedText().color(), object->highlightedText());
+
+ delete object;
+}
+
+void tst_qmlsystempalette::inactivePalette()
+{
+ QString componentStr = "import Qt 4.6\nSystemPalette { colorGroup: SystemPalette.Inactive }";
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlSystemPalette *object = qobject_cast<QmlSystemPalette*>(component.create());
+
+ QVERIFY(object != 0);
+ QVERIFY(object->colorGroup() == QmlSystemPalette::Inactive);
+
+ QPalette palette;
+ palette.setCurrentColorGroup(QPalette::Inactive);
+ QCOMPARE(palette.window().color(), object->window());
+ QCOMPARE(palette.windowText().color(), object->windowText());
+ QCOMPARE(palette.base().color(), object->base());
+ QCOMPARE(palette.text().color(), object->text());
+ QCOMPARE(palette.alternateBase().color(), object->alternateBase());
+ QCOMPARE(palette.button().color(), object->button());
+ QCOMPARE(palette.buttonText().color(), object->buttonText());
+ QCOMPARE(palette.light().color(), object->light());
+ QCOMPARE(palette.midlight().color(), object->midlight());
+ QCOMPARE(palette.dark().color(), object->dark());
+ QCOMPARE(palette.mid().color(), object->mid());
+ QCOMPARE(palette.shadow().color(), object->shadow());
+ QCOMPARE(palette.highlight().color(), object->highlight());
+ QCOMPARE(palette.highlightedText().color(), object->highlightedText());
+
+ delete object;
+}
+
+void tst_qmlsystempalette::disabledPalette()
+{
+ QString componentStr = "import Qt 4.6\nSystemPalette { colorGroup: SystemPalette.Disabled }";
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlSystemPalette *object = qobject_cast<QmlSystemPalette*>(component.create());
+
+ QVERIFY(object != 0);
+ QVERIFY(object->colorGroup() == QmlSystemPalette::Disabled);
+
+ QPalette palette;
+ palette.setCurrentColorGroup(QPalette::Disabled);
+ QCOMPARE(palette.window().color(), object->window());
+ QCOMPARE(palette.windowText().color(), object->windowText());
+ QCOMPARE(palette.base().color(), object->base());
+ QCOMPARE(palette.text().color(), object->text());
+ QCOMPARE(palette.alternateBase().color(), object->alternateBase());
+ QCOMPARE(palette.button().color(), object->button());
+ QCOMPARE(palette.buttonText().color(), object->buttonText());
+ QCOMPARE(palette.light().color(), object->light());
+ QCOMPARE(palette.midlight().color(), object->midlight());
+ QCOMPARE(palette.dark().color(), object->dark());
+ QCOMPARE(palette.mid().color(), object->mid());
+ QCOMPARE(palette.shadow().color(), object->shadow());
+ QCOMPARE(palette.highlight().color(), object->highlight());
+ QCOMPARE(palette.highlightedText().color(), object->highlightedText());
+
+ delete object;
+}
+
+void tst_qmlsystempalette::paletteChanged()
+{
+ QString componentStr = "import Qt 4.6\nSystemPalette { }";
+ QmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QmlSystemPalette *object = qobject_cast<QmlSystemPalette*>(component.create());
+
+ QVERIFY(object != 0);
+
+ QPalette p;
+ p.setCurrentColorGroup(QPalette::Active);
+ p.setColor(QPalette::Active, QPalette::Text, QColor("red"));
+ p.setColor(QPalette::Active, QPalette::ButtonText, QColor("green"));
+ p.setColor(QPalette::Active, QPalette::WindowText, QColor("blue"));
+
+ qApp->setPalette(p);
+
+ object->setColorGroup(QmlSystemPalette::Active);
+ QTRY_COMPARE(QColor("red"), object->text());
+ QTRY_COMPARE(QColor("green"), object->buttonText());
+ QTRY_COMPARE(QColor("blue"), object->windowText());
+
+ delete object;
+}
+
+QTEST_MAIN(tst_qmlsystempalette)
+
+#include "tst_qmlsystempalette.moc"
diff --git a/tests/auto/declarative/qmltimer/qmltimer.pro b/tests/auto/declarative/qmltimer/qmltimer.pro
new file mode 100644
index 0000000..2b244ed
--- /dev/null
+++ b/tests/auto/declarative/qmltimer/qmltimer.pro
@@ -0,0 +1,7 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative gui
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmltimer.cpp
+
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmltimer/tst_qmltimer.cpp b/tests/auto/declarative/qmltimer/tst_qmltimer.cpp
new file mode 100644
index 0000000..83094d2
--- /dev/null
+++ b/tests/auto/declarative/qmltimer/tst_qmltimer.cpp
@@ -0,0 +1,285 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <private/qmltimer_p.h>
+#include <QDebug>
+
+class tst_qmltimer : public QObject
+{
+ Q_OBJECT
+public:
+ tst_qmltimer();
+
+private slots:
+ void notRepeating();
+ void notRepeatingStart();
+ void repeat();
+ void noTriggerIfNotRunning();
+ void triggeredOnStart();
+ void triggeredOnStartRepeat();
+ void changeDuration();
+ void restart();
+};
+
+class TimerHelper : public QObject
+{
+ Q_OBJECT
+public:
+ TimerHelper() : QObject(), count(0)
+ {
+ }
+
+ int count;
+
+public slots:
+ void timeout() {
+ ++count;
+ }
+};
+
+#if defined(Q_OS_SYMBIAN) && defined(Q_CC_NOKIAX86)
+// Increase wait as emulator startup can cause unexpected delays
+#define TIMEOUT_TIMEOUT 2000
+#else
+#define TIMEOUT_TIMEOUT 200
+#endif
+
+tst_qmltimer::tst_qmltimer()
+{
+}
+
+void tst_qmltimer::notRepeating()
+{
+ QmlEngine engine;
+ QmlComponent component(&engine);
+ component.setData(QByteArray("import Qt 4.6\nTimer { interval: 100; running: true }"), QUrl::fromLocalFile(""));
+ QmlTimer *timer = qobject_cast<QmlTimer*>(component.create());
+ QVERIFY(timer != 0);
+ QVERIFY(timer->isRunning());
+ QVERIFY(!timer->isRepeating());
+ QCOMPARE(timer->interval(), 100);
+
+ TimerHelper helper;
+ connect(timer, SIGNAL(triggered()), &helper, SLOT(timeout()));
+
+ QTest::qWait(TIMEOUT_TIMEOUT);
+ QCOMPARE(helper.count, 1);
+ QTest::qWait(TIMEOUT_TIMEOUT);
+ QCOMPARE(helper.count, 1);
+ QVERIFY(timer->isRunning() == false);
+}
+
+void tst_qmltimer::notRepeatingStart()
+{
+ QmlEngine engine;
+ QmlComponent component(&engine);
+ component.setData(QByteArray("import Qt 4.6\nTimer { interval: 100 }"), QUrl::fromLocalFile(""));
+ QmlTimer *timer = qobject_cast<QmlTimer*>(component.create());
+ QVERIFY(timer != 0);
+ QVERIFY(!timer->isRunning());
+
+ TimerHelper helper;
+ connect(timer, SIGNAL(triggered()), &helper, SLOT(timeout()));
+
+ QTest::qWait(TIMEOUT_TIMEOUT);
+ QCOMPARE(helper.count, 0);
+
+ timer->start();
+ QTest::qWait(TIMEOUT_TIMEOUT);
+ QCOMPARE(helper.count, 1);
+ QTest::qWait(TIMEOUT_TIMEOUT);
+ QCOMPARE(helper.count, 1);
+ QVERIFY(timer->isRunning() == false);
+
+ delete timer;
+}
+
+void tst_qmltimer::repeat()
+{
+ QmlEngine engine;
+ QmlComponent component(&engine);
+ component.setData(QByteArray("import Qt 4.6\nTimer { interval: 100; repeat: true; running: true }"), QUrl::fromLocalFile(""));
+ QmlTimer *timer = qobject_cast<QmlTimer*>(component.create());
+ QVERIFY(timer != 0);
+
+ TimerHelper helper;
+ connect(timer, SIGNAL(triggered()), &helper, SLOT(timeout()));
+ QCOMPARE(helper.count, 0);
+
+ QTest::qWait(TIMEOUT_TIMEOUT);
+ QVERIFY(helper.count > 0);
+ int oldCount = helper.count;
+
+ QTest::qWait(TIMEOUT_TIMEOUT);
+ QVERIFY(helper.count > oldCount);
+ QVERIFY(timer->isRunning());
+
+ oldCount = helper.count;
+ timer->stop();
+
+ QTest::qWait(TIMEOUT_TIMEOUT);
+ QVERIFY(helper.count == oldCount);
+ QVERIFY(timer->isRunning() == false);
+
+ delete timer;
+}
+
+void tst_qmltimer::triggeredOnStart()
+{
+ QmlEngine engine;
+ QmlComponent component(&engine);
+ component.setData(QByteArray("import Qt 4.6\nTimer { interval: 100; running: true; triggeredOnStart: true }"), QUrl::fromLocalFile(""));
+ QmlTimer *timer = qobject_cast<QmlTimer*>(component.create());
+ QVERIFY(timer != 0);
+ QVERIFY(timer->triggeredOnStart());
+
+ TimerHelper helper;
+ connect(timer, SIGNAL(triggered()), &helper, SLOT(timeout()));
+ QTest::qWait(1);
+ QCOMPARE(helper.count, 1);
+
+ QTest::qWait(TIMEOUT_TIMEOUT);
+ QCOMPARE(helper.count, 2);
+ QTest::qWait(TIMEOUT_TIMEOUT);
+ QCOMPARE(helper.count, 2);
+ QVERIFY(timer->isRunning() == false);
+
+ delete timer;
+}
+
+void tst_qmltimer::triggeredOnStartRepeat()
+{
+ QmlEngine engine;
+ QmlComponent component(&engine);
+ component.setData(QByteArray("import Qt 4.6\nTimer { interval: 100; running: true; triggeredOnStart: true; repeat: true }"), QUrl::fromLocalFile(""));
+ QmlTimer *timer = qobject_cast<QmlTimer*>(component.create());
+ QVERIFY(timer != 0);
+
+ TimerHelper helper;
+ connect(timer, SIGNAL(triggered()), &helper, SLOT(timeout()));
+ QTest::qWait(1);
+ QCOMPARE(helper.count, 1);
+
+ QTest::qWait(TIMEOUT_TIMEOUT);
+ QVERIFY(helper.count > 1);
+ int oldCount = helper.count;
+ QTest::qWait(TIMEOUT_TIMEOUT);
+ QVERIFY(helper.count > oldCount);
+ QVERIFY(timer->isRunning());
+
+ delete timer;
+}
+
+void tst_qmltimer::noTriggerIfNotRunning()
+{
+ QmlEngine engine;
+ QmlComponent component(&engine);
+ component.setData(QByteArray(
+ "import Qt 4.6\n"
+ "Item { property bool ok: true\n"
+ "Timer { id: t1; interval: 100; repeat: true; running: true; onTriggered: if (!running) ok=false }"
+ "Timer { interval: 10; running: true; onTriggered: t1.running=false }"
+ "}"
+ ), QUrl::fromLocalFile(""));
+ QObject *item = component.create();
+ QVERIFY(item != 0);
+ QTest::qWait(TIMEOUT_TIMEOUT);
+ QCOMPARE(item->property("ok").toBool(), true);
+
+ delete item;
+}
+
+void tst_qmltimer::changeDuration()
+{
+ QmlEngine engine;
+ QmlComponent component(&engine);
+ component.setData(QByteArray("import Qt 4.6\nTimer { interval: 200; repeat: true; running: true }"), QUrl::fromLocalFile(""));
+ QmlTimer *timer = qobject_cast<QmlTimer*>(component.create());
+ QVERIFY(timer != 0);
+
+ TimerHelper helper;
+ connect(timer, SIGNAL(triggered()), &helper, SLOT(timeout()));
+ QCOMPARE(helper.count, 0);
+
+ QTest::qWait(500);
+ QCOMPARE(helper.count, 2);
+
+ timer->setInterval(500);
+
+ QTest::qWait(600);
+ QCOMPARE(helper.count, 3);
+ QVERIFY(timer->isRunning());
+
+ delete timer;
+}
+
+void tst_qmltimer::restart()
+{
+ QmlEngine engine;
+ QmlComponent component(&engine);
+ component.setData(QByteArray("import Qt 4.6\nTimer { interval: 500; repeat: true; running: true }"), QUrl::fromLocalFile(""));
+ QmlTimer *timer = qobject_cast<QmlTimer*>(component.create());
+ QVERIFY(timer != 0);
+
+ TimerHelper helper;
+ connect(timer, SIGNAL(triggered()), &helper, SLOT(timeout()));
+ QCOMPARE(helper.count, 0);
+
+ QTest::qWait(600);
+ QCOMPARE(helper.count, 1);
+
+ QTest::qWait(300);
+
+ timer->restart();
+
+ QTest::qWait(700);
+
+ QCOMPARE(helper.count, 2);
+ QVERIFY(timer->isRunning());
+
+ delete timer;
+}
+
+QTEST_MAIN(tst_qmltimer)
+
+#include "tst_qmltimer.moc"
diff --git a/tests/auto/declarative/qmlvaluetypes/data/autoBindingRemoval.2.qml b/tests/auto/declarative/qmlvaluetypes/data/autoBindingRemoval.2.qml
new file mode 100644
index 0000000..ce2e82d
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/autoBindingRemoval.2.qml
@@ -0,0 +1,9 @@
+import Test 1.0
+
+MyTypeObject {
+ property int value: 10
+ rect.x: value
+
+ onRunScript: { rect = Qt.rect(10, 10, 10, 10) }
+}
+
diff --git a/tests/auto/declarative/qmlvaluetypes/data/autoBindingRemoval.3.qml b/tests/auto/declarative/qmlvaluetypes/data/autoBindingRemoval.3.qml
new file mode 100644
index 0000000..c82b533
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/autoBindingRemoval.3.qml
@@ -0,0 +1,10 @@
+import Test 1.0
+
+MyTypeObject {
+ property var value
+
+ rect: value
+
+ onRunScript: { rect.x = 44 }
+}
+
diff --git a/tests/auto/declarative/qmlvaluetypes/data/autoBindingRemoval.qml b/tests/auto/declarative/qmlvaluetypes/data/autoBindingRemoval.qml
new file mode 100644
index 0000000..a8a72f5
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/autoBindingRemoval.qml
@@ -0,0 +1,9 @@
+import Test 1.0
+
+MyTypeObject {
+ property int value: 10
+ rect.x: value
+
+ onRunScript: { rect.x = 42; }
+}
+
diff --git a/tests/auto/declarative/qmlvaluetypes/data/bindingAssignment.qml b/tests/auto/declarative/qmlvaluetypes/data/bindingAssignment.qml
new file mode 100644
index 0000000..a652186
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/bindingAssignment.qml
@@ -0,0 +1,7 @@
+import Test 1.0
+
+MyTypeObject {
+ property int value: 10
+
+ rect.x: value
+}
diff --git a/tests/auto/declarative/qmlvaluetypes/data/bindingConflict.qml b/tests/auto/declarative/qmlvaluetypes/data/bindingConflict.qml
new file mode 100644
index 0000000..fd25c9f
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/bindingConflict.qml
@@ -0,0 +1,8 @@
+import Test 1.0
+
+MyTypeObject {
+ property int value: 13
+
+ rect.x: value
+ rect: "10,10,10x10"
+}
diff --git a/tests/auto/declarative/qmlvaluetypes/data/bindingRead.qml b/tests/auto/declarative/qmlvaluetypes/data/bindingRead.qml
new file mode 100644
index 0000000..538d776
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/bindingRead.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+
+MyTypeObject {
+ property int value: rect.x
+}
diff --git a/tests/auto/declarative/qmlvaluetypes/data/bindingVariantCopy.qml b/tests/auto/declarative/qmlvaluetypes/data/bindingVariantCopy.qml
new file mode 100644
index 0000000..691a56c
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/bindingVariantCopy.qml
@@ -0,0 +1,13 @@
+import Test 1.0
+
+MyTypeObject {
+ property var object
+ object: MyTypeObject {
+ rect.x: 19
+ rect.y: 33
+ rect.width: 5
+ rect.height: 99
+ }
+
+ rect: object.rect
+}
diff --git a/tests/auto/declarative/qmlvaluetypes/data/deletedObject.js b/tests/auto/declarative/qmlvaluetypes/data/deletedObject.js
new file mode 100644
index 0000000..af298ff
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/deletedObject.js
@@ -0,0 +1,13 @@
+var savedReference;
+
+function startup()
+{
+ savedReference = object.rect;
+ console.log("Test: " + savedReference.x);
+}
+
+function afterDelete()
+{
+ console.log("Test: " + savedReference.x);
+}
+
diff --git a/tests/auto/declarative/qmlvaluetypes/data/deletedObject.qml b/tests/auto/declarative/qmlvaluetypes/data/deletedObject.qml
new file mode 100644
index 0000000..05459f4
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/deletedObject.qml
@@ -0,0 +1,12 @@
+import Test 1.0
+import Qt 4.6
+
+MyTypeObject {
+ property var object
+
+ Script { source: "deletedObject.js" }
+
+ object: MyTypeObject {}
+ Component.onCompleted: startup()
+ onRunScript: afterDelete()
+}
diff --git a/tests/auto/declarative/qmlvaluetypes/data/font_read.qml b/tests/auto/declarative/qmlvaluetypes/data/font_read.qml
new file mode 100644
index 0000000..e1d1ce0
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/font_read.qml
@@ -0,0 +1,18 @@
+import Test 1.0
+
+MyTypeObject {
+ property string f_family: font.family
+ property bool f_bold: font.bold
+ property int f_weight: font.weight
+ property bool f_italic: font.italic
+ property bool f_underline: font.underline
+ property bool f_overline: font.overline
+ property bool f_strikeout: font.strikeout
+ property real f_pointSize: font.pointSize
+ property int f_pixelSize: font.pixelSize
+ property int f_capitalization: font.capitalization
+ property real f_letterSpacing: font.letterSpacing
+ property real f_wordSpacing: font.wordSpacing;
+ property var copy: font
+}
+
diff --git a/tests/auto/declarative/qmlvaluetypes/data/font_write.2.qml b/tests/auto/declarative/qmlvaluetypes/data/font_write.2.qml
new file mode 100644
index 0000000..b559389
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/font_write.2.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyTypeObject {
+ font.pixelSize: 10
+}
+
diff --git a/tests/auto/declarative/qmlvaluetypes/data/font_write.3.qml b/tests/auto/declarative/qmlvaluetypes/data/font_write.3.qml
new file mode 100644
index 0000000..913ac50
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/font_write.3.qml
@@ -0,0 +1,7 @@
+import Test 1.0
+
+MyTypeObject {
+ font.pixelSize: 10
+ font.pointSize: 19
+}
+
diff --git a/tests/auto/declarative/qmlvaluetypes/data/font_write.qml b/tests/auto/declarative/qmlvaluetypes/data/font_write.qml
new file mode 100644
index 0000000..ff4d0a1
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/font_write.qml
@@ -0,0 +1,16 @@
+import Test 1.0
+
+MyTypeObject {
+ font.family: if(1) "Helvetica"
+ font.bold: if(1) false
+ font.weight: "Normal"
+ font.italic: if(1) false
+ font.underline: if(1) false
+ font.overline: if(1) false
+ font.strikeout: if(1) false
+ font.pointSize: if(1) 15
+ font.capitalization: "AllLowercase"
+ font.letterSpacing: if(1) 9.7
+ font.wordSpacing: if(1) 11.2
+}
+
diff --git a/tests/auto/declarative/qmlvaluetypes/data/point_read.qml b/tests/auto/declarative/qmlvaluetypes/data/point_read.qml
new file mode 100644
index 0000000..3e67de6
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/point_read.qml
@@ -0,0 +1,7 @@
+import Test 1.0
+
+MyTypeObject {
+ property int p_x: point.x
+ property int p_y: point.y
+ property var copy: point
+}
diff --git a/tests/auto/declarative/qmlvaluetypes/data/point_write.qml b/tests/auto/declarative/qmlvaluetypes/data/point_write.qml
new file mode 100644
index 0000000..063525a
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/point_write.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyTypeObject {
+ point.x: if (true) 11
+ point.y: if (true) 12
+}
diff --git a/tests/auto/declarative/qmlvaluetypes/data/pointf_read.qml b/tests/auto/declarative/qmlvaluetypes/data/pointf_read.qml
new file mode 100644
index 0000000..d845a5b
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/pointf_read.qml
@@ -0,0 +1,8 @@
+import Test 1.0
+
+MyTypeObject {
+ property real p_x: pointf.x
+ property real p_y: pointf.y
+ property var copy: pointf
+}
+
diff --git a/tests/auto/declarative/qmlvaluetypes/data/pointf_write.qml b/tests/auto/declarative/qmlvaluetypes/data/pointf_write.qml
new file mode 100644
index 0000000..9ee3fc1
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/pointf_write.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyTypeObject {
+ pointf.x: if (true) 6.8
+ pointf.y: if (true) 9.3
+}
diff --git a/tests/auto/declarative/qmlvaluetypes/data/rect_read.qml b/tests/auto/declarative/qmlvaluetypes/data/rect_read.qml
new file mode 100644
index 0000000..5364431
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/rect_read.qml
@@ -0,0 +1,10 @@
+import Test 1.0
+
+MyTypeObject {
+ property int r_x: rect.x
+ property int r_y: rect.y
+ property int r_width: rect.width
+ property int r_height: rect.height
+ property var copy: rect
+}
+
diff --git a/tests/auto/declarative/qmlvaluetypes/data/rect_write.qml b/tests/auto/declarative/qmlvaluetypes/data/rect_write.qml
new file mode 100644
index 0000000..8add453
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/rect_write.qml
@@ -0,0 +1,9 @@
+import Test 1.0
+
+MyTypeObject {
+ rect.x: if (true) 1234
+ rect.y: if (true) 7
+ rect.width: if (true) 56
+ rect.height: if (true) 63
+}
+
diff --git a/tests/auto/declarative/qmlvaluetypes/data/rectf_read.qml b/tests/auto/declarative/qmlvaluetypes/data/rectf_read.qml
new file mode 100644
index 0000000..aeb9f41
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/rectf_read.qml
@@ -0,0 +1,10 @@
+import Test 1.0
+
+MyTypeObject {
+ property real r_x: rectf.x
+ property real r_y: rectf.y
+ property real r_width: rectf.width
+ property real r_height: rectf.height
+ property var copy: rectf
+}
+
diff --git a/tests/auto/declarative/qmlvaluetypes/data/rectf_write.qml b/tests/auto/declarative/qmlvaluetypes/data/rectf_write.qml
new file mode 100644
index 0000000..1e6ff4f
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/rectf_write.qml
@@ -0,0 +1,9 @@
+import Test 1.0
+
+MyTypeObject {
+ rectf.x: if (true) 70.1
+ rectf.y: if (true) -113.2
+ rectf.width: if (true) 80924.8
+ rectf.height: if (true) 99.2
+}
+
diff --git a/tests/auto/declarative/qmlvaluetypes/data/scriptAccess.qml b/tests/auto/declarative/qmlvaluetypes/data/scriptAccess.qml
new file mode 100644
index 0000000..96592eb
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/scriptAccess.qml
@@ -0,0 +1,9 @@
+import Qt 4.6
+import Test 1.0
+
+MyTypeObject {
+ property int valuePre;
+ property int valuePost;
+
+ Component.onCompleted: { valuePre = rect.x; rect.x = 19; valuePost = rect.x; }
+}
diff --git a/tests/auto/declarative/qmlvaluetypes/data/scriptVariantCopy.qml b/tests/auto/declarative/qmlvaluetypes/data/scriptVariantCopy.qml
new file mode 100644
index 0000000..29157e8
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/scriptVariantCopy.qml
@@ -0,0 +1,14 @@
+import Test 1.0
+
+MyTypeObject {
+ property var object
+ object: MyTypeObject {
+ rect.x: 19
+ rect.y: 33
+ rect.width: 5
+ rect.height: 99
+ }
+
+ onRunScript: rect = object.rect
+}
+
diff --git a/tests/auto/declarative/qmlvaluetypes/data/size_read.qml b/tests/auto/declarative/qmlvaluetypes/data/size_read.qml
new file mode 100644
index 0000000..86dba03
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/size_read.qml
@@ -0,0 +1,8 @@
+import Test 1.0
+
+MyTypeObject {
+ property int s_width: size.width
+ property int s_height: size.height
+ property var copy: size
+}
+
diff --git a/tests/auto/declarative/qmlvaluetypes/data/size_write.qml b/tests/auto/declarative/qmlvaluetypes/data/size_write.qml
new file mode 100644
index 0000000..2f9d10e
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/size_write.qml
@@ -0,0 +1,7 @@
+import Test 1.0
+
+MyTypeObject {
+ size.width: if (true) 13
+ size.height: if (true) 88
+}
+
diff --git a/tests/auto/declarative/qmlvaluetypes/data/sizef_read.qml b/tests/auto/declarative/qmlvaluetypes/data/sizef_read.qml
new file mode 100644
index 0000000..c6f34e4
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/sizef_read.qml
@@ -0,0 +1,9 @@
+import Test 1.0
+
+MyTypeObject {
+ property real s_width: sizef.width
+ property real s_height: sizef.height
+ property var copy: sizef
+}
+
+
diff --git a/tests/auto/declarative/qmlvaluetypes/data/sizef_write.qml b/tests/auto/declarative/qmlvaluetypes/data/sizef_write.qml
new file mode 100644
index 0000000..f16f0bd
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/sizef_write.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyTypeObject {
+ sizef.width: if (true) 44.3
+ sizef.height: if (true) 92.8
+}
diff --git a/tests/auto/declarative/qmlvaluetypes/data/staticAssignment.qml b/tests/auto/declarative/qmlvaluetypes/data/staticAssignment.qml
new file mode 100644
index 0000000..b687f89
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/staticAssignment.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+
+MyTypeObject {
+ rect.x: 9
+}
diff --git a/tests/auto/declarative/qmlvaluetypes/data/valueInterceptors.qml b/tests/auto/declarative/qmlvaluetypes/data/valueInterceptors.qml
new file mode 100644
index 0000000..026ae83
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/valueInterceptors.qml
@@ -0,0 +1,8 @@
+import Test 1.0
+
+MyTypeObject {
+ property int value: 13;
+
+ rect.x: MyOffsetValueInterceptor {}
+ rect.x: value
+}
diff --git a/tests/auto/declarative/qmlvaluetypes/data/valueSources.qml b/tests/auto/declarative/qmlvaluetypes/data/valueSources.qml
new file mode 100644
index 0000000..d4d4391
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/valueSources.qml
@@ -0,0 +1,5 @@
+import Test 1.0
+
+MyTypeObject {
+ rect.x: MyConstantValueSource {}
+}
diff --git a/tests/auto/declarative/qmlvaluetypes/data/vector3d_read.qml b/tests/auto/declarative/qmlvaluetypes/data/vector3d_read.qml
new file mode 100644
index 0000000..abdf9f0
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/vector3d_read.qml
@@ -0,0 +1,9 @@
+import Test 1.0
+
+MyTypeObject {
+ property real v_x: vector.x
+ property real v_y: vector.y
+ property real v_z: vector.z
+ property var copy: vector
+}
+
diff --git a/tests/auto/declarative/qmlvaluetypes/data/vector3d_write.qml b/tests/auto/declarative/qmlvaluetypes/data/vector3d_write.qml
new file mode 100644
index 0000000..9c1bf76
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/data/vector3d_write.qml
@@ -0,0 +1,8 @@
+import Test 1.0
+
+MyTypeObject {
+ vector.x: if (true) -0.3
+ vector.y: if (true) -12.9
+ vector.z: if (true) 907.4
+}
+
diff --git a/tests/auto/declarative/qmlvaluetypes/qmlvaluetypes.pro b/tests/auto/declarative/qmlvaluetypes/qmlvaluetypes.pro
new file mode 100644
index 0000000..82d067e
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/qmlvaluetypes.pro
@@ -0,0 +1,10 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+macx:CONFIG -= app_bundle
+
+HEADERS += testtypes.h
+
+SOURCES += tst_qmlvaluetypes.cpp \
+ testtypes.cpp
+
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlvaluetypes/testtypes.cpp b/tests/auto/declarative/qmlvaluetypes/testtypes.cpp
new file mode 100644
index 0000000..565eb1c
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/testtypes.cpp
@@ -0,0 +1,45 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "testtypes.h"
+
+QML_DEFINE_TYPE(Test, 1, 0, MyTypeObject, MyTypeObject);
+QML_DEFINE_TYPE(Test, 1, 0, MyConstantValueSource, MyConstantValueSource);
+QML_DEFINE_TYPE(Test, 1, 0, MyOffsetValueInterceptor, MyOffsetValueInterceptor);
diff --git a/tests/auto/declarative/qmlvaluetypes/testtypes.h b/tests/auto/declarative/qmlvaluetypes/testtypes.h
new file mode 100644
index 0000000..67e32f5
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/testtypes.h
@@ -0,0 +1,152 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef TESTTYPES_H
+#define TESTTYPES_H
+
+#include <QObject>
+#include <QPoint>
+#include <QPointF>
+#include <QSize>
+#include <QSizeF>
+#include <QRect>
+#include <QRectF>
+#include <QVector3D>
+#include <QFont>
+#include <qml.h>
+#include <QmlPropertyValueSource>
+
+class MyTypeObject : public QObject
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QPoint point READ point WRITE setPoint NOTIFY changed);
+ Q_PROPERTY(QPointF pointf READ pointf WRITE setPointf NOTIFY changed);
+ Q_PROPERTY(QSize size READ size WRITE setSize NOTIFY changed);
+ Q_PROPERTY(QSizeF sizef READ sizef WRITE setSizef NOTIFY changed);
+ Q_PROPERTY(QRect rect READ rect WRITE setRect NOTIFY changed);
+ Q_PROPERTY(QRectF rectf READ rectf WRITE setRectf NOTIFY changed);
+ Q_PROPERTY(QVector3D vector READ vector WRITE setVector NOTIFY changed);
+ Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY changed);
+
+public:
+ MyTypeObject() :
+ m_point(10, 4),
+ m_pointf(11.3, -10.9),
+ m_size(1912, 1913),
+ m_sizef(0.1, 100923.2),
+ m_rect(2, 3, 109, 102),
+ m_rectf(103.8, 99.2, 88.1, 77.6),
+ m_vector(23.88, 3.1, 4.3)
+ {
+ m_font.setFamily("Arial");
+ m_font.setBold(true);
+ m_font.setWeight(QFont::DemiBold);
+ m_font.setItalic(true);
+ m_font.setUnderline(true);
+ m_font.setOverline(true);
+ m_font.setStrikeOut(true);
+ m_font.setPointSize(29);
+ m_font.setCapitalization(QFont::AllUppercase);
+ m_font.setLetterSpacing(QFont::AbsoluteSpacing, 10.2);
+ m_font.setWordSpacing(19.7);
+ }
+
+ QPoint m_point;
+ QPoint point() const { return m_point; }
+ void setPoint(const QPoint &v) { m_point = v; emit changed(); }
+
+ QPointF m_pointf;
+ QPointF pointf() const { return m_pointf; }
+ void setPointf(const QPointF &v) { m_pointf = v; emit changed(); }
+
+ QSize m_size;
+ QSize size() const { return m_size; }
+ void setSize(const QSize &v) { m_size = v; emit changed(); }
+
+ QSizeF m_sizef;
+ QSizeF sizef() const { return m_sizef; }
+ void setSizef(const QSizeF &v) { m_sizef = v; emit changed(); }
+
+ QRect m_rect;
+ QRect rect() const { return m_rect; }
+ void setRect(const QRect &v) { m_rect = v; emit changed(); }
+
+ QRectF m_rectf;
+ QRectF rectf() const { return m_rectf; }
+ void setRectf(const QRectF &v) { m_rectf = v; emit changed(); }
+
+ QVector3D m_vector;
+ QVector3D vector() const { return m_vector; }
+ void setVector(const QVector3D &v) { m_vector = v; emit changed(); }
+
+ QFont m_font;
+ QFont font() const { return m_font; }
+ void setFont(const QFont &v) { m_font = v; emit changed(); }
+
+ void emitRunScript() { emit runScript(); }
+
+signals:
+ void changed();
+ void runScript();
+};
+QML_DECLARE_TYPE(MyTypeObject);
+
+class MyConstantValueSource : public QObject, public QmlPropertyValueSource
+{
+ Q_OBJECT
+public:
+ virtual void setTarget(const QmlMetaProperty &p) { p.write(3345); }
+};
+QML_DECLARE_TYPE(MyConstantValueSource);
+
+class MyOffsetValueInterceptor : public QObject, public QmlPropertyValueInterceptor
+{
+ Q_OBJECT
+public:
+ virtual void setTarget(const QmlMetaProperty &p) { prop = p; }
+ virtual void write(const QVariant &value) { prop.write(value.toInt() + 13, QmlMetaProperty::BypassInterceptor); }
+
+private:
+ QmlMetaProperty prop;
+};
+QML_DECLARE_TYPE(MyOffsetValueInterceptor);
+
+#endif // TESTTYPES_H
diff --git a/tests/auto/declarative/qmlvaluetypes/tst_qmlvaluetypes.cpp b/tests/auto/declarative/qmlvaluetypes/tst_qmlvaluetypes.cpp
new file mode 100644
index 0000000..49655db
--- /dev/null
+++ b/tests/auto/declarative/qmlvaluetypes/tst_qmlvaluetypes.cpp
@@ -0,0 +1,588 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qtest.h>
+#include <QmlEngine>
+#include <QmlComponent>
+#include <QDebug>
+#include <private/qmlvaluetype_p.h>
+#include "testtypes.h"
+
+class tst_valuetypes : public QObject
+{
+ Q_OBJECT
+public:
+ tst_valuetypes() {}
+
+private slots:
+ void point();
+ void pointf();
+ void size();
+ void sizef();
+ void rect();
+ void rectf();
+ void vector3d();
+ void font();
+
+ void bindingAssignment();
+ void bindingRead();
+ void staticAssignment();
+ void scriptAccess();
+ void autoBindingRemoval();
+ void valueSources();
+ void valueInterceptors();
+ void bindingConflict();
+ void deletedObject();
+ void bindingVariantCopy();
+ void scriptVariantCopy();
+ void cppClasses();
+
+private:
+ QmlEngine engine;
+};
+
+inline QUrl TEST_FILE(const QString &filename)
+{
+ return QUrl::fromLocalFile(QLatin1String(SRCDIR) + QLatin1String("/data/") + filename);
+}
+
+void tst_valuetypes::point()
+{
+ {
+ QmlComponent component(&engine, TEST_FILE("point_read.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("p_x").toInt(), 10);
+ QCOMPARE(object->property("p_y").toInt(), 4);
+ QCOMPARE(object->property("copy"), QVariant(QPoint(10, 4)));
+
+ delete object;
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("point_write.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->point(), QPoint(11, 12));
+
+ delete object;
+ }
+}
+
+void tst_valuetypes::pointf()
+{
+ {
+ QmlComponent component(&engine, TEST_FILE("pointf_read.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("p_x").toDouble(), 11.3);
+ QCOMPARE(object->property("p_y").toDouble(), -10.9);
+ QCOMPARE(object->property("copy"), QVariant(QPointF(11.3, -10.9)));
+
+ delete object;
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("pointf_write.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->pointf(), QPointF(6.8, 9.3));
+
+ delete object;
+ }
+}
+
+void tst_valuetypes::size()
+{
+ {
+ QmlComponent component(&engine, TEST_FILE("size_read.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("s_width").toInt(), 1912);
+ QCOMPARE(object->property("s_height").toInt(), 1913);
+ QCOMPARE(object->property("copy"), QVariant(QSize(1912, 1913)));
+
+ delete object;
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("size_write.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->size(), QSize(13, 88));
+
+ delete object;
+ }
+}
+
+void tst_valuetypes::sizef()
+{
+ {
+ QmlComponent component(&engine, TEST_FILE("sizef_read.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("s_width").toDouble(), 0.1);
+ QCOMPARE(object->property("s_height").toDouble(), 100923.2);
+ QCOMPARE(object->property("copy"), QVariant(QSizeF(0.1, 100923.2)));
+
+ delete object;
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("sizef_write.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->sizef(), QSizeF(44.3, 92.8));
+
+ delete object;
+ }
+}
+
+void tst_valuetypes::rect()
+{
+ {
+ QmlComponent component(&engine, TEST_FILE("rect_read.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("r_x").toInt(), 2);
+ QCOMPARE(object->property("r_y").toInt(), 3);
+ QCOMPARE(object->property("r_width").toInt(), 109);
+ QCOMPARE(object->property("r_height").toInt(), 102);
+ QCOMPARE(object->property("copy"), QVariant(QRect(2, 3, 109, 102)));
+
+ delete object;
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("rect_write.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->rect(), QRect(1234, 7, 56, 63));
+
+ delete object;
+ }
+}
+
+void tst_valuetypes::rectf()
+{
+ {
+ QmlComponent component(&engine, TEST_FILE("rectf_read.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("r_x").toDouble(), 103.8);
+ QCOMPARE(object->property("r_y").toDouble(), 99.2);
+ QCOMPARE(object->property("r_width").toDouble(), 88.1);
+ QCOMPARE(object->property("r_height").toDouble(), 77.6);
+ QCOMPARE(object->property("copy"), QVariant(QRectF(103.8, 99.2, 88.1, 77.6)));
+
+ delete object;
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("rectf_write.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->rectf(), QRectF(70.1, -113.2, 80924.8, 99.2));
+
+ delete object;
+ }
+}
+
+void tst_valuetypes::vector3d()
+{
+ {
+ QmlComponent component(&engine, TEST_FILE("vector3d_read.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE((float)object->property("v_x").toDouble(), (float)23.88);
+ QCOMPARE((float)object->property("v_y").toDouble(), (float)3.1);
+ QCOMPARE((float)object->property("v_z").toDouble(), (float)4.3);
+ QCOMPARE(object->property("copy"), QVariant(QVector3D(23.88, 3.1, 4.3)));
+
+ delete object;
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("vector3d_write.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->vector(), QVector3D(-0.3, -12.9, 907.4));
+
+ delete object;
+ }
+}
+
+void tst_valuetypes::font()
+{
+ {
+ QmlComponent component(&engine, TEST_FILE("font_read.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("f_family").toString(), object->font().family());
+ QCOMPARE(object->property("f_bold").toBool(), object->font().bold());
+ QCOMPARE(object->property("f_weight").toInt(), object->font().weight());
+ QCOMPARE(object->property("f_italic").toBool(), object->font().italic());
+ QCOMPARE(object->property("f_underline").toBool(), object->font().underline());
+ QCOMPARE(object->property("f_overline").toBool(), object->font().overline());
+ QCOMPARE(object->property("f_strikeout").toBool(), object->font().strikeOut());
+ QCOMPARE(object->property("f_pointSize").toDouble(), object->font().pointSizeF());
+ QCOMPARE(object->property("f_pixelSize").toInt(), object->font().pixelSize());
+ QCOMPARE(object->property("f_capitalization").toInt(), (int)object->font().capitalization());
+ QCOMPARE(object->property("f_letterSpacing").toDouble(), object->font().letterSpacing());
+ QCOMPARE(object->property("f_wordSpacing").toDouble(), object->font().wordSpacing());
+
+ QCOMPARE(object->property("copy"), QVariant(object->font()));
+
+ delete object;
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("font_write.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QFont font;
+ font.setFamily("Helvetica");
+ font.setBold(false);
+ font.setWeight(QFont::Normal);
+ font.setItalic(false);
+ font.setUnderline(false);
+ font.setStrikeOut(false);
+ font.setPointSize(15);
+ font.setCapitalization(QFont::AllLowercase);
+ font.setLetterSpacing(QFont::AbsoluteSpacing, 9.7);
+ font.setWordSpacing(11.2);
+
+ QEXPECT_FAIL("", "QT-2920", Continue);
+ QCOMPARE(object->font(), font);
+
+ delete object;
+ }
+
+ // Test pixelSize
+ {
+ QmlComponent component(&engine, TEST_FILE("font_write.2.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->font().pixelSize(), 10);
+
+ delete object;
+ }
+
+ // Test pixelSize and pointSize
+ {
+ QmlComponent component(&engine, TEST_FILE("font_write.3.qml"));
+ QTest::ignoreMessage(QtWarningMsg, "Both point size and pixel size set. Using pixel size. ");
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->font().pixelSize(), 10);
+
+ delete object;
+ }
+}
+
+// Test bindings can write to value types
+void tst_valuetypes::bindingAssignment()
+{
+ QmlComponent component(&engine, TEST_FILE("bindingAssignment.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->rect().x(), 10);
+
+ object->setProperty("value", QVariant(92));
+
+ QCOMPARE(object->rect().x(), 92);
+
+ delete object;
+}
+
+// Test bindings can read from value types
+void tst_valuetypes::bindingRead()
+{
+ QmlComponent component(&engine, TEST_FILE("bindingRead.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("value").toInt(), 2);
+
+ object->setRect(QRect(19, 3, 88, 2));
+
+ QCOMPARE(object->property("value").toInt(), 19);
+
+ delete object;
+}
+
+// Test static values can assign to value types
+void tst_valuetypes::staticAssignment()
+{
+ QmlComponent component(&engine, TEST_FILE("staticAssignment.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->rect().x(), 9);
+
+ delete object;
+}
+
+// Test scripts can read/write value types
+void tst_valuetypes::scriptAccess()
+{
+ QmlComponent component(&engine, TEST_FILE("scriptAccess.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("valuePre").toInt(), 2);
+ QCOMPARE(object->rect().x(), 19);
+ QCOMPARE(object->property("valuePost").toInt(), 19);
+
+ delete object;
+}
+
+// Test that assigning a constant from script removes any binding
+void tst_valuetypes::autoBindingRemoval()
+{
+ {
+ QmlComponent component(&engine, TEST_FILE("autoBindingRemoval.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->rect().x(), 10);
+
+ object->setProperty("value", QVariant(13));
+
+ QCOMPARE(object->rect().x(), 13);
+
+ object->emitRunScript();
+
+ QCOMPARE(object->rect().x(), 42);
+
+ object->setProperty("value", QVariant(92));
+
+ QEXPECT_FAIL("", "QT-2920", Continue);
+ QCOMPARE(object->rect().x(), 42);
+
+ delete object;
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("autoBindingRemoval.2.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->rect().x(), 10);
+
+ object->setProperty("value", QVariant(13));
+
+ QCOMPARE(object->rect().x(), 13);
+
+ object->emitRunScript();
+
+ QCOMPARE(object->rect(), QRect(10, 10, 10, 10));
+
+ object->setProperty("value", QVariant(92));
+
+ QCOMPARE(object->rect(), QRect(10, 10, 10, 10));
+
+ delete object;
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("autoBindingRemoval.3.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ object->setProperty("value", QVariant(QRect(9, 22, 33, 44)));
+
+ QCOMPARE(object->rect(), QRect(9, 22, 33, 44));
+
+ object->emitRunScript();
+
+ QCOMPARE(object->rect(), QRect(44, 22, 33, 44));
+
+ object->setProperty("value", QVariant(QRect(19, 3, 4, 8)));
+
+ QEXPECT_FAIL("", "QT-2920", Continue);
+ QCOMPARE(object->rect(), QRect(44, 22, 33, 44));
+
+ delete object;
+ }
+
+}
+
+// Test that property value sources assign to value types
+void tst_valuetypes::valueSources()
+{
+ QmlComponent component(&engine, TEST_FILE("valueSources.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->rect().x(), 3345);
+
+ delete object;
+}
+
+static void checkNoErrors(QmlComponent& component)
+{
+ QList<QmlError> errors = component.errors();
+ if (errors.isEmpty())
+ return;
+ for (int ii = 0; ii < errors.count(); ++ii) {
+ const QmlError &error = errors.at(ii);
+ qWarning("%d:%d:%s",error.line(),error.column(),error.description().toUtf8().constData());
+ }
+}
+
+// Test that property value interceptors can be applied to value types
+void tst_valuetypes::valueInterceptors()
+{
+ QmlComponent component(&engine, TEST_FILE("valueInterceptors.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ checkNoErrors(component);
+ QEXPECT_FAIL("", "QT-2920", Abort);
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->rect().x(), 26);
+
+ object->setProperty("value", 99);
+
+ QCOMPARE(object->rect().x(), 112);
+
+ delete object;
+}
+
+// Test that you can't assign a binding to the "root" value type, and a sub-property
+void tst_valuetypes::bindingConflict()
+{
+ QmlComponent component(&engine, TEST_FILE("bindingConflict.qml"));
+ QCOMPARE(component.isError(), true);
+}
+
+#define CPP_TEST(type, v) \
+{ \
+ type *t = new type; \
+ QVariant value(v); \
+ t->setValue(value); \
+ QCOMPARE(t->value(), value); \
+ delete t; \
+}
+
+// Test that accessing a reference to a valuetype after the owning object is deleted
+// doesn't crash
+void tst_valuetypes::deletedObject()
+{
+ QmlComponent component(&engine, TEST_FILE("deletedObject.qml"));
+ QTest::ignoreMessage(QtDebugMsg, "Test: 2");
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QObject *dObject = qvariant_cast<QObject *>(object->property("object"));
+ QVERIFY(dObject != 0);
+ delete dObject;
+
+ QTest::ignoreMessage(QtDebugMsg, "Test: undefined");
+ object->emitRunScript();
+
+ delete object;
+}
+
+// Test that value types can be assigned to another value type property in a binding
+void tst_valuetypes::bindingVariantCopy()
+{
+ QmlComponent component(&engine, TEST_FILE("bindingVariantCopy.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->rect(), QRect(19, 33, 5, 99));
+
+ delete object;
+}
+
+// Test that value types can be assigned to another value type property in script
+void tst_valuetypes::scriptVariantCopy()
+{
+ QmlComponent component(&engine, TEST_FILE("scriptVariantCopy.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->rect(), QRect(2, 3, 109, 102));
+
+ object->emitRunScript();
+
+ QCOMPARE(object->rect(), QRect(19, 33, 5, 99));
+
+ delete object;
+}
+
+
+// Test that the value type classes can be used manually
+void tst_valuetypes::cppClasses()
+{
+ CPP_TEST(QmlPointValueType, QPoint(19, 33));
+ CPP_TEST(QmlPointFValueType, QPointF(33.6, -23));
+ CPP_TEST(QmlSizeValueType, QSize(-100, 18));
+ CPP_TEST(QmlSizeFValueType, QSizeF(-100.7, 18.2));
+ CPP_TEST(QmlRectValueType, QRect(13, 39, 10928, 88));
+ CPP_TEST(QmlRectFValueType, QRectF(88.2, -90.1, 103.2, 118));
+ CPP_TEST(QmlVector3DValueType, QVector3D(18.2, 19.7, 1002));
+ CPP_TEST(QmlFontValueType, QFont("Helvetica"));
+
+}
+QTEST_MAIN(tst_valuetypes)
+
+#include "tst_qmlvaluetypes.moc"
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/abort.expect b/tests/auto/declarative/qmlxmlhttprequest/data/abort.expect
new file mode 100644
index 0000000..f43e043
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/abort.expect
@@ -0,0 +1,10 @@
+PUT /testdocument.html HTTP/1.1
+Content-Type: text/plain;charset=UTF-8
+Content-Length: 9
+Connection: Keep-Alive
+Accept-Encoding: gzip
+Accept-Language: en-US,*
+User-Agent: Mozilla/5.0
+Host: 127.0.0.1:14445
+
+Test Data \ No newline at end of file
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/abort.qml b/tests/auto/declarative/qmlxmlhttprequest/data/abort.qml
new file mode 100644
index 0000000..d7b9266
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/abort.qml
@@ -0,0 +1,42 @@
+import Qt 4.6
+
+QtObject {
+ property string urlDummy
+ property string url
+
+ property bool seenDone: false
+ property bool didNotSeeUnsent: true
+ property bool endStateUnsent: false
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+ x.open("GET", urlDummy);
+ x.setRequestHeader("Test-header", "TestValue");
+ x.send();
+
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ seenDone = true;
+ } else if (x.readyState == XMLHttpRequest.UNSENT) {
+ didNotSeeUnsent = false;
+ }
+ }
+
+ x.abort();
+
+ if (x.readyState == XMLHttpRequest.UNSENT) {
+ endStateUnsent = true;
+ }
+
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ dataOK = (x.responseText == "QML Rocks!\n");
+ }
+ }
+ x.open("PUT", url);
+ x.send("Test Data");
+ }
+}
+
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/abort.reply b/tests/auto/declarative/qmlxmlhttprequest/data/abort.reply
new file mode 100644
index 0000000..35b11f4
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/abort.reply
@@ -0,0 +1,2 @@
+HTTP/1.0 200 OK
+Content-type: text/html; charset=UTF-8
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/abort_opened.qml b/tests/auto/declarative/qmlxmlhttprequest/data/abort_opened.qml
new file mode 100644
index 0000000..72a45e7
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/abort_opened.qml
@@ -0,0 +1,58 @@
+import Qt 4.6
+
+QtObject {
+ property string url: "testdocument.html"
+
+ property bool readyState: false
+ property bool openedState: false
+
+ property bool status: false
+ property bool statusText: false
+ property bool responseText: false
+ property bool responseXML: false
+
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+ x.abort();
+
+ if (x.readyState == XMLHttpRequest.UNSENT)
+ readyState = true;
+
+ x.open("PUT", url);
+
+ x.abort();
+
+ x.open("GET", url);
+
+ if (x.readyState == XMLHttpRequest.OPENED)
+ openedState = true;
+
+ try {
+ var a = x.status;
+ } catch (error) {
+ if (error.code == DOMException.INVALID_STATE_ERR)
+ status = true;
+ }
+ try {
+ var a = x.statusText;
+ } catch (error) {
+ if (error.code == DOMException.INVALID_STATE_ERR)
+ statusText = true;
+ }
+ responseText = (x.responseText == "");
+ responseXML = (x.responseXML == null);
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ dataOK = (x.responseText == "QML Rocks!\n");
+ }
+ }
+
+
+ x.send()
+ }
+}
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/abort_unsent.qml b/tests/auto/declarative/qmlxmlhttprequest/data/abort_unsent.qml
new file mode 100644
index 0000000..aa78cde
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/abort_unsent.qml
@@ -0,0 +1,54 @@
+import Qt 4.6
+
+QtObject {
+ property string url: "testdocument.html"
+
+ property bool readyState: false
+ property bool openedState: false
+
+ property bool status: false
+ property bool statusText: false
+ property bool responseText: false
+ property bool responseXML: false
+
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+ x.abort();
+
+ if (x.readyState == XMLHttpRequest.UNSENT)
+ readyState = true;
+
+ x.open("GET", url);
+
+ if (x.readyState == XMLHttpRequest.OPENED)
+ openedState = true;
+
+ try {
+ var a = x.status;
+ } catch (error) {
+ if (error.code == DOMException.INVALID_STATE_ERR)
+ status = true;
+ }
+ try {
+ var a = x.statusText;
+ } catch (error) {
+ if (error.code == DOMException.INVALID_STATE_ERR)
+ statusText = true;
+ }
+ responseText = (x.responseText == "");
+ responseXML = (x.responseXML == null);
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ dataOK = (x.responseText == "QML Rocks!\n");
+ }
+ }
+
+
+ x.send()
+ }
+}
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/attr.qml b/tests/auto/declarative/qmlxmlhttprequest/data/attr.qml
new file mode 100644
index 0000000..9049fc7
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/attr.qml
@@ -0,0 +1,80 @@
+import Qt 4.6
+
+QtObject {
+ property bool xmlTest: false
+ property bool dataOK: false
+
+ Script {
+ function checkAttr(documentElement, attr)
+ {
+ if (attr == null)
+ return;
+
+ if (attr.name != "attr")
+ return;
+
+ if (attr.value != "myvalue")
+ return;
+
+ if (attr.ownerElement.tagName != documentElement.tagName)
+ return;
+
+ if (attr.nodeName != "attr")
+ return;
+
+ if (attr.nodeValue != "myvalue")
+ return;
+
+ if (attr.nodeType != 2)
+ return;
+
+ if (attr.childNodes.length != 0)
+ return;
+
+ if (attr.firstChild != null)
+ return;
+
+ if (attr.lastChild != null)
+ return;
+
+ if (attr.previousSibling != null)
+ return;
+
+ if (attr.nextSibling != null)
+ return;
+
+ if (attr.attributes != null)
+ return;
+
+ xmlTest = true;
+ }
+
+ function checkXML(document)
+ {
+ checkAttr(document.documentElement, document.documentElement.attributes[0]);
+ }
+ }
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ x.open("GET", "attr.xml");
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+
+ dataOK = true;
+
+ if (x.responseXML != null)
+ checkXML(x.responseXML);
+
+ }
+ }
+
+ x.send()
+ }
+}
+
+
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/attr.xml b/tests/auto/declarative/qmlxmlhttprequest/data/attr.xml
new file mode 100644
index 0000000..2aa64a3
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/attr.xml
@@ -0,0 +1 @@
+<root attr="myvalue" />
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/callbackException.qml b/tests/auto/declarative/qmlxmlhttprequest/data/callbackException.qml
new file mode 100644
index 0000000..9255922
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/callbackException.qml
@@ -0,0 +1,25 @@
+import Qt 4.6
+
+QtObject {
+ id: obj
+ property string url
+ property string which
+ property bool threw: false
+
+ onWhichChanged: {
+ var x = new XMLHttpRequest;
+
+ x.onreadystatechange = function() {
+ if (x.readyState == which) {
+ obj.threw = true
+ throw(new Error("Exception from Callback"))
+ }
+ }
+
+ x.open("GET", url);
+ x.setRequestHeader("Test-header", "TestValue");
+ x.send();
+ }
+}
+
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/cdata.qml b/tests/auto/declarative/qmlxmlhttprequest/data/cdata.qml
new file mode 100644
index 0000000..b2d0209
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/cdata.qml
@@ -0,0 +1,135 @@
+import Qt 4.6
+
+QtObject {
+ property bool xmlTest: false
+ property bool dataOK: false
+
+ Script {
+ function checkCData(text, whitespacetext)
+ {
+ // This is essentially a copy of text.qml/checkText()
+
+ if (text == null)
+ return;
+
+ if (text.nodeName != "#cdata-section")
+ return;
+
+ if (text.nodeValue != "Hello world!")
+ return;
+
+ if (text.nodeType != 4)
+ return;
+
+ if (text.parentNode.nodeName != "item")
+ return;
+
+ if (text.childNodes.length != 0)
+ return;
+
+ if (text.firstChild != null)
+ return;
+
+ if (text.lastChild != null)
+ return;
+
+ if (text.previousSibling != null)
+ return;
+
+ if (text.nextSibling != null)
+ return;
+
+ if (text.attributes != null)
+ return;
+
+ if (text.wholeText != "Hello world!")
+ return;
+
+ if (text.data != "Hello world!")
+ return;
+
+ if (text.length != 12)
+ return;
+
+ if (text.isElementContentWhitespace != false)
+ return;
+
+ if (whitespacetext.nodeName != "#cdata-section")
+ return;
+
+ if (whitespacetext.nodeValue != " ")
+ return;
+
+ if (whitespacetext.nodeType != 4)
+ return;
+
+ if (whitespacetext.parentNode.nodeName != "item")
+ return;
+
+ if (whitespacetext.childNodes.length != 0)
+ return;
+
+ if (whitespacetext.firstChild != null)
+ return;
+
+ if (whitespacetext.lastChild != null)
+ return;
+
+ if (whitespacetext.previousSibling != null)
+ return;
+
+ if (whitespacetext.nextSibling != null)
+ return;
+
+ if (whitespacetext.attributes != null)
+ return;
+
+ if (whitespacetext.wholeText != " ")
+ return;
+
+ if (whitespacetext.data != " ")
+ return;
+
+ if (whitespacetext.length != 3)
+ return;
+
+ if (whitespacetext.isElementContentWhitespace != true)
+ return;
+
+
+ xmlTest = true;
+ }
+
+ function checkXML(document)
+ {
+ checkCData(document.documentElement.childNodes[0].childNodes[0],
+ document.documentElement.childNodes[1].childNodes[0]);
+
+ }
+ }
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ x.open("GET", "cdata.xml");
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+
+ dataOK = true;
+
+ if (x.responseXML != null)
+ checkXML(x.responseXML);
+
+ }
+ }
+
+ x.send()
+ }
+}
+
+
+
+
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/cdata.xml b/tests/auto/declarative/qmlxmlhttprequest/data/cdata.xml
new file mode 100644
index 0000000..061d37c
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/cdata.xml
@@ -0,0 +1,2 @@
+<root><item><![CDATA[Hello world!]]></item><item><![CDATA[ ]]></item></root>
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/constructor.qml b/tests/auto/declarative/qmlxmlhttprequest/data/constructor.qml
new file mode 100644
index 0000000..93e44fd
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/constructor.qml
@@ -0,0 +1,14 @@
+import Qt 4.6
+
+QtObject {
+ property bool calledAsConstructor
+ property bool calledAsFunction
+
+ Component.onCompleted: {
+ var x1 = new XMLHttpRequest;
+ var x2 = XMLHttpRequest();
+
+ calledAsConstructor = (x1 != null && x1 instanceof XMLHttpRequest);
+ calledAsFunction = (x2 == undefined);
+ }
+}
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/defaultState.qml b/tests/auto/declarative/qmlxmlhttprequest/data/defaultState.qml
new file mode 100644
index 0000000..4dcf6f9
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/defaultState.qml
@@ -0,0 +1,30 @@
+import Qt 4.6
+
+QtObject {
+ property int readyState
+ property bool statusIsException: false
+ property bool statusTextIsException: false
+ property string responseText
+ property bool responseXMLIsNull
+
+ Component.onCompleted: {
+ var xhr = new XMLHttpRequest();
+
+ readyState = xhr.readyState;
+ try {
+ status = xhr.status;
+ } catch (error) {
+ if (error.code == DOMException.INVALID_STATE_ERR)
+ statusIsException = true;
+ }
+ try {
+ statusText = xhr.statusText;
+ } catch (error) {
+ if (error.code == DOMException.INVALID_STATE_ERR)
+ statusTextIsException = true;
+ }
+ responseText = xhr.responseText;
+ responseXMLIsNull = (xhr.responseXML == null);
+ }
+}
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/document.qml b/tests/auto/declarative/qmlxmlhttprequest/data/document.qml
new file mode 100644
index 0000000..e372361
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/document.qml
@@ -0,0 +1,58 @@
+import Qt 4.6
+
+QtObject {
+ property bool xmlTest: false
+ property bool dataOK: false
+
+ Script {
+ function checkXML(document)
+ {
+ if (document.xmlVersion != "1.0")
+ return;
+
+ if (document.xmlEncoding != "UTF-8")
+ return;
+
+ if (document.xmlStandalone != true)
+ return;
+
+ if (document.documentElement == null)
+ return;
+
+ if (document.nodeName != "#document")
+ return;
+
+ if (document.nodeValue != null)
+ return;
+
+ if (document.parentNode != null)
+ return;
+
+ // ### Test other node properties
+ // ### test encoding (what is a valid qt encoding?)
+ xmlTest = true;
+ }
+ }
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ x.open("GET", "document.xml");
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+
+ dataOK = true;
+
+ if (x.responseXML != null)
+ checkXML(x.responseXML);
+
+ }
+ }
+
+ x.send()
+ }
+}
+
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/document.xml b/tests/auto/declarative/qmlxmlhttprequest/data/document.xml
new file mode 100644
index 0000000..fb693ea
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/document.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8" standalone='yes'?>
+<root>
+</root>
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/domExceptionCodes.qml b/tests/auto/declarative/qmlxmlhttprequest/data/domExceptionCodes.qml
new file mode 100644
index 0000000..de5ee4f
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/domExceptionCodes.qml
@@ -0,0 +1,60 @@
+import Qt 4.6
+
+QtObject {
+ property int index_size_err: DOMException.INDEX_SIZE_ERR
+ property int domstring_size_err: DOMException.DOMSTRING_SIZE_ERR
+ property int hierarchy_request_err: DOMException.HIERARCHY_REQUEST_ERR
+ property int wrong_document_err: DOMException.WRONG_DOCUMENT_ERR
+ property int invalid_character_err: DOMException.INVALID_CHARACTER_ERR
+ property int no_data_allowed_err: DOMException.NO_DATA_ALLOWED_ERR
+ property int no_modification_allowed_err: DOMException.NO_MODIFICATION_ALLOWED_ERR
+ property int not_found_err: DOMException.NOT_FOUND_ERR
+ property int not_supported_err: DOMException.NOT_SUPPORTED_ERR
+ property int inuse_attribute_err: DOMException.INUSE_ATTRIBUTE_ERR
+ property int invalid_state_err: DOMException.INVALID_STATE_ERR
+ property int syntax_err: DOMException.SYNTAX_ERR
+ property int invalid_modification_err: DOMException.INVALID_MODIFICATION_ERR
+ property int namespace_err: DOMException.NAMESPACE_ERR
+ property int invalid_access_err: DOMException.INVALID_ACCESS_ERR
+ property int validation_err: DOMException.VALIDATION_ERR
+ property int type_mismatch_err: DOMException.TYPE_MISMATCH_ERR
+
+ Component.onCompleted: {
+ // Attempt to overwrite and delete values
+ DOMException.INDEX_SIZE_ERR = 44;
+ DOMException.DOMSTRING_SIZE_ERR = 44;
+ DOMException.HIERARCHY_REQUEST_ERR = 44;
+ DOMException.WRONG_DOCUMENT_ERR = 44;
+ DOMException.INVALID_CHARACTER_ERR = 44;
+ DOMException.NO_DATA_ALLOWED_ERR = 44;
+ DOMException.NO_MODIFICATION_ALLOWED_ERR = 44;
+ DOMException.NOT_FOUND_ERR = 44;
+ DOMException.NOT_SUPPORTED_ERR = 44;
+ DOMException.INUSE_ATTRIBUTE_ERR = 44;
+ DOMException.INVALID_STATE_ERR = 44;
+ DOMException.SYNTAX_ERR = 44;
+ DOMException.INVALID_MODIFICATION_ERR = 44;
+ DOMException.NAMESPACE_ERR = 44;
+ DOMException.INVALID_ACCESS_ERR = 44;
+ DOMException.VALIDATION_ERR = 44;
+ DOMException.TYPE_MISMATCH_ERR = 44;
+
+ delete DOMException.INDEX_SIZE_ERR;
+ delete DOMException.DOMSTRING_SIZE_ERR;
+ delete DOMException.HIERARCHY_REQUEST_ERR;
+ delete DOMException.WRONG_DOCUMENT_ERR;
+ delete DOMException.INVALID_CHARACTER_ERR;
+ delete DOMException.NO_DATA_ALLOWED_ERR;
+ delete DOMException.NO_MODIFICATION_ALLOWED_ERR;
+ delete DOMException.NOT_FOUND_ERR;
+ delete DOMException.NOT_SUPPORTED_ERR;
+ delete DOMException.INUSE_ATTRIBUTE_ERR;
+ delete DOMException.INVALID_STATE_ERR;
+ delete DOMException.SYNTAX_ERR;
+ delete DOMException.INVALID_MODIFICATION_ERR;
+ delete DOMException.NAMESPACE_ERR;
+ delete DOMException.INVALID_ACCESS_ERR;
+ delete DOMException.VALIDATION_ERR;
+ delete DOMException.TYPE_MISMATCH_ERR;
+ }
+}
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/element.qml b/tests/auto/declarative/qmlxmlhttprequest/data/element.qml
new file mode 100644
index 0000000..78c0374
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/element.qml
@@ -0,0 +1,147 @@
+import Qt 4.6
+
+QtObject {
+ property bool xmlTest: false
+ property bool dataOK: false
+
+ Script {
+ function checkElement(e, person, fruit)
+ {
+ if (e.tagName != "root")
+ return;
+
+ if (e.nodeName != "root")
+ return;
+
+ if (e.nodeValue != null)
+ return;
+
+ if (e.nodeType != 1)
+ return;
+
+ var childTagNames = [ "person", "fruit" ];
+
+ if (e.childNodes.length != childTagNames.length)
+ return;
+
+ for (var ii = 0; ii < childTagNames.length; ++ii) {
+ if (e.childNodes[ii].tagName != childTagNames[ii])
+ return;
+ }
+
+ if (e.childNodes[childTagNames.length + 1] != null)
+ return;
+
+ // Check writing fails
+ e.childNodes[0] = null;
+ if (e.childNodes[0] == null)
+ return;
+
+ e.childNodes[10] = 10;
+ if (e.childNodes[10] != null)
+ return;
+
+ if (e.firstChild.tagName != e.childNodes[0].tagName)
+ return;
+
+ if (e.lastChild.tagName != e.childNodes[1].tagName)
+ return;
+
+ if (e.previousSibling != null)
+ return;
+
+ if (e.nextSibling != null)
+ return;
+
+ if (e.attributes == null)
+ return;
+
+ if (e.attributes.length != 2)
+ return;
+
+ var attr1 = e.attributes["attr"];
+ if (attr1.nodeValue != "value")
+ return;
+
+ var attrIdx = e.attributes[0];
+ if (attrIdx.nodeValue != "value")
+ return;
+
+ var attr2 = e.attributes["attr2"];
+ if (attr2.nodeValue != "value2")
+ return;
+
+ var attr3 = e.attributes["attr3"];
+ if (attr3 != null)
+ return;
+
+ var attrIdx2 = e.attributes[11];
+ if (attrIdx2 != null)
+ return;
+
+ // Check writing fails
+ e.attributes[0] = null;
+ if (e.attributes[0] == null)
+ return;
+
+ e.attributes["attr"] = null;
+ if (e.attributes["attr"] == null)
+ return;
+
+ e.attributes["attr3"] = 10;
+ if (e.attributes["attr3"] != null)
+ return;
+
+ // Check person and fruit sub elements
+ if (person.parentNode.nodeName != "root")
+ return;
+
+ if (person.previousSibling != null)
+ return;
+
+ if (person.nextSibling.nodeName != "fruit")
+ return;
+
+ if (fruit.parentNode.nodeName != "root")
+ return;
+
+ if (fruit.previousSibling.nodeName != "person")
+ return;
+
+ if (fruit.nextSibling != null)
+ return;
+
+ xmlTest = true;
+ }
+
+ function checkXML(document)
+ {
+ checkElement(document.documentElement,
+ document.documentElement.childNodes[0],
+ document.documentElement.childNodes[1]);
+ }
+ }
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ x.open("GET", "element.xml");
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+
+ dataOK = true;
+
+ if (x.responseXML != null)
+ checkXML(x.responseXML);
+
+ }
+ }
+
+ x.send()
+ }
+}
+
+
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/element.xml b/tests/auto/declarative/qmlxmlhttprequest/data/element.xml
new file mode 100644
index 0000000..071ffae
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/element.xml
@@ -0,0 +1 @@
+<root attr="value" attr2="value2"><person /><fruit /></root>
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/getAllResponseHeaders.qml b/tests/auto/declarative/qmlxmlhttprequest/data/getAllResponseHeaders.qml
new file mode 100644
index 0000000..02a8083
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/getAllResponseHeaders.qml
@@ -0,0 +1,65 @@
+import Qt 4.6
+
+QtObject {
+ property string url
+
+ property bool unsentException: false
+ property bool openedException: false
+
+ property bool readyState: false
+ property bool openedState: false
+
+ property bool headersReceivedState: false
+ property bool headersReceivedHeader: false
+
+ property bool doneState: false
+ property bool doneHeader: false
+
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ try {
+ x.getResponseHeader("Test-Header");
+ } catch (e) {
+ if (e.code == DOMException.INVALID_STATE_ERR)
+ unsentException = true;
+ }
+
+ if (x.readyState == XMLHttpRequest.UNSENT)
+ readyState = true;
+
+ x.open("GET", url);
+
+ if (x.readyState == XMLHttpRequest.OPENED)
+ openedState = true;
+
+ try {
+ x.getResponseHeader("Test-Header");
+ } catch (e) {
+ if (e.code == DOMException.INVALID_STATE_ERR)
+ openedException = true;
+ }
+
+ var headers = "content-type: text/html; charset=UTF-8\r\ntest-header: TestValue\r\nmultitest-header: TestValue, SecondTestValue\r\ncontent-length: 11";
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.HEADERS_RECEIVED) {
+ headersReceivedState = true;
+
+ headersReceivedHeader = (x.getAllResponseHeaders() == headers);
+ } else if (x.readyState == XMLHttpRequest.DONE) {
+ doneState = headersReceivedState && true;
+
+ doneHeader = (x.getAllResponseHeaders() == headers);
+ dataOK = (x.responseText == "QML Rocks!\n");
+ }
+ }
+
+ x.send()
+ }
+}
+
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/getAllResponseHeaders_args.qml b/tests/auto/declarative/qmlxmlhttprequest/data/getAllResponseHeaders_args.qml
new file mode 100644
index 0000000..37124c7
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/getAllResponseHeaders_args.qml
@@ -0,0 +1,23 @@
+import Qt 4.6
+
+QtObject {
+ property bool exceptionThrown: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ x.open("GET", "testdocument.html");
+ x.send();
+
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ try {
+ x.getAllResponseHeaders("Test-header");
+ } catch (e) {
+ if (e.code == DOMException.SYNTAX_ERR)
+ exceptionThrown = true;
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/getAllResponseHeaders_sent.qml b/tests/auto/declarative/qmlxmlhttprequest/data/getAllResponseHeaders_sent.qml
new file mode 100644
index 0000000..505e4b1
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/getAllResponseHeaders_sent.qml
@@ -0,0 +1,20 @@
+import Qt 4.6
+
+QtObject {
+ property bool test: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ x.open("GET", "testdocument.html");
+ x.send();
+
+ try {
+ x.getAllResponseHeaders();
+ } catch (e) {
+ if (e.code == DOMException.INVALID_STATE_ERR)
+ test = true;
+ }
+ }
+}
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/getAllResponseHeaders_unsent.qml b/tests/auto/declarative/qmlxmlhttprequest/data/getAllResponseHeaders_unsent.qml
new file mode 100644
index 0000000..20fb040
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/getAllResponseHeaders_unsent.qml
@@ -0,0 +1,16 @@
+import Qt 4.6
+
+QtObject {
+ property bool test: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ try {
+ x.getAllResponseHeaders();
+ } catch (e) {
+ if (e.code == DOMException.INVALID_STATE_ERR)
+ test = true;
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader.expect b/tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader.expect
new file mode 100644
index 0000000..a740c79
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader.expect
@@ -0,0 +1,7 @@
+GET /testdocument.html HTTP/1.1
+Connection: Keep-Alive
+Accept-Encoding: gzip
+Accept-Language: en-US,*
+User-Agent: Mozilla/5.0
+Host: 127.0.0.1:14445
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader.qml b/tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader.qml
new file mode 100644
index 0000000..2f949e1
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader.qml
@@ -0,0 +1,75 @@
+import Qt 4.6
+
+QtObject {
+ property string url
+
+ property bool unsentException: false
+ property bool openedException: false
+
+ property bool readyState: false
+ property bool openedState: false
+
+ property bool headersReceivedState: false
+ property bool headersReceivedNullHeader: false
+ property bool headersReceivedValidHeader: false
+ property bool headersReceivedMultiValidHeader: false
+ property bool headersReceivedCookieHeader: false
+
+ property bool doneState: false
+ property bool doneNullHeader: false
+ property bool doneValidHeader: false
+ property bool doneMultiValidHeader: false
+ property bool doneCookieHeader: false
+
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ try {
+ x.getResponseHeader("Test-Header");
+ } catch (e) {
+ if (e.code == DOMException.INVALID_STATE_ERR)
+ unsentException = true;
+ }
+
+ if (x.readyState == XMLHttpRequest.UNSENT)
+ readyState = true;
+
+ x.open("GET", url);
+
+ if (x.readyState == XMLHttpRequest.OPENED)
+ openedState = true;
+
+ try {
+ x.getResponseHeader("Test-Header");
+ } catch (e) {
+ if (e.code == DOMException.INVALID_STATE_ERR)
+ openedException = true;
+ }
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.HEADERS_RECEIVED) {
+ headersReceivedState = true;
+
+ headersReceivedNullHeader = (x.getResponseHeader("Nonexistant-header") == "");
+ headersReceivedValidHeader = (x.getResponseHeader("Test-HEAder") == "TestValue");
+ headersReceivedMultiValidHeader = (x.getResponseHeader("MultiTest-HEAder") == "TestValue, SecondTestValue");
+ headersReceivedCookieHeader = (x.getResponseHeader("Set-Cookie") == "" && x.getResponseHeader("Set-Cookie2") == "");
+ } else if (x.readyState == XMLHttpRequest.DONE) {
+ doneState = headersReceivedState && true;
+
+ doneNullHeader = (x.getResponseHeader("Nonexistant-header") == "");
+ doneValidHeader = (x.getResponseHeader("Test-HEAder") == "TestValue");
+ doneMultiValidHeader = (x.getResponseHeader("MultiTest-HEAder") == "TestValue, SecondTestValue");
+ doneCookieHeader = (x.getResponseHeader("Set-Cookie") == "" && x.getResponseHeader("Set-Cookie2") == "");
+ dataOK = (x.responseText == "QML Rocks!\n");
+ }
+ }
+
+ x.send()
+ }
+}
+
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader.reply b/tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader.reply
new file mode 100644
index 0000000..62ec67b
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader.reply
@@ -0,0 +1,7 @@
+HTTP/1.0 200 OK
+Content-type: text/html; charset=UTF-8
+Test-Header: TestValue
+MultiTest-Header: TestValue
+MultiTest-Header: SecondTestValue
+Set-Cookie: mycook=Value
+Set-Cookie2: mycook=Value
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader_args.qml b/tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader_args.qml
new file mode 100644
index 0000000..d5aa4b1
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader_args.qml
@@ -0,0 +1,23 @@
+import Qt 4.6
+
+QtObject {
+ property bool exceptionThrown: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ x.open("GET", "testdocument.html");
+ x.send();
+
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ try {
+ x.getResponseHeader();
+ } catch (e) {
+ if (e.code == DOMException.SYNTAX_ERR)
+ exceptionThrown = true;
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader_sent.qml b/tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader_sent.qml
new file mode 100644
index 0000000..7538ffd
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader_sent.qml
@@ -0,0 +1,20 @@
+import Qt 4.6
+
+QtObject {
+ property bool test: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ x.open("GET", "testdocument.html");
+ x.send();
+
+ try {
+ x.getResponseHeader("Test-header");
+ } catch (e) {
+ if (e.code == DOMException.INVALID_STATE_ERR)
+ test = true;
+ }
+ }
+}
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader_unsent.qml b/tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader_unsent.qml
new file mode 100644
index 0000000..3b55802
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/getResponseHeader_unsent.qml
@@ -0,0 +1,16 @@
+import Qt 4.6
+
+QtObject {
+ property bool test: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ try {
+ x.getResponseHeader("Test-header");
+ } catch (e) {
+ if (e.code == DOMException.INVALID_STATE_ERR)
+ test = true;
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/instanceStateValues.qml b/tests/auto/declarative/qmlxmlhttprequest/data/instanceStateValues.qml
new file mode 100644
index 0000000..b8d01c4
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/instanceStateValues.qml
@@ -0,0 +1,33 @@
+import Qt 4.6
+
+QtObject {
+ property int unsent
+ property int opened
+ property int headers_received
+ property int loading
+ property int done
+
+ Component.onCompleted: {
+ // Attempt to overwrite and delete values
+ var x = new XMLHttpRequest();
+
+ x.UNSENT = 9;
+ x.OPENED = 9;
+ x.HEADERS_RECEIVED = 9;
+ x.LOADING = 9;
+ x.DONE = 9;
+
+ delete x.UNSENT;
+ delete x.OPENED;
+ delete x.HEADERS_RECEIVED;
+ delete x.LOADING;
+ delete x.DONE;
+
+ unsent = x.UNSENT
+ opened = x.OPENED
+ headers_received = x.HEADERS_RECEIVED
+ loading = x.LOADING
+ done = x.DONE
+ }
+}
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/invalidMethodUsage.qml b/tests/auto/declarative/qmlxmlhttprequest/data/invalidMethodUsage.qml
new file mode 100644
index 0000000..b30989b
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/invalidMethodUsage.qml
@@ -0,0 +1,160 @@
+import Qt 4.6
+
+QtObject {
+ property bool onreadystatechange: false
+ property bool readyState: false
+ property bool status: false
+ property bool statusText: false
+ property bool responseText: false
+ property bool responseXML: false
+
+ property bool open: false
+ property bool setRequestHeader: false
+ property bool send: false
+ property bool abort: false
+ property bool getResponseHeader: false
+ property bool getAllResponseHeaders: false
+
+ Component.onCompleted: {
+ var o = 10;
+
+ try {
+ XMLHttpRequest.prototype.onreadystatechange
+ } catch (e) {
+ if (!(e instanceof ReferenceError))
+ return;
+
+ if (e.message != "Not an XMLHttpRequest object")
+ return;
+
+ onreadystatechange = true;
+ }
+ try {
+ XMLHttpRequest.prototype.readyState
+ } catch (e) {
+ if (!(e instanceof ReferenceError))
+ return;
+
+ if (e.message != "Not an XMLHttpRequest object")
+ return;
+
+ readyState = true;
+ }
+ try {
+ XMLHttpRequest.prototype.status
+ } catch (e) {
+ if (!(e instanceof ReferenceError))
+ return;
+
+ if (e.message != "Not an XMLHttpRequest object")
+ return;
+
+ status = true;
+ }
+ try {
+ XMLHttpRequest.prototype.statusText
+ } catch (e) {
+ if (!(e instanceof ReferenceError))
+ return;
+
+ if (e.message != "Not an XMLHttpRequest object")
+ return;
+
+ statusText = true;
+ }
+ try {
+ XMLHttpRequest.prototype.responseText
+ } catch (e) {
+ if (!(e instanceof ReferenceError))
+ return;
+
+ if (e.message != "Not an XMLHttpRequest object")
+ return;
+
+ responseText = true;
+ }
+ try {
+ XMLHttpRequest.prototype.responseXML
+ } catch (e) {
+ if (!(e instanceof ReferenceError))
+ return;
+
+ if (e.message != "Not an XMLHttpRequest object")
+ return;
+
+ responseXML = true;
+ }
+
+ try {
+ XMLHttpRequest.prototype.open.call(o);
+ } catch (e) {
+ if (!(e instanceof ReferenceError))
+ return;
+
+ if (e.message != "Not an XMLHttpRequest object")
+ return;
+
+ open = true;
+ }
+
+ try {
+ XMLHttpRequest.prototype.setRequestHeader.call(o);
+ } catch (e) {
+ if (!(e instanceof ReferenceError))
+ return;
+
+ if (e.message != "Not an XMLHttpRequest object")
+ return;
+
+ setRequestHeader = true;
+ }
+
+ try {
+ XMLHttpRequest.prototype.send.call(o);
+ } catch (e) {
+ if (!(e instanceof ReferenceError))
+ return;
+
+ if (e.message != "Not an XMLHttpRequest object")
+ return;
+
+ send = true;
+ }
+
+ try {
+ XMLHttpRequest.prototype.abort.call(o);
+ } catch (e) {
+ if (!(e instanceof ReferenceError))
+ return;
+
+ if (e.message != "Not an XMLHttpRequest object")
+ return;
+
+ abort = true;
+ }
+
+ try {
+ XMLHttpRequest.prototype.getResponseHeader.call(o);
+ } catch (e) {
+ if (!(e instanceof ReferenceError))
+ return;
+
+ if (e.message != "Not an XMLHttpRequest object")
+ return;
+
+ getResponseHeader = true;
+ }
+
+ try {
+ XMLHttpRequest.prototype.getAllResponseHeaders.call(o);
+ } catch (e) {
+ if (!(e instanceof ReferenceError))
+ return;
+
+ if (e.message != "Not an XMLHttpRequest object")
+ return;
+
+ getAllResponseHeaders = true;
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/open.qml b/tests/auto/declarative/qmlxmlhttprequest/data/open.qml
new file mode 100644
index 0000000..c06bae3
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/open.qml
@@ -0,0 +1,53 @@
+import Qt 4.6
+
+QtObject {
+ property string url
+
+ property bool readyState: false
+ property bool openedState: false
+
+ property bool status: false
+ property bool statusText: false
+ property bool responseText: false
+ property bool responseXML: false
+
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ if (x.readyState == XMLHttpRequest.UNSENT)
+ readyState = true;
+
+ x.open("GET", url);
+
+ if (x.readyState == XMLHttpRequest.OPENED)
+ openedState = true;
+
+ try {
+ var a = x.status;
+ } catch (error) {
+ if (error.code == DOMException.INVALID_STATE_ERR)
+ status = true;
+ }
+ try {
+ var a = x.statusText;
+ } catch (error) {
+ if (error.code == DOMException.INVALID_STATE_ERR)
+ statusText = true;
+ }
+ responseText = (x.responseText == "");
+ responseXML = (x.responseXML == null);
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ dataOK = (x.responseText == "QML Rocks!\n");
+ }
+ }
+
+
+ x.send()
+ }
+}
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/open_arg_count.1.qml b/tests/auto/declarative/qmlxmlhttprequest/data/open_arg_count.1.qml
new file mode 100644
index 0000000..b6d4c32
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/open_arg_count.1.qml
@@ -0,0 +1,18 @@
+import Qt 4.6
+
+QtObject {
+ property bool exceptionThrown: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ try {
+ x.open("GET");
+ } catch (e) {
+ if (e.code == DOMException.SYNTAX_ERR)
+ exceptionThrown = true;
+ }
+ }
+}
+
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/open_arg_count.2.qml b/tests/auto/declarative/qmlxmlhttprequest/data/open_arg_count.2.qml
new file mode 100644
index 0000000..8c86c20
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/open_arg_count.2.qml
@@ -0,0 +1,18 @@
+import Qt 4.6
+
+QtObject {
+ property bool exceptionThrown: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ try {
+ x.open("GET", "http://www.nokia.com", true, "user", "password", "extra");
+ } catch (e) {
+ if (e.code == DOMException.SYNTAX_ERR)
+ exceptionThrown = true;
+ }
+ }
+}
+
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/open_invalid_method.qml b/tests/auto/declarative/qmlxmlhttprequest/data/open_invalid_method.qml
new file mode 100644
index 0000000..69f79ae
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/open_invalid_method.qml
@@ -0,0 +1,16 @@
+import Qt 4.6
+
+QtObject {
+ property bool exceptionThrown: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ try {
+ x.open("BLAH", "http://www.nokia.com");
+ } catch (e) {
+ if (e.code == DOMException.SYNTAX_ERR)
+ exceptionThrown = true;
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/open_network.expect b/tests/auto/declarative/qmlxmlhttprequest/data/open_network.expect
new file mode 100644
index 0000000..a740c79
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/open_network.expect
@@ -0,0 +1,7 @@
+GET /testdocument.html HTTP/1.1
+Connection: Keep-Alive
+Accept-Encoding: gzip
+Accept-Language: en-US,*
+User-Agent: Mozilla/5.0
+Host: 127.0.0.1:14445
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/open_network.reply b/tests/auto/declarative/qmlxmlhttprequest/data/open_network.reply
new file mode 100644
index 0000000..35b11f4
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/open_network.reply
@@ -0,0 +1,2 @@
+HTTP/1.0 200 OK
+Content-type: text/html; charset=UTF-8
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/open_network.wait b/tests/auto/declarative/qmlxmlhttprequest/data/open_network.wait
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/open_network.wait
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/open_sync.qml b/tests/auto/declarative/qmlxmlhttprequest/data/open_sync.qml
new file mode 100644
index 0000000..1477279
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/open_sync.qml
@@ -0,0 +1,17 @@
+import Qt 4.6
+
+QtObject {
+ property bool exceptionThrown: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ try {
+ x.open("GET", "http://www.nokia.com", false);
+ } catch (e) {
+ if (e.code == DOMException.NOT_SUPPORTED_ERR)
+ exceptionThrown = true;
+ }
+ }
+}
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/open_user.qml b/tests/auto/declarative/qmlxmlhttprequest/data/open_user.qml
new file mode 100644
index 0000000..19e37fa
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/open_user.qml
@@ -0,0 +1,53 @@
+import Qt 4.6
+
+QtObject {
+ property string url
+
+ property bool readyState: false
+ property bool openedState: false
+
+ property bool status: false
+ property bool statusText: false
+ property bool responseText: false
+ property bool responseXML: false
+
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ if (x.readyState == XMLHttpRequest.UNSENT)
+ readyState = true;
+
+ x.open("GET", url, true, "username", "password");
+
+ if (x.readyState == XMLHttpRequest.OPENED)
+ openedState = true;
+
+ try {
+ var a = x.status;
+ } catch (error) {
+ if (error.code == DOMException.INVALID_STATE_ERR)
+ status = true;
+ }
+ try {
+ var a = x.statusText;
+ } catch (error) {
+ if (error.code == DOMException.INVALID_STATE_ERR)
+ statusText = true;
+ }
+ responseText = (x.responseText == "");
+ responseXML = (x.responseXML == null);
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ dataOK = (x.responseText == "QML Rocks!\n");
+ }
+ }
+
+
+ x.send()
+ }
+}
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/open_username.qml b/tests/auto/declarative/qmlxmlhttprequest/data/open_username.qml
new file mode 100644
index 0000000..983ea14
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/open_username.qml
@@ -0,0 +1,54 @@
+import Qt 4.6
+
+QtObject {
+ property string url
+
+ property bool readyState: false
+ property bool openedState: false
+
+ property bool status: false
+ property bool statusText: false
+ property bool responseText: false
+ property bool responseXML: false
+
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ if (x.readyState == XMLHttpRequest.UNSENT)
+ readyState = true;
+
+ x.open("GET", url, true, "sampleusername", "password");
+
+ if (x.readyState == XMLHttpRequest.OPENED)
+ openedState = true;
+
+ try {
+ var a = x.status;
+ } catch (error) {
+ if (error.code == DOMException.INVALID_STATE_ERR)
+ status = true;
+ }
+ try {
+ var a = x.statusText;
+ } catch (error) {
+ if (error.code == DOMException.INVALID_STATE_ERR)
+ statusText = true;
+ }
+ responseText = (x.responseText == "");
+ responseXML = (x.responseXML == null);
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ dataOK = (x.responseText == "QML Rocks!\n");
+ }
+ }
+
+
+ x.send()
+ }
+}
+
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/redirectError.qml b/tests/auto/declarative/qmlxmlhttprequest/data/redirectError.qml
new file mode 100644
index 0000000..6b345cc
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/redirectError.qml
@@ -0,0 +1,23 @@
+import Qt 4.6
+
+QtObject {
+ property string url
+
+ property bool dataOK: false
+ property bool done: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+ x.open("GET", url);
+
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ done = true;
+ dataOK = x.status == 404;
+ }
+ }
+
+ x.send();
+ }
+}
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/redirectRecur.qml b/tests/auto/declarative/qmlxmlhttprequest/data/redirectRecur.qml
new file mode 100644
index 0000000..c0321dc
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/redirectRecur.qml
@@ -0,0 +1,23 @@
+import Qt 4.6
+
+QtObject {
+ property string url
+
+ property bool dataOK: false
+ property bool done: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+ x.open("GET", url);
+
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ done = true;
+ dataOK = x.status == 302;
+ }
+ }
+
+ x.send();
+ }
+}
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/redirects.qml b/tests/auto/declarative/qmlxmlhttprequest/data/redirects.qml
new file mode 100644
index 0000000..f6fabdb
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/redirects.qml
@@ -0,0 +1,22 @@
+import Qt 4.6
+
+QtObject {
+ property string url
+
+ property bool dataOK: false
+ property bool done: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+ x.open("GET", url);
+
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ done = true;
+ dataOK = x.responseText == "Redirected\n";
+ }
+ }
+
+ x.send();
+ }
+}
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/redirecttarget.html b/tests/auto/declarative/qmlxmlhttprequest/data/redirecttarget.html
new file mode 100644
index 0000000..95f35e0
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/redirecttarget.html
@@ -0,0 +1 @@
+Redirected
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/responseText.qml b/tests/auto/declarative/qmlxmlhttprequest/data/responseText.qml
new file mode 100644
index 0000000..4bb3a7a
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/responseText.qml
@@ -0,0 +1,52 @@
+import Qt 4.6
+
+QtObject {
+ property string url
+ property string expectedText
+
+ property bool unsent: false
+ property bool opened: false
+ property bool sent: false
+ property bool headersReceived: false
+
+ property bool loading: false
+ property bool done: false
+
+ property bool reset: false
+
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ unsent = (x.responseText == "");
+
+ x.open("GET", url);
+
+ opened = (x.responseText == "");
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.HEADERS_RECEIVED) {
+ headersReceived = (x.responseText == "");
+ } else if (x.readyState == XMLHttpRequest.LOADING) {
+ if (x.responseText == expectedText)
+ loading = true;
+ } else if (x.readyState == XMLHttpRequest.DONE) {
+ if (x.responseText == expectedText)
+ done = true;
+
+ dataOK = (x.responseText == expectedText);
+
+ x.open("GET", url);
+
+ reset = (x.responseText == "");
+ }
+ }
+
+ x.send()
+
+ sent = (x.responseText == "");
+ }
+}
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/responseXML_invalid.qml b/tests/auto/declarative/qmlxmlhttprequest/data/responseXML_invalid.qml
new file mode 100644
index 0000000..63f288e
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/responseXML_invalid.qml
@@ -0,0 +1,24 @@
+import Qt 4.6
+
+QtObject {
+ property bool xmlNull: false
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ x.open("GET", "testdocument.html");
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ dataOK = (x.responseText == "QML Rocks!\n");
+ xmlNull = (x.responseXML == null);
+ }
+ }
+
+
+ x.send()
+ }
+}
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/seconddocument.html b/tests/auto/declarative/qmlxmlhttprequest/data/seconddocument.html
new file mode 100644
index 0000000..a33f44b
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/seconddocument.html
@@ -0,0 +1 @@
+This should not be read!
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/send_alreadySent.qml b/tests/auto/declarative/qmlxmlhttprequest/data/send_alreadySent.qml
new file mode 100644
index 0000000..0bad7df
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/send_alreadySent.qml
@@ -0,0 +1,27 @@
+import Qt 4.6
+
+QtObject {
+ property bool dataOK: false
+ property bool test: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+ x.open("GET", "testdocument.html");
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ dataOK = (x.responseText == "QML Rocks!\n");
+ }
+ }
+
+ x.send();
+
+ try {
+ x.send()
+ } catch (e) {
+ if (e.code == DOMException.INVALID_STATE_ERR)
+ test = true;
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/send_data.1.expect b/tests/auto/declarative/qmlxmlhttprequest/data/send_data.1.expect
new file mode 100644
index 0000000..81dd4a0
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/send_data.1.expect
@@ -0,0 +1,10 @@
+POST /testdocument.html HTTP/1.1
+Content-Type: text/plain;charset=UTF-8
+Content-Length: 12
+Connection: Keep-Alive
+Accept-Encoding: gzip
+Accept-Language: en-US,*
+User-Agent: Mozilla/5.0
+Host: 127.0.0.1:14445
+
+My Sent Data \ No newline at end of file
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/send_data.1.qml b/tests/auto/declarative/qmlxmlhttprequest/data/send_data.1.qml
new file mode 100644
index 0000000..03543a9
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/send_data.1.qml
@@ -0,0 +1,21 @@
+import Qt 4.6
+
+QtObject {
+ property string url
+
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+ x.open("POST", url);
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ dataOK = (x.responseText == "QML Rocks!\n");
+ }
+ }
+
+ x.send("My Sent Data");
+ }
+}
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/send_data.2.qml b/tests/auto/declarative/qmlxmlhttprequest/data/send_data.2.qml
new file mode 100644
index 0000000..79a27b6
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/send_data.2.qml
@@ -0,0 +1,23 @@
+import Qt 4.6
+
+QtObject {
+ property string url
+
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+ x.open("POST", url);
+ x.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ dataOK = (x.responseText == "QML Rocks!\n");
+ }
+ }
+
+ x.send("My Sent Data");
+ }
+}
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/send_data.3.qml b/tests/auto/declarative/qmlxmlhttprequest/data/send_data.3.qml
new file mode 100644
index 0000000..e048769
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/send_data.3.qml
@@ -0,0 +1,23 @@
+import Qt 4.6
+
+QtObject {
+ property string url
+
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+ x.open("POST", url);
+ x.setRequestHeader("Content-Type", "text/plain;charset=latin1");
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ dataOK = (x.responseText == "QML Rocks!\n");
+ }
+ }
+
+ x.send("My Sent Data");
+ }
+}
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/send_data.4.expect b/tests/auto/declarative/qmlxmlhttprequest/data/send_data.4.expect
new file mode 100644
index 0000000..8fcf3ac
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/send_data.4.expect
@@ -0,0 +1,10 @@
+POST /testdocument.html HTTP/1.1
+Content-Type: charset=UTF-8;text/plain
+Content-Length: 12
+Connection: Keep-Alive
+Accept-Encoding: gzip
+Accept-Language: en-US,*
+User-Agent: Mozilla/5.0
+Host: 127.0.0.1:14445
+
+My Sent Data \ No newline at end of file
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/send_data.4.qml b/tests/auto/declarative/qmlxmlhttprequest/data/send_data.4.qml
new file mode 100644
index 0000000..7ab0b27
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/send_data.4.qml
@@ -0,0 +1,23 @@
+import Qt 4.6
+
+QtObject {
+ property string url
+
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+ x.open("POST", url);
+ x.setRequestHeader("Content-Type", "charset=UTF-8;text/plain");
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ dataOK = (x.responseText == "QML Rocks!\n");
+ }
+ }
+
+ x.send("My Sent Data");
+ }
+}
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/send_data.5.qml b/tests/auto/declarative/qmlxmlhttprequest/data/send_data.5.qml
new file mode 100644
index 0000000..29bf2c2
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/send_data.5.qml
@@ -0,0 +1,23 @@
+import Qt 4.6
+
+QtObject {
+ property string url
+
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+ x.open("POST", url);
+ x.setRequestHeader("Content-Type", "charset=latin1;text/plain");
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ dataOK = (x.responseText == "QML Rocks!\n");
+ }
+ }
+
+ x.send("My Sent Data");
+ }
+}
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/send_data.6.expect b/tests/auto/declarative/qmlxmlhttprequest/data/send_data.6.expect
new file mode 100644
index 0000000..97e6fac
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/send_data.6.expect
@@ -0,0 +1,10 @@
+PUT /testdocument.html HTTP/1.1
+Content-Type: text/plain;charset=UTF-8
+Content-Length: 12
+Connection: Keep-Alive
+Accept-Encoding: gzip
+Accept-Language: en-US,*
+User-Agent: Mozilla/5.0
+Host: 127.0.0.1:14445
+
+My Sent Data \ No newline at end of file
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/send_data.6.qml b/tests/auto/declarative/qmlxmlhttprequest/data/send_data.6.qml
new file mode 100644
index 0000000..135f45c
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/send_data.6.qml
@@ -0,0 +1,21 @@
+import Qt 4.6
+
+QtObject {
+ property string url
+
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+ x.open("PUT", url);
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ dataOK = (x.responseText == "QML Rocks!\n");
+ }
+ }
+
+ x.send("My Sent Data");
+ }
+}
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/send_data.7.qml b/tests/auto/declarative/qmlxmlhttprequest/data/send_data.7.qml
new file mode 100644
index 0000000..4a09527
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/send_data.7.qml
@@ -0,0 +1,23 @@
+import Qt 4.6
+
+QtObject {
+ property string url
+
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+ x.open("POST", url);
+ x.setRequestHeader("Content-Type", "text/plain");
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ dataOK = (x.responseText == "QML Rocks!\n");
+ }
+ }
+
+ x.send("My Sent Data");
+ }
+}
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/send_data.reply b/tests/auto/declarative/qmlxmlhttprequest/data/send_data.reply
new file mode 100644
index 0000000..35b11f4
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/send_data.reply
@@ -0,0 +1,2 @@
+HTTP/1.0 200 OK
+Content-type: text/html; charset=UTF-8
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/send_ignoreData.qml b/tests/auto/declarative/qmlxmlhttprequest/data/send_ignoreData.qml
new file mode 100644
index 0000000..dd5fa46
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/send_ignoreData.qml
@@ -0,0 +1,26 @@
+import Qt 4.6
+
+QtObject {
+ property string reqType
+ property string url
+
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+ x.open(reqType, url);
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ if (reqType == "HEAD")
+ dataOK = (x.responseText == "");
+ else
+ dataOK = (x.responseText == "QML Rocks!\n");
+ }
+ }
+
+ x.send("Data To Ignore");
+ }
+}
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/send_ignoreData.reply b/tests/auto/declarative/qmlxmlhttprequest/data/send_ignoreData.reply
new file mode 100644
index 0000000..35b11f4
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/send_ignoreData.reply
@@ -0,0 +1,2 @@
+HTTP/1.0 200 OK
+Content-type: text/html; charset=UTF-8
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/send_ignoreData_GET.expect b/tests/auto/declarative/qmlxmlhttprequest/data/send_ignoreData_GET.expect
new file mode 100644
index 0000000..a740c79
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/send_ignoreData_GET.expect
@@ -0,0 +1,7 @@
+GET /testdocument.html HTTP/1.1
+Connection: Keep-Alive
+Accept-Encoding: gzip
+Accept-Language: en-US,*
+User-Agent: Mozilla/5.0
+Host: 127.0.0.1:14445
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/send_ignoreData_PUT.expect b/tests/auto/declarative/qmlxmlhttprequest/data/send_ignoreData_PUT.expect
new file mode 100644
index 0000000..991bd59
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/send_ignoreData_PUT.expect
@@ -0,0 +1,7 @@
+HEAD /testdocument.html HTTP/1.1
+Connection: Keep-Alive
+Accept-Encoding: gzip
+Accept-Language: en-US,*
+User-Agent: Mozilla/5.0
+Host: 127.0.0.1:14445
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/send_unsent.qml b/tests/auto/declarative/qmlxmlhttprequest/data/send_unsent.qml
new file mode 100644
index 0000000..7f51ecf
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/send_unsent.qml
@@ -0,0 +1,16 @@
+import Qt 4.6
+
+QtObject {
+ property bool test: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ try {
+ x.send();
+ } catch (e) {
+ if (e.code == DOMException.INVALID_STATE_ERR)
+ test = true;
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader.expect b/tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader.expect
new file mode 100644
index 0000000..4600f2a
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader.expect
@@ -0,0 +1,9 @@
+GET /testdocument.html HTTP/1.1
+TEST-HEADER: value
+TEST-HEADER2: value,value2
+Connection: Keep-Alive
+Accept-Encoding: gzip
+Accept-Language: en-US,*
+User-Agent: Mozilla/5.0
+Host: 127.0.0.1:14445
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader.qml b/tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader.qml
new file mode 100644
index 0000000..b0723aa
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader.qml
@@ -0,0 +1,28 @@
+import Qt 4.6
+
+QtObject {
+ property string url
+
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ x.open("GET", url);
+
+ x.setRequestHeader("Test-header", "value");
+ x.setRequestHeader("Test-header2", "value");
+ x.setRequestHeader("Test-header2", "value2");
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ dataOK = (x.responseText == "QML Rocks!\n");
+ }
+ }
+
+ x.send();
+ }
+}
+
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader.reply b/tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader.reply
new file mode 100644
index 0000000..35b11f4
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader.reply
@@ -0,0 +1,2 @@
+HTTP/1.0 200 OK
+Content-type: text/html; charset=UTF-8
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader_args.qml b/tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader_args.qml
new file mode 100644
index 0000000..8305ae1
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader_args.qml
@@ -0,0 +1,18 @@
+import Qt 4.6
+
+QtObject {
+ property bool exceptionThrown: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ x.open("GET", "testdocument.html");
+
+ try {
+ x.setRequestHeader("Test-header");
+ } catch (e) {
+ if (e.code == DOMException.SYNTAX_ERR)
+ exceptionThrown = true;
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader_illegalName.qml b/tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader_illegalName.qml
new file mode 100644
index 0000000..bf31eca
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader_illegalName.qml
@@ -0,0 +1,57 @@
+import Qt 4.6
+
+QtObject {
+ property string url
+ property string header
+
+ property bool readyState: false
+ property bool openedState: false
+
+ property bool status: false
+ property bool statusText: false
+ property bool responseText: false
+ property bool responseXML: false
+
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ if (x.readyState == XMLHttpRequest.UNSENT)
+ readyState = true;
+
+ x.open("GET", url);
+
+ x.setRequestHeader(header, "Value");
+
+ if (x.readyState == XMLHttpRequest.OPENED)
+ openedState = true;
+
+ try {
+ var a = x.status;
+ } catch (error) {
+ if (error.code == DOMException.INVALID_STATE_ERR)
+ status = true;
+ }
+ try {
+ var a = x.statusText;
+ } catch (error) {
+ if (error.code == DOMException.INVALID_STATE_ERR)
+ statusText = true;
+ }
+ responseText = (x.responseText == "");
+ responseXML = (x.responseXML == null);
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ dataOK = (x.responseText == "QML Rocks!\n");
+ }
+ }
+
+
+ x.send()
+ }
+}
+
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader_sent.qml b/tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader_sent.qml
new file mode 100644
index 0000000..c2bbc6e
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader_sent.qml
@@ -0,0 +1,31 @@
+import Qt 4.6
+
+QtObject {
+ property string url
+ property bool test: false
+
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ x.open("GET", url);
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+ dataOK = (x.responseText == "QML Rocks!\n");
+ }
+ }
+
+ x.send();
+
+ try {
+ x.setRequestHeader("Test-header", "value");
+ } catch (e) {
+ if (e.code == DOMException.INVALID_STATE_ERR)
+ test = true;
+ }
+ }
+}
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader_unsent.qml b/tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader_unsent.qml
new file mode 100644
index 0000000..30bc93e
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/setRequestHeader_unsent.qml
@@ -0,0 +1,17 @@
+import Qt 4.6
+
+QtObject {
+ property bool test: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ try {
+ x.setRequestHeader("Test-header", "value");
+ } catch (e) {
+ if (e.code == DOMException.INVALID_STATE_ERR)
+ test = true;
+ }
+ }
+}
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/staticStateValues.qml b/tests/auto/declarative/qmlxmlhttprequest/data/staticStateValues.qml
new file mode 100644
index 0000000..ec1c5d8
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/staticStateValues.qml
@@ -0,0 +1,24 @@
+import Qt 4.6
+
+QtObject {
+ property int unsent: XMLHttpRequest.UNSENT
+ property int opened: XMLHttpRequest.OPENED
+ property int headers_received: XMLHttpRequest.HEADERS_RECEIVED
+ property int loading: XMLHttpRequest.LOADING
+ property int done: XMLHttpRequest.DONE
+
+ Component.onCompleted: {
+ // Attempt to overwrite and delete values
+ XMLHttpRequest.UNSENT = 9;
+ XMLHttpRequest.OPENED = 9;
+ XMLHttpRequest.HEADERS_RECEIVED = 9;
+ XMLHttpRequest.LOADING = 9;
+ XMLHttpRequest.DONE = 9;
+
+ delete XMLHttpRequest.UNSENT;
+ delete XMLHttpRequest.OPENED;
+ delete XMLHttpRequest.HEADERS_RECEIVED;
+ delete XMLHttpRequest.LOADING;
+ delete XMLHttpRequest.DONE;
+ }
+}
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/status.200.reply b/tests/auto/declarative/qmlxmlhttprequest/data/status.200.reply
new file mode 100644
index 0000000..35b11f4
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/status.200.reply
@@ -0,0 +1,2 @@
+HTTP/1.0 200 OK
+Content-type: text/html; charset=UTF-8
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/status.404.reply b/tests/auto/declarative/qmlxmlhttprequest/data/status.404.reply
new file mode 100644
index 0000000..964a7a8
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/status.404.reply
@@ -0,0 +1,2 @@
+HTTP/1.0 404 Document not found
+Content-type: text/html; charset=UTF-8
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/status.expect b/tests/auto/declarative/qmlxmlhttprequest/data/status.expect
new file mode 100644
index 0000000..a740c79
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/status.expect
@@ -0,0 +1,7 @@
+GET /testdocument.html HTTP/1.1
+Connection: Keep-Alive
+Accept-Encoding: gzip
+Accept-Language: en-US,*
+User-Agent: Mozilla/5.0
+Host: 127.0.0.1:14445
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/status.qml b/tests/auto/declarative/qmlxmlhttprequest/data/status.qml
new file mode 100644
index 0000000..04202c4
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/status.qml
@@ -0,0 +1,77 @@
+import Qt 4.6
+
+QtObject {
+ property string url
+ property int expectedStatus
+
+ property bool unsentException: false;
+ property bool openedException: false;
+ property bool sentException: false;
+
+ property bool headersReceived: false
+ property bool loading: false
+ property bool done: false
+
+ property bool resetException: false
+
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ try {
+ var a = x.status;
+ } catch (e) {
+ if (e.code == DOMException.INVALID_STATE_ERR)
+ unsentException = true;
+ }
+
+ x.open("GET", url);
+
+ try {
+ var a = x.status;
+ } catch (e) {
+ if (e.code == DOMException.INVALID_STATE_ERR)
+ openedException = true;
+ }
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.HEADERS_RECEIVED) {
+ if (x.status == expectedStatus)
+ headersReceived = true;
+ } else if (x.readyState == XMLHttpRequest.LOADING) {
+ if (x.status == expectedStatus)
+ loading = true;
+ } else if (x.readyState == XMLHttpRequest.DONE) {
+ if (x.status == expectedStatus)
+ done = true;
+
+ if (expectedStatus == 404) {
+ dataOK = (x.responseText == "");
+ } else {
+ dataOK = (x.responseText == "QML Rocks!\n");
+ }
+
+ x.open("GET", url);
+
+ try {
+ var a = x.status;
+ } catch (e) {
+ if (e.code == DOMException.INVALID_STATE_ERR)
+ resetException = true;
+ }
+
+ }
+ }
+
+ x.send()
+
+ try {
+ var a = x.status;
+ } catch (e) {
+ if (e.code == DOMException.INVALID_STATE_ERR)
+ sentException = true;
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/statusText.qml b/tests/auto/declarative/qmlxmlhttprequest/data/statusText.qml
new file mode 100644
index 0000000..8becc3b
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/statusText.qml
@@ -0,0 +1,77 @@
+import Qt 4.6
+
+QtObject {
+ property string url
+ property string expectedStatus
+
+ property bool unsentException: false;
+ property bool openedException: false;
+ property bool sentException: false;
+
+ property bool headersReceived: false
+ property bool loading: false
+ property bool done: false
+
+ property bool resetException: false
+
+ property bool dataOK: false
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ try {
+ var a = x.statusText;
+ } catch (e) {
+ if (e.code == DOMException.INVALID_STATE_ERR)
+ unsentException = true;
+ }
+
+ x.open("GET", url);
+
+ try {
+ var a = x.statusText;
+ } catch (e) {
+ if (e.code == DOMException.INVALID_STATE_ERR)
+ openedException = true;
+ }
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.HEADERS_RECEIVED) {
+ if (x.statusText == expectedStatus)
+ headersReceived = true;
+ } else if (x.readyState == XMLHttpRequest.LOADING) {
+ if (x.statusText == expectedStatus)
+ loading = true;
+ } else if (x.readyState == XMLHttpRequest.DONE) {
+ if (x.statusText == expectedStatus)
+ done = true;
+
+ if (expectedStatus != "OK") {
+ dataOK = (x.responseText == "");
+ } else {
+ dataOK = (x.responseText == "QML Rocks!\n");
+ }
+
+ x.open("GET", url);
+
+ try {
+ var a = x.statusText;
+ } catch (e) {
+ if (e.code == DOMException.INVALID_STATE_ERR)
+ resetException = true;
+ }
+
+ }
+ }
+
+ x.send()
+
+ try {
+ var a = x.statusText;
+ } catch (e) {
+ if (e.code == DOMException.INVALID_STATE_ERR)
+ sentException = true;
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/testdocument.html b/tests/auto/declarative/qmlxmlhttprequest/data/testdocument.html
new file mode 100644
index 0000000..8fe0f4b
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/testdocument.html
@@ -0,0 +1 @@
+QML Rocks!
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/text.qml b/tests/auto/declarative/qmlxmlhttprequest/data/text.qml
new file mode 100644
index 0000000..4615a07
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/text.qml
@@ -0,0 +1,131 @@
+import Qt 4.6
+
+QtObject {
+ property bool xmlTest: false
+ property bool dataOK: false
+
+ Script {
+ function checkText(text, whitespacetext)
+ {
+ if (text == null)
+ return;
+
+ if (text.nodeName != "#text")
+ return;
+
+ if (text.nodeValue != "Hello world!")
+ return;
+
+ if (text.nodeType != 3)
+ return;
+
+ if (text.parentNode.nodeName != "item")
+ return;
+
+ if (text.childNodes.length != 0)
+ return;
+
+ if (text.firstChild != null)
+ return;
+
+ if (text.lastChild != null)
+ return;
+
+ if (text.previousSibling != null)
+ return;
+
+ if (text.nextSibling != null)
+ return;
+
+ if (text.attributes != null)
+ return;
+
+ if (text.wholeText != "Hello world!")
+ return;
+
+ if (text.data != "Hello world!")
+ return;
+
+ if (text.length != 12)
+ return;
+
+ if (text.isElementContentWhitespace != false)
+ return;
+
+ if (whitespacetext.nodeName != "#text")
+ return;
+
+ if (whitespacetext.nodeValue != " ")
+ return;
+
+ if (whitespacetext.nodeType != 3)
+ return;
+
+ if (whitespacetext.parentNode.nodeName != "item")
+ return;
+
+ if (whitespacetext.childNodes.length != 0)
+ return;
+
+ if (whitespacetext.firstChild != null)
+ return;
+
+ if (whitespacetext.lastChild != null)
+ return;
+
+ if (whitespacetext.previousSibling != null)
+ return;
+
+ if (whitespacetext.nextSibling != null)
+ return;
+
+ if (whitespacetext.attributes != null)
+ return;
+
+ if (whitespacetext.wholeText != " ")
+ return;
+
+ if (whitespacetext.data != " ")
+ return;
+
+ if (whitespacetext.length != 3)
+ return;
+
+ if (whitespacetext.isElementContentWhitespace != true)
+ return;
+
+ xmlTest = true;
+ }
+
+ function checkXML(document)
+ {
+ checkText(document.documentElement.childNodes[0].childNodes[0],
+ document.documentElement.childNodes[1].childNodes[0]);
+
+ }
+ }
+
+ Component.onCompleted: {
+ var x = new XMLHttpRequest;
+
+ x.open("GET", "text.xml");
+
+ // Test to the end
+ x.onreadystatechange = function() {
+ if (x.readyState == XMLHttpRequest.DONE) {
+
+ dataOK = true;
+
+ if (x.responseXML != null)
+ checkXML(x.responseXML);
+
+ }
+ }
+
+ x.send()
+ }
+}
+
+
+
+
diff --git a/tests/auto/declarative/qmlxmlhttprequest/data/text.xml b/tests/auto/declarative/qmlxmlhttprequest/data/text.xml
new file mode 100644
index 0000000..e741688
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/data/text.xml
@@ -0,0 +1 @@
+<root><item>Hello world!</item><item> </item></root>
diff --git a/tests/auto/declarative/qmlxmlhttprequest/qmlxmlhttprequest.pro b/tests/auto/declarative/qmlxmlhttprequest/qmlxmlhttprequest.pro
new file mode 100644
index 0000000..ed87b2a
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/qmlxmlhttprequest.pro
@@ -0,0 +1,13 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative network
+macx:CONFIG -= app_bundle
+
+INCLUDEPATH += ../shared/
+HEADERS += ../shared/testhttpserver.h
+
+SOURCES += tst_qmlxmlhttprequest.cpp \
+ ../shared/testhttpserver.cpp
+
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlxmlhttprequest/tst_qmlxmlhttprequest.cpp b/tests/auto/declarative/qmlxmlhttprequest/tst_qmlxmlhttprequest.cpp
new file mode 100644
index 0000000..df5442c
--- /dev/null
+++ b/tests/auto/declarative/qmlxmlhttprequest/tst_qmlxmlhttprequest.cpp
@@ -0,0 +1,1315 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qtest.h>
+#include <QmlEngine>
+#include <QmlComponent>
+#include <QDebug>
+#include <QNetworkCookieJar>
+#include "testhttpserver.h"
+
+#define SERVER_PORT 14445
+
+class tst_xmlhttprequest : public QObject
+{
+ Q_OBJECT
+public:
+ tst_xmlhttprequest() {}
+
+private slots:
+ void initTestCase() {
+ if (QLocale::system().name().replace(QChar::fromAscii('_'),QChar::fromAscii('-')) != QLatin1String("en-US")) {
+ qWarning() << "Test will fail unless LANG is en_US";
+ }
+ }
+
+ void domExceptionCodes();
+ void callbackException();
+ void callbackException_data();
+ void staticStateValues();
+ void instanceStateValues();
+ void constructor();
+ void defaultState();
+ void open();
+ void open_invalid_method();
+ void open_sync();
+ void open_arg_count();
+ void setRequestHeader();
+ void setRequestHeader_unsent();
+ void setRequestHeader_illegalName_data();
+ void setRequestHeader_illegalName();
+ void setRequestHeader_sent();
+ void setRequestHeader_args();
+ void send_unsent();
+ void send_alreadySent();
+ void send_ignoreData();
+ void send_withdata();
+ void abort();
+ void abort_unsent();
+ void abort_opened();
+ void getResponseHeader();
+ void getResponseHeader_unsent();
+ void getResponseHeader_sent();
+ void getResponseHeader_args();
+ void getAllResponseHeaders();
+ void getAllResponseHeaders_unsent();
+ void getAllResponseHeaders_sent();
+ void getAllResponseHeaders_args();
+ void status();
+ void statusText();
+ void responseText();
+ void responseXML_invalid();
+ void invalidMethodUsage();
+ void redirects();
+
+ // Attributes
+ void document();
+ void element();
+ void attr();
+ void text();
+ void cdata();
+
+ // Crashes
+ // void outstanding_request_at_shutdown();
+
+ // void network_errors()
+ // void readyState()
+
+private:
+ QmlEngine engine;
+};
+
+inline QUrl TEST_FILE(const QString &filename)
+{
+ return QUrl::fromLocalFile(QLatin1String(SRCDIR) + QLatin1String("/data/") + filename);
+}
+
+// Test that the dom exception codes are correct
+void tst_xmlhttprequest::domExceptionCodes()
+{
+ QmlComponent component(&engine, TEST_FILE("domExceptionCodes.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("index_size_err").toInt(), 1);
+ QCOMPARE(object->property("domstring_size_err").toInt(), 2);
+ QCOMPARE(object->property("hierarchy_request_err").toInt(), 3);
+ QCOMPARE(object->property("wrong_document_err").toInt(), 4);
+ QCOMPARE(object->property("invalid_character_err").toInt(), 5);
+ QCOMPARE(object->property("no_data_allowed_err").toInt(), 6);
+ QCOMPARE(object->property("no_modification_allowed_err").toInt(), 7);
+ QCOMPARE(object->property("not_found_err").toInt(), 8);
+ QCOMPARE(object->property("not_supported_err").toInt(), 9);
+ QCOMPARE(object->property("inuse_attribute_err").toInt(), 10);
+ QCOMPARE(object->property("invalid_state_err").toInt(), 11);
+ QCOMPARE(object->property("syntax_err").toInt(), 12);
+ QCOMPARE(object->property("invalid_modification_err").toInt(), 13);
+ QCOMPARE(object->property("namespace_err").toInt(), 14);
+ QCOMPARE(object->property("invalid_access_err").toInt(), 15);
+ QCOMPARE(object->property("validation_err").toInt(), 16);
+ QCOMPARE(object->property("type_mismatch_err").toInt(), 17);
+
+ delete object;
+}
+
+#define TRY_WAIT(expr) \
+ do { \
+ for (int ii = 0; ii < 6; ++ii) { \
+ if ((expr)) break; \
+ QTest::qWait(50); \
+ } \
+ QVERIFY((expr)); \
+ } while (false)
+
+
+void tst_xmlhttprequest::callbackException_data()
+{
+ QTest::addColumn<QString>("which");
+ QTest::addColumn<int>("line");
+
+ QTest::newRow("on-opened") << "1" << 15;
+ QTest::newRow("on-loading") << "3" << 15;
+ QTest::newRow("on-done") << "4" << 15;
+}
+
+void tst_xmlhttprequest::callbackException()
+{
+ // Test exception reporting for exceptions thrown at various points.
+
+ QFETCH(QString, which);
+ QFETCH(int, line);
+
+ QString expect = TEST_FILE("callbackException.qml").toString() + ":"+QString::number(line)+": Error: Exception from Callback";
+ QTest::ignoreMessage(QtWarningMsg, expect.toLatin1());
+
+ QmlComponent component(&engine, TEST_FILE("callbackException.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "testdocument.html");
+ object->setProperty("which", which);
+ component.completeCreate();
+
+ TRY_WAIT(object->property("threw").toBool() == true);
+
+ delete object;
+}
+
+// Test that the state value properties on the XMLHttpRequest constructor have the correct values.
+// ### WebKit does not do this, but it seems to fit the standard and QML better
+void tst_xmlhttprequest::staticStateValues()
+{
+ QmlComponent component(&engine, TEST_FILE("staticStateValues.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("unsent").toInt(), 0);
+ QCOMPARE(object->property("opened").toInt(), 1);
+ QCOMPARE(object->property("headers_received").toInt(), 2);
+ QCOMPARE(object->property("loading").toInt(), 3);
+ QCOMPARE(object->property("done").toInt(), 4);
+
+ delete object;
+}
+
+// Test that the state value properties on instances have the correct values.
+void tst_xmlhttprequest::instanceStateValues()
+{
+ QmlComponent component(&engine, TEST_FILE("instanceStateValues.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("unsent").toInt(), 0);
+ QCOMPARE(object->property("opened").toInt(), 1);
+ QCOMPARE(object->property("headers_received").toInt(), 2);
+ QCOMPARE(object->property("loading").toInt(), 3);
+ QCOMPARE(object->property("done").toInt(), 4);
+
+ delete object;
+}
+
+// Test calling constructor
+void tst_xmlhttprequest::constructor()
+{
+ QmlComponent component(&engine, TEST_FILE("constructor.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("calledAsConstructor").toBool(), true);
+ QCOMPARE(object->property("calledAsFunction").toBool(), true);
+
+ delete object;
+}
+
+// Test that all the properties are set correctly before any request is sent
+void tst_xmlhttprequest::defaultState()
+{
+ QmlComponent component(&engine, TEST_FILE("defaultState.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("readState").toInt(), 0);
+ QCOMPARE(object->property("statusIsException").toBool(), true);
+ QCOMPARE(object->property("statusTextIsException").toBool(), true);
+ QCOMPARE(object->property("responseText").toString(), QString());
+ QCOMPARE(object->property("responseXMLIsNull").toBool(), true);
+
+ delete object;
+}
+
+// Test valid XMLHttpRequest.open() calls
+void tst_xmlhttprequest::open()
+{
+ // Relative url
+ {
+ QmlComponent component(&engine, TEST_FILE("open.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "testdocument.html");
+ component.completeCreate();
+
+ QCOMPARE(object->property("readyState").toBool(), true);
+ QCOMPARE(object->property("openedState").toBool(), true);
+ QCOMPARE(object->property("status").toBool(), true);
+ QCOMPARE(object->property("statusText").toBool(), true);
+ QCOMPARE(object->property("responseText").toBool(), true);
+ QCOMPARE(object->property("responseXML").toBool(), true);
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ delete object;
+ }
+
+ // Absolute url
+ {
+ QmlComponent component(&engine, TEST_FILE("open.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", TEST_FILE("testdocument.html").toString());
+ component.completeCreate();
+
+ QCOMPARE(object->property("readyState").toBool(), true);
+ QCOMPARE(object->property("openedState").toBool(), true);
+ QCOMPARE(object->property("status").toBool(), true);
+ QCOMPARE(object->property("statusText").toBool(), true);
+ QCOMPARE(object->property("responseText").toBool(), true);
+ QCOMPARE(object->property("responseXML").toBool(), true);
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ delete object;
+ }
+
+ // Absolute network url
+ {
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("open_network.expect"),
+ TEST_FILE("open_network.reply"),
+ TEST_FILE("testdocument.html")));
+
+ QmlComponent component(&engine, TEST_FILE("open.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ component.completeCreate();
+
+ QCOMPARE(object->property("readyState").toBool(), true);
+ QCOMPARE(object->property("openedState").toBool(), true);
+ QCOMPARE(object->property("status").toBool(), true);
+ QCOMPARE(object->property("statusText").toBool(), true);
+ QCOMPARE(object->property("responseText").toBool(), true);
+ QCOMPARE(object->property("responseXML").toBool(), true);
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ delete object;
+ }
+
+ // User/pass
+ {
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("open_network.expect"),
+ TEST_FILE("open_network.reply"),
+ TEST_FILE("testdocument.html")));
+
+ QmlComponent component(&engine, TEST_FILE("open_user.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ component.completeCreate();
+
+ QCOMPARE(object->property("readyState").toBool(), true);
+ QCOMPARE(object->property("openedState").toBool(), true);
+ QCOMPARE(object->property("status").toBool(), true);
+ QCOMPARE(object->property("statusText").toBool(), true);
+ QCOMPARE(object->property("responseText").toBool(), true);
+ QCOMPARE(object->property("responseXML").toBool(), true);
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ // ### Check that the username/password were sent to the server
+
+ delete object;
+ }
+}
+
+// Test that calling XMLHttpRequest.open() with an invalid method raises an exception
+void tst_xmlhttprequest::open_invalid_method()
+{
+ QmlComponent component(&engine, TEST_FILE("open_invalid_method.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("exceptionThrown").toBool(), true);
+
+ delete object;
+}
+
+// Test that calling XMLHttpRequest.open() with sync raises an exception
+void tst_xmlhttprequest::open_sync()
+{
+ QmlComponent component(&engine, TEST_FILE("open_sync.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("exceptionThrown").toBool(), true);
+
+ delete object;
+}
+
+// Calling with incorrect arg count raises an exception
+void tst_xmlhttprequest::open_arg_count()
+{
+ {
+ QmlComponent component(&engine, TEST_FILE("open_arg_count.1.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("exceptionThrown").toBool(), true);
+
+ delete object;
+ }
+
+ {
+ QmlComponent component(&engine, TEST_FILE("open_arg_count.2.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("exceptionThrown").toBool(), true);
+
+ delete object;
+ }
+}
+
+// Test valid setRequestHeader() calls
+void tst_xmlhttprequest::setRequestHeader()
+{
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("setRequestHeader.expect"),
+ TEST_FILE("setRequestHeader.reply"),
+ TEST_FILE("testdocument.html")));
+
+ QmlComponent component(&engine, TEST_FILE("setRequestHeader.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ component.completeCreate();
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ delete object;
+}
+
+// Test setting headers before open() throws exception
+void tst_xmlhttprequest::setRequestHeader_unsent()
+{
+ QmlComponent component(&engine, TEST_FILE("setRequestHeader_unsent.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test").toBool(), true);
+
+ delete object;
+}
+
+void tst_xmlhttprequest::setRequestHeader_illegalName_data()
+{
+ QTest::addColumn<QString>("name");
+
+ QTest::newRow("Accept-Charset") << "AccePT-CHArset";
+ QTest::newRow("Accept-Encoding") << "AccEpt-EnCOding";
+ QTest::newRow("Connection") << "ConnECtion";
+ QTest::newRow("Content-Length") << "ContEnt-LenGth";
+ QTest::newRow("Cookie") << "CookIe";
+ QTest::newRow("Cookie2") << "CoOkie2";
+ QTest::newRow("Content-Transfer-Encoding") << "ConteNT-tRANSFER-eNCOding";
+ QTest::newRow("Date") << "DaTE";
+ QTest::newRow("Expect") << "ExPect";
+ QTest::newRow("Host") << "HoST";
+ QTest::newRow("Keep-Alive") << "KEEP-aLive";
+ QTest::newRow("Referer") << "ReferEr";
+ QTest::newRow("TE") << "Te";
+ QTest::newRow("Trailer") << "TraILEr";
+ QTest::newRow("Transfer-Encoding") << "tRANsfer-Encoding";
+ QTest::newRow("Upgrade") << "UpgrADe";
+ QTest::newRow("User-Agent") << "uSEr-Agent";
+ QTest::newRow("Via") << "vIa";
+ QTest::newRow("Proxy-") << "ProXy-";
+ QTest::newRow("Sec-") << "SeC-";
+ QTest::newRow("Proxy-*") << "Proxy-BLAH";
+ QTest::newRow("Sec-*") << "Sec-F";
+}
+
+// Tests that using illegal header names has no effect
+void tst_xmlhttprequest::setRequestHeader_illegalName()
+{
+ QFETCH(QString, name);
+
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("open_network.expect"),
+ TEST_FILE("open_network.reply"),
+ TEST_FILE("testdocument.html")));
+
+ QmlComponent component(&engine, TEST_FILE("setRequestHeader_illegalName.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ object->setProperty("header", name);
+ component.completeCreate();
+
+ QCOMPARE(object->property("readyState").toBool(), true);
+ QCOMPARE(object->property("openedState").toBool(), true);
+ QCOMPARE(object->property("status").toBool(), true);
+ QCOMPARE(object->property("statusText").toBool(), true);
+ QCOMPARE(object->property("responseText").toBool(), true);
+ QCOMPARE(object->property("responseXML").toBool(), true);
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ delete object;
+}
+
+// Test that attempting to set a header after a request is sent throws an exception
+void tst_xmlhttprequest::setRequestHeader_sent()
+{
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("open_network.expect"),
+ TEST_FILE("open_network.reply"),
+ TEST_FILE("testdocument.html")));
+
+ QmlComponent component(&engine, TEST_FILE("setRequestHeader_sent.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ component.completeCreate();
+
+ QCOMPARE(object->property("test").toBool(), true);
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ delete object;
+}
+
+// Invalid arg count throws exception
+void tst_xmlhttprequest::setRequestHeader_args()
+{
+ QmlComponent component(&engine, TEST_FILE("setRequestHeader_args.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("exceptionThrown").toBool(), true);
+
+ delete object;
+}
+
+// Test that calling send() in UNSENT state throws an exception
+void tst_xmlhttprequest::send_unsent()
+{
+ QmlComponent component(&engine, TEST_FILE("send_unsent.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test").toBool(), true);
+
+ delete object;
+}
+
+// Test attempting to resend a sent request throws an exception
+void tst_xmlhttprequest::send_alreadySent()
+{
+ QmlComponent component(&engine, TEST_FILE("send_alreadySent.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test").toBool(), true);
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ delete object;
+}
+
+// Test that send for a GET or HEAD ignores data
+void tst_xmlhttprequest::send_ignoreData()
+{
+ {
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("send_ignoreData_GET.expect"),
+ TEST_FILE("send_ignoreData.reply"),
+ TEST_FILE("testdocument.html")));
+
+ QmlComponent component(&engine, TEST_FILE("send_ignoreData.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("reqType", "GET");
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ component.completeCreate();
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ delete object;
+ }
+
+ {
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("send_ignoreData_PUT.expect"),
+ TEST_FILE("send_ignoreData.reply"),
+ TEST_FILE("testdocument.html")));
+
+ QmlComponent component(&engine, TEST_FILE("send_ignoreData.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("reqType", "HEAD");
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ component.completeCreate();
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ delete object;
+ }
+}
+
+// Test that send()'ing data works
+void tst_xmlhttprequest::send_withdata()
+{
+ // No content-type
+ {
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("send_data.1.expect"),
+ TEST_FILE("send_data.reply"),
+ TEST_FILE("testdocument.html")));
+
+ QmlComponent component(&engine, TEST_FILE("send_data.1.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ component.completeCreate();
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ delete object;
+ }
+
+ // Correct content-type
+ {
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("send_data.1.expect"),
+ TEST_FILE("send_data.reply"),
+ TEST_FILE("testdocument.html")));
+
+ QmlComponent component(&engine, TEST_FILE("send_data.2.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ component.completeCreate();
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ delete object;
+ }
+
+ // Incorrect content-type
+ {
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("send_data.1.expect"),
+ TEST_FILE("send_data.reply"),
+ TEST_FILE("testdocument.html")));
+
+ QmlComponent component(&engine, TEST_FILE("send_data.3.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ component.completeCreate();
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ delete object;
+ }
+
+ // Correct content-type - out of order
+ {
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("send_data.4.expect"),
+ TEST_FILE("send_data.reply"),
+ TEST_FILE("testdocument.html")));
+
+ QmlComponent component(&engine, TEST_FILE("send_data.4.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ component.completeCreate();
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ delete object;
+ }
+
+ // Incorrect content-type - out of order
+ {
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("send_data.4.expect"),
+ TEST_FILE("send_data.reply"),
+ TEST_FILE("testdocument.html")));
+
+ QmlComponent component(&engine, TEST_FILE("send_data.5.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ component.completeCreate();
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ delete object;
+ }
+
+ // PUT
+ {
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("send_data.6.expect"),
+ TEST_FILE("send_data.reply"),
+ TEST_FILE("testdocument.html")));
+
+ QmlComponent component(&engine, TEST_FILE("send_data.6.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ component.completeCreate();
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ delete object;
+ }
+
+ // Correct content-type - no charset
+ {
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("send_data.1.expect"),
+ TEST_FILE("send_data.reply"),
+ TEST_FILE("testdocument.html")));
+
+ QmlComponent component(&engine, TEST_FILE("send_data.7.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ component.completeCreate();
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ delete object;
+ }
+}
+
+// Test abort() has no effect in unsent state
+void tst_xmlhttprequest::abort_unsent()
+{
+ QmlComponent component(&engine, TEST_FILE("abort_unsent.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "testdocument.html");
+ component.completeCreate();
+
+ QCOMPARE(object->property("readyState").toBool(), true);
+ QCOMPARE(object->property("openedState").toBool(), true);
+ QCOMPARE(object->property("status").toBool(), true);
+ QCOMPARE(object->property("statusText").toBool(), true);
+ QCOMPARE(object->property("responseText").toBool(), true);
+ QCOMPARE(object->property("responseXML").toBool(), true);
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ delete object;
+}
+
+// Test abort() cancels an open (but unsent) request
+void tst_xmlhttprequest::abort_opened()
+{
+ QmlComponent component(&engine, TEST_FILE("abort_opened.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "testdocument.html");
+ component.completeCreate();
+
+ QCOMPARE(object->property("readyState").toBool(), true);
+ QCOMPARE(object->property("openedState").toBool(), true);
+ QCOMPARE(object->property("status").toBool(), true);
+ QCOMPARE(object->property("statusText").toBool(), true);
+ QCOMPARE(object->property("responseText").toBool(), true);
+ QCOMPARE(object->property("responseXML").toBool(), true);
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ delete object;
+}
+
+// Test abort() aborts in progress send
+void tst_xmlhttprequest::abort()
+{
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("abort.expect"),
+ TEST_FILE("abort.reply"),
+ TEST_FILE("testdocument.html")));
+
+ QmlComponent component(&engine, TEST_FILE("abort.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("urlDummy", "http://127.0.0.1:14449/testdocument.html");
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ component.completeCreate();
+
+ QCOMPARE(object->property("seenDone").toBool(), true);
+ QCOMPARE(object->property("didNotSeeUnsent").toBool(), true);
+ QCOMPARE(object->property("endStateUnsent").toBool(), true);
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ delete object;
+}
+
+void tst_xmlhttprequest::getResponseHeader()
+{
+ QmlEngine engine; // Avoid cookie contamination
+
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("getResponseHeader.expect"),
+ TEST_FILE("getResponseHeader.reply"),
+ TEST_FILE("testdocument.html")));
+
+
+ QmlComponent component(&engine, TEST_FILE("getResponseHeader.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ component.completeCreate();
+
+ QCOMPARE(object->property("unsentException").toBool(), true);
+ QCOMPARE(object->property("openedException").toBool(), true);
+ QCOMPARE(object->property("readyState").toBool(), true);
+ QCOMPARE(object->property("openedState").toBool(), true);
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ QCOMPARE(object->property("headersReceivedState").toBool(), true);
+ QCOMPARE(object->property("headersReceivedNullHeader").toBool(), true);
+ QCOMPARE(object->property("headersReceivedValidHeader").toBool(), true);
+ QCOMPARE(object->property("headersReceivedMultiValidHeader").toBool(), true);
+ QCOMPARE(object->property("headersReceivedCookieHeader").toBool(), true);
+
+ QCOMPARE(object->property("doneState").toBool(), true);
+ QCOMPARE(object->property("doneNullHeader").toBool(), true);
+ QCOMPARE(object->property("doneValidHeader").toBool(), true);
+ QCOMPARE(object->property("doneMultiValidHeader").toBool(), true);
+ QCOMPARE(object->property("doneCookieHeader").toBool(), true);
+
+ delete object;
+}
+
+// Test getResponseHeader throws an exception in an invalid state
+void tst_xmlhttprequest::getResponseHeader_unsent()
+{
+ QmlComponent component(&engine, TEST_FILE("getResponseHeader_unsent.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test").toBool(), true);
+
+ delete object;
+}
+
+// Test getResponseHeader throws an exception in an invalid state
+void tst_xmlhttprequest::getResponseHeader_sent()
+{
+ QmlComponent component(&engine, TEST_FILE("getResponseHeader_sent.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test").toBool(), true);
+
+ delete object;
+}
+
+// Invalid arg count throws exception
+void tst_xmlhttprequest::getResponseHeader_args()
+{
+ QmlComponent component(&engine, TEST_FILE("getResponseHeader_args.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ TRY_WAIT(object->property("exceptionThrown").toBool() == true);
+
+ delete object;
+}
+
+void tst_xmlhttprequest::getAllResponseHeaders()
+{
+ QmlEngine engine; // Avoid cookie contamination
+
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("getResponseHeader.expect"),
+ TEST_FILE("getResponseHeader.reply"),
+ TEST_FILE("testdocument.html")));
+
+ QmlComponent component(&engine, TEST_FILE("getAllResponseHeaders.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ component.completeCreate();
+
+ QCOMPARE(object->property("unsentException").toBool(), true);
+ QCOMPARE(object->property("openedException").toBool(), true);
+ QCOMPARE(object->property("readyState").toBool(), true);
+ QCOMPARE(object->property("openedState").toBool(), true);
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ QCOMPARE(object->property("headersReceivedState").toBool(), true);
+ QCOMPARE(object->property("headersReceivedHeader").toBool(), true);
+
+ QCOMPARE(object->property("doneState").toBool(), true);
+ QCOMPARE(object->property("doneHeader").toBool(), true);
+
+ delete object;
+}
+
+// Test getAllResponseHeaders throws an exception in an invalid state
+void tst_xmlhttprequest::getAllResponseHeaders_unsent()
+{
+ QmlComponent component(&engine, TEST_FILE("getAllResponseHeaders_unsent.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test").toBool(), true);
+
+ delete object;
+}
+
+// Test getAllResponseHeaders throws an exception in an invalid state
+void tst_xmlhttprequest::getAllResponseHeaders_sent()
+{
+ QmlComponent component(&engine, TEST_FILE("getAllResponseHeaders_sent.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test").toBool(), true);
+
+ delete object;
+}
+
+// Invalid arg count throws exception
+void tst_xmlhttprequest::getAllResponseHeaders_args()
+{
+ QmlComponent component(&engine, TEST_FILE("getAllResponseHeaders_args.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ TRY_WAIT(object->property("exceptionThrown").toBool() == true);
+
+ delete object;
+}
+
+void tst_xmlhttprequest::status()
+{
+ {
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("status.expect"),
+ TEST_FILE("status.200.reply"),
+ TEST_FILE("testdocument.html")));
+
+ QmlComponent component(&engine, TEST_FILE("status.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ object->setProperty("expectedStatus", 200);
+ component.completeCreate();
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ QCOMPARE(object->property("unsentException").toBool(), true);
+ QCOMPARE(object->property("openedException").toBool(), true);
+ QCOMPARE(object->property("sentException").toBool(), true);
+ QCOMPARE(object->property("headersReceived").toBool(), true);
+ QCOMPARE(object->property("loading").toBool(), true);
+ QCOMPARE(object->property("done").toBool(), true);
+ QCOMPARE(object->property("resetException").toBool(), true);
+
+ delete object;
+ }
+
+ {
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("status.expect"),
+ TEST_FILE("status.404.reply"),
+ TEST_FILE("testdocument.html")));
+
+ QmlComponent component(&engine, TEST_FILE("status.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ object->setProperty("expectedStatus", 404);
+ component.completeCreate();
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ QCOMPARE(object->property("unsentException").toBool(), true);
+ QCOMPARE(object->property("openedException").toBool(), true);
+ QCOMPARE(object->property("sentException").toBool(), true);
+ QCOMPARE(object->property("headersReceived").toBool(), true);
+ QCOMPARE(object->property("loading").toBool(), true);
+ QCOMPARE(object->property("done").toBool(), true);
+ QCOMPARE(object->property("resetException").toBool(), true);
+
+ delete object;
+ }
+}
+
+void tst_xmlhttprequest::statusText()
+{
+ {
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("status.expect"),
+ TEST_FILE("status.200.reply"),
+ TEST_FILE("testdocument.html")));
+
+ QmlComponent component(&engine, TEST_FILE("statusText.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ object->setProperty("expectedStatus", "OK");
+ component.completeCreate();
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ QCOMPARE(object->property("unsentException").toBool(), true);
+ QCOMPARE(object->property("openedException").toBool(), true);
+ QCOMPARE(object->property("sentException").toBool(), true);
+ QCOMPARE(object->property("headersReceived").toBool(), true);
+ QCOMPARE(object->property("loading").toBool(), true);
+ QCOMPARE(object->property("done").toBool(), true);
+ QCOMPARE(object->property("resetException").toBool(), true);
+
+ delete object;
+ }
+
+ {
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("status.expect"),
+ TEST_FILE("status.404.reply"),
+ TEST_FILE("testdocument.html")));
+
+ QmlComponent component(&engine, TEST_FILE("statusText.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ object->setProperty("expectedStatus", "Document not found");
+ component.completeCreate();
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ QCOMPARE(object->property("unsentException").toBool(), true);
+ QCOMPARE(object->property("openedException").toBool(), true);
+ QCOMPARE(object->property("sentException").toBool(), true);
+ QCOMPARE(object->property("headersReceived").toBool(), true);
+ QCOMPARE(object->property("loading").toBool(), true);
+ QCOMPARE(object->property("done").toBool(), true);
+ QCOMPARE(object->property("resetException").toBool(), true);
+
+ delete object;
+ }
+}
+
+void tst_xmlhttprequest::responseText()
+{
+ {
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("status.expect"),
+ TEST_FILE("status.200.reply"),
+ TEST_FILE("testdocument.html")));
+
+ QmlComponent component(&engine, TEST_FILE("responseText.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ object->setProperty("expectedText", "QML Rocks!\n");
+ component.completeCreate();
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ QCOMPARE(object->property("unsent").toBool(), true);
+ QCOMPARE(object->property("opened").toBool(), true);
+ QCOMPARE(object->property("sent").toBool(), true);
+ QCOMPARE(object->property("headersReceived").toBool(), true);
+ QCOMPARE(object->property("loading").toBool(), true);
+ QCOMPARE(object->property("done").toBool(), true);
+ QCOMPARE(object->property("reset").toBool(), true);
+
+ delete object;
+ }
+
+ {
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("status.expect"),
+ TEST_FILE("status.200.reply"),
+ QUrl()));
+
+ QmlComponent component(&engine, TEST_FILE("responseText.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ object->setProperty("expectedText", "");
+ component.completeCreate();
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ QCOMPARE(object->property("unsent").toBool(), true);
+ QCOMPARE(object->property("opened").toBool(), true);
+ QCOMPARE(object->property("sent").toBool(), true);
+ QCOMPARE(object->property("headersReceived").toBool(), true);
+ QCOMPARE(object->property("loading").toBool(), true);
+ QCOMPARE(object->property("done").toBool(), true);
+ QCOMPARE(object->property("reset").toBool(), true);
+
+ delete object;
+ }
+
+ {
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ QVERIFY(server.wait(TEST_FILE("status.expect"),
+ TEST_FILE("status.404.reply"),
+ TEST_FILE("testdocument.html")));
+
+ QmlComponent component(&engine, TEST_FILE("responseText.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
+ object->setProperty("expectedText", "");
+ component.completeCreate();
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ QCOMPARE(object->property("unsent").toBool(), true);
+ QCOMPARE(object->property("opened").toBool(), true);
+ QCOMPARE(object->property("sent").toBool(), true);
+ QCOMPARE(object->property("headersReceived").toBool(), true);
+ QCOMPARE(object->property("loading").toBool(), true);
+ QCOMPARE(object->property("done").toBool(), true);
+ QCOMPARE(object->property("reset").toBool(), true);
+
+ delete object;
+ }
+}
+
+// Test that calling hte XMLHttpRequest methods on a non-XMLHttpRequest object
+// throws an exception
+void tst_xmlhttprequest::invalidMethodUsage()
+{
+ QmlComponent component(&engine, TEST_FILE("invalidMethodUsage.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("onreadystatechange").toBool(), true);
+ QCOMPARE(object->property("readyState").toBool(), true);
+ QCOMPARE(object->property("status").toBool(), true);
+ QCOMPARE(object->property("statusText").toBool(), true);
+ QCOMPARE(object->property("responseText").toBool(), true);
+ QCOMPARE(object->property("responseXML").toBool(), true);
+
+ QCOMPARE(object->property("open").toBool(), true);
+ QCOMPARE(object->property("setRequestHeader").toBool(), true);
+ QCOMPARE(object->property("send").toBool(), true);
+ QCOMPARE(object->property("abort").toBool(), true);
+ QCOMPARE(object->property("getResponseHeader").toBool(), true);
+ QCOMPARE(object->property("getAllResponseHeaders").toBool(), true);
+
+ delete object;
+}
+
+// Test that XMLHttpRequest transparently redirects
+void tst_xmlhttprequest::redirects()
+{
+ {
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ server.addRedirect("redirect.html", "http://127.0.0.1:14445/redirecttarget.html");
+ server.serveDirectory("data");
+
+ QmlComponent component(&engine, TEST_FILE("redirects.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/redirect.html");
+ object->setProperty("expectedText", "");
+ component.completeCreate();
+
+ TRY_WAIT(object->property("done").toBool() == true);
+ QCOMPARE(object->property("dataOK").toBool(), true);
+
+ delete object;
+ }
+
+ {
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ server.addRedirect("redirect.html", "http://127.0.0.1:14445/redirectmissing.html");
+ server.serveDirectory("data");
+
+ QmlComponent component(&engine, TEST_FILE("redirectError.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/redirect.html");
+ object->setProperty("expectedText", "");
+ component.completeCreate();
+
+ TRY_WAIT(object->property("done").toBool() == true);
+ QCOMPARE(object->property("dataOK").toBool(), true);
+
+ delete object;
+ }
+
+ {
+ TestHTTPServer server(SERVER_PORT);
+ QVERIFY(server.isValid());
+ server.addRedirect("redirect.html", "http://127.0.0.1:14445/redirect.html");
+ server.serveDirectory("data");
+
+ QmlComponent component(&engine, TEST_FILE("redirectRecur.qml"));
+ QObject *object = component.beginCreate(engine.rootContext());
+ QVERIFY(object != 0);
+ object->setProperty("url", "http://127.0.0.1:14445/redirect.html");
+ object->setProperty("expectedText", "");
+ component.completeCreate();
+
+ for (int ii = 0; ii < 60; ++ii) {
+ if (object->property("done").toBool()) break;
+ QTest::qWait(50);
+ }
+ QVERIFY(object->property("done").toBool() == true);
+
+ QCOMPARE(object->property("dataOK").toBool(), true);
+
+ delete object;
+ }
+}
+
+void tst_xmlhttprequest::responseXML_invalid()
+{
+ QmlComponent component(&engine, TEST_FILE("responseXML_invalid.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ QCOMPARE(object->property("xmlNull").toBool(), true);
+
+ delete object;
+}
+
+// Test the Document DOM element
+void tst_xmlhttprequest::document()
+{
+ QmlComponent component(&engine, TEST_FILE("document.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ QCOMPARE(object->property("xmlTest").toBool(), true);
+
+ delete object;
+}
+
+// Test the Element DOM element
+void tst_xmlhttprequest::element()
+{
+ QmlComponent component(&engine, TEST_FILE("element.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ QCOMPARE(object->property("xmlTest").toBool(), true);
+
+ delete object;
+}
+
+// Test the Attr DOM element
+void tst_xmlhttprequest::attr()
+{
+ QmlComponent component(&engine, TEST_FILE("attr.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ QCOMPARE(object->property("xmlTest").toBool(), true);
+
+ delete object;
+}
+
+// Test the Text DOM element
+void tst_xmlhttprequest::text()
+{
+ QmlComponent component(&engine, TEST_FILE("text.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ QCOMPARE(object->property("xmlTest").toBool(), true);
+
+ delete object;
+}
+
+// Test the CDataSection DOM element
+void tst_xmlhttprequest::cdata()
+{
+ QmlComponent component(&engine, TEST_FILE("cdata.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ TRY_WAIT(object->property("dataOK").toBool() == true);
+
+ QCOMPARE(object->property("xmlTest").toBool(), true);
+
+ delete object;
+}
+
+QTEST_MAIN(tst_xmlhttprequest)
+
+#include "tst_qmlxmlhttprequest.moc"
diff --git a/tests/auto/declarative/qmlxmllistmodel/data/model.qml b/tests/auto/declarative/qmlxmllistmodel/data/model.qml
new file mode 100644
index 0000000..2cbb027
--- /dev/null
+++ b/tests/auto/declarative/qmlxmllistmodel/data/model.qml
@@ -0,0 +1,10 @@
+import Qt 4.6
+
+XmlListModel {
+ source: "model.xml"
+ query: "/Pets/Pet"
+ XmlRole { name: "name"; query: "name/string()" }
+ XmlRole { name: "type"; query: "type/string()" }
+ XmlRole { name: "age"; query: "age/number()" }
+ XmlRole { name: "size"; query: "size/string()" }
+}
diff --git a/tests/auto/declarative/qmlxmllistmodel/data/model.xml b/tests/auto/declarative/qmlxmllistmodel/data/model.xml
new file mode 100644
index 0000000..40cd6d0
--- /dev/null
+++ b/tests/auto/declarative/qmlxmllistmodel/data/model.xml
@@ -0,0 +1,54 @@
+<Pets>
+ <Pet>
+ <name>Polly</name>
+ <type>Parrot</type>
+ <age>12</age>
+ <size>Small</size>
+ </Pet>
+ <Pet>
+ <name>Penny</name>
+ <type>Turtle</type>
+ <age>4</age>
+ <size>Small</size>
+ </Pet>
+ <Pet>
+ <name>Warren</name>
+ <type>Rabbit</type>
+ <age>2</age>
+ <size>Small</size>
+ </Pet>
+ <Pet>
+ <name>Spot</name>
+ <type>Dog</type>
+ <age>9</age>
+ <size>Medium</size>
+ </Pet>
+ <Pet>
+ <name>Whiskers</name>
+ <type>Cat</type>
+ <age>2</age>
+ <size>Medium</size>
+ </Pet>
+ <Pet>
+ <name>Joey</name>
+ <type>Kangaroo</type>
+ <age>1</age>
+ </Pet>
+ <Pet>
+ <name>Kimba</name>
+ <type>Bunny</type>
+ <age>65</age>
+ <size>Large</size>
+ </Pet>
+ <Pet>
+ <name>Rover</name>
+ <type>Dog</type>
+ <size>Large</size>
+ </Pet>
+ <Pet>
+ <name>Tiny</name>
+ <type>Elephant</type>
+ <age>15</age>
+ <size>Large</size>
+ </Pet>
+</Pets>
diff --git a/tests/auto/declarative/qmlxmllistmodel/data/model2.qml b/tests/auto/declarative/qmlxmllistmodel/data/model2.qml
new file mode 100644
index 0000000..140e0ad
--- /dev/null
+++ b/tests/auto/declarative/qmlxmllistmodel/data/model2.qml
@@ -0,0 +1,11 @@
+import Qt 4.6
+
+XmlListModel {
+ source: "model.xml"
+ query: "/Pets/Pet"
+ XmlRole { name: "name"; query: "name/string()" }
+ XmlRole { name: "type"; query: "type/string()" }
+ XmlRole { name: "age"; query: "age/number()" }
+ XmlRole { name: "size"; query: "size/string()" }
+ XmlRole { name: "tricks"; query: "tricks/string()" }
+}
diff --git a/tests/auto/declarative/qmlxmllistmodel/data/recipes.qml b/tests/auto/declarative/qmlxmllistmodel/data/recipes.qml
new file mode 100644
index 0000000..13dea91
--- /dev/null
+++ b/tests/auto/declarative/qmlxmllistmodel/data/recipes.qml
@@ -0,0 +1,10 @@
+import Qt 4.6
+
+XmlListModel {
+ source: "recipes.xml"
+ query: "/recipes/recipe"
+ XmlRole { name: "title"; query: "@title/string()" }
+ XmlRole { name: "picture"; query: "picture/string()" }
+ XmlRole { name: "ingredients"; query: "ingredients/string()" }
+ XmlRole { name: "preparation"; query: "method/string()" }
+}
diff --git a/tests/auto/declarative/qmlxmllistmodel/data/recipes.xml b/tests/auto/declarative/qmlxmllistmodel/data/recipes.xml
new file mode 100644
index 0000000..d71de60
--- /dev/null
+++ b/tests/auto/declarative/qmlxmllistmodel/data/recipes.xml
@@ -0,0 +1,90 @@
+<recipes>
+ <recipe title="Pancakes">
+ <picture>content/pics/pancakes.jpg</picture>
+ <ingredients><![CDATA[<html>
+ <ul>
+ <li> 1 cup (150g) self-raising flour
+ <li> 1 tbs caster sugar
+ <li> 3/4 cup (185ml) milk
+ <li> 1 egg
+ </ul>
+ </html>
+ ]]></ingredients>
+ <method><![CDATA[<html>
+ <ol>
+ <li> Sift flour and sugar together into a bowl. Add a pinch of salt.
+ <li> Beat milk and egg together, then add to dry ingredients. Beat until smooth.
+ <li> Pour mixture into a pan on medium heat and cook until bubbles appear on the surface.
+ <li> Turn over and cook other side until golden.
+ </ol>
+ </html>
+ ]]></method>
+ </recipe>
+ <recipe title="Fruit Salad">
+ <picture>content/pics/fruit-salad.jpg</picture>
+ <ingredients><![CDATA[* Seasonal Fruit]]></ingredients>
+ <method><![CDATA[* Chop fruit and place in a bowl.]]></method>
+ </recipe>
+ <recipe title="Vegetable Soup">
+ <picture>content/pics/vegetable-soup.jpg</picture>
+ <ingredients><![CDATA[<html>
+ <ul>
+ <li> 1 onion
+ <li> 1 turnip
+ <li> 1 potato
+ <li> 1 carrot
+ <li> 1 head of celery
+ <li> 1 1/2 litres of water
+ </ul>
+ </html>
+ ]]></ingredients>
+ <method><![CDATA[<html>
+ <ol>
+ <li> Chop vegetables.
+ <li> Boil in water until vegetables soften.
+ <li> Season with salt and pepper to taste.
+ </ol>
+ </html>
+ ]]></method>
+ </recipe>
+ <recipe title="Hamburger">
+ <picture>content/pics/hamburger.jpg</picture>
+ <ingredients><![CDATA[<html>
+ <ul>
+ <li> 500g minced beef
+ <li> Seasoning
+ <li> lettuce, tomato, onion, cheese
+ <li> 1 hamburger bun for each burger
+ </ul>
+ </html>
+ ]]></ingredients>
+ <method><![CDATA[<html>
+ <ol>
+ <li> Mix the beef, together with seasoning, in a food processor.
+ <li> Shape the beef into burgers.
+ <li> Grill the burgers for about 5 mins on each side (until cooked through)
+ <li> Serve each burger on a bun with ketchup, cheese, lettuce, tomato and onion.
+ </ol>
+ </html>
+ ]]></method>
+ </recipe>
+ <recipe title="Lemonade">
+ <picture>content/pics/lemonade.jpg</picture>
+ <ingredients><![CDATA[<html>
+ <ul>
+ <li> 1 cup Lemon Juice
+ <li> 1 cup Sugar
+ <li> 6 Cups of Water (2 cups warm water, 4 cups cold water)
+ </ul>
+ </html>
+ ]]></ingredients>
+ <method><![CDATA[<html>
+ <ol>
+ <li> Pour 2 cups of warm water into a pitcher and stir in sugar until it dissolves.
+ <li> Pour in lemon juice, stir again, and add 4 cups of cold water.
+ <li> Chill or serve over ice cubes.
+ </ol>
+ </html>
+ ]]></method>
+ </recipe>
+</recipes>
diff --git a/tests/auto/declarative/qmlxmllistmodel/data/roleErrors.qml b/tests/auto/declarative/qmlxmllistmodel/data/roleErrors.qml
new file mode 100644
index 0000000..26c533f
--- /dev/null
+++ b/tests/auto/declarative/qmlxmllistmodel/data/roleErrors.qml
@@ -0,0 +1,10 @@
+import Qt 4.6
+
+XmlListModel {
+ source: "model.xml"
+ query: "/Pets/Pet"
+ XmlRole { name: "name"; query: "/name/string()" } //starts with '/'
+ XmlRole { name: "type"; query: "type" } //no type
+ XmlRole { name: "age"; query: "age/" } //ends with '/'
+ XmlRole { name: "size"; query: "size/number()" } //wrong type
+}
diff --git a/tests/auto/declarative/qmlxmllistmodel/data/unique.qml b/tests/auto/declarative/qmlxmllistmodel/data/unique.qml
new file mode 100644
index 0000000..ed0f293
--- /dev/null
+++ b/tests/auto/declarative/qmlxmllistmodel/data/unique.qml
@@ -0,0 +1,8 @@
+import Qt 4.6
+
+XmlListModel {
+ source: "model.xml"
+ query: "/Pets/Pet"
+ XmlRole { name: "name"; query: "name/string()" }
+ XmlRole { name: "name"; query: "type/string()" }
+}
diff --git a/tests/auto/declarative/qmlxmllistmodel/qmlxmllistmodel.pro b/tests/auto/declarative/qmlxmllistmodel/qmlxmllistmodel.pro
new file mode 100644
index 0000000..8e58a32
--- /dev/null
+++ b/tests/auto/declarative/qmlxmllistmodel/qmlxmllistmodel.pro
@@ -0,0 +1,11 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative gui
+contains(QT_CONFIG,xmlpatterns) {
+ QT += xmlpatterns
+ DEFINES += QTEST_XMLPATTERNS
+}
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qmlxmllistmodel.cpp
+
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/qmlxmllistmodel/tst_qmlxmllistmodel.cpp b/tests/auto/declarative/qmlxmllistmodel/tst_qmlxmllistmodel.cpp
new file mode 100644
index 0000000..966d7de
--- /dev/null
+++ b/tests/auto/declarative/qmlxmllistmodel/tst_qmlxmllistmodel.cpp
@@ -0,0 +1,203 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+
+#ifdef QTEST_XMLPATTERNS
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <private/qmlxmllistmodel_p.h>
+#include "../../../shared/util.h"
+
+class tst_qmlxmllistmodel : public QObject
+
+{
+ Q_OBJECT
+public:
+ tst_qmlxmllistmodel() {}
+
+private slots:
+ void buildModel();
+ void missingFields();
+ void cdata();
+ void attributes();
+ void roles();
+ void roleErrors();
+ void uniqueRoleNames();
+
+private:
+ QmlEngine engine;
+};
+
+void tst_qmlxmllistmodel::buildModel()
+{
+ QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/model.qml"));
+ QmlXmlListModel *listModel = qobject_cast<QmlXmlListModel*>(component.create());
+ QVERIFY(listModel != 0);
+ QTRY_COMPARE(listModel->count(), 9);
+
+ QList<int> roles;
+ roles << Qt::UserRole << Qt::UserRole + 1 << Qt::UserRole + 2 << Qt::UserRole + 3;
+ QHash<int, QVariant> data = listModel->data(3, roles);
+ QVERIFY(data.count() == 4);
+ QCOMPARE(data.value(Qt::UserRole).toString(), QLatin1String("Spot"));
+ QCOMPARE(data.value(Qt::UserRole+1).toString(), QLatin1String("Dog"));
+ QCOMPARE(data.value(Qt::UserRole+2).toInt(), 9);
+ QCOMPARE(data.value(Qt::UserRole+3).toString(), QLatin1String("Medium"));
+
+ delete listModel;
+}
+
+void tst_qmlxmllistmodel::missingFields()
+{
+ QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/model2.qml"));
+ QmlXmlListModel *listModel = qobject_cast<QmlXmlListModel*>(component.create());
+ QVERIFY(listModel != 0);
+ QTRY_COMPARE(listModel->count(), 9);
+
+ QList<int> roles;
+ roles << Qt::UserRole << Qt::UserRole + 1 << Qt::UserRole + 2 << Qt::UserRole + 3 << Qt::UserRole + 4;
+ QHash<int, QVariant> data = listModel->data(5, roles);
+ QVERIFY(data.count() == 5);
+ QCOMPARE(data.value(Qt::UserRole+3).toString(), QLatin1String(""));
+ QCOMPARE(data.value(Qt::UserRole+4).toString(), QLatin1String(""));
+
+ data = listModel->data(7, roles);
+ QVERIFY(data.count() == 5);
+ QCOMPARE(data.value(Qt::UserRole+2).toString(), QLatin1String(""));
+
+ delete listModel;
+}
+
+void tst_qmlxmllistmodel::cdata()
+{
+ QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/recipes.qml"));
+ QmlXmlListModel *listModel = qobject_cast<QmlXmlListModel*>(component.create());
+ QVERIFY(listModel != 0);
+ QTRY_COMPARE(listModel->count(), 5);
+
+ QList<int> roles;
+ roles << Qt::UserRole + 2;
+ QHash<int, QVariant> data = listModel->data(2, roles);
+ QVERIFY(data.count() == 1);
+ QVERIFY(data.value(Qt::UserRole+2).toString().startsWith(QLatin1String("<html>")));
+
+ delete listModel;
+}
+
+void tst_qmlxmllistmodel::attributes()
+{
+ QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/recipes.qml"));
+ QmlXmlListModel *listModel = qobject_cast<QmlXmlListModel*>(component.create());
+ QVERIFY(listModel != 0);
+ QTRY_COMPARE(listModel->count(), 5);
+
+ QList<int> roles;
+ roles << Qt::UserRole;
+ QHash<int, QVariant> data = listModel->data(2, roles);
+ QVERIFY(data.count() == 1);
+ QCOMPARE(data.value(Qt::UserRole).toString(), QLatin1String("Vegetable Soup"));
+
+ delete listModel;
+}
+
+void tst_qmlxmllistmodel::roles()
+{
+ QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/model.qml"));
+ QmlXmlListModel *listModel = qobject_cast<QmlXmlListModel*>(component.create());
+ QVERIFY(listModel != 0);
+ QTRY_COMPARE(listModel->count(), 9);
+
+ QList<int> roles = listModel->roles();
+ QCOMPARE(roles.count(), 4);
+ QCOMPARE(listModel->toString(roles.at(0)), QLatin1String("name"));
+ QCOMPARE(listModel->toString(roles.at(1)), QLatin1String("type"));
+ QCOMPARE(listModel->toString(roles.at(2)), QLatin1String("age"));
+ QCOMPARE(listModel->toString(roles.at(3)), QLatin1String("size"));
+
+ delete listModel;
+}
+
+void tst_qmlxmllistmodel::roleErrors()
+{
+ QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/roleErrors.qml"));
+ QTest::ignoreMessage(QtWarningMsg, QString("QML XmlRole (" + QUrl::fromLocalFile(SRCDIR "/data/roleErrors.qml").toString() + ":6:5) An XmlRole query must not start with '/'").toUtf8().constData());
+ //### make sure we receive all expected warning messages.
+ QmlXmlListModel *listModel = qobject_cast<QmlXmlListModel*>(component.create());
+ QVERIFY(listModel != 0);
+ QTRY_COMPARE(listModel->count(), 9);
+
+ QList<int> roles;
+ roles << Qt::UserRole << Qt::UserRole + 1 << Qt::UserRole + 2 << Qt::UserRole + 3;
+ QHash<int, QVariant> data = listModel->data(3, roles);
+ QVERIFY(data.count() == 4);
+
+ //### should any of these return valid values?
+ QCOMPARE(data.value(Qt::UserRole), QVariant());
+ QCOMPARE(data.value(Qt::UserRole+1), QVariant());
+ QCOMPARE(data.value(Qt::UserRole+2), QVariant());
+
+ QEXPECT_FAIL("", "QT-2456", Continue);
+ QCOMPARE(data.value(Qt::UserRole+3), QVariant());
+
+ delete listModel;
+}
+
+void tst_qmlxmllistmodel::uniqueRoleNames()
+{
+ QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/unique.qml"));
+ QTest::ignoreMessage(QtWarningMsg, QString("QML XmlRole (" + QUrl::fromLocalFile(SRCDIR "/data/unique.qml").toString() + ":7:5) \"name\" duplicates a previous role name and will be disabled.").toUtf8().constData());
+ QmlXmlListModel *listModel = qobject_cast<QmlXmlListModel*>(component.create());
+ QVERIFY(listModel != 0);
+ QTRY_COMPARE(listModel->count(), 9);
+
+ QList<int> roles = listModel->roles();
+ QCOMPARE(roles.count(), 1);
+
+ delete listModel;
+}
+
+QTEST_MAIN(tst_qmlxmllistmodel)
+
+#include "tst_qmlxmllistmodel.moc"
+
+#else
+QTEST_NOOP_MAIN
+#endif
diff --git a/tests/auto/declarative/qpacketprotocol/qpacketprotocol.pro b/tests/auto/declarative/qpacketprotocol/qpacketprotocol.pro
new file mode 100644
index 0000000..f42cecc
--- /dev/null
+++ b/tests/auto/declarative/qpacketprotocol/qpacketprotocol.pro
@@ -0,0 +1,7 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += network declarative
+macx:CONFIG -= app_bundle
+
+HEADERS += ../shared/debugutil_p.h
+SOURCES += tst_qpacketprotocol.cpp \
+ ../shared/debugutil.cpp
diff --git a/tests/auto/declarative/qpacketprotocol/tst_qpacketprotocol.cpp b/tests/auto/declarative/qpacketprotocol/tst_qpacketprotocol.cpp
new file mode 100644
index 0000000..60631d2
--- /dev/null
+++ b/tests/auto/declarative/qpacketprotocol/tst_qpacketprotocol.cpp
@@ -0,0 +1,271 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QSignalSpy>
+#include <QTimer>
+#include <QTcpSocket>
+#include <QTcpServer>
+#include <QDebug>
+#include <QBuffer>
+
+#include <private/qpacketprotocol_p.h>
+
+#include "../shared/debugutil_p.h"
+
+class tst_QPacketProtocol : public QObject
+{
+ Q_OBJECT
+
+private:
+ QTcpServer *m_server;
+ QTcpSocket *m_client;
+ QTcpSocket *m_serverConn;
+
+private slots:
+ void init();
+ void cleanup();
+
+ void maximumPacketSize();
+ void setMaximumPacketSize();
+ void setMaximumPacketSize_data();
+ void send();
+ void send_data();
+ void packetsAvailable();
+ void packetsAvailable_data();
+ void clear();
+ void read();
+ void device();
+
+ void tst_QPacket_clear();
+};
+
+void tst_QPacketProtocol::init()
+{
+ m_server = new QTcpServer(this);
+ m_serverConn = 0;
+ QVERIFY(m_server->listen(QHostAddress("127.0.0.1")));
+
+ m_client = new QTcpSocket(this);
+ m_client->connectToHost(m_server->serverAddress(), m_server->serverPort());
+
+ QVERIFY(m_client->waitForConnected());
+ QVERIFY(m_server->waitForNewConnection());
+ m_serverConn = m_server->nextPendingConnection();
+}
+
+void tst_QPacketProtocol::cleanup()
+{
+ delete m_client;
+ delete m_serverConn;
+ delete m_server;
+}
+
+void tst_QPacketProtocol::maximumPacketSize()
+{
+ QPacketProtocol p(m_client);
+ QCOMPARE(p.maximumPacketSize(), 0x7FFFFFFF);
+}
+
+void tst_QPacketProtocol::setMaximumPacketSize()
+{
+ QFETCH(qint32, size);
+ QFETCH(qint32, expected);
+
+ QPacketProtocol out(m_serverConn);
+ QCOMPARE(out.setMaximumPacketSize(size), expected);
+
+ if (size == expected) {
+ QPacketProtocol in(m_client);
+ QByteArray b;
+ b.fill('a', size + 1);
+ out.send() << b.constData();
+ QVERIFY(QmlDebugTest::waitForSignal(&in, SIGNAL(invalidPacket())));
+ }
+}
+
+void tst_QPacketProtocol::setMaximumPacketSize_data()
+{
+ QTest::addColumn<int>("size");
+ QTest::addColumn<int>("expected");
+
+ QTest::newRow("invalid") << qint32(sizeof(qint32) - 1) << qint32(0x7FFFFFFF);
+ QTest::newRow("still invalid") << qint32(sizeof(qint32)) << qint32(0x7FFFFFFF);
+ QTest::newRow("valid") << qint32(sizeof(qint32) + 1) << qint32(sizeof(qint32) + 1);
+}
+
+void tst_QPacketProtocol::send()
+{
+ QFETCH(bool, useAutoSend);
+
+ QPacketProtocol in(m_client);
+ QPacketProtocol out(m_serverConn);
+
+ QByteArray ba;
+ int num;
+
+ if (useAutoSend) {
+ out.send() << "Hello world" << 123;
+ } else {
+ QPacket packet;
+ packet << "Hello world" << 123;
+ out.send(packet);
+ }
+
+ QVERIFY(QmlDebugTest::waitForSignal(&in, SIGNAL(readyRead())));
+
+ QPacket p = in.read();
+ p >> ba >> num;
+ QCOMPARE(ba, QByteArray("Hello world") + '\0');
+ QCOMPARE(num, 123);
+}
+
+void tst_QPacketProtocol::send_data()
+{
+ QTest::addColumn<bool>("useAutoSend");
+
+ QTest::newRow("auto send") << true;
+ QTest::newRow("no auto send") << false;
+}
+
+void tst_QPacketProtocol::packetsAvailable()
+{
+ QFETCH(int, packetCount);
+
+ QPacketProtocol out(m_client);
+ QPacketProtocol in(m_serverConn);
+
+ QCOMPARE(out.packetsAvailable(), qint64(0));
+ QCOMPARE(in.packetsAvailable(), qint64(0));
+
+ for (int i=0; i<packetCount; i++)
+ out.send() << "Hello";
+
+ QVERIFY(QmlDebugTest::waitForSignal(&in, SIGNAL(readyRead())));
+ QCOMPARE(in.packetsAvailable(), qint64(packetCount));
+}
+
+void tst_QPacketProtocol::packetsAvailable_data()
+{
+ QTest::addColumn<int>("packetCount");
+
+ QTest::newRow("1") << 1;
+ QTest::newRow("2") << 2;
+ QTest::newRow("10") << 10;
+}
+
+void tst_QPacketProtocol::clear()
+{
+ QPacketProtocol in(m_client);
+ QPacketProtocol out(m_serverConn);
+
+ out.send() << 123;
+ out.send() << 456;
+ QVERIFY(QmlDebugTest::waitForSignal(&in, SIGNAL(readyRead())));
+
+ in.clear();
+ QVERIFY(in.read().isEmpty());
+}
+
+void tst_QPacketProtocol::read()
+{
+ QPacketProtocol in(m_client);
+ QPacketProtocol out(m_serverConn);
+
+ QVERIFY(in.read().isEmpty());
+
+ out.send() << 123;
+ out.send() << 456;
+ QVERIFY(QmlDebugTest::waitForSignal(&in, SIGNAL(readyRead())));
+
+ int num;
+
+ QPacket p1 = in.read();
+ QVERIFY(!p1.isEmpty());
+ p1 >> num;
+ QCOMPARE(num, 123);
+
+ QPacket p2 = in.read();
+ QVERIFY(!p2.isEmpty());
+ p2 >> num;
+ QCOMPARE(num, 456);
+
+ QVERIFY(in.read().isEmpty());
+}
+
+void tst_QPacketProtocol::device()
+{
+ QPacketProtocol p(m_client);
+ QCOMPARE(p.device(), m_client);
+}
+
+void tst_QPacketProtocol::tst_QPacket_clear()
+{
+ QPacketProtocol protocol(m_client);
+
+ QPacket packet;
+
+ packet << "Hello world!" << 123;
+ protocol.send(packet);
+
+ packet.clear();
+ QVERIFY(packet.isEmpty());
+ packet << "Goodbyte world!" << 789;
+ protocol.send(packet);
+
+ QByteArray ba;
+ int num;
+ QPacketProtocol in(m_serverConn);
+ QVERIFY(QmlDebugTest::waitForSignal(&in, SIGNAL(readyRead())));
+
+ QPacket p1 = in.read();
+ p1 >> ba >> num;
+ QCOMPARE(ba, QByteArray("Hello world!") + '\0');
+ QCOMPARE(num, 123);
+
+ QPacket p2 = in.read();
+ p2 >> ba >> num;
+ QCOMPARE(ba, QByteArray("Goodbyte world!") + '\0');
+ QCOMPARE(num, 789);
+}
+
+QTEST_MAIN(tst_QPacketProtocol)
+
+#include "tst_qpacketprotocol.moc"
diff --git a/tests/auto/declarative/runall.sh b/tests/auto/declarative/runall.sh
new file mode 100755
index 0000000..33087a1
--- /dev/null
+++ b/tests/auto/declarative/runall.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+Xnest :7 2>/dev/null &
+sleep 1
+trap "kill $!" EXIT
+export DISPLAY=:7
+
+make -k -j1 install 2>&1 |
+ while read line
+ do
+ case "$line" in
+ make*Error) echo "$line";;
+ make*Stop) echo "$line";;
+ make*) ;;
+ */qmake*) ;;
+ */bin/moc*) ;;
+ *targ.debug*) ;;
+ g++*) ;;
+ cd*) ;;
+ PASS*) ;;
+ QDEBUG*) ;;
+ Makefile*) ;;
+ Config*) ;;
+ Totals*) ;;
+ \**) ;;
+ ./*) ;;
+ *) echo "$line"
+ esac
+ done
+
diff --git a/tests/auto/declarative/shared/debugutil.cpp b/tests/auto/declarative/shared/debugutil.cpp
new file mode 100644
index 0000000..aa0cd31
--- /dev/null
+++ b/tests/auto/declarative/shared/debugutil.cpp
@@ -0,0 +1,176 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QSignalSpy>
+#include <QEventLoop>
+#include <QTimer>
+
+#include <private/qmldebugclient_p.h>
+#include <private/qmldebugservice_p.h>
+
+#include "debugutil_p.h"
+
+bool QmlDebugTest::waitForSignal(QObject *receiver, const char *member, int timeout) {
+ QEventLoop loop;
+ QTimer timer;
+ QObject::connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
+ QObject::connect(receiver, member, &loop, SLOT(quit()));
+ timer.start(timeout);
+ loop.exec();
+ return timer.isActive();
+}
+
+
+QmlDebugTestData::QmlDebugTestData(QEventLoop *el)
+ : exitCode(-1), loop(el)
+{
+}
+
+QmlDebugTestData::~QmlDebugTestData()
+{
+ qDeleteAll(items);
+}
+
+void QmlDebugTestData::testsFinished(int code)
+{
+ exitCode = code;
+ loop->quit();
+}
+
+
+
+QmlDebugTestService::QmlDebugTestService(const QString &s, QObject *parent)
+ : QmlDebugService(s, parent), enabled(false)
+{
+}
+
+void QmlDebugTestService::messageReceived(const QByteArray &ba)
+{
+ sendMessage(ba);
+}
+
+void QmlDebugTestService::enabledChanged(bool e)
+{
+ enabled = e;
+ emit enabledStateChanged();
+}
+
+
+QmlDebugTestClient::QmlDebugTestClient(const QString &s, QmlDebugConnection *c)
+ : QmlDebugClient(s, c)
+{
+}
+
+QByteArray QmlDebugTestClient::waitForResponse()
+{
+ lastMsg.clear();
+ QmlDebugTest::waitForSignal(this, SIGNAL(serverMessage(QByteArray)));
+ if (lastMsg.isEmpty()) {
+ qWarning() << "tst_QmlDebugClient: no response from server!";
+ return QByteArray();
+ }
+ return lastMsg;
+}
+
+void QmlDebugTestClient::messageReceived(const QByteArray &ba)
+{
+ lastMsg = ba;
+ emit serverMessage(ba);
+}
+
+
+tst_QmlDebug_Thread::tst_QmlDebug_Thread(QmlDebugTestData *data, QmlTestFactory *factory)
+ : m_ready(false), m_data(data), m_factory(factory)
+{
+}
+
+void tst_QmlDebug_Thread::run()
+{
+ QTest::qWait(1000);
+
+ QmlDebugConnection conn;
+ conn.connectToHost("127.0.0.1", 3768);
+ bool ok = conn.waitForConnected(5000);
+ Q_ASSERT(ok);
+
+ while (!m_ready)
+ QTest::qWait(100);
+
+ m_data->conn = &conn;
+
+ Q_ASSERT(m_factory);
+ QObject *test = m_factory->createTest(m_data);
+ Q_ASSERT(test);
+ int code = QTest::qExec(test, QCoreApplication::arguments());
+ emit testsFinished(code);
+}
+
+
+int QmlDebugTest::runTests(QmlTestFactory *factory, const QList<QByteArray> &qml)
+{
+ qputenv("QML_DEBUG_SERVER_PORT", "3768");
+
+ QEventLoop loop;
+ QmlDebugTestData data(&loop);
+
+ tst_QmlDebug_Thread thread(&data, factory);
+ QObject::connect(&thread, SIGNAL(testsFinished(int)), &data, SLOT(testsFinished(int)));
+ thread.start();
+
+ QmlEngine engine; // blocks until client connects
+
+ foreach (const QByteArray &code, qml) {
+ QmlComponent c(&engine);
+ c.setData(code, QUrl::fromLocalFile(""));
+ Q_ASSERT(c.isReady()); // fails if bad syntax
+ data.items << qobject_cast<QmlGraphicsItem*>(c.create());
+ }
+
+ // start the test
+ data.engine = &engine;
+ thread.m_ready = true;
+
+ loop.exec();
+ thread.wait();
+
+ return data.exitCode;
+}
+
+
diff --git a/tests/auto/declarative/shared/debugutil_p.h b/tests/auto/declarative/shared/debugutil_p.h
new file mode 100644
index 0000000..313d16c
--- /dev/null
+++ b/tests/auto/declarative/shared/debugutil_p.h
@@ -0,0 +1,145 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QSignalSpy>
+#include <QEventLoop>
+#include <QPointer>
+#include <QTimer>
+#include <QThread>
+#include <QTest>
+
+#include <QtDeclarative/qmlengine.h>
+
+#include <private/qmldebugclient_p.h>
+#include <private/qmldebugservice_p.h>
+#include <private/qmlgraphicsitem_p.h>
+
+
+class QmlDebugTestData : public QObject
+{
+ Q_OBJECT
+public:
+ QmlDebugTestData(QEventLoop *el);
+
+ ~QmlDebugTestData();
+
+ QmlDebugConnection *conn;
+ QmlEngine *engine;
+
+ int exitCode;
+ QEventLoop *loop;
+
+ QList<QmlGraphicsItem *> items;
+
+public slots:
+ void testsFinished(int code);
+};
+
+
+class QmlTestFactory
+{
+public:
+ QmlTestFactory() {}
+ virtual ~QmlTestFactory() {}
+
+ virtual QObject *createTest(QmlDebugTestData *data) = 0;
+};
+
+
+namespace QmlDebugTest {
+
+ bool waitForSignal(QObject *receiver, const char *member, int timeout = 5000);
+
+ int runTests(QmlTestFactory *factory, const QList<QByteArray> &qml = QList<QByteArray>());
+}
+
+class QmlDebugTestService : public QmlDebugService
+{
+ Q_OBJECT
+public:
+ QmlDebugTestService(const QString &s, QObject *parent = 0);
+ bool enabled;
+
+signals:
+ void enabledStateChanged();
+
+protected:
+ virtual void messageReceived(const QByteArray &ba);
+
+ virtual void enabledChanged(bool e);
+};
+
+class QmlDebugTestClient : public QmlDebugClient
+{
+ Q_OBJECT
+public:
+ QmlDebugTestClient(const QString &s, QmlDebugConnection *c);
+
+ QByteArray waitForResponse();
+
+signals:
+ void serverMessage(const QByteArray &);
+
+protected:
+ virtual void messageReceived(const QByteArray &ba);
+
+private:
+ QByteArray lastMsg;
+};
+
+class tst_QmlDebug_Thread : public QThread
+{
+ Q_OBJECT
+public:
+ tst_QmlDebug_Thread(QmlDebugTestData *data, QmlTestFactory *factory);
+
+ void run();
+
+ bool m_ready;
+
+signals:
+ void testsFinished(int);
+
+private:
+ QmlDebugTestData *m_data;
+ QmlTestFactory *m_factory;
+};
+
+
diff --git a/tests/auto/declarative/shared/testhttpserver.cpp b/tests/auto/declarative/shared/testhttpserver.cpp
new file mode 100644
index 0000000..490fc95
--- /dev/null
+++ b/tests/auto/declarative/shared/testhttpserver.cpp
@@ -0,0 +1,323 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "testhttpserver.h"
+#include <QTcpSocket>
+#include <QDebug>
+#include <QFile>
+#include <QTimer>
+
+/*!
+\internal
+\class TestHTTPServer
+\brief provides a very, very basic HTTP server for testing.
+
+Inside the test case, an instance of TestHTTPServer should be created, with the
+appropriate port to listen on. The server will listen on the localhost interface.
+
+Directories to serve can then be added to server, which will be added as "roots".
+Each root can be added as a Normal, Delay or Disconnect root. Requests for files
+within a Normal root are returned immediately. Request for files within a Delay
+root are delayed for 500ms, and then served. Requests for files within a Disconnect
+directory cause the server to disconnect immediately. A request for a file that isn't
+found in any root will return a 404 error.
+
+If you have the following directory structure:
+
+\code
+disconnect/disconnectTest.qml
+files/main.qml
+files/Button.qml
+files/content/WebView.qml
+slowFiles/slowMain.qml
+\endcode
+it can be added like this:
+\code
+TestHTTPServer server(14445);
+server.serveDirectory("disconnect", TestHTTPServer::Disconnect);
+server.serveDirectory("files");
+server.serveDirectory("slowFiles", TestHTTPServer::Delay);
+\endcode
+
+The following request urls will then result in the appropriate action:
+\table
+\header \o URL \o Action
+\row \o http://localhost:14445/disconnectTest.qml \o Disconnection
+\row \o http://localhost:14445/main.qml \o main.qml returned immediately
+\row \o http://localhost:14445/Button.qml \o Button.qml returned immediately
+\row \o http://localhost:14445/content/WebView.qml \o content/WebView.qml returned immediately
+\row \o http://localhost:14445/slowMain.qml \o slowMain.qml returned after 500ms
+\endtable
+*/
+TestHTTPServer::TestHTTPServer(quint16 port)
+: m_hasFailed(false)
+{
+ QObject::connect(&server, SIGNAL(newConnection()), this, SLOT(newConnection()));
+
+ server.listen(QHostAddress::LocalHost, port);
+}
+
+bool TestHTTPServer::isValid() const
+{
+ return server.isListening();
+}
+
+bool TestHTTPServer::serveDirectory(const QString &dir, Mode mode)
+{
+ dirs.append(qMakePair(dir, mode));
+ return true;
+}
+
+/*
+ Add an alias, so that if filename is requested and does not exist,
+ alias may be returned.
+*/
+void TestHTTPServer::addAlias(const QString &filename, const QString &alias)
+{
+ aliases.insert(filename, alias);
+}
+
+void TestHTTPServer::addRedirect(const QString &filename, const QString &redirectName)
+{
+ redirects.insert(filename, redirectName);
+}
+
+bool TestHTTPServer::wait(const QUrl &expect, const QUrl &reply, const QUrl &body)
+{
+ m_hasFailed = false;
+
+ QFile expectFile(expect.toLocalFile());
+ if (!expectFile.open(QIODevice::ReadOnly)) return false;
+
+ QFile replyFile(reply.toLocalFile());
+ if (!replyFile.open(QIODevice::ReadOnly)) return false;
+
+ bodyData = QByteArray();
+ if (body.isValid()) {
+ QFile bodyFile(body.toLocalFile());
+ if (!bodyFile.open(QIODevice::ReadOnly)) return false;
+ bodyData = bodyFile.readAll();
+ }
+
+ waitData = expectFile.readAll();
+ /*
+ while (waitData.endsWith('\n'))
+ waitData = waitData.left(waitData.count() - 1);
+ */
+
+ replyData = replyFile.readAll();
+
+ if (!replyData.endsWith('\n'))
+ replyData.append("\n");
+ replyData.append("Content-length: " + QByteArray::number(bodyData.length()));
+ replyData .append("\n\n");
+
+ for (int ii = 0; ii < replyData.count(); ++ii) {
+ if (replyData.at(ii) == '\n' && (!ii || replyData.at(ii - 1) != '\r')) {
+ replyData.insert(ii, '\r');
+ ++ii;
+ }
+ }
+ replyData.append(bodyData);
+
+ return true;
+}
+
+bool TestHTTPServer::hasFailed() const
+{
+ return m_hasFailed;
+}
+
+void TestHTTPServer::newConnection()
+{
+ QTcpSocket *socket = server.nextPendingConnection();
+ if (!socket) return;
+
+ if (!dirs.isEmpty())
+ dataCache.insert(socket, QByteArray());
+
+ QObject::connect(socket, SIGNAL(disconnected()), this, SLOT(disconnected()));
+ QObject::connect(socket, SIGNAL(readyRead()), this, SLOT(readyRead()));
+}
+
+void TestHTTPServer::disconnected()
+{
+ QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());
+ if (!socket) return;
+
+ dataCache.remove(socket);
+ for (int ii = 0; ii < toSend.count(); ++ii) {
+ if (toSend.at(ii).first == socket) {
+ toSend.removeAt(ii);
+ --ii;
+ }
+ }
+ socket->deleteLater();
+}
+
+void TestHTTPServer::readyRead()
+{
+ QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());
+ if (!socket) return;
+
+ QByteArray ba = socket->readAll();
+
+ if (!dirs.isEmpty()) {
+ serveGET(socket, ba);
+ return;
+ }
+
+ if (m_hasFailed || waitData.isEmpty()) {
+ qWarning() << "TestHTTPServer: Unexpected data" << ba;
+ return;
+ }
+
+ for (int ii = 0; ii < ba.count(); ++ii) {
+ const char c = ba.at(ii);
+ if (c == '\r' && waitData.isEmpty())
+ continue;
+ else if (!waitData.isEmpty() && c == waitData.at(0))
+ waitData = waitData.mid(1);
+ else if (c == '\r')
+ continue;
+ else {
+ QByteArray data = ba.mid(ii);
+ qWarning() << "TestHTTPServer: Unexpected data" << data << "\nExpected: " << waitData;
+ m_hasFailed = true;
+ socket->disconnect();
+ return;
+ }
+ }
+
+ if (waitData.isEmpty()) {
+ socket->write(replyData);
+ socket->disconnect();
+ }
+}
+
+bool TestHTTPServer::reply(QTcpSocket *socket, const QByteArray &fileName)
+{
+ if (redirects.contains(fileName)) {
+ QByteArray response = "HTTP/1.1 302 Found\r\nContent-length: 0\r\nContent-type: text/html; charset=UTF-8\r\nLocation: " + redirects[fileName].toUtf8() + "\r\n\r\n";
+ socket->write(response);
+ return true;
+ }
+
+ for (int ii = 0; ii < dirs.count(); ++ii) {
+ QString dir = dirs.at(ii).first;
+ Mode mode = dirs.at(ii).second;
+
+ QString dirFile = dir + QLatin1String("/") + QLatin1String(fileName);
+
+ if (!QFile::exists(dirFile)) {
+ if (aliases.contains(fileName))
+ dirFile = dir + QLatin1String("/") + aliases.value(fileName);
+ }
+
+ QFile file(dirFile);
+ if (file.open(QIODevice::ReadOnly)) {
+
+ if (mode == Disconnect)
+ return true;
+
+ QByteArray data = file.readAll();
+
+ QByteArray response = "HTTP/1.0 200 OK\r\nContent-type: text/html; charset=UTF-8\r\nContent-length: ";
+ response += QByteArray::number(data.count());
+ response += "\r\n\r\n";
+ response += data;
+
+ if (mode == Delay) {
+ toSend.append(qMakePair(socket, response));
+ QTimer::singleShot(500, this, SLOT(sendOne()));
+ return false;
+ } else {
+ socket->write(response);
+ return true;
+ }
+ }
+ }
+
+
+ QByteArray response = "HTTP/1.0 404 Not found\r\nContent-type: text/html; charset=UTF-8\r\n\r\n";
+ socket->write(response);
+
+ return true;
+}
+
+void TestHTTPServer::sendOne()
+{
+ if (!toSend.isEmpty()) {
+ toSend.first().first->write(toSend.first().second);
+ toSend.first().first->close();
+ toSend.removeFirst();
+ }
+}
+
+void TestHTTPServer::serveGET(QTcpSocket *socket, const QByteArray &data)
+{
+ if (!dataCache.contains(socket))
+ return;
+
+ QByteArray total = dataCache[socket] + data;
+ dataCache[socket] = total;
+
+ if (total.contains("\n\r\n")) {
+
+ bool close = true;
+
+ if (total.startsWith("GET /")) {
+
+ int space = total.indexOf(' ', 4);
+ if (space != -1) {
+
+ QByteArray req = total.mid(5, space - 5);
+ close = reply(socket, req);
+
+ }
+ }
+ dataCache.remove(socket);
+
+ if (close)
+ socket->close();
+ }
+}
+
diff --git a/tests/auto/declarative/shared/testhttpserver.h b/tests/auto/declarative/shared/testhttpserver.h
new file mode 100644
index 0000000..178122d
--- /dev/null
+++ b/tests/auto/declarative/shared/testhttpserver.h
@@ -0,0 +1,93 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef TESTHTTPSERVER_H
+#define TESTHTTPSERVER_H
+
+#include <QObject>
+#include <QTcpServer>
+#include <QUrl>
+#include <QPair>
+
+class TestHTTPServer : public QObject
+{
+ Q_OBJECT
+public:
+ TestHTTPServer(quint16 port);
+
+ bool isValid() const;
+
+ enum Mode { Normal, Delay, Disconnect };
+ bool serveDirectory(const QString &, Mode = Normal);
+
+ bool wait(const QUrl &expect, const QUrl &reply, const QUrl &body);
+ bool hasFailed() const;
+
+ void addAlias(const QString &filename, const QString &aliasName);
+ void addRedirect(const QString &filename, const QString &redirectName);
+
+private slots:
+ void newConnection();
+ void disconnected();
+ void readyRead();
+ void sendOne();
+
+private:
+ void serveGET(QTcpSocket *, const QByteArray &);
+ bool reply(QTcpSocket *, const QByteArray &);
+
+ QList<QPair<QString, Mode> > dirs;
+ QHash<QTcpSocket *, QByteArray> dataCache;
+ QList<QPair<QTcpSocket *, QByteArray> > toSend;
+
+ QByteArray waitData;
+ QByteArray replyData;
+ QByteArray bodyData;
+ bool m_hasFailed;
+
+ QHash<QString,QString> aliases;
+ QHash<QString,QString> redirects;
+
+ QTcpServer server;
+};
+
+#endif // TESTHTTPSERVER_H
+
diff --git a/tests/auto/declarative/sql/data/README b/tests/auto/declarative/sql/data/README
new file mode 100644
index 0000000..7efca3a
--- /dev/null
+++ b/tests/auto/declarative/sql/data/README
@@ -0,0 +1,3 @@
+These tests are executed in sequence - the database persist until the end of the
+testing. This is done to better exercise the persistence of the database, since
+that is how it is used.
diff --git a/tests/auto/declarative/sql/data/changeversion.js b/tests/auto/declarative/sql/data/changeversion.js
new file mode 100644
index 0000000..680d7a6
--- /dev/null
+++ b/tests/auto/declarative/sql/data/changeversion.js
@@ -0,0 +1,53 @@
+function test() {
+ var r="transaction_not_finished";
+
+ var db = openDatabaseSync("QmlTestDB-changeversion", "", "Test database from Qt autotests", 1000000,
+ function(db) {
+ db.changeVersion("","1.0")
+ db.transaction(function(tx){
+ tx.executeSql('CREATE TABLE Greeting(salutation TEXT, salutee TEXT)');
+ })
+ });
+
+ db.transaction(function(tx){
+ tx.executeSql('INSERT INTO Greeting VALUES ("Hello", "world")');
+ tx.executeSql('INSERT INTO Greeting VALUES ("Goodbye", "cruel world")');
+ });
+
+
+ db = openDatabaseSync("QmlTestDB-changeversion", "", "Test database from Qt autotests", 1000000);
+
+ if (db.version == "1.0")
+ db.changeVersion("1.0","2.0",function(tx)
+ {
+ tx.executeSql('CREATE TABLE Utterance(type TEXT, phrase TEXT)')
+ var rs = tx.executeSql('SELECT * FROM Greeting');
+ for (var i=0; i<rs.rows.length; ++i) {
+ var type = "Greeting";
+ var phrase = rs.rows.item(i).salutation + ", " + rs.rows.item(i).salutee;
+ if (rs.rows.item(i).salutation == "Goodbye"
+ || rs.rows.item(i).salutation == "Farewell"
+ || rs.rows.item(i).salutation == "Good-bye") type = "Valediction";
+ var ins = tx.executeSql('INSERT INTO Utterance VALUES(?,?)',[type,phrase]);
+ }
+ tx.executeSql('DROP TABLE Greeting');
+ });
+ else
+ return "db.version should be 1.0, but is " + db.version;
+
+ var db = openDatabaseSync("QmlTestDB-changeversion", "2.0", "Test database from Qt autotests", 1000000);
+
+ db.transaction(function(tx){
+ var rs = tx.executeSql('SELECT * FROM Utterance');
+ r = ""
+ for (var i=0; i<rs.rows.length; ++i) {
+ r += "(" + rs.rows.item(i).type + ": " + rs.rows.item(i).phrase + ")";
+ }
+ if (r == "(Greeting: Hello, world)(Valediction: Goodbye, cruel world)")
+ r = "passed"
+ else
+ r = "WRONG DATA: " + r;
+ })
+
+ return r;
+}
diff --git a/tests/auto/declarative/sql/data/creation-a.js b/tests/auto/declarative/sql/data/creation-a.js
new file mode 100644
index 0000000..bd7d5c5
--- /dev/null
+++ b/tests/auto/declarative/sql/data/creation-a.js
@@ -0,0 +1,18 @@
+function test() {
+ var r="transaction_not_finished";
+
+ var db = openDatabaseSync("QmlTestDB-creation-a", "1.0", "Test database from Qt autotests", 1000000,
+ function(db) {
+ db.transaction(function(tx){
+ tx.executeSql('CREATE TABLE Greeting(salutation TEXT, salutee TEXT)');
+ r = "passed";
+ })
+ });
+
+ var db = openDatabaseSync("QmlTestDB-creation-a", "1.0", "Test database from Qt autotests", 1000000,
+ function(db) {
+ r = "FAILED: should have already been created";
+ });
+
+ return r;
+}
diff --git a/tests/auto/declarative/sql/data/creation.js b/tests/auto/declarative/sql/data/creation.js
new file mode 100644
index 0000000..317b4c1
--- /dev/null
+++ b/tests/auto/declarative/sql/data/creation.js
@@ -0,0 +1,14 @@
+function test() {
+ var r="transaction_not_finished";
+ var db = openDatabaseSync("QmlTestDB-creation", "1.0", "Test database from Qt autotests", 1000000);
+
+ db.transaction(
+ function(tx) {
+ tx.executeSql('CREATE TABLE IF NOT EXISTS Greeting(salutation TEXT, salutee TEXT)');
+ tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'world' ]);
+ r = "passed";
+ }
+ );
+
+ return r;
+}
diff --git a/tests/auto/declarative/sql/data/error-a.js b/tests/auto/declarative/sql/data/error-a.js
new file mode 100644
index 0000000..10a23f6
--- /dev/null
+++ b/tests/auto/declarative/sql/data/error-a.js
@@ -0,0 +1,20 @@
+function test() {
+ var db = openDatabaseSync("QmlTestDB-error-a", "1.0", "Test database from Qt autotests", 1000000);
+ var r="transaction_not_finished";
+
+ try {
+ db.transaction(
+ function(tx) {
+ var rs = tx.executeSql('SELECT * FROM NotExists');
+ r = "SHOULD NOT SUCCEED";
+ }
+ );
+ } catch (err) {
+ if (err.message == "no such table: NotExists Unable to execute statement")
+ r = "passed";
+ else
+ r = "WRONG ERROR="+err.message;
+ }
+
+ return r;
+}
diff --git a/tests/auto/declarative/sql/data/error-b.js b/tests/auto/declarative/sql/data/error-b.js
new file mode 100644
index 0000000..4dd0ecf
--- /dev/null
+++ b/tests/auto/declarative/sql/data/error-b.js
@@ -0,0 +1,13 @@
+function test() {
+ var db = openDatabaseSync("QmlTestDB-error-b", "1.0", "Test database from Qt autotests", 1000000);
+ var r="transaction_not_finished";
+
+ db.transaction(
+ function(tx) {
+ tx.executeSql('INSERT INTO Greeting VALUES("junk","junk")');
+ notexist[123] = "oops"
+ }
+ );
+
+ return r;
+}
diff --git a/tests/auto/declarative/sql/data/error-creation.js b/tests/auto/declarative/sql/data/error-creation.js
new file mode 100644
index 0000000..92245fd
--- /dev/null
+++ b/tests/auto/declarative/sql/data/error-creation.js
@@ -0,0 +1,12 @@
+function test() {
+ var r="transaction_not_finished";
+ try {
+ var db = openDatabaseSync("QmlTestDB-creation", "2.0", "Test database from Qt autotests", 1000000);
+ } catch (err) {
+ if (err.message == "SQL: database version mismatch")
+ r = "passed";
+ else
+ r = "WRONG ERROR="+err.message;
+ }
+ return r;
+}
diff --git a/tests/auto/declarative/sql/data/error-notransaction.js b/tests/auto/declarative/sql/data/error-notransaction.js
new file mode 100644
index 0000000..b9cc647
--- /dev/null
+++ b/tests/auto/declarative/sql/data/error-notransaction.js
@@ -0,0 +1,15 @@
+function test() {
+ var db = openDatabaseSync("QmlTestDB-data/error-notransaction", "1.0", "Test database from Qt autotests", 1000000);
+ var r="transaction_not_finished";
+
+ try {
+ db.transaction();
+ } catch (err) {
+ if (err.message == "transaction: missing callback")
+ r = "passed";
+ else
+ r = "WRONG ERROR="+err.message;
+ }
+
+ return r;
+}
diff --git a/tests/auto/declarative/sql/data/error-outsidetransaction.js b/tests/auto/declarative/sql/data/error-outsidetransaction.js
new file mode 100644
index 0000000..a7af3bd
--- /dev/null
+++ b/tests/auto/declarative/sql/data/error-outsidetransaction.js
@@ -0,0 +1,17 @@
+function test() {
+ var db = openDatabaseSync("QmlTestDB-data/error-notransaction", "1.0", "Test database from Qt autotests", 1000000);
+ var r="transaction_not_finished";
+ var v;
+
+ try {
+ db.transaction(function(tx) { v = tx });
+ v.executeSql("SELECT 'bad'")
+ } catch (err) {
+ if (err.message == "executeSql called outside transaction()")
+ r = "passed";
+ else
+ r = "WRONG ERROR="+err.message;
+ }
+
+ return r;
+}
diff --git a/tests/auto/declarative/sql/data/iteration-forwardonly.js b/tests/auto/declarative/sql/data/iteration-forwardonly.js
new file mode 100644
index 0000000..45947c0
--- /dev/null
+++ b/tests/auto/declarative/sql/data/iteration-forwardonly.js
@@ -0,0 +1,29 @@
+function test() {
+ var db = openDatabaseSync("QmlTestDB-iteration-forwardonly", "", "Test database from Qt autotests", 1000000);
+ var r="transaction_not_finished";
+
+ db.transaction(
+ function(tx) {
+ tx.executeSql('CREATE TABLE Greeting(salutation TEXT, salutee TEXT)');
+ tx.executeSql('INSERT INTO Greeting VALUES ("Hello", "world")');
+ tx.executeSql('INSERT INTO Greeting VALUES ("Goodbye", "cruel world")');
+ }
+ )
+
+ db.transaction(
+ function(tx) {
+ var rs = tx.executeSql('SELECT * FROM Greeting');
+ rs.forwardOnly = !rs.forwardOnly
+ var r1=""
+ for(var i = 0; i < rs.rows.length; i++)
+ r1 += rs.rows.item(i).salutation + ", " + rs.rows.item(i).salutee + ";"
+ if (r1 != "hello, world;hello, world;hello, world;hello, world;")
+ if (r1 != "Hello, world;Goodbye, cruel world;")
+ r = "SELECTED DATA WRONG: "+r1;
+ else
+ r = "passed";
+ }
+ );
+
+ return r;
+}
diff --git a/tests/auto/declarative/sql/data/iteration.js b/tests/auto/declarative/sql/data/iteration.js
new file mode 100644
index 0000000..c34cbbb
--- /dev/null
+++ b/tests/auto/declarative/sql/data/iteration.js
@@ -0,0 +1,28 @@
+function test() {
+ var db = openDatabaseSync("QmlTestDB-iteration", "", "Test database from Qt autotests", 1000000);
+ var r="transaction_not_finished";
+
+ db.transaction(
+ function(tx) {
+ tx.executeSql('CREATE TABLE Greeting(salutation TEXT, salutee TEXT)');
+ tx.executeSql('INSERT INTO Greeting VALUES ("Hello", "world")');
+ tx.executeSql('INSERT INTO Greeting VALUES ("Goodbye", "cruel world")');
+ }
+ )
+
+ db.transaction(
+ function(tx) {
+ var rs = tx.executeSql('SELECT * FROM Greeting');
+ var r1=""
+ for(var i = 0; i < rs.rows.length; i++)
+ r1 += rs.rows.item(i).salutation + ", " + rs.rows.item(i).salutee + ";"
+ if (r1 != "hello, world;hello, world;hello, world;hello, world;")
+ if (r1 != "Hello, world;Goodbye, cruel world;")
+ r = "SELECTED DATA WRONG: "+r1;
+ else
+ r = "passed";
+ }
+ );
+
+ return r;
+}
diff --git a/tests/auto/declarative/sql/data/readonly-error.js b/tests/auto/declarative/sql/data/readonly-error.js
new file mode 100644
index 0000000..69ec67f
--- /dev/null
+++ b/tests/auto/declarative/sql/data/readonly-error.js
@@ -0,0 +1,27 @@
+function test() {
+ var r="transaction_not_finished";
+ var db = openDatabaseSync("QmlTestDB-readonly-error", "1.0", "Test database from Qt autotests", 1000000);
+
+ db.transaction(
+ function(tx) {
+ tx.executeSql('CREATE TABLE IF NOT EXISTS Greeting(salutation TEXT, salutee TEXT)');
+ tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'world' ]);
+ }
+ );
+
+ try {
+ db.readTransaction(
+ function(tx) {
+ tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'world' ]);
+ r = "FAILED";
+ }
+ );
+ } catch (err) {
+ if (err.message == "Read-only Transaction")
+ r = "passed";
+ else
+ r = "WRONG ERROR="+err.message;
+ }
+
+ return r;
+}
diff --git a/tests/auto/declarative/sql/data/readonly.js b/tests/auto/declarative/sql/data/readonly.js
new file mode 100644
index 0000000..5ee862c
--- /dev/null
+++ b/tests/auto/declarative/sql/data/readonly.js
@@ -0,0 +1,24 @@
+function test() {
+ var r="transaction_not_finished";
+ var db = openDatabaseSync("QmlTestDB-readonly", "1.0", "Test database from Qt autotests", 1000000);
+
+ db.transaction(
+ function(tx) {
+ tx.executeSql('CREATE TABLE IF NOT EXISTS Greeting(salutation TEXT, salutee TEXT)');
+ tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'world' ]);
+ r = "passed";
+ }
+ );
+
+ db.readTransaction(
+ function(tx) {
+ var rs = tx.executeSql('SELECT * FROM Greeting');
+ if (rs.rows.item(0).salutation == 'hello')
+ r = "passed";
+ else
+ r = "FAILED";
+ }
+ );
+
+ return r;
+}
diff --git a/tests/auto/declarative/sql/data/reopen1.js b/tests/auto/declarative/sql/data/reopen1.js
new file mode 100644
index 0000000..c1a8157
--- /dev/null
+++ b/tests/auto/declarative/sql/data/reopen1.js
@@ -0,0 +1,14 @@
+function test() {
+ var r="transaction_not_finished";
+ var db = openDatabaseSync("QmlTestDB-reopen", "1.0", "Test database from Qt autotests", 1000000);
+
+ db.transaction(
+ function(tx) {
+ tx.executeSql('CREATE TABLE IF NOT EXISTS Greeting(salutation TEXT, salutee TEXT)');
+ tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'world' ]);
+ r = "passed";
+ }
+ );
+
+ return r;
+}
diff --git a/tests/auto/declarative/sql/data/reopen2.js b/tests/auto/declarative/sql/data/reopen2.js
new file mode 100644
index 0000000..4f7248f
--- /dev/null
+++ b/tests/auto/declarative/sql/data/reopen2.js
@@ -0,0 +1,16 @@
+function test() {
+ var r="transaction_not_finished";
+ var db = openDatabaseSync("QmlTestDB-reopen", "1.0", "Test database from Qt autotests", 1000000);
+
+ db.transaction(
+ function(tx) {
+ var rs = tx.executeSql('SELECT * FROM Greeting');
+ if (rs.rows.item(0).salutation == 'hello')
+ r = "passed";
+ else
+ r = "FAILED";
+ }
+ );
+
+ return r;
+}
diff --git a/tests/auto/declarative/sql/data/selection-bindnames.js b/tests/auto/declarative/sql/data/selection-bindnames.js
new file mode 100644
index 0000000..9786821
--- /dev/null
+++ b/tests/auto/declarative/sql/data/selection-bindnames.js
@@ -0,0 +1,26 @@
+function test() {
+ var db = openDatabaseSync("QmlTestDB-bindnames", "", "Test database from Qt autotests", 1000000);
+ var r="transaction_not_finished";
+
+ db.transaction(
+ function(tx) {
+ tx.executeSql('CREATE TABLE IF NOT EXISTS Greeting(salutation TEXT, salutee TEXT)');
+ tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'world' ]);
+ tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'goodbye', 'world' ]);
+ tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'world' ]);
+ tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'there' ]);
+ }
+ );
+
+ db.transaction(
+ function(tx) {
+ var rs = tx.executeSql('SELECT * FROM Greeting WHERE salutation=:p2 AND salutee=:p1', {':p1':'world', ':p2':'hello'});
+ if ( rs.rows.length != 2 )
+ r = "SELECT RETURNED WRONG VALUE "+rs.rows.length+rs.rows.item(0)+rs.rows.item(1)
+ else
+ r = "passed";
+ }
+ );
+
+ return r;
+}
diff --git a/tests/auto/declarative/sql/data/selection.js b/tests/auto/declarative/sql/data/selection.js
new file mode 100644
index 0000000..f116eff
--- /dev/null
+++ b/tests/auto/declarative/sql/data/selection.js
@@ -0,0 +1,26 @@
+function test() {
+ var db = openDatabaseSync("QmlTestDB-selection", "", "Test database from Qt autotests", 1000000);
+ var r="transaction_not_finished";
+
+ db.transaction(
+ function(tx) {
+ tx.executeSql('CREATE TABLE IF NOT EXISTS Greeting(salutation TEXT, salutee TEXT)');
+ tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'world' ]);
+ tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'world' ]);
+ }
+ );
+
+ db.transaction(
+ function(tx) {
+ tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'world' ]);
+ tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'world' ]);
+ var rs = tx.executeSql('SELECT * FROM Greeting');
+ if ( rs.rows.length != 4 )
+ r = "SELECT RETURNED WRONG VALUE "+rs.rows.length+rs.rows[0]+rs.rows[1]
+ else
+ r = "passed";
+ }
+ );
+
+ return r;
+}
diff --git a/tests/auto/declarative/sql/sql.pro b/tests/auto/declarative/sql/sql.pro
new file mode 100644
index 0000000..4217eac
--- /dev/null
+++ b/tests/auto/declarative/sql/sql.pro
@@ -0,0 +1,9 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+QT += sql script
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_sql.cpp
+
+# Define SRCDIR equal to test's source directory
+DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/sql/tst_sql.cpp b/tests/auto/declarative/sql/tst_sql.cpp
new file mode 100644
index 0000000..9bc667d
--- /dev/null
+++ b/tests/auto/declarative/sql/tst_sql.cpp
@@ -0,0 +1,237 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include "../../../shared/util.h"
+#include <QtDeclarative/qmlengine.h>
+#include <QtDeclarative/qmlcomponent.h>
+#include <private/qmlgraphicstext_p.h>
+#include <private/qmlengine_p.h>
+#include <QtCore/qcryptographichash.h>
+#include <QtWebKit/qwebpage.h>
+#include <QtWebKit/qwebframe.h>
+#include <QtWebKit/qwebdatabase.h>
+#include <QtWebKit/qwebsecurityorigin.h>
+#include <QtSql/qsqldatabase.h>
+#include <QtCore/qdir.h>
+#include <QtCore/qfile.h>
+
+class tst_sql : public QObject
+{
+ Q_OBJECT
+public:
+ tst_sql()
+ {
+ qApp->setApplicationName("tst_sql");
+ qApp->setOrganizationName("Nokia");
+ qApp->setOrganizationDomain("nokia.com");
+ engine = new QmlEngine;
+ }
+
+ ~tst_sql()
+ {
+ delete engine;
+ }
+
+private slots:
+ void initTestCase();
+
+ void checkDatabasePath();
+
+ void testQml_data();
+ void testQml();
+ void testQml_cleanopen_data();
+ void testQml_cleanopen();
+ void totalDatabases();
+
+ void cleanupTestCase();
+
+private:
+ QString dbDir() const;
+ QmlEngine *engine;
+};
+
+class QWebPageWithJavaScriptConsoleMessages : public QWebPage {
+public:
+ void javaScriptConsoleMessage(const QString& message, int lineNumber, const QString& sourceID)
+ {
+ qWarning() << sourceID << ":" << lineNumber << ":" << message;
+ }
+};
+
+void removeRecursive(const QString& dirname)
+{
+ QDir dir(dirname);
+ QFileInfoList entries(dir.entryInfoList(QDir::Dirs|QDir::Files|QDir::NoDotAndDotDot));
+ for (int i = 0; i < entries.count(); ++i)
+ if (entries[i].isDir())
+ removeRecursive(entries[i].filePath());
+ else
+ dir.remove(entries[i].fileName());
+ QDir().rmdir(dirname);
+}
+
+void tst_sql::initTestCase()
+{
+ removeRecursive(dbDir());
+ QDir().mkpath(dbDir());
+}
+
+void tst_sql::cleanupTestCase()
+{
+ removeRecursive(dbDir());
+}
+
+QString tst_sql::dbDir() const
+{
+ static QString tmpd = QDir::tempPath()+"/tst_sql_output-"
+ + QDateTime::currentDateTime().toString(QLatin1String("yyyyMMddhhmmss"));
+ return tmpd;
+}
+
+void tst_sql::checkDatabasePath()
+{
+ // Check default storage path (we can't use it since we don't want to mess with user's data)
+ QVERIFY(engine->offlineStoragePath().contains("tst_sql"));
+ QVERIFY(engine->offlineStoragePath().contains("OfflineStorage"));
+}
+
+static const int total_databases_created_by_tests = 12;
+void tst_sql::testQml_data()
+{
+ QTest::addColumn<QString>("jsfile"); // The input file
+
+ // Each test should use a newly named DB to avoid inter-test dependencies
+ QTest::newRow("creation") << "data/creation.js";
+ QTest::newRow("creation-a") << "data/creation-a.js";
+ QTest::newRow("creation") << "data/creation.js";
+ QTest::newRow("error-creation") << "data/error-creation.js"; // re-uses above DB
+ QTest::newRow("changeversion") << "data/changeversion.js";
+ QTest::newRow("readonly") << "data/readonly.js";
+ QTest::newRow("readonly-error") << "data/readonly-error.js";
+ QTest::newRow("selection") << "data/selection.js";
+ QTest::newRow("selection-bindnames") << "data/selection-bindnames.js";
+ QTest::newRow("iteration") << "data/iteration.js";
+ QTest::newRow("iteration-forwardonly") << "data/iteration-forwardonly.js";
+ QTest::newRow("error-a") << "data/error-a.js";
+ QTest::newRow("error-notransaction") << "data/error-notransaction.js";
+ QTest::newRow("error-outsidetransaction") << "data/error-outsidetransaction.js"; // reuse above
+ QTest::newRow("reopen1") << "data/reopen1.js";
+ QTest::newRow("reopen2") << "data/reopen2.js"; // re-uses above DB
+
+ // If you add a test, you should usually use a new database in the
+ // test - in which case increment total_databases_created_by_tests above.
+}
+
+/*
+void tst_sql::validateAgainstWebkit()
+{
+ // Validates tests against WebKit (HTML5) support.
+ //
+ QFETCH(QString, jsfile);
+ QFETCH(QString, result);
+ QFETCH(int, databases);
+
+ QFile f(jsfile);
+ QVERIFY(f.open(QIODevice::ReadOnly));
+ QString js=f.readAll();
+
+ QWebPageWithJavaScriptConsoleMessages webpage;
+ webpage.settings()->setOfflineStoragePath(dbDir());
+ webpage.settings()->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, true);
+
+ QEXPECT_FAIL("","WebKit doesn't support openDatabaseSync yet", Continue);
+ QCOMPARE(webpage.mainFrame()->evaluateJavaScript(js).toString(),result);
+
+ QTest::qWait(100); // WebKit crashes if you quit it too fast
+
+ QWebSecurityOrigin origin = webpage.mainFrame()->securityOrigin();
+ QList<QWebDatabase> dbs = origin.databases();
+ QCOMPARE(dbs.count(), databases);
+}
+*/
+
+void tst_sql::testQml()
+{
+ // Tests QML SQL Database support with tests
+ // that have been validated against Webkit.
+ //
+ QFETCH(QString, jsfile);
+
+ QString qml=
+ "import Qt 4.6\n"
+ "Text { Script { source: \""+jsfile+"\" } text: test() }";
+
+ engine->setOfflineStoragePath(dbDir());
+ QmlComponent component(engine);
+ component.setData(qml.toUtf8(), QUrl::fromLocalFile(SRCDIR "/empty.qml")); // just a file for relative local imports
+ QmlGraphicsText *text = qobject_cast<QmlGraphicsText*>(component.create());
+ QVERIFY(text != 0);
+ QCOMPARE(text->text(),QString("passed"));
+}
+
+void tst_sql::testQml_cleanopen_data()
+{
+ QTest::addColumn<QString>("jsfile"); // The input file
+ QTest::newRow("reopen1") << "data/reopen1.js";
+ QTest::newRow("reopen2") << "data/reopen2.js";
+ QTest::newRow("error-creation") << "data/error-creation.js"; // re-uses creation DB
+}
+
+void tst_sql::testQml_cleanopen()
+{
+ // Same as testQml, but clean connections between tests,
+ // making it more like the tests are running in new processes.
+ testQml();
+
+ QmlEnginePrivate::getScriptEngine(engine)->collectGarbage(); // close databases
+ foreach (QString dbname, QSqlDatabase::connectionNames()) {
+ QSqlDatabase::removeDatabase(dbname);
+ }
+}
+
+void tst_sql::totalDatabases()
+{
+ QCOMPARE(QDir(dbDir()+"/Databases").entryInfoList(QDir::Files|QDir::NoDotAndDotDot).count(), total_databases_created_by_tests*2);
+}
+
+QTEST_MAIN(tst_sql)
+
+#include "tst_sql.moc"
diff --git a/tests/auto/declarative/visual/ListView/basic1.qml b/tests/auto/declarative/visual/ListView/basic1.qml
new file mode 100644
index 0000000..3c371a6
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/basic1.qml
@@ -0,0 +1,27 @@
+import Qt 4.6
+
+Rectangle {
+ color: "blue"
+ width: 200
+ height: 300
+ id: page
+ ListView {
+ anchors.fill: parent
+ delegate: Rectangle {
+ color: "red"
+ width: 100
+ height: 100
+ Text {
+ text: name
+ }
+ }
+ model: ListModel {
+ ListElement {
+ name: "January"
+ }
+ ListElement {
+ name: "February"
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/ListView/basic2.qml b/tests/auto/declarative/visual/ListView/basic2.qml
new file mode 100644
index 0000000..bdba65e
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/basic2.qml
@@ -0,0 +1,31 @@
+import Qt 4.6
+
+Rectangle {
+ color: "blue"
+ width: 200
+ height: 300
+ id: page
+ Component {
+ id: delegate
+ Rectangle {
+ color: "red"
+ width: 100
+ height: 100
+ Text {
+ text: name
+ }
+ }
+ }
+ ListView {
+ anchors.fill: parent
+ delegate: delegate
+ model: ListModel {
+ ListElement {
+ name: "January"
+ }
+ ListElement {
+ name: "February"
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/ListView/basic3.qml b/tests/auto/declarative/visual/ListView/basic3.qml
new file mode 100644
index 0000000..05ac358
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/basic3.qml
@@ -0,0 +1,29 @@
+import Qt 4.6
+
+Rectangle {
+ color: "blue"
+ width: 200
+ height: 300
+ id: page
+ Listmodel {
+ id: model
+ ListElement {
+ name: "January"
+ }
+ ListElement {
+ name: "February"
+ }
+ }
+ ListView {
+ anchors.fill: parent
+ model: model
+ delegate: Rectangle {
+ color: "red"
+ width: 100
+ height: 100
+ Text {
+ text: name
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/ListView/basic4.qml b/tests/auto/declarative/visual/ListView/basic4.qml
new file mode 100644
index 0000000..3628bd3
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/basic4.qml
@@ -0,0 +1,33 @@
+import Qt 4.6
+
+Rectangle {
+ color: "blue"
+ width: 200
+ height: 300
+ id: page
+ Listmodel {
+ id: model
+ ListElement {
+ name: "January"
+ }
+ ListElement {
+ name: "February"
+ }
+ }
+ Component {
+ id: delegate
+ Rectangle {
+ color: "red"
+ width: 100
+ height: 100
+ Text {
+ text: name
+ }
+ }
+ }
+ ListView {
+ anchors.fill: parent
+ model: model
+ delegate: delegate
+ }
+}
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/basic1.qml b/tests/auto/declarative/visual/ListView/data-MAC/basic1.qml
new file mode 100644
index 0000000..83b700d
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/basic1.qml
@@ -0,0 +1,159 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 32
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 48
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 64
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 80
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 96
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 112
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 128
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 144
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 160
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 176
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 192
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 208
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 224
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 240
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 256
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 272
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 288
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 304
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 320
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 336
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 352
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 368
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 384
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 400
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 416
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 432
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 448
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 464
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 480
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 496
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 512
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 528
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 544
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 560
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 576
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+}
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/basic2.qml b/tests/auto/declarative/visual/ListView/data-MAC/basic2.qml
new file mode 100644
index 0000000..1483512
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/basic2.qml
@@ -0,0 +1,187 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 32
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 48
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 64
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 80
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 96
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 112
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 128
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 144
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 160
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 176
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 192
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 208
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 224
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 240
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 256
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 272
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 288
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 304
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 320
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 336
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 352
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 368
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 384
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 400
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 416
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 432
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 448
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 464
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 480
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 496
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 512
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 528
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 544
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 560
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 576
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 592
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 608
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 624
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 640
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 656
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 672
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 688
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+}
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/basic3.qml b/tests/auto/declarative/visual/ListView/data-MAC/basic3.qml
new file mode 100644
index 0000000..bf68998
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/basic3.qml
@@ -0,0 +1,147 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 32
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 48
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 64
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 80
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 96
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 112
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 128
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 144
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 160
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 176
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 192
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 208
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 224
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 240
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 256
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 272
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 288
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 304
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 320
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 336
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 352
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 368
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 384
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 400
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 416
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 432
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 448
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 464
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 480
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 496
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 512
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 528
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+}
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/basic4.qml b/tests/auto/declarative/visual/ListView/data-MAC/basic4.qml
new file mode 100644
index 0000000..4aa9ab6
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/basic4.qml
@@ -0,0 +1,171 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 32
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 48
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 64
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 80
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 96
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 112
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 128
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 144
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 160
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 176
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 192
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 208
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 224
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 240
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 256
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 272
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 288
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 304
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 320
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 336
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 352
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 368
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 384
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 400
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 416
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 432
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 448
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 464
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 480
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 496
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 512
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 528
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 544
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 560
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 576
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 592
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 608
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+ Frame {
+ msec: 624
+ hash: "895c70434a24da42144e60e6d8dcf323"
+ }
+}
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/itemlist.0.png b/tests/auto/declarative/visual/ListView/data-MAC/itemlist.0.png
new file mode 100644
index 0000000..13b280c
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/itemlist.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/itemlist.1.png b/tests/auto/declarative/visual/ListView/data-MAC/itemlist.1.png
new file mode 100644
index 0000000..402872b
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/itemlist.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/itemlist.2.png b/tests/auto/declarative/visual/ListView/data-MAC/itemlist.2.png
new file mode 100644
index 0000000..afd0830
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/itemlist.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/itemlist.3.png b/tests/auto/declarative/visual/ListView/data-MAC/itemlist.3.png
new file mode 100644
index 0000000..7c15f61
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/itemlist.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/itemlist.4.png b/tests/auto/declarative/visual/ListView/data-MAC/itemlist.4.png
new file mode 100644
index 0000000..afd0830
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/itemlist.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/itemlist.5.png b/tests/auto/declarative/visual/ListView/data-MAC/itemlist.5.png
new file mode 100644
index 0000000..fddf1cb
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/itemlist.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/itemlist.6.png b/tests/auto/declarative/visual/ListView/data-MAC/itemlist.6.png
new file mode 100644
index 0000000..13b280c
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/itemlist.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/itemlist.qml b/tests/auto/declarative/visual/ListView/data-MAC/itemlist.qml
new file mode 100644
index 0000000..073749f
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/itemlist.qml
@@ -0,0 +1,2203 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 32
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 48
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 64
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 80
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 96
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 112
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 128
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 144
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 160
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 176
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 192
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 208
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 224
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 240
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 256
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 272
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 288
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 304
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 320
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 336
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 352
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 368
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 384
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 400
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 416
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 432
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 448
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 464
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 480
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 496
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 512
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 528
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 544
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 560
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 576
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 592
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 608
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 624
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 640
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 656
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 672
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 688
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 704
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 720
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 736
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 752
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 768
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 784
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 800
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 816
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 832
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 848
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 864
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 880
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 896
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 912
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 928
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 944
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 960
+ image: "itemlist.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 992
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1008
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1024
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1040
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1056
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1072
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1088
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1104
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1120
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1136
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1152
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1168
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1184
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1200
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1216
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1232
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1248
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1264
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1280
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1296
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1312
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1328
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1344
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1360
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1376
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1392
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1408
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1424
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1440
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1456
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1472
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1488
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1504
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1520
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1536
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1552
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1568
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1584
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1600
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1616
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1632
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1648
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 192; y: 111
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1664
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 191; y: 111
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1680
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 190; y: 112
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 187; y: 113
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1696
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 184; y: 113
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 180; y: 113
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1712
+ hash: "a68b1bc6c2963ee92c3a45f500667b3b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 174; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 167; y: 115
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1728
+ hash: "7cda93e59466b3348e7ffe3895f89e86"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 160; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1744
+ hash: "06e0008c78e919f7270402938d9d764b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 140; y: 121
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 132; y: 122
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1760
+ hash: "9d8da9199efebb95f56e5d4ebc9a585e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 114; y: 126
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 98; y: 132
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1776
+ hash: "54a60a4279911ba4a8a5741bcadfa783"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 91; y: 132
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 91; y: 132
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1792
+ hash: "a1a19370a1a8ed78e475f0d0eb12311c"
+ }
+ Frame {
+ msec: 1808
+ hash: "196a3b127cf7065614c34856bf8d8bca"
+ }
+ Frame {
+ msec: 1824
+ hash: "5fbefbd7c7be4374382cc4c8b86ac78a"
+ }
+ Frame {
+ msec: 1840
+ hash: "d6a544c622e504c1b931e1a8a1310a6e"
+ }
+ Frame {
+ msec: 1856
+ hash: "20e76f0eb4ec5f691999faf8ad313370"
+ }
+ Frame {
+ msec: 1872
+ hash: "7f84a3545907c754ae8a6a30ef61c98d"
+ }
+ Frame {
+ msec: 1888
+ hash: "b544901eae32903ad054e8cdfed715eb"
+ }
+ Frame {
+ msec: 1904
+ hash: "a010ed1e3312f4ca9f429b7e32cdcef9"
+ }
+ Frame {
+ msec: 1920
+ image: "itemlist.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "93a731dc6f71b6ff5400bf74c87e6c46"
+ }
+ Frame {
+ msec: 1952
+ hash: "c73f63d1a024ba956e693487b3ccc761"
+ }
+ Frame {
+ msec: 1968
+ hash: "539d3d00fce2d0128cd697d86d237fe7"
+ }
+ Frame {
+ msec: 1984
+ hash: "52752d7d6f2d0e085f7132313907b72b"
+ }
+ Frame {
+ msec: 2000
+ hash: "f46dd5803a6075e979e0fc733d503bfb"
+ }
+ Frame {
+ msec: 2016
+ hash: "b8734698a6bad00ecf019f85328c2c21"
+ }
+ Frame {
+ msec: 2032
+ hash: "1cfc499ca756023430cc5b2fa95a599d"
+ }
+ Frame {
+ msec: 2048
+ hash: "63a816548837c19f8f0494c137fc0174"
+ }
+ Frame {
+ msec: 2064
+ hash: "1bce9b85235e9a1a472c079dfec70ec5"
+ }
+ Frame {
+ msec: 2080
+ hash: "6677863e7f74c12648409883f73adbe2"
+ }
+ Frame {
+ msec: 2096
+ hash: "98e707a3e39a5f7bd4a101c2ed83535c"
+ }
+ Frame {
+ msec: 2112
+ hash: "c1f6d8842d14a9394d4b7797314f50e8"
+ }
+ Frame {
+ msec: 2128
+ hash: "579758b477bcd2112b305a5aac7df338"
+ }
+ Frame {
+ msec: 2144
+ hash: "4a7bb81090db246db53e2dbc56f710ea"
+ }
+ Frame {
+ msec: 2160
+ hash: "074995cdd8a70817d1c8a7bb0ad4c542"
+ }
+ Frame {
+ msec: 2176
+ hash: "bd8d7bda4d2e9ad1fba2895d568f36cc"
+ }
+ Frame {
+ msec: 2192
+ hash: "40cce3d2d80ac470af44fc334cec1d5b"
+ }
+ Frame {
+ msec: 2208
+ hash: "15cbc226b032d5a97199735ea7a1408b"
+ }
+ Frame {
+ msec: 2224
+ hash: "12b296aea9b058a5402d0d0a620f8edc"
+ }
+ Frame {
+ msec: 2240
+ hash: "6ffd2b79cf0e941a59e74bc6f9025bcb"
+ }
+ Frame {
+ msec: 2256
+ hash: "589a58ef76ea709dc8d80390c9044f99"
+ }
+ Frame {
+ msec: 2272
+ hash: "c009924bfa30153f22ab168b539494e9"
+ }
+ Frame {
+ msec: 2288
+ hash: "4b83674a7c2daa68d735901ad40be2bd"
+ }
+ Frame {
+ msec: 2304
+ hash: "0525908c0302ada989e28990bac3f2ca"
+ }
+ Frame {
+ msec: 2320
+ hash: "89eb13976ba3ba4413cafeb0cc91c01b"
+ }
+ Frame {
+ msec: 2336
+ hash: "75c1295ef99680784b2e11fb88fa1423"
+ }
+ Frame {
+ msec: 2352
+ hash: "93d89165cf6a97c76ae6e7f75678a3cd"
+ }
+ Frame {
+ msec: 2368
+ hash: "53064c1938f08a55603a99b0db225174"
+ }
+ Frame {
+ msec: 2384
+ hash: "31db5684466c0c32128a9a8c7b1835e1"
+ }
+ Frame {
+ msec: 2400
+ hash: "99d9e58697736198e0a00443d237e85b"
+ }
+ Frame {
+ msec: 2416
+ hash: "6c1e860aef983367365d53f5849ad441"
+ }
+ Frame {
+ msec: 2432
+ hash: "6c1e860aef983367365d53f5849ad441"
+ }
+ Frame {
+ msec: 2448
+ hash: "6c1e860aef983367365d53f5849ad441"
+ }
+ Frame {
+ msec: 2464
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2480
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2496
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2512
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2528
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2544
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2560
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2576
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2592
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2608
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2624
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2640
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2656
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2672
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2688
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2704
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2720
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2736
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2752
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2768
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2784
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2800
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2816
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2832
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2848
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2864
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 181; y: 104
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2880
+ image: "itemlist.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 179; y: 105
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 177; y: 106
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2912
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 174; y: 108
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 170; y: 110
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2928
+ hash: "5bb06b4e74532ba5bc8c7bc38bf77d7f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 166; y: 112
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 160; y: 115
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2944
+ hash: "b10a6206830a876017799ef2fcf61b1a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 154; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 140; y: 123
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2960
+ hash: "b2e24759ba10afd6cff90f4b1e04b496"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 124; y: 127
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 124; y: 127
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2976
+ hash: "ccbcd6f45cb529c2db71504c0f69d73e"
+ }
+ Frame {
+ msec: 2992
+ hash: "7b31c6d5931677f1aa1e8c7d48a4ff22"
+ }
+ Frame {
+ msec: 3008
+ hash: "c52f691a0a6cf155118bdfea2dfea623"
+ }
+ Frame {
+ msec: 3024
+ hash: "dd639d1df3d4a9b8f06718def63d588f"
+ }
+ Frame {
+ msec: 3040
+ hash: "39d767b09a648ef6295cec2848f9226f"
+ }
+ Frame {
+ msec: 3056
+ hash: "5dd46d5f386431e7b13348ac9a9630ed"
+ }
+ Frame {
+ msec: 3072
+ hash: "0354e5183b0e66e7ba146d292c559df4"
+ }
+ Frame {
+ msec: 3088
+ hash: "984aa6d7075e24de429e05b1b0eda94a"
+ }
+ Frame {
+ msec: 3104
+ hash: "1af58a2f44f1f613712d4df85e38356d"
+ }
+ Frame {
+ msec: 3120
+ hash: "6e4085e7f1fee724d78808753f04b471"
+ }
+ Frame {
+ msec: 3136
+ hash: "73a019ef9057639d631cd99a431b3f3b"
+ }
+ Frame {
+ msec: 3152
+ hash: "c9414a2e655a90dfdcb6fb288b4ba0ca"
+ }
+ Frame {
+ msec: 3168
+ hash: "3f4c24f7ac89da982af22032309637fb"
+ }
+ Frame {
+ msec: 3184
+ hash: "a50e6ada8f73a257657f4348ceaffcfd"
+ }
+ Frame {
+ msec: 3200
+ hash: "a67bf40d09259bbd079c12ae4f49150f"
+ }
+ Frame {
+ msec: 3216
+ hash: "a2fc512b7c234a9d0b2c1a83387a8a46"
+ }
+ Frame {
+ msec: 3232
+ hash: "85090683ce9a3c9833b1cb0b3df076ee"
+ }
+ Frame {
+ msec: 3248
+ hash: "275f3594a0e2cc4b6717f9f336e7e1b6"
+ }
+ Frame {
+ msec: 3264
+ hash: "2473eb11f7b65a784a2b166114026488"
+ }
+ Frame {
+ msec: 3280
+ hash: "4865c30dc45fbf5ca82047b77eca0912"
+ }
+ Frame {
+ msec: 3296
+ hash: "54de88bca395449fbaea2c090c7a5d91"
+ }
+ Frame {
+ msec: 3312
+ hash: "833f9295cf9a34934f001eac48551b59"
+ }
+ Frame {
+ msec: 3328
+ hash: "5bf565f57ababa7380faeee94add91ca"
+ }
+ Frame {
+ msec: 3344
+ hash: "6325578867f1eb3b2d47ed40b017b571"
+ }
+ Frame {
+ msec: 3360
+ hash: "046a6114176b3a3206b7a2acd6e30b41"
+ }
+ Frame {
+ msec: 3376
+ hash: "f8d4120a17f28c2d1d9c4be959098058"
+ }
+ Frame {
+ msec: 3392
+ hash: "71356d2e48aad2900784ea6bc1a3d908"
+ }
+ Frame {
+ msec: 3408
+ hash: "b84ad460fb81fdc4049abe8f3ff180bb"
+ }
+ Frame {
+ msec: 3424
+ hash: "0354239f5eaea23474d9f81385392a8a"
+ }
+ Frame {
+ msec: 3440
+ hash: "8ef0eef3393e07ae7605c865a95edc30"
+ }
+ Frame {
+ msec: 3456
+ hash: "5b8b384cc8e3faf4310015e19b3eb487"
+ }
+ Frame {
+ msec: 3472
+ hash: "77c18ac7dfff2a4e516915e3e3df0717"
+ }
+ Frame {
+ msec: 3488
+ hash: "c1d3264384c26345eb8100de829309ca"
+ }
+ Frame {
+ msec: 3504
+ hash: "6b21f71d0bedef4bbcb445a13f61e7a3"
+ }
+ Frame {
+ msec: 3520
+ hash: "f619097356671f6eb54d3b1c481e709d"
+ }
+ Frame {
+ msec: 3536
+ hash: "e56e3a90da446e0c482cb93717f6aacc"
+ }
+ Frame {
+ msec: 3552
+ hash: "aa94ebdbb4b8423aff28c95daff0baf5"
+ }
+ Frame {
+ msec: 3568
+ hash: "e1744d9cacd1a2c96af4cfdd5c486995"
+ }
+ Frame {
+ msec: 3584
+ hash: "7f19ea52e9e41a3b1bd90bb2a144d305"
+ }
+ Frame {
+ msec: 3600
+ hash: "7f19ea52e9e41a3b1bd90bb2a144d305"
+ }
+ Frame {
+ msec: 3616
+ hash: "7f19ea52e9e41a3b1bd90bb2a144d305"
+ }
+ Frame {
+ msec: 3632
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3648
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3664
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3680
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3696
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3712
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3728
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3744
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3760
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3776
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3792
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3808
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3824
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3840
+ image: "itemlist.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3872
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3888
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3904
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3920
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3936
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3952
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3968
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3984
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 4000
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 4016
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 4032
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 4048
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 4064
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 4080
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 4096
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 31; y: 137
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4112
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 32; y: 137
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4128
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 33; y: 136
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 36; y: 135
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4144
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 40; y: 134
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 46; y: 132
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4160
+ hash: "c2c9c284b185a89faf4ddb5a7867f449"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 64; y: 130
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4176
+ hash: "de1c18aeda5d2fbd6dad4554c78617bd"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 86; y: 126
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 110; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 110; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4192
+ hash: "a67bf40d09259bbd079c12ae4f49150f"
+ }
+ Frame {
+ msec: 4208
+ hash: "94514668dafbe41c5890a578efd6dea4"
+ }
+ Frame {
+ msec: 4224
+ hash: "2e97a74eb9ddb1c9613c89e2d78db018"
+ }
+ Frame {
+ msec: 4240
+ hash: "4b5368f0d86bffeb6bd31b58aec88650"
+ }
+ Frame {
+ msec: 4256
+ hash: "b459bde7bb4ce51e6ecdab58f64fcbb9"
+ }
+ Frame {
+ msec: 4272
+ hash: "7bac8cc3ec64c9ad1c0da282e38c953e"
+ }
+ Frame {
+ msec: 4288
+ hash: "a73a58c3d7a757547740a2a161f4c756"
+ }
+ Frame {
+ msec: 4304
+ hash: "b35edcb1fa3568a3e770ab2364b82e75"
+ }
+ Frame {
+ msec: 4320
+ hash: "d6c863ef57c5e5cb04cdac72f920db0b"
+ }
+ Frame {
+ msec: 4336
+ hash: "0db5e4588ff851918b07796f0cf07382"
+ }
+ Frame {
+ msec: 4352
+ hash: "71ec8c363ca6a6f7556afb70faccffe6"
+ }
+ Frame {
+ msec: 4368
+ hash: "18d026e9c965ada1db67c643576d2a80"
+ }
+ Frame {
+ msec: 4384
+ hash: "69f71c22dff981a4da8ec1edcf90e79f"
+ }
+ Frame {
+ msec: 4400
+ hash: "680460f5e4d9e649931601041af046b2"
+ }
+ Frame {
+ msec: 4416
+ hash: "3028763fd15de2607b20b1331b904a4a"
+ }
+ Frame {
+ msec: 4432
+ hash: "333eb60e217fe1ea7469eab52ac461f1"
+ }
+ Frame {
+ msec: 4448
+ hash: "ccbcd6f45cb529c2db71504c0f69d73e"
+ }
+ Frame {
+ msec: 4464
+ hash: "3445df9b41a0a3e74738cbf328ab7d5c"
+ }
+ Frame {
+ msec: 4480
+ hash: "bd2c072558479e9de7a97207e58cc57f"
+ }
+ Frame {
+ msec: 4496
+ hash: "3d34b0b24a30eda93377dcb4585afed8"
+ }
+ Frame {
+ msec: 4512
+ hash: "d3045703863b0c5a327b9355c23d69f2"
+ }
+ Frame {
+ msec: 4528
+ hash: "2f2eb55f693415b840a317211b250e9f"
+ }
+ Frame {
+ msec: 4544
+ hash: "791b9ca7d47a3343474c30a35e336d4b"
+ }
+ Frame {
+ msec: 4560
+ hash: "73a0c02ebad6d3d5f939d9a00dd898bf"
+ }
+ Frame {
+ msec: 4576
+ hash: "d5c11135d586711b12f236430a2c2795"
+ }
+ Frame {
+ msec: 4592
+ hash: "34f9ea214fe714ff4e994f715ea6ea39"
+ }
+ Frame {
+ msec: 4608
+ hash: "8e49afa00983b156b818533923fb6edd"
+ }
+ Frame {
+ msec: 4624
+ hash: "e7e7bef17cee92eca9191fd734d7a577"
+ }
+ Frame {
+ msec: 4640
+ hash: "e407f6ed7cb3c130365ab5515d6308c0"
+ }
+ Frame {
+ msec: 4656
+ hash: "5bb06b4e74532ba5bc8c7bc38bf77d7f"
+ }
+ Frame {
+ msec: 4672
+ hash: "0ad7411316031e22034c14e81ca3a806"
+ }
+ Frame {
+ msec: 4688
+ hash: "dd81d7a9b48c922b4c42cba1b5f2b9d7"
+ }
+ Frame {
+ msec: 4704
+ hash: "32bef6f5005ad94e29ff59165958fbdc"
+ }
+ Frame {
+ msec: 4720
+ hash: "87758dd311f91193bf1e3536c2f58525"
+ }
+ Frame {
+ msec: 4736
+ hash: "015be92a4ff4e735fcc3cbc7a8b9d763"
+ }
+ Frame {
+ msec: 4752
+ hash: "d4c34ed49317c6692d71681fcd9842b6"
+ }
+ Frame {
+ msec: 4768
+ hash: "abaa235bb946a8abaddd52981d632c2d"
+ }
+ Frame {
+ msec: 4784
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4800
+ image: "itemlist.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4832
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4848
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4864
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4880
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4896
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4912
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4928
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4944
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4960
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4976
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4992
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5008
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5024
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5040
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5056
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5072
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5088
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5104
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5120
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5136
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5152
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5168
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5184
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5200
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5216
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5232
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 17; y: 120
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5248
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 19; y: 120
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 21; y: 120
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5264
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 24; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 28; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5280
+ hash: "95b380c9ab6f8db7b822faf023d94546"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 35; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 44; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5296
+ hash: "bb79e53556698c62ec30c75be9f6b7d7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 70; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 96; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 96; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5312
+ hash: "285cc2f0df1f59f25a0135560ab6edf2"
+ }
+ Frame {
+ msec: 5328
+ hash: "93a731dc6f71b6ff5400bf74c87e6c46"
+ }
+ Frame {
+ msec: 5344
+ hash: "eb555741ab128a50de5a18a454f2e639"
+ }
+ Frame {
+ msec: 5360
+ hash: "5dbe6cf898c1e37fcaacecfcf57b2194"
+ }
+ Frame {
+ msec: 5376
+ hash: "e7795610115593e78bb32f7bcc0ae2eb"
+ }
+ Frame {
+ msec: 5392
+ hash: "20e76f0eb4ec5f691999faf8ad313370"
+ }
+ Frame {
+ msec: 5408
+ hash: "d6a544c622e504c1b931e1a8a1310a6e"
+ }
+ Frame {
+ msec: 5424
+ hash: "e7a3a21feed244c5b1c710a9254c15f0"
+ }
+ Frame {
+ msec: 5440
+ hash: "5a4b1aca24f121d1373646e9d80b86fd"
+ }
+ Frame {
+ msec: 5456
+ hash: "331d2ec7021655c86aa64e47718a1088"
+ }
+ Frame {
+ msec: 5472
+ hash: "92096bc872e7395aa5b75c44646a0b60"
+ }
+ Frame {
+ msec: 5488
+ hash: "0d9aa6cee4d21488cbb5153f8f3ed593"
+ }
+ Frame {
+ msec: 5504
+ hash: "c1b943d43701605563fffffcb75f9fa7"
+ }
+ Frame {
+ msec: 5520
+ hash: "1b680025d5ad1ddd8f8d5f570ba73e71"
+ }
+ Frame {
+ msec: 5536
+ hash: "5539a3b9f60ea747c10ed8328b467cbf"
+ }
+ Frame {
+ msec: 5552
+ hash: "0a1317bcb606cd3488c5b14ee5d96585"
+ }
+ Frame {
+ msec: 5568
+ hash: "8844af68b11db7d92c69804c7371a746"
+ }
+ Frame {
+ msec: 5584
+ hash: "28d7fd127739c6e3b8488651b725c802"
+ }
+ Frame {
+ msec: 5600
+ hash: "0cf1a7d958a96aa2768995dddc5ccc09"
+ }
+ Frame {
+ msec: 5616
+ hash: "64b902fe7ab4d89ef0c7b760974e3488"
+ }
+ Frame {
+ msec: 5632
+ hash: "aba11c597eba550fc1eaddbf554057f6"
+ }
+ Frame {
+ msec: 5648
+ hash: "1bacaa3bb9dc3cac9ffc7491cb4dc1a5"
+ }
+ Frame {
+ msec: 5664
+ hash: "0ba8b582234d9f0c198c0c9e18e1cb02"
+ }
+ Frame {
+ msec: 5680
+ hash: "f66eaf2b5c3529987c0d9d005351ed73"
+ }
+ Frame {
+ msec: 5696
+ hash: "75b0bb720fa4c77da3783b3ff31c2fae"
+ }
+ Frame {
+ msec: 5712
+ hash: "345b235bb7f13409378e5c0c370f2a41"
+ }
+ Frame {
+ msec: 5728
+ hash: "83b7e902dce4e0fdc4ef5d629188c23c"
+ }
+ Frame {
+ msec: 5744
+ hash: "04b9041c6f10969889d92e94785c7e88"
+ }
+ Frame {
+ msec: 5760
+ image: "itemlist.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "4f3a902addc34ecdaf390e2427cc52e7"
+ }
+ Frame {
+ msec: 5792
+ hash: "68d443f16c16821ffc9ca68b17c76034"
+ }
+ Frame {
+ msec: 5808
+ hash: "9d25adc77befa761ee376a9b43595b5e"
+ }
+ Frame {
+ msec: 5824
+ hash: "a68b1bc6c2963ee92c3a45f500667b3b"
+ }
+ Frame {
+ msec: 5840
+ hash: "d5268cd58c222451d48038e715e83802"
+ }
+ Frame {
+ msec: 5856
+ hash: "f37d461541a8ec7a4161b18748de6aea"
+ }
+ Frame {
+ msec: 5872
+ hash: "805319ac7ca842feb3649e92f8b5b72f"
+ }
+ Frame {
+ msec: 5888
+ hash: "73124472a05080891d4948d8ca273f8c"
+ }
+ Frame {
+ msec: 5904
+ hash: "b6e433a23282a50db2e165a2447ba3f6"
+ }
+ Frame {
+ msec: 5920
+ hash: "fd8d3f5688b1806998c6087e18c6c730"
+ }
+ Frame {
+ msec: 5936
+ hash: "f132dd459950ef2d18aa93ca950d0692"
+ }
+ Frame {
+ msec: 5952
+ hash: "ade5beb259b5277c333ca806fc9bdbec"
+ }
+ Frame {
+ msec: 5968
+ hash: "ade5beb259b5277c333ca806fc9bdbec"
+ }
+ Frame {
+ msec: 5984
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6000
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6016
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6032
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6048
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6064
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6080
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6096
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6112
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6128
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6144
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6160
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6176
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6192
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6208
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6224
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6240
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6256
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6272
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6288
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6304
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6320
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6336
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6352
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6368
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6384
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6400
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6416
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6432
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6448
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6464
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6480
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6496
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6512
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6528
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6544
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6560
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6576
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6592
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6608
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6624
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6640
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6656
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6672
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6688
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6704
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6720
+ image: "itemlist.6.png"
+ }
+ Frame {
+ msec: 6736
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6752
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6768
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6784
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6800
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6816
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6832
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6848
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6864
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6880
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6896
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6912
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6928
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6944
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6960
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6976
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6992
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7008
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7024
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7040
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7056
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7072
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7088
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7104
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7120
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7136
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7152
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7168
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7184
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7200
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7216
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7232
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7248
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7264
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7280
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7296
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7312
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+}
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/listview.0.png b/tests/auto/declarative/visual/ListView/data-MAC/listview.0.png
new file mode 100644
index 0000000..a1ab987
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/listview.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/listview.1.png b/tests/auto/declarative/visual/ListView/data-MAC/listview.1.png
new file mode 100644
index 0000000..a1ab987
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/listview.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/listview.10.png b/tests/auto/declarative/visual/ListView/data-MAC/listview.10.png
new file mode 100644
index 0000000..dcfca3f
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/listview.10.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/listview.11.png b/tests/auto/declarative/visual/ListView/data-MAC/listview.11.png
new file mode 100644
index 0000000..7cc4047
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/listview.11.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/listview.12.png b/tests/auto/declarative/visual/ListView/data-MAC/listview.12.png
new file mode 100644
index 0000000..a97f4ad
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/listview.12.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/listview.13.png b/tests/auto/declarative/visual/ListView/data-MAC/listview.13.png
new file mode 100644
index 0000000..7a8c6bd
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/listview.13.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/listview.14.png b/tests/auto/declarative/visual/ListView/data-MAC/listview.14.png
new file mode 100644
index 0000000..ae47356
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/listview.14.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/listview.15.png b/tests/auto/declarative/visual/ListView/data-MAC/listview.15.png
new file mode 100644
index 0000000..b3a7260
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/listview.15.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/listview.16.png b/tests/auto/declarative/visual/ListView/data-MAC/listview.16.png
new file mode 100644
index 0000000..581e824
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/listview.16.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/listview.17.png b/tests/auto/declarative/visual/ListView/data-MAC/listview.17.png
new file mode 100644
index 0000000..581e824
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/listview.17.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/listview.18.png b/tests/auto/declarative/visual/ListView/data-MAC/listview.18.png
new file mode 100644
index 0000000..581e824
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/listview.18.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/listview.19.png b/tests/auto/declarative/visual/ListView/data-MAC/listview.19.png
new file mode 100644
index 0000000..581e824
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/listview.19.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/listview.2.png b/tests/auto/declarative/visual/ListView/data-MAC/listview.2.png
new file mode 100644
index 0000000..9877b92
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/listview.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/listview.3.png b/tests/auto/declarative/visual/ListView/data-MAC/listview.3.png
new file mode 100644
index 0000000..603bd24
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/listview.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/listview.4.png b/tests/auto/declarative/visual/ListView/data-MAC/listview.4.png
new file mode 100644
index 0000000..5fdfbb8
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/listview.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/listview.5.png b/tests/auto/declarative/visual/ListView/data-MAC/listview.5.png
new file mode 100644
index 0000000..a1ab987
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/listview.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/listview.6.png b/tests/auto/declarative/visual/ListView/data-MAC/listview.6.png
new file mode 100644
index 0000000..9ccf9b0
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/listview.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/listview.7.png b/tests/auto/declarative/visual/ListView/data-MAC/listview.7.png
new file mode 100644
index 0000000..6b40e1b
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/listview.7.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/listview.8.png b/tests/auto/declarative/visual/ListView/data-MAC/listview.8.png
new file mode 100644
index 0000000..2fda36d
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/listview.8.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/listview.9.png b/tests/auto/declarative/visual/ListView/data-MAC/listview.9.png
new file mode 100644
index 0000000..581e824
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/listview.9.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data-MAC/listview.qml b/tests/auto/declarative/visual/ListView/data-MAC/listview.qml
new file mode 100644
index 0000000..3765668
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data-MAC/listview.qml
@@ -0,0 +1,3079 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 32
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 48
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 64
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 80
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 96
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 112
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 128
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 144
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 160
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 176
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 192
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 208
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 224
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 240
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 256
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 272
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 288
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 304
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 320
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 336
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 352
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 368
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 384
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 400
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 416
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 432
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 448
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 464
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 480
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 496
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 512
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 528
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 544
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 560
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 576
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 592
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 608
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 624
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 640
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 656
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 672
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 688
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 704
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 720
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 736
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 752
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 768
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 784
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 800
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 816
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 832
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 848
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 864
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 880
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 896
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 912
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 928
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 944
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 960
+ image: "listview.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 992
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1008
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1024
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1040
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1056
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1072
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1088
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1104
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1120
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1136
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1152
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1168
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1184
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1200
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1216
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1232
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1248
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1264
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1280
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1296
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1312
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1328
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1344
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1360
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1376
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1392
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1408
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1424
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1440
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1456
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1472
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1488
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1504
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1520
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1536
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1552
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1568
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1584
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1600
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1616
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1632
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1648
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1664
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1680
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1696
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1712
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1728
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1744
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1760
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1776
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1792
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1808
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1824
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1840
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1856
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1872
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1888
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1904
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1920
+ image: "listview.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1952
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1968
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1984
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2000
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2016
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2032
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2048
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2064
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2080
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2096
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2112
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2128
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2144
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2160
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2176
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2192
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2208
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2224
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2240
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2256
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2272
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2288
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2304
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2320
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2336
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2352
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2368
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2384
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2400
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2416
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2432
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2448
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2464
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2480
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2496
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2512
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2528
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2544
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2560
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2576
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2592
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 553; y: 267
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2608
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2624
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 554; y: 267
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 555; y: 266
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2640
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 556; y: 265
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 558; y: 260
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2656
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 560; y: 256
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2672
+ hash: "c315e184c4dcb11d7e9fd4509a8b6a1f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 562; y: 250
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 566; y: 234
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2688
+ hash: "aeef1cacca9518408519b670443e396f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 568; y: 216
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2704
+ hash: "621626927f83bf7b36b78f5ca7ed4ed0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 572; y: 192
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 572; y: 192
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2720
+ hash: "b2aca965b745e98365195c52b9dd9a2c"
+ }
+ Frame {
+ msec: 2736
+ hash: "4cc8c162afcc45c79afd8230893d4ddd"
+ }
+ Frame {
+ msec: 2752
+ hash: "b9c0815086393878ad00566db7a3c577"
+ }
+ Frame {
+ msec: 2768
+ hash: "23cbc15fce97f966c24e3ec626e01960"
+ }
+ Frame {
+ msec: 2784
+ hash: "3a7ce897b47ba39e63be31a020de6f3d"
+ }
+ Frame {
+ msec: 2800
+ hash: "2a8a32cd27fad2c57c9eb518c7b3b3ca"
+ }
+ Frame {
+ msec: 2816
+ hash: "96d676ad58119430b440a5f0a2215f26"
+ }
+ Frame {
+ msec: 2832
+ hash: "5f9cd251615ee6a98470a7b6098f7890"
+ }
+ Frame {
+ msec: 2848
+ hash: "c9b1c073cbfbf1c353685b3f38baa675"
+ }
+ Frame {
+ msec: 2864
+ hash: "cf5bfbfe8904ea40b796d2b33d5cc363"
+ }
+ Frame {
+ msec: 2880
+ image: "listview.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "c75c3342b476f75fc0c5f56a374da13e"
+ }
+ Frame {
+ msec: 2912
+ hash: "0dfcd15d21b7e949b56bc69d881c52f5"
+ }
+ Frame {
+ msec: 2928
+ hash: "73b7352bb11d29cbf64b6b594e761e42"
+ }
+ Frame {
+ msec: 2944
+ hash: "876361c2fc18c2236c1dffd36f517f44"
+ }
+ Frame {
+ msec: 2960
+ hash: "0dfaf61e3a86ee056a5d76cf6f7994b2"
+ }
+ Frame {
+ msec: 2976
+ hash: "391995cfc5d8d3808b30d74ba5ea3188"
+ }
+ Frame {
+ msec: 2992
+ hash: "6fd4f14c16a8870355fa190c94e4be2d"
+ }
+ Frame {
+ msec: 3008
+ hash: "0aac04c8092505d934220e61c7959512"
+ }
+ Frame {
+ msec: 3024
+ hash: "6cb0fbe22fcd60b5ed6385e49522b32e"
+ }
+ Frame {
+ msec: 3040
+ hash: "2eb7fd1a773e32ae94284cf57efaaff2"
+ }
+ Frame {
+ msec: 3056
+ hash: "e143ed5eeb94b35ef97e965f34d45e4d"
+ }
+ Frame {
+ msec: 3072
+ hash: "529e85f2cd48c1f0d056682b8350445b"
+ }
+ Frame {
+ msec: 3088
+ hash: "d74bded985c00ecd192ff8fdce708450"
+ }
+ Frame {
+ msec: 3104
+ hash: "f71568b2173f72c4433a019775923c02"
+ }
+ Frame {
+ msec: 3120
+ hash: "1185a1c936ac08633c14d39ca9c4f5e9"
+ }
+ Frame {
+ msec: 3136
+ hash: "e641720bf75f1e4f0a8471f3a8b35094"
+ }
+ Frame {
+ msec: 3152
+ hash: "cecc41fb42abb95505c094829fd415bf"
+ }
+ Frame {
+ msec: 3168
+ hash: "7ad89090beb9de3cd7c5a5a03fca900d"
+ }
+ Frame {
+ msec: 3184
+ hash: "2a98fe4406367d4e286d8932d6a21318"
+ }
+ Frame {
+ msec: 3200
+ hash: "9aad024b2fc25ce886ccaa4ac106b1d8"
+ }
+ Frame {
+ msec: 3216
+ hash: "3c4a787a4d590efd2e72706e40df7b6d"
+ }
+ Frame {
+ msec: 3232
+ hash: "1135e06c2981bdaed13c13400e178dc3"
+ }
+ Frame {
+ msec: 3248
+ hash: "1fbceedf1c20f2aa3f05be36126280e2"
+ }
+ Frame {
+ msec: 3264
+ hash: "5d1ec83f43b649c732cc3f7815100428"
+ }
+ Frame {
+ msec: 3280
+ hash: "27501f6b6adccfdb77a5228611e2a95a"
+ }
+ Frame {
+ msec: 3296
+ hash: "218dc244352c14467f2b2a39d78a1bc7"
+ }
+ Frame {
+ msec: 3312
+ hash: "33a998563d2c053e375f619b7a75a224"
+ }
+ Frame {
+ msec: 3328
+ hash: "02d34b79e25367e6d0dc1765cab12353"
+ }
+ Frame {
+ msec: 3344
+ hash: "2698cf68138aa7d292167bcc85f60b74"
+ }
+ Frame {
+ msec: 3360
+ hash: "0b33e929b420596ff1dce2eeef8480db"
+ }
+ Frame {
+ msec: 3376
+ hash: "d8ec307a85cecaacaa908ceb34d5db5b"
+ }
+ Frame {
+ msec: 3392
+ hash: "4afe1df3e802b41d1b89b5fab4e35190"
+ }
+ Frame {
+ msec: 3408
+ hash: "e8f484ed8d2a6745ee87ac9544281d55"
+ }
+ Frame {
+ msec: 3424
+ hash: "6df053920e87d7e6e3ec0368b4b14c25"
+ }
+ Frame {
+ msec: 3440
+ hash: "6e94791acce321417a37132821c0260d"
+ }
+ Frame {
+ msec: 3456
+ hash: "fea3e31cbf3078615f57c934197dac35"
+ }
+ Frame {
+ msec: 3472
+ hash: "e8d15890a8bd95db39889d19f046901b"
+ }
+ Frame {
+ msec: 3488
+ hash: "038b422b154dfef2d955b833892c581e"
+ }
+ Frame {
+ msec: 3504
+ hash: "01180b3d9b504ca2814382eadaf3a4e0"
+ }
+ Frame {
+ msec: 3520
+ hash: "869a0aa0d67043822c65383e0f3264d4"
+ }
+ Frame {
+ msec: 3536
+ hash: "43785b1214510c10b65018a9d68a93b1"
+ }
+ Frame {
+ msec: 3552
+ hash: "95e6ebc35c2fb128b6e6ac0743268523"
+ }
+ Frame {
+ msec: 3568
+ hash: "f8c22a6ca3169de4d29b3b0e2908f581"
+ }
+ Frame {
+ msec: 3584
+ hash: "6baf16c321847d269718bcb3468aeeb2"
+ }
+ Frame {
+ msec: 3600
+ hash: "30804b5eb2a6d99116475cbdc1a9c043"
+ }
+ Frame {
+ msec: 3616
+ hash: "c892c17ec947a910b74f5b8704405e9f"
+ }
+ Frame {
+ msec: 3632
+ hash: "696029b77512943001c9eba64191e633"
+ }
+ Frame {
+ msec: 3648
+ hash: "4c26bb0ca28d74a2bb79d0bfc8127361"
+ }
+ Frame {
+ msec: 3664
+ hash: "6e8c50cc14c9afe73b4baf09a6a8f1a4"
+ }
+ Frame {
+ msec: 3680
+ hash: "fd20e4259b44357c93f22f35c698fe1b"
+ }
+ Frame {
+ msec: 3696
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3712
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3728
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3744
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3760
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3776
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3792
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3808
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3824
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3840
+ image: "listview.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3872
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3888
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3904
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3920
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3936
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3952
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3968
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3984
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 4000
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 4016
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 4032
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 4048
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 4064
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 4080
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 4096
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 4112
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 4128
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 4144
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 521; y: 24
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4160
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4176
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 32
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 37
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4192
+ hash: "a5df688148c264de1d376c9b87ddfa6b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 46
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4208
+ hash: "a4e2c1878b0afce0ee1eebd63e9c951a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 66
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 88
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4224
+ hash: "2f9a79278d492790ef86a09c77e95ff4"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 531; y: 136
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 531; y: 136
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4240
+ hash: "5b5ce7206b26528157c426f4e1e3e0a8"
+ }
+ Frame {
+ msec: 4256
+ hash: "65a1e5f81ab89b163aed46b984cca45e"
+ }
+ Frame {
+ msec: 4272
+ hash: "e28253ad5a2415251b68bcda1d7d4bd0"
+ }
+ Frame {
+ msec: 4288
+ hash: "71aae5abb4a9e9077053ea21dd3ec315"
+ }
+ Frame {
+ msec: 4304
+ hash: "33fcea38fc3b328b3294f9ac2a26aa1a"
+ }
+ Frame {
+ msec: 4320
+ hash: "6299eb1d87f371966307668b92de6a0b"
+ }
+ Frame {
+ msec: 4336
+ hash: "4f66d8c7cb6971d0fc24089d123c547b"
+ }
+ Frame {
+ msec: 4352
+ hash: "d9906d61b31fabf968290ebcd6688f34"
+ }
+ Frame {
+ msec: 4368
+ hash: "5a1945993ff8096ba6b933d45586044a"
+ }
+ Frame {
+ msec: 4384
+ hash: "331535e54da9bbdbc2fbf2b244ad0199"
+ }
+ Frame {
+ msec: 4400
+ hash: "4dc39de0c54f6e0b77f94f6ae6c345ec"
+ }
+ Frame {
+ msec: 4416
+ hash: "ec309a298ce246c13eb666488eb75016"
+ }
+ Frame {
+ msec: 4432
+ hash: "a133819f8adc6265eb0e438261c869e3"
+ }
+ Frame {
+ msec: 4448
+ hash: "da4d64fd6b3ae7d49ee5c5c8d0117a37"
+ }
+ Frame {
+ msec: 4464
+ hash: "620dd1c3fc41ce657eac9d1a5b765fd4"
+ }
+ Frame {
+ msec: 4480
+ hash: "ff1c370bd1bf75a98ae7125e7dd5a9db"
+ }
+ Frame {
+ msec: 4496
+ hash: "59c6e4297109b5cc7c197749867dddae"
+ }
+ Frame {
+ msec: 4512
+ hash: "91b1719e86529d0c35a53a2d0a095dd6"
+ }
+ Frame {
+ msec: 4528
+ hash: "2994663d35c9eb453a27c1a1fa9aeeb8"
+ }
+ Frame {
+ msec: 4544
+ hash: "ae4ec37b9f6a00b3c9139e5cfe13d32e"
+ }
+ Frame {
+ msec: 4560
+ hash: "a98340236d1b65f47e88684168c1429d"
+ }
+ Frame {
+ msec: 4576
+ hash: "34848b483ea6a2bd412e29d26beb3ab0"
+ }
+ Frame {
+ msec: 4592
+ hash: "dd9bae0e2fca84b265d8cb59686ff88d"
+ }
+ Frame {
+ msec: 4608
+ hash: "18b6ef6f5913b0612b76e7b2e25073dd"
+ }
+ Frame {
+ msec: 4624
+ hash: "9398aab9478279aed1bc40c9378f8da4"
+ }
+ Frame {
+ msec: 4640
+ hash: "a297a304c12102f23bd1e0f0207e0df9"
+ }
+ Frame {
+ msec: 4656
+ hash: "091db9138cd6ae801ad857105a83c8f9"
+ }
+ Frame {
+ msec: 4672
+ hash: "253938ca4a4f13433ddd502eb94cb7cd"
+ }
+ Frame {
+ msec: 4688
+ hash: "6002df1793d290e4e31ee0c91c37bbe6"
+ }
+ Frame {
+ msec: 4704
+ hash: "212476fa1c3a52fb8eba03ec3aecdcd8"
+ }
+ Frame {
+ msec: 4720
+ hash: "80d4d8434d4e96a2bc23f5ed060d6ddc"
+ }
+ Frame {
+ msec: 4736
+ hash: "2d4add725f31a04558635ce4b73a758a"
+ }
+ Frame {
+ msec: 4752
+ hash: "57c06022ec1e502c4f49f43063c433e7"
+ }
+ Frame {
+ msec: 4768
+ hash: "8393e97990993f9d5f68ea65f8e4a2db"
+ }
+ Frame {
+ msec: 4784
+ hash: "9a1fcd96dffaf5c79ecc7f9427e02499"
+ }
+ Frame {
+ msec: 4800
+ image: "listview.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "5ae722cf541e3453e73bbee57dc379e9"
+ }
+ Frame {
+ msec: 4832
+ hash: "fc7326c2e2e56d9c3036e8dfc2ea77a8"
+ }
+ Frame {
+ msec: 4848
+ hash: "f22a2a68cea158f333b0457025d75490"
+ }
+ Frame {
+ msec: 4864
+ hash: "d684c8aa9b835779080f170cafead40f"
+ }
+ Frame {
+ msec: 4880
+ hash: "dd451e5e421f929d015981bc7aeb8c66"
+ }
+ Frame {
+ msec: 4896
+ hash: "d066f228295db7f46520495167d3e946"
+ }
+ Frame {
+ msec: 4912
+ hash: "ebf640a457e3498bade3220aafa70331"
+ }
+ Frame {
+ msec: 4928
+ hash: "190f5b1f3ce9d200790c34c50bcc62c5"
+ }
+ Frame {
+ msec: 4944
+ hash: "9d4ad865246eb008afa40740b5c9a208"
+ }
+ Frame {
+ msec: 4960
+ hash: "81c8b2c0b4f9e74f24d328a1d9b40a9f"
+ }
+ Frame {
+ msec: 4976
+ hash: "24acc300307e71bee79bce8de76f56cb"
+ }
+ Frame {
+ msec: 4992
+ hash: "1f9d31f94cfce6f868bfcc8a104d2465"
+ }
+ Frame {
+ msec: 5008
+ hash: "7a3cab008dcb7a893ae30797b33df6f2"
+ }
+ Frame {
+ msec: 5024
+ hash: "38d561a2950434e59513439c7f1120ea"
+ }
+ Frame {
+ msec: 5040
+ hash: "8d34131faa15bc126bd4d9ef3be39ef5"
+ }
+ Frame {
+ msec: 5056
+ hash: "85d57ef15791b56deb537795dd87911e"
+ }
+ Frame {
+ msec: 5072
+ hash: "71e932169915a6c8c2cef0b22febf316"
+ }
+ Frame {
+ msec: 5088
+ hash: "8b3452981963aeebadc9ac2013150263"
+ }
+ Frame {
+ msec: 5104
+ hash: "a3fb8abecfeb48ba1cd1fd8f40896fa0"
+ }
+ Frame {
+ msec: 5120
+ hash: "f53ab533f6a58ae45139f3da4bf8ab4e"
+ }
+ Frame {
+ msec: 5136
+ hash: "9ec7012404f3c1c7795810dcee5acc3b"
+ }
+ Frame {
+ msec: 5152
+ hash: "99ca43bab532dd5d7566e596c65053ce"
+ }
+ Frame {
+ msec: 5168
+ hash: "0af83ad2416821cc230cd2856d1a3e39"
+ }
+ Frame {
+ msec: 5184
+ hash: "86fa23ddf2005bbf35238ae04ae554ac"
+ }
+ Frame {
+ msec: 5200
+ hash: "bb52a748f1d85dde410cfa4f24e3ed20"
+ }
+ Frame {
+ msec: 5216
+ hash: "898b96bc5ee9a3ac61764e5cd9af8cfb"
+ }
+ Frame {
+ msec: 5232
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5248
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5264
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5280
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5296
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5312
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5328
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5344
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5360
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5376
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5392
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5408
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5424
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5440
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5456
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5472
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5488
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5504
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5520
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5536
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5552
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5568
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5584
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5600
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5616
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5632
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5648
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5664
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5680
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5696
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5712
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5728
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5744
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5760
+ image: "listview.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5792
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5808
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5824
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5840
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5856
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5872
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5888
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5904
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5920
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5936
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5952
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5968
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 111; y: 230
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 111; y: 227
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5984
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 111; y: 223
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6000
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 111; y: 216
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 111; y: 210
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6016
+ hash: "0076b55d3da4ca365688b6a2c984103f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 112; y: 205
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6032
+ hash: "db846ad8e3200ca1fce36a38dc7beab8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 112; y: 192
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6048
+ hash: "3cb6b25725b4285f9c096d595224c5ca"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 111; y: 180
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6064
+ hash: "1832e12fdf3b464b02b296e727b33694"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 110; y: 173
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6080
+ hash: "6d18d2b5f65cbba4915d0725d24b40f3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 109; y: 158
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 107; y: 140
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6096
+ hash: "79bc7afc6b1aa5f8904b3e6d5d4a9389"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 103; y: 124
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6112
+ hash: "4436f2d15304c839aacec486c1fd6d96"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 101; y: 111
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6128
+ hash: "c3bffc7c95893cf9bbd8596208b7f657"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 101; y: 105
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 101; y: 100
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6144
+ hash: "04231c2fdc02729aa34ed4e403dd373b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 101; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6160
+ hash: "392d75c4b372825e78366eb63a618170"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 101; y: 87
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 102; y: 83
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6176
+ hash: "7f91f7bdb0cb62d600ac4aa573681fe3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 102; y: 79
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6192
+ hash: "69207181a382650c5e33145555f0d9ba"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 103; y: 76
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 103; y: 72
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6208
+ hash: "65a184b5c49b02e08114e437483f928d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 104; y: 68
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 105; y: 64
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6224
+ hash: "c22da9ce54d04f51fb55da755753a509"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 105; y: 61
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6240
+ hash: "59dbd5216847a62f60a1d0701a15bb62"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 106; y: 57
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 106; y: 53
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6256
+ hash: "bbfc902db6e6ca253afb1c90306b2a63"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 106; y: 47
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 106; y: 47
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6272
+ hash: "5c41f194afec5f7e3db9d98673d03d5c"
+ }
+ Frame {
+ msec: 6288
+ hash: "deb06d0f915d5f6ec39b1820d57b6af6"
+ }
+ Frame {
+ msec: 6304
+ hash: "deb06d0f915d5f6ec39b1820d57b6af6"
+ }
+ Frame {
+ msec: 6320
+ hash: "2a1a1f9239a6ccb308e51796f9b0bb89"
+ }
+ Frame {
+ msec: 6336
+ hash: "3c1b44201616b8271023bf05a3f3f0f7"
+ }
+ Frame {
+ msec: 6352
+ hash: "87afcef49db8b2b547e85e834f8ec304"
+ }
+ Frame {
+ msec: 6368
+ hash: "290081b4b1272ef09ec9964c128e61b5"
+ }
+ Frame {
+ msec: 6384
+ hash: "19bb3b23ee4b14a5f0a313106ef7c8c1"
+ }
+ Frame {
+ msec: 6400
+ hash: "65a184b5c49b02e08114e437483f928d"
+ }
+ Frame {
+ msec: 6416
+ hash: "832d2aefbcaf776f35039be527d367c5"
+ }
+ Frame {
+ msec: 6432
+ hash: "69207181a382650c5e33145555f0d9ba"
+ }
+ Frame {
+ msec: 6448
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6464
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6480
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6496
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6512
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6528
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6544
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6560
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6576
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6592
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6608
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6624
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6640
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6656
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6672
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6688
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6704
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6720
+ image: "listview.6.png"
+ }
+ Frame {
+ msec: 6736
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6752
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6768
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6784
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6800
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6816
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6832
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6848
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6864
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6880
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6896
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6912
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6928
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6944
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6960
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6976
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6992
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7008
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7024
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7040
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7056
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7072
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7088
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7104
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7120
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7136
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7152
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7168
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7184
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7200
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7216
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7232
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7248
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7264
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7280
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7296
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 519; y: 276
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7312
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 519; y: 275
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7328
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 519; y: 274
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7344
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 518; y: 273
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 518; y: 272
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7360
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 518; y: 271
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7376
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 518; y: 268
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7392
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 518; y: 266
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 518; y: 265
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7408
+ hash: "9047f597b9e59ca652c172338bed6ef9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 517; y: 262
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7424
+ hash: "87476f78daecd6bb49e8d6e673d28100"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 517; y: 260
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7440
+ hash: "6bfd895c6b7d97e4102eb26608cdfeca"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 517; y: 254
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7456
+ hash: "e4c2b75beaee54a5781a5acbeb37ea64"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 517; y: 249
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7472
+ hash: "d5e816768e9c3db0631416bd86b1b461"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 517; y: 243
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7488
+ hash: "df6c7252ebb51e7447396b640e1c6ead"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 517; y: 237
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7504
+ hash: "5f4db5386dc76b9f2dac47618c733dee"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 517; y: 231
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7520
+ hash: "534d1d16d8321996969b54875ec5f1e0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 517; y: 225
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7536
+ hash: "5263016e53327df1972498b55a60c0ed"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 517; y: 219
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7552
+ hash: "6787a5a16d2a61643bb1435f6488ada6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 518; y: 215
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7568
+ hash: "1feabcd683590c3d28d899167e6278b3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 519; y: 208
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7584
+ hash: "c0495d6083b2e4ddd2b1dca2f231529c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 520; y: 202
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7600
+ hash: "cb302493a17c1806dfcdf002c44e7acd"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 196
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7616
+ hash: "f3822b79b678532ce7f826952636be90"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 189
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7632
+ hash: "6e30eed182c38be110ba9c7e95b223be"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 185
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7648
+ hash: "9e3ad0331c0c041b9a5747a1d44a43fe"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 177
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7664
+ hash: "791e6abf9dae670770c2429ee9f1ad71"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 169
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7680
+ image: "listview.7.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 160
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7696
+ hash: "d3ae366fb8212cb987e23150802c88e3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 156
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7712
+ hash: "b87708e19d7e8b64fe1ab50ec1723975"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 147
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7728
+ hash: "512678e45cdd8d48e10b08ee020afe8e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 144
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7744
+ hash: "211aa70e813819d476996b3396e9e5a0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 137
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7760
+ hash: "f16eaa360604be84ce61364ad9733b52"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 130
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7776
+ hash: "d3af36dfb187d08abe1458f186a935a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 124
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7792
+ hash: "9d0a0ba1deb7c4a4a8838e5e6a27f2f6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 122
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7808
+ hash: "69aac14f4c137e66724ca33f00a86676"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7824
+ hash: "893d56e2a2ca257fae9f0c6c0629903d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 111
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7840
+ hash: "b9f734e57a72e33973740a59776948d9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 106
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7856
+ hash: "e4b0f3f6a6785d7a183e4a36c5803301"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 104
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7872
+ hash: "99ee1e8803c05e546a721b0c9ee39499"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 101
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7888
+ hash: "96e7da2f895500a786ed36cb295e9003"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7904
+ hash: "cd369fc5dc31814208e56cf7cd0decea"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7920
+ hash: "5fee72994b65a45b4900a3073f86a3e1"
+ }
+ Frame {
+ msec: 7936
+ hash: "9a2f8a65d842b8f92998e6411f7cd53c"
+ }
+ Frame {
+ msec: 7952
+ hash: "2848d69017ce71ae101ccdfa7c67f933"
+ }
+ Frame {
+ msec: 7968
+ hash: "6568aa88e81f988f65da435df7166167"
+ }
+ Frame {
+ msec: 7984
+ hash: "d5f15ee08a2d7667786757a378a7a7f4"
+ }
+ Frame {
+ msec: 8000
+ hash: "9b566bd02a561b32d1a4c1ec99c2e2c3"
+ }
+ Frame {
+ msec: 8016
+ hash: "580419e1c9e91046547d913f6b8790a4"
+ }
+ Frame {
+ msec: 8032
+ hash: "a5a3cd610ec0b35af1295ee6c41e09e3"
+ }
+ Frame {
+ msec: 8048
+ hash: "a5a3cd610ec0b35af1295ee6c41e09e3"
+ }
+ Frame {
+ msec: 8064
+ hash: "a5a3cd610ec0b35af1295ee6c41e09e3"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 521; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8080
+ hash: "a5a3cd610ec0b35af1295ee6c41e09e3"
+ }
+ Frame {
+ msec: 8096
+ hash: "a5a3cd610ec0b35af1295ee6c41e09e3"
+ }
+ Frame {
+ msec: 8112
+ hash: "83b91a371d682a501bc3a3fceabe4f8c"
+ }
+ Frame {
+ msec: 8128
+ hash: "798b1dbfa0cce362213f426e2c60ac0e"
+ }
+ Frame {
+ msec: 8144
+ hash: "d71b6a693c430a618c23413cb65bb320"
+ }
+ Frame {
+ msec: 8160
+ hash: "2baae394390da39447a67151bc503d65"
+ }
+ Frame {
+ msec: 8176
+ hash: "06688b05c61a7b862d39534207a8adab"
+ }
+ Frame {
+ msec: 8192
+ hash: "a1d3042e16709817906dcdc673ee52c7"
+ }
+ Frame {
+ msec: 8208
+ hash: "236dd41feac1b1a8a4bd7911bb184da2"
+ }
+ Frame {
+ msec: 8224
+ hash: "f3ec821bba1d32e90bdab0e85c07d7d8"
+ }
+ Frame {
+ msec: 8240
+ hash: "e328c35adf7ffc3d7e3af97e798ec8a5"
+ }
+ Frame {
+ msec: 8256
+ hash: "651101db68fd3ed1dc5f441c126dc31b"
+ }
+ Frame {
+ msec: 8272
+ hash: "651101db68fd3ed1dc5f441c126dc31b"
+ }
+ Frame {
+ msec: 8288
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8304
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8320
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8336
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8352
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8368
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8384
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8400
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8416
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8432
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8448
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8464
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8480
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8496
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8512
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8528
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8544
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8560
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8576
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8592
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8608
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8624
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8640
+ image: "listview.8.png"
+ }
+ Frame {
+ msec: 8656
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8672
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8688
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8704
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8720
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8736
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8752
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8768
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8784
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8800
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8816
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8832
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8848
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8864
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8880
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8896
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8912
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8928
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8944
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8960
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8976
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8992
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9008
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9024
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9040
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9056
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9072
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9088
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9104
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9120
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9136
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9152
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9168
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9184
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9200
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9216
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9232
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9248
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9264
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9280
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9296
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9312
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9328
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9344
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9360
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9376
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9392
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9408
+ hash: "1171be123a361d72859c25434573482c"
+ }
+}
diff --git a/tests/auto/declarative/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/ListView/data/basic1.qml b/tests/auto/declarative/visual/ListView/data/basic1.qml
new file mode 100644
index 0000000..4cd44fc
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/basic1.qml
@@ -0,0 +1,159 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 32
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 48
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 64
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 80
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 96
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 112
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 128
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 144
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 160
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 176
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 192
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 208
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 224
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 240
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 256
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 272
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 288
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 304
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 320
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 336
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 352
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 368
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 384
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 400
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 416
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 432
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 448
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 464
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 480
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 496
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 512
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 528
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 544
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 560
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 576
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+}
diff --git a/tests/auto/declarative/visual/ListView/data/basic2.qml b/tests/auto/declarative/visual/ListView/data/basic2.qml
new file mode 100644
index 0000000..34ad5ed
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/basic2.qml
@@ -0,0 +1,187 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 32
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 48
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 64
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 80
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 96
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 112
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 128
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 144
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 160
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 176
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 192
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 208
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 224
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 240
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 256
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 272
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 288
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 304
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 320
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 336
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 352
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 368
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 384
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 400
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 416
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 432
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 448
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 464
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 480
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 496
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 512
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 528
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 544
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 560
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 576
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 592
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 608
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 624
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 640
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 656
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 672
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 688
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+}
diff --git a/tests/auto/declarative/visual/ListView/data/basic3.qml b/tests/auto/declarative/visual/ListView/data/basic3.qml
new file mode 100644
index 0000000..1c5ddb0
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/basic3.qml
@@ -0,0 +1,147 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 32
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 48
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 64
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 80
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 96
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 112
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 128
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 144
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 160
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 176
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 192
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 208
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 224
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 240
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 256
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 272
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 288
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 304
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 320
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 336
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 352
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 368
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 384
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 400
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 416
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 432
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 448
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 464
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 480
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 496
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 512
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 528
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+}
diff --git a/tests/auto/declarative/visual/ListView/data/basic4.qml b/tests/auto/declarative/visual/ListView/data/basic4.qml
new file mode 100644
index 0000000..d121d91
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/basic4.qml
@@ -0,0 +1,171 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 32
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 48
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 64
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 80
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 96
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 112
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 128
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 144
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 160
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 176
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 192
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 208
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 224
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 240
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 256
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 272
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 288
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 304
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 320
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 336
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 352
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 368
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 384
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 400
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 416
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 432
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 448
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 464
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 480
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 496
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 512
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 528
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 544
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 560
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 576
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 592
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 608
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+ Frame {
+ msec: 624
+ hash: "c0ec1bac5550efaa1f8ce7b46c2fed94"
+ }
+}
diff --git a/tests/auto/declarative/visual/ListView/data/itemlist.0.png b/tests/auto/declarative/visual/ListView/data/itemlist.0.png
new file mode 100644
index 0000000..a1947ca
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/itemlist.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/itemlist.1.png b/tests/auto/declarative/visual/ListView/data/itemlist.1.png
new file mode 100644
index 0000000..d27b7fa
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/itemlist.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/itemlist.2.png b/tests/auto/declarative/visual/ListView/data/itemlist.2.png
new file mode 100644
index 0000000..fdab8c6
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/itemlist.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/itemlist.3.png b/tests/auto/declarative/visual/ListView/data/itemlist.3.png
new file mode 100644
index 0000000..dc321a8
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/itemlist.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/itemlist.4.png b/tests/auto/declarative/visual/ListView/data/itemlist.4.png
new file mode 100644
index 0000000..fdab8c6
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/itemlist.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/itemlist.5.png b/tests/auto/declarative/visual/ListView/data/itemlist.5.png
new file mode 100644
index 0000000..15b51cb
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/itemlist.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/itemlist.6.png b/tests/auto/declarative/visual/ListView/data/itemlist.6.png
new file mode 100644
index 0000000..a1947ca
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/itemlist.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/itemlist.qml b/tests/auto/declarative/visual/ListView/data/itemlist.qml
new file mode 100644
index 0000000..073749f
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/itemlist.qml
@@ -0,0 +1,2203 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 32
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 48
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 64
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 80
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 96
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 112
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 128
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 144
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 160
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 176
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 192
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 208
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 224
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 240
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 256
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 272
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 288
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 304
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 320
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 336
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 352
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 368
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 384
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 400
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 416
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 432
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 448
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 464
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 480
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 496
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 512
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 528
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 544
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 560
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 576
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 592
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 608
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 624
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 640
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 656
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 672
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 688
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 704
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 720
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 736
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 752
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 768
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 784
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 800
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 816
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 832
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 848
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 864
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 880
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 896
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 912
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 928
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 944
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 960
+ image: "itemlist.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 992
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1008
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1024
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1040
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1056
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1072
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1088
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1104
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1120
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1136
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1152
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1168
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1184
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1200
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1216
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1232
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1248
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1264
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1280
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1296
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1312
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1328
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1344
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1360
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1376
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1392
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1408
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1424
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1440
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1456
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1472
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1488
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1504
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1520
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1536
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1552
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1568
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1584
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1600
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1616
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1632
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 1648
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 192; y: 111
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1664
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 191; y: 111
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1680
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 190; y: 112
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 187; y: 113
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1696
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 184; y: 113
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 180; y: 113
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1712
+ hash: "a68b1bc6c2963ee92c3a45f500667b3b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 174; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 167; y: 115
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1728
+ hash: "7cda93e59466b3348e7ffe3895f89e86"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 160; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1744
+ hash: "06e0008c78e919f7270402938d9d764b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 140; y: 121
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 132; y: 122
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1760
+ hash: "9d8da9199efebb95f56e5d4ebc9a585e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 114; y: 126
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 98; y: 132
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1776
+ hash: "54a60a4279911ba4a8a5741bcadfa783"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 91; y: 132
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 91; y: 132
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1792
+ hash: "a1a19370a1a8ed78e475f0d0eb12311c"
+ }
+ Frame {
+ msec: 1808
+ hash: "196a3b127cf7065614c34856bf8d8bca"
+ }
+ Frame {
+ msec: 1824
+ hash: "5fbefbd7c7be4374382cc4c8b86ac78a"
+ }
+ Frame {
+ msec: 1840
+ hash: "d6a544c622e504c1b931e1a8a1310a6e"
+ }
+ Frame {
+ msec: 1856
+ hash: "20e76f0eb4ec5f691999faf8ad313370"
+ }
+ Frame {
+ msec: 1872
+ hash: "7f84a3545907c754ae8a6a30ef61c98d"
+ }
+ Frame {
+ msec: 1888
+ hash: "b544901eae32903ad054e8cdfed715eb"
+ }
+ Frame {
+ msec: 1904
+ hash: "a010ed1e3312f4ca9f429b7e32cdcef9"
+ }
+ Frame {
+ msec: 1920
+ image: "itemlist.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "93a731dc6f71b6ff5400bf74c87e6c46"
+ }
+ Frame {
+ msec: 1952
+ hash: "c73f63d1a024ba956e693487b3ccc761"
+ }
+ Frame {
+ msec: 1968
+ hash: "539d3d00fce2d0128cd697d86d237fe7"
+ }
+ Frame {
+ msec: 1984
+ hash: "52752d7d6f2d0e085f7132313907b72b"
+ }
+ Frame {
+ msec: 2000
+ hash: "f46dd5803a6075e979e0fc733d503bfb"
+ }
+ Frame {
+ msec: 2016
+ hash: "b8734698a6bad00ecf019f85328c2c21"
+ }
+ Frame {
+ msec: 2032
+ hash: "1cfc499ca756023430cc5b2fa95a599d"
+ }
+ Frame {
+ msec: 2048
+ hash: "63a816548837c19f8f0494c137fc0174"
+ }
+ Frame {
+ msec: 2064
+ hash: "1bce9b85235e9a1a472c079dfec70ec5"
+ }
+ Frame {
+ msec: 2080
+ hash: "6677863e7f74c12648409883f73adbe2"
+ }
+ Frame {
+ msec: 2096
+ hash: "98e707a3e39a5f7bd4a101c2ed83535c"
+ }
+ Frame {
+ msec: 2112
+ hash: "c1f6d8842d14a9394d4b7797314f50e8"
+ }
+ Frame {
+ msec: 2128
+ hash: "579758b477bcd2112b305a5aac7df338"
+ }
+ Frame {
+ msec: 2144
+ hash: "4a7bb81090db246db53e2dbc56f710ea"
+ }
+ Frame {
+ msec: 2160
+ hash: "074995cdd8a70817d1c8a7bb0ad4c542"
+ }
+ Frame {
+ msec: 2176
+ hash: "bd8d7bda4d2e9ad1fba2895d568f36cc"
+ }
+ Frame {
+ msec: 2192
+ hash: "40cce3d2d80ac470af44fc334cec1d5b"
+ }
+ Frame {
+ msec: 2208
+ hash: "15cbc226b032d5a97199735ea7a1408b"
+ }
+ Frame {
+ msec: 2224
+ hash: "12b296aea9b058a5402d0d0a620f8edc"
+ }
+ Frame {
+ msec: 2240
+ hash: "6ffd2b79cf0e941a59e74bc6f9025bcb"
+ }
+ Frame {
+ msec: 2256
+ hash: "589a58ef76ea709dc8d80390c9044f99"
+ }
+ Frame {
+ msec: 2272
+ hash: "c009924bfa30153f22ab168b539494e9"
+ }
+ Frame {
+ msec: 2288
+ hash: "4b83674a7c2daa68d735901ad40be2bd"
+ }
+ Frame {
+ msec: 2304
+ hash: "0525908c0302ada989e28990bac3f2ca"
+ }
+ Frame {
+ msec: 2320
+ hash: "89eb13976ba3ba4413cafeb0cc91c01b"
+ }
+ Frame {
+ msec: 2336
+ hash: "75c1295ef99680784b2e11fb88fa1423"
+ }
+ Frame {
+ msec: 2352
+ hash: "93d89165cf6a97c76ae6e7f75678a3cd"
+ }
+ Frame {
+ msec: 2368
+ hash: "53064c1938f08a55603a99b0db225174"
+ }
+ Frame {
+ msec: 2384
+ hash: "31db5684466c0c32128a9a8c7b1835e1"
+ }
+ Frame {
+ msec: 2400
+ hash: "99d9e58697736198e0a00443d237e85b"
+ }
+ Frame {
+ msec: 2416
+ hash: "6c1e860aef983367365d53f5849ad441"
+ }
+ Frame {
+ msec: 2432
+ hash: "6c1e860aef983367365d53f5849ad441"
+ }
+ Frame {
+ msec: 2448
+ hash: "6c1e860aef983367365d53f5849ad441"
+ }
+ Frame {
+ msec: 2464
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2480
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2496
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2512
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2528
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2544
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2560
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2576
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2592
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2608
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2624
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2640
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2656
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2672
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2688
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2704
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2720
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2736
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2752
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2768
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2784
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2800
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2816
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2832
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2848
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 2864
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 181; y: 104
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2880
+ image: "itemlist.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 179; y: 105
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 177; y: 106
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2912
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 174; y: 108
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 170; y: 110
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2928
+ hash: "5bb06b4e74532ba5bc8c7bc38bf77d7f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 166; y: 112
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 160; y: 115
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2944
+ hash: "b10a6206830a876017799ef2fcf61b1a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 154; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 140; y: 123
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2960
+ hash: "b2e24759ba10afd6cff90f4b1e04b496"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 124; y: 127
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 124; y: 127
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2976
+ hash: "ccbcd6f45cb529c2db71504c0f69d73e"
+ }
+ Frame {
+ msec: 2992
+ hash: "7b31c6d5931677f1aa1e8c7d48a4ff22"
+ }
+ Frame {
+ msec: 3008
+ hash: "c52f691a0a6cf155118bdfea2dfea623"
+ }
+ Frame {
+ msec: 3024
+ hash: "dd639d1df3d4a9b8f06718def63d588f"
+ }
+ Frame {
+ msec: 3040
+ hash: "39d767b09a648ef6295cec2848f9226f"
+ }
+ Frame {
+ msec: 3056
+ hash: "5dd46d5f386431e7b13348ac9a9630ed"
+ }
+ Frame {
+ msec: 3072
+ hash: "0354e5183b0e66e7ba146d292c559df4"
+ }
+ Frame {
+ msec: 3088
+ hash: "984aa6d7075e24de429e05b1b0eda94a"
+ }
+ Frame {
+ msec: 3104
+ hash: "1af58a2f44f1f613712d4df85e38356d"
+ }
+ Frame {
+ msec: 3120
+ hash: "6e4085e7f1fee724d78808753f04b471"
+ }
+ Frame {
+ msec: 3136
+ hash: "73a019ef9057639d631cd99a431b3f3b"
+ }
+ Frame {
+ msec: 3152
+ hash: "c9414a2e655a90dfdcb6fb288b4ba0ca"
+ }
+ Frame {
+ msec: 3168
+ hash: "3f4c24f7ac89da982af22032309637fb"
+ }
+ Frame {
+ msec: 3184
+ hash: "a50e6ada8f73a257657f4348ceaffcfd"
+ }
+ Frame {
+ msec: 3200
+ hash: "a67bf40d09259bbd079c12ae4f49150f"
+ }
+ Frame {
+ msec: 3216
+ hash: "a2fc512b7c234a9d0b2c1a83387a8a46"
+ }
+ Frame {
+ msec: 3232
+ hash: "85090683ce9a3c9833b1cb0b3df076ee"
+ }
+ Frame {
+ msec: 3248
+ hash: "275f3594a0e2cc4b6717f9f336e7e1b6"
+ }
+ Frame {
+ msec: 3264
+ hash: "2473eb11f7b65a784a2b166114026488"
+ }
+ Frame {
+ msec: 3280
+ hash: "4865c30dc45fbf5ca82047b77eca0912"
+ }
+ Frame {
+ msec: 3296
+ hash: "54de88bca395449fbaea2c090c7a5d91"
+ }
+ Frame {
+ msec: 3312
+ hash: "833f9295cf9a34934f001eac48551b59"
+ }
+ Frame {
+ msec: 3328
+ hash: "5bf565f57ababa7380faeee94add91ca"
+ }
+ Frame {
+ msec: 3344
+ hash: "6325578867f1eb3b2d47ed40b017b571"
+ }
+ Frame {
+ msec: 3360
+ hash: "046a6114176b3a3206b7a2acd6e30b41"
+ }
+ Frame {
+ msec: 3376
+ hash: "f8d4120a17f28c2d1d9c4be959098058"
+ }
+ Frame {
+ msec: 3392
+ hash: "71356d2e48aad2900784ea6bc1a3d908"
+ }
+ Frame {
+ msec: 3408
+ hash: "b84ad460fb81fdc4049abe8f3ff180bb"
+ }
+ Frame {
+ msec: 3424
+ hash: "0354239f5eaea23474d9f81385392a8a"
+ }
+ Frame {
+ msec: 3440
+ hash: "8ef0eef3393e07ae7605c865a95edc30"
+ }
+ Frame {
+ msec: 3456
+ hash: "5b8b384cc8e3faf4310015e19b3eb487"
+ }
+ Frame {
+ msec: 3472
+ hash: "77c18ac7dfff2a4e516915e3e3df0717"
+ }
+ Frame {
+ msec: 3488
+ hash: "c1d3264384c26345eb8100de829309ca"
+ }
+ Frame {
+ msec: 3504
+ hash: "6b21f71d0bedef4bbcb445a13f61e7a3"
+ }
+ Frame {
+ msec: 3520
+ hash: "f619097356671f6eb54d3b1c481e709d"
+ }
+ Frame {
+ msec: 3536
+ hash: "e56e3a90da446e0c482cb93717f6aacc"
+ }
+ Frame {
+ msec: 3552
+ hash: "aa94ebdbb4b8423aff28c95daff0baf5"
+ }
+ Frame {
+ msec: 3568
+ hash: "e1744d9cacd1a2c96af4cfdd5c486995"
+ }
+ Frame {
+ msec: 3584
+ hash: "7f19ea52e9e41a3b1bd90bb2a144d305"
+ }
+ Frame {
+ msec: 3600
+ hash: "7f19ea52e9e41a3b1bd90bb2a144d305"
+ }
+ Frame {
+ msec: 3616
+ hash: "7f19ea52e9e41a3b1bd90bb2a144d305"
+ }
+ Frame {
+ msec: 3632
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3648
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3664
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3680
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3696
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3712
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3728
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3744
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3760
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3776
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3792
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3808
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3824
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3840
+ image: "itemlist.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3872
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3888
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3904
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3920
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3936
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3952
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3968
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 3984
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 4000
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 4016
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 4032
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 4048
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 4064
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 4080
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Frame {
+ msec: 4096
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 31; y: 137
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4112
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 32; y: 137
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4128
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 33; y: 136
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 36; y: 135
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4144
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 40; y: 134
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 46; y: 132
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4160
+ hash: "c2c9c284b185a89faf4ddb5a7867f449"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 64; y: 130
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4176
+ hash: "de1c18aeda5d2fbd6dad4554c78617bd"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 86; y: 126
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 110; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 110; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4192
+ hash: "a67bf40d09259bbd079c12ae4f49150f"
+ }
+ Frame {
+ msec: 4208
+ hash: "94514668dafbe41c5890a578efd6dea4"
+ }
+ Frame {
+ msec: 4224
+ hash: "2e97a74eb9ddb1c9613c89e2d78db018"
+ }
+ Frame {
+ msec: 4240
+ hash: "4b5368f0d86bffeb6bd31b58aec88650"
+ }
+ Frame {
+ msec: 4256
+ hash: "b459bde7bb4ce51e6ecdab58f64fcbb9"
+ }
+ Frame {
+ msec: 4272
+ hash: "7bac8cc3ec64c9ad1c0da282e38c953e"
+ }
+ Frame {
+ msec: 4288
+ hash: "a73a58c3d7a757547740a2a161f4c756"
+ }
+ Frame {
+ msec: 4304
+ hash: "b35edcb1fa3568a3e770ab2364b82e75"
+ }
+ Frame {
+ msec: 4320
+ hash: "d6c863ef57c5e5cb04cdac72f920db0b"
+ }
+ Frame {
+ msec: 4336
+ hash: "0db5e4588ff851918b07796f0cf07382"
+ }
+ Frame {
+ msec: 4352
+ hash: "71ec8c363ca6a6f7556afb70faccffe6"
+ }
+ Frame {
+ msec: 4368
+ hash: "18d026e9c965ada1db67c643576d2a80"
+ }
+ Frame {
+ msec: 4384
+ hash: "69f71c22dff981a4da8ec1edcf90e79f"
+ }
+ Frame {
+ msec: 4400
+ hash: "680460f5e4d9e649931601041af046b2"
+ }
+ Frame {
+ msec: 4416
+ hash: "3028763fd15de2607b20b1331b904a4a"
+ }
+ Frame {
+ msec: 4432
+ hash: "333eb60e217fe1ea7469eab52ac461f1"
+ }
+ Frame {
+ msec: 4448
+ hash: "ccbcd6f45cb529c2db71504c0f69d73e"
+ }
+ Frame {
+ msec: 4464
+ hash: "3445df9b41a0a3e74738cbf328ab7d5c"
+ }
+ Frame {
+ msec: 4480
+ hash: "bd2c072558479e9de7a97207e58cc57f"
+ }
+ Frame {
+ msec: 4496
+ hash: "3d34b0b24a30eda93377dcb4585afed8"
+ }
+ Frame {
+ msec: 4512
+ hash: "d3045703863b0c5a327b9355c23d69f2"
+ }
+ Frame {
+ msec: 4528
+ hash: "2f2eb55f693415b840a317211b250e9f"
+ }
+ Frame {
+ msec: 4544
+ hash: "791b9ca7d47a3343474c30a35e336d4b"
+ }
+ Frame {
+ msec: 4560
+ hash: "73a0c02ebad6d3d5f939d9a00dd898bf"
+ }
+ Frame {
+ msec: 4576
+ hash: "d5c11135d586711b12f236430a2c2795"
+ }
+ Frame {
+ msec: 4592
+ hash: "34f9ea214fe714ff4e994f715ea6ea39"
+ }
+ Frame {
+ msec: 4608
+ hash: "8e49afa00983b156b818533923fb6edd"
+ }
+ Frame {
+ msec: 4624
+ hash: "e7e7bef17cee92eca9191fd734d7a577"
+ }
+ Frame {
+ msec: 4640
+ hash: "e407f6ed7cb3c130365ab5515d6308c0"
+ }
+ Frame {
+ msec: 4656
+ hash: "5bb06b4e74532ba5bc8c7bc38bf77d7f"
+ }
+ Frame {
+ msec: 4672
+ hash: "0ad7411316031e22034c14e81ca3a806"
+ }
+ Frame {
+ msec: 4688
+ hash: "dd81d7a9b48c922b4c42cba1b5f2b9d7"
+ }
+ Frame {
+ msec: 4704
+ hash: "32bef6f5005ad94e29ff59165958fbdc"
+ }
+ Frame {
+ msec: 4720
+ hash: "87758dd311f91193bf1e3536c2f58525"
+ }
+ Frame {
+ msec: 4736
+ hash: "015be92a4ff4e735fcc3cbc7a8b9d763"
+ }
+ Frame {
+ msec: 4752
+ hash: "d4c34ed49317c6692d71681fcd9842b6"
+ }
+ Frame {
+ msec: 4768
+ hash: "abaa235bb946a8abaddd52981d632c2d"
+ }
+ Frame {
+ msec: 4784
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4800
+ image: "itemlist.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4832
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4848
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4864
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4880
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4896
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4912
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4928
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4944
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4960
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4976
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 4992
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5008
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5024
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5040
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5056
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5072
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5088
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5104
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5120
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5136
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5152
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5168
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5184
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5200
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5216
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Frame {
+ msec: 5232
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 17; y: 120
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5248
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 19; y: 120
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 21; y: 120
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5264
+ hash: "99f9988040a389576cb6420b5391f768"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 24; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 28; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5280
+ hash: "95b380c9ab6f8db7b822faf023d94546"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 35; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 44; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5296
+ hash: "bb79e53556698c62ec30c75be9f6b7d7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 70; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 96; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 96; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5312
+ hash: "285cc2f0df1f59f25a0135560ab6edf2"
+ }
+ Frame {
+ msec: 5328
+ hash: "93a731dc6f71b6ff5400bf74c87e6c46"
+ }
+ Frame {
+ msec: 5344
+ hash: "eb555741ab128a50de5a18a454f2e639"
+ }
+ Frame {
+ msec: 5360
+ hash: "5dbe6cf898c1e37fcaacecfcf57b2194"
+ }
+ Frame {
+ msec: 5376
+ hash: "e7795610115593e78bb32f7bcc0ae2eb"
+ }
+ Frame {
+ msec: 5392
+ hash: "20e76f0eb4ec5f691999faf8ad313370"
+ }
+ Frame {
+ msec: 5408
+ hash: "d6a544c622e504c1b931e1a8a1310a6e"
+ }
+ Frame {
+ msec: 5424
+ hash: "e7a3a21feed244c5b1c710a9254c15f0"
+ }
+ Frame {
+ msec: 5440
+ hash: "5a4b1aca24f121d1373646e9d80b86fd"
+ }
+ Frame {
+ msec: 5456
+ hash: "331d2ec7021655c86aa64e47718a1088"
+ }
+ Frame {
+ msec: 5472
+ hash: "92096bc872e7395aa5b75c44646a0b60"
+ }
+ Frame {
+ msec: 5488
+ hash: "0d9aa6cee4d21488cbb5153f8f3ed593"
+ }
+ Frame {
+ msec: 5504
+ hash: "c1b943d43701605563fffffcb75f9fa7"
+ }
+ Frame {
+ msec: 5520
+ hash: "1b680025d5ad1ddd8f8d5f570ba73e71"
+ }
+ Frame {
+ msec: 5536
+ hash: "5539a3b9f60ea747c10ed8328b467cbf"
+ }
+ Frame {
+ msec: 5552
+ hash: "0a1317bcb606cd3488c5b14ee5d96585"
+ }
+ Frame {
+ msec: 5568
+ hash: "8844af68b11db7d92c69804c7371a746"
+ }
+ Frame {
+ msec: 5584
+ hash: "28d7fd127739c6e3b8488651b725c802"
+ }
+ Frame {
+ msec: 5600
+ hash: "0cf1a7d958a96aa2768995dddc5ccc09"
+ }
+ Frame {
+ msec: 5616
+ hash: "64b902fe7ab4d89ef0c7b760974e3488"
+ }
+ Frame {
+ msec: 5632
+ hash: "aba11c597eba550fc1eaddbf554057f6"
+ }
+ Frame {
+ msec: 5648
+ hash: "1bacaa3bb9dc3cac9ffc7491cb4dc1a5"
+ }
+ Frame {
+ msec: 5664
+ hash: "0ba8b582234d9f0c198c0c9e18e1cb02"
+ }
+ Frame {
+ msec: 5680
+ hash: "f66eaf2b5c3529987c0d9d005351ed73"
+ }
+ Frame {
+ msec: 5696
+ hash: "75b0bb720fa4c77da3783b3ff31c2fae"
+ }
+ Frame {
+ msec: 5712
+ hash: "345b235bb7f13409378e5c0c370f2a41"
+ }
+ Frame {
+ msec: 5728
+ hash: "83b7e902dce4e0fdc4ef5d629188c23c"
+ }
+ Frame {
+ msec: 5744
+ hash: "04b9041c6f10969889d92e94785c7e88"
+ }
+ Frame {
+ msec: 5760
+ image: "itemlist.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "4f3a902addc34ecdaf390e2427cc52e7"
+ }
+ Frame {
+ msec: 5792
+ hash: "68d443f16c16821ffc9ca68b17c76034"
+ }
+ Frame {
+ msec: 5808
+ hash: "9d25adc77befa761ee376a9b43595b5e"
+ }
+ Frame {
+ msec: 5824
+ hash: "a68b1bc6c2963ee92c3a45f500667b3b"
+ }
+ Frame {
+ msec: 5840
+ hash: "d5268cd58c222451d48038e715e83802"
+ }
+ Frame {
+ msec: 5856
+ hash: "f37d461541a8ec7a4161b18748de6aea"
+ }
+ Frame {
+ msec: 5872
+ hash: "805319ac7ca842feb3649e92f8b5b72f"
+ }
+ Frame {
+ msec: 5888
+ hash: "73124472a05080891d4948d8ca273f8c"
+ }
+ Frame {
+ msec: 5904
+ hash: "b6e433a23282a50db2e165a2447ba3f6"
+ }
+ Frame {
+ msec: 5920
+ hash: "fd8d3f5688b1806998c6087e18c6c730"
+ }
+ Frame {
+ msec: 5936
+ hash: "f132dd459950ef2d18aa93ca950d0692"
+ }
+ Frame {
+ msec: 5952
+ hash: "ade5beb259b5277c333ca806fc9bdbec"
+ }
+ Frame {
+ msec: 5968
+ hash: "ade5beb259b5277c333ca806fc9bdbec"
+ }
+ Frame {
+ msec: 5984
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6000
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6016
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6032
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6048
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6064
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6080
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6096
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6112
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6128
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6144
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6160
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6176
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6192
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6208
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6224
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6240
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6256
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6272
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6288
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6304
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6320
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6336
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6352
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6368
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6384
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6400
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6416
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6432
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6448
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6464
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6480
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6496
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6512
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6528
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6544
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6560
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6576
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6592
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6608
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6624
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6640
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6656
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6672
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6688
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6704
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6720
+ image: "itemlist.6.png"
+ }
+ Frame {
+ msec: 6736
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6752
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6768
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6784
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6800
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6816
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6832
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6848
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6864
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6880
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6896
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6912
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6928
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6944
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6960
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6976
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 6992
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7008
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7024
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7040
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7056
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7072
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7088
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7104
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7120
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7136
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7152
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7168
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7184
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7200
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7216
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7232
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7248
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7264
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7280
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7296
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+ Frame {
+ msec: 7312
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ }
+}
diff --git a/tests/auto/declarative/visual/ListView/data/listview.0.png b/tests/auto/declarative/visual/ListView/data/listview.0.png
new file mode 100644
index 0000000..581e824
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/listview.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/listview.1.png b/tests/auto/declarative/visual/ListView/data/listview.1.png
new file mode 100644
index 0000000..581e824
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/listview.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/listview.10.png b/tests/auto/declarative/visual/ListView/data/listview.10.png
new file mode 100644
index 0000000..dcfca3f
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/listview.10.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/listview.11.png b/tests/auto/declarative/visual/ListView/data/listview.11.png
new file mode 100644
index 0000000..7cc4047
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/listview.11.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/listview.12.png b/tests/auto/declarative/visual/ListView/data/listview.12.png
new file mode 100644
index 0000000..a97f4ad
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/listview.12.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/listview.13.png b/tests/auto/declarative/visual/ListView/data/listview.13.png
new file mode 100644
index 0000000..7a8c6bd
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/listview.13.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/listview.14.png b/tests/auto/declarative/visual/ListView/data/listview.14.png
new file mode 100644
index 0000000..ae47356
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/listview.14.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/listview.15.png b/tests/auto/declarative/visual/ListView/data/listview.15.png
new file mode 100644
index 0000000..b3a7260
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/listview.15.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/listview.16.png b/tests/auto/declarative/visual/ListView/data/listview.16.png
new file mode 100644
index 0000000..581e824
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/listview.16.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/listview.17.png b/tests/auto/declarative/visual/ListView/data/listview.17.png
new file mode 100644
index 0000000..581e824
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/listview.17.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/listview.18.png b/tests/auto/declarative/visual/ListView/data/listview.18.png
new file mode 100644
index 0000000..581e824
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/listview.18.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/listview.19.png b/tests/auto/declarative/visual/ListView/data/listview.19.png
new file mode 100644
index 0000000..581e824
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/listview.19.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/listview.2.png b/tests/auto/declarative/visual/ListView/data/listview.2.png
new file mode 100644
index 0000000..579c68c
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/listview.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/listview.3.png b/tests/auto/declarative/visual/ListView/data/listview.3.png
new file mode 100644
index 0000000..b3a7260
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/listview.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/listview.4.png b/tests/auto/declarative/visual/ListView/data/listview.4.png
new file mode 100644
index 0000000..19758b0
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/listview.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/listview.5.png b/tests/auto/declarative/visual/ListView/data/listview.5.png
new file mode 100644
index 0000000..581e824
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/listview.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/listview.6.png b/tests/auto/declarative/visual/ListView/data/listview.6.png
new file mode 100644
index 0000000..82cac48
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/listview.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/listview.7.png b/tests/auto/declarative/visual/ListView/data/listview.7.png
new file mode 100644
index 0000000..9277a82
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/listview.7.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/listview.8.png b/tests/auto/declarative/visual/ListView/data/listview.8.png
new file mode 100644
index 0000000..8c36da7
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/listview.8.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/listview.9.png b/tests/auto/declarative/visual/ListView/data/listview.9.png
new file mode 100644
index 0000000..581e824
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/listview.9.png
Binary files differ
diff --git a/tests/auto/declarative/visual/ListView/data/listview.qml b/tests/auto/declarative/visual/ListView/data/listview.qml
new file mode 100644
index 0000000..cd5d7b4
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/data/listview.qml
@@ -0,0 +1,3079 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 32
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 48
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 64
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 80
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 96
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 112
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 128
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 144
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 160
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 176
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 192
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 208
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 224
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 240
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 256
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 272
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 288
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 304
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 320
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 336
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 352
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 368
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 384
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 400
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 416
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 432
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 448
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 464
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 480
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 496
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 512
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 528
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 544
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 560
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 576
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 592
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 608
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 624
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 640
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 656
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 672
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 688
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 704
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 720
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 736
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 752
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 768
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 784
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 800
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 816
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 832
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 848
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 864
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 880
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 896
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 912
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 928
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 944
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 960
+ image: "listview.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 992
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1008
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1024
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1040
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1056
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1072
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1088
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1104
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1120
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1136
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1152
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1168
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1184
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1200
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1216
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1232
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1248
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1264
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1280
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1296
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1312
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1328
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1344
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1360
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1376
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1392
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1408
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1424
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1440
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1456
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1472
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1488
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1504
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1520
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1536
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1552
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1568
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1584
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1600
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1616
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1632
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1648
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1664
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1680
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1696
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1712
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1728
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1744
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1760
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1776
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1792
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1808
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1824
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1840
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1856
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1872
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1888
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1904
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1920
+ image: "listview.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1952
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1968
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 1984
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2000
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2016
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2032
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2048
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2064
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2080
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2096
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2112
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2128
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2144
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2160
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2176
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2192
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2208
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2224
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2240
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2256
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2272
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2288
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2304
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2320
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2336
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2352
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2368
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2384
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2400
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2416
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2432
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2448
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2464
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2480
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2496
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2512
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2528
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2544
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2560
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2576
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2592
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 553; y: 267
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2608
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 2624
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 554; y: 267
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 555; y: 266
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2640
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 556; y: 265
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 558; y: 260
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2656
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 560; y: 256
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2672
+ hash: "c315e184c4dcb11d7e9fd4509a8b6a1f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 562; y: 250
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 566; y: 234
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2688
+ hash: "aeef1cacca9518408519b670443e396f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 568; y: 216
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2704
+ hash: "621626927f83bf7b36b78f5ca7ed4ed0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 572; y: 192
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 572; y: 192
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2720
+ hash: "b2aca965b745e98365195c52b9dd9a2c"
+ }
+ Frame {
+ msec: 2736
+ hash: "b80cc493e604c42aca2367e26bc9e844"
+ }
+ Frame {
+ msec: 2752
+ hash: "39165ad87fc687e0f165f8a2675173b5"
+ }
+ Frame {
+ msec: 2768
+ hash: "edd1da7c34c3eb7f1f16b782dfa41a13"
+ }
+ Frame {
+ msec: 2784
+ hash: "d31a7915cdb2a7f392e6edc3047a6606"
+ }
+ Frame {
+ msec: 2800
+ hash: "3038dbb3fe3c255adcbecfc106bacb99"
+ }
+ Frame {
+ msec: 2816
+ hash: "454137c508d76f2c38b8007247420b81"
+ }
+ Frame {
+ msec: 2832
+ hash: "16eb385d3ce3b186745974500f855a97"
+ }
+ Frame {
+ msec: 2848
+ hash: "8871fded1fbbdcb0fdfdaa2e6eecc3d1"
+ }
+ Frame {
+ msec: 2864
+ hash: "f49955dab8341e7ca472c3f547cbeaab"
+ }
+ Frame {
+ msec: 2880
+ image: "listview.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "c0ef41c682fa9802c9eb74fd249cfd40"
+ }
+ Frame {
+ msec: 2912
+ hash: "6174fea6ef04fbcefd32d6a0b35a3514"
+ }
+ Frame {
+ msec: 2928
+ hash: "7b2288a8be7b3c465e725aeb5788e91f"
+ }
+ Frame {
+ msec: 2944
+ hash: "b39d8cb650ee00c245b556235843490b"
+ }
+ Frame {
+ msec: 2960
+ hash: "9478ea0bf640924931d627cd8b607eba"
+ }
+ Frame {
+ msec: 2976
+ hash: "39743788f56c6f5c29fa9549e586d1ae"
+ }
+ Frame {
+ msec: 2992
+ hash: "ec8ab3547e10d18e9493b8fae5125591"
+ }
+ Frame {
+ msec: 3008
+ hash: "169b115d03db8c901db4f4c2909a18d3"
+ }
+ Frame {
+ msec: 3024
+ hash: "bf438b17a1e8df6d6bb05474cacd12a7"
+ }
+ Frame {
+ msec: 3040
+ hash: "2aad06334128659e143c4c6c8415a30b"
+ }
+ Frame {
+ msec: 3056
+ hash: "ea0e8d7387b9b54a47bb99c058093462"
+ }
+ Frame {
+ msec: 3072
+ hash: "e483e585399a47490599ca265cf73000"
+ }
+ Frame {
+ msec: 3088
+ hash: "43bed4aac1a2a9b66eafefc117424500"
+ }
+ Frame {
+ msec: 3104
+ hash: "ba5c36add368938f8134a0a88e599c00"
+ }
+ Frame {
+ msec: 3120
+ hash: "c905be5276a871bd1ac392580231c9e4"
+ }
+ Frame {
+ msec: 3136
+ hash: "0c96d9b0119513c1f327f9e6651e89cd"
+ }
+ Frame {
+ msec: 3152
+ hash: "c4ba0836dbb900600f8f4aed42eb1ea1"
+ }
+ Frame {
+ msec: 3168
+ hash: "253d014f89a616032664f29f268cfd85"
+ }
+ Frame {
+ msec: 3184
+ hash: "a5185192d7db7c4a4c8bec6cb5a2a73a"
+ }
+ Frame {
+ msec: 3200
+ hash: "d453cc5b89d3fa00586cc41d5a9a8092"
+ }
+ Frame {
+ msec: 3216
+ hash: "b3c39c0c06643612681b098101458d32"
+ }
+ Frame {
+ msec: 3232
+ hash: "09beec410a0ca7c47fe08991341aea0c"
+ }
+ Frame {
+ msec: 3248
+ hash: "c13c269b384029d04a05fd0170e5909e"
+ }
+ Frame {
+ msec: 3264
+ hash: "cafe360c512ab92804dc1fddae9b8fb6"
+ }
+ Frame {
+ msec: 3280
+ hash: "26dfe538a7edc8f43af1d78e678f3dfa"
+ }
+ Frame {
+ msec: 3296
+ hash: "11e03f6901a4bdbc1eabe72b1ddbee4b"
+ }
+ Frame {
+ msec: 3312
+ hash: "0ea8886b1256649665a1597f62cc633b"
+ }
+ Frame {
+ msec: 3328
+ hash: "013c34be077fb689333df9b04a931b3a"
+ }
+ Frame {
+ msec: 3344
+ hash: "d0e9f1d147e0767c12a89f33b5f2b5b3"
+ }
+ Frame {
+ msec: 3360
+ hash: "9888bf29cd868bad6b2593842413b283"
+ }
+ Frame {
+ msec: 3376
+ hash: "d8ec307a85cecaacaa908ceb34d5db5b"
+ }
+ Frame {
+ msec: 3392
+ hash: "4afe1df3e802b41d1b89b5fab4e35190"
+ }
+ Frame {
+ msec: 3408
+ hash: "e8f484ed8d2a6745ee87ac9544281d55"
+ }
+ Frame {
+ msec: 3424
+ hash: "48eaa0644a27cb3e53c75bd0ce08bf47"
+ }
+ Frame {
+ msec: 3440
+ hash: "f1523d82dfc5c136fbe8746449bb5013"
+ }
+ Frame {
+ msec: 3456
+ hash: "d664786f1a79f851e72aa48ee6736374"
+ }
+ Frame {
+ msec: 3472
+ hash: "e43bb6d0374c8bab67b5fafcaeb2a205"
+ }
+ Frame {
+ msec: 3488
+ hash: "77ef61827c993b16691a023e99cc7f7e"
+ }
+ Frame {
+ msec: 3504
+ hash: "6198e0d242db79e81fb81f621c78a3c9"
+ }
+ Frame {
+ msec: 3520
+ hash: "a66b4773ef05ca78aa12e2c8a151c53a"
+ }
+ Frame {
+ msec: 3536
+ hash: "52fa0b693c3de208e5943521eef5587c"
+ }
+ Frame {
+ msec: 3552
+ hash: "0e237f706f9c2c4c616271f9b9d014e5"
+ }
+ Frame {
+ msec: 3568
+ hash: "14edd1dc2371a9aadaa3c079d325fab6"
+ }
+ Frame {
+ msec: 3584
+ hash: "1fe873b07ee24edaea224939e10830f1"
+ }
+ Frame {
+ msec: 3600
+ hash: "30804b5eb2a6d99116475cbdc1a9c043"
+ }
+ Frame {
+ msec: 3616
+ hash: "c892c17ec947a910b74f5b8704405e9f"
+ }
+ Frame {
+ msec: 3632
+ hash: "696029b77512943001c9eba64191e633"
+ }
+ Frame {
+ msec: 3648
+ hash: "4c26bb0ca28d74a2bb79d0bfc8127361"
+ }
+ Frame {
+ msec: 3664
+ hash: "2d1539db88647d73b9c53cde7c424dd7"
+ }
+ Frame {
+ msec: 3680
+ hash: "fd20e4259b44357c93f22f35c698fe1b"
+ }
+ Frame {
+ msec: 3696
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3712
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3728
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3744
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3760
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3776
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3792
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3808
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3824
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3840
+ image: "listview.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3872
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3888
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3904
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3920
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3936
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3952
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3968
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 3984
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 4000
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 4016
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 4032
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 4048
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 4064
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 4080
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 4096
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 4112
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 4128
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Frame {
+ msec: 4144
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 521; y: 24
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4160
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4176
+ hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 32
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 37
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4192
+ hash: "a5df688148c264de1d376c9b87ddfa6b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 46
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4208
+ hash: "a4e2c1878b0afce0ee1eebd63e9c951a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 66
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 88
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4224
+ hash: "2f9a79278d492790ef86a09c77e95ff4"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 531; y: 136
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 531; y: 136
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4240
+ hash: "5b5ce7206b26528157c426f4e1e3e0a8"
+ }
+ Frame {
+ msec: 4256
+ hash: "65a1e5f81ab89b163aed46b984cca45e"
+ }
+ Frame {
+ msec: 4272
+ hash: "e28253ad5a2415251b68bcda1d7d4bd0"
+ }
+ Frame {
+ msec: 4288
+ hash: "71aae5abb4a9e9077053ea21dd3ec315"
+ }
+ Frame {
+ msec: 4304
+ hash: "33fcea38fc3b328b3294f9ac2a26aa1a"
+ }
+ Frame {
+ msec: 4320
+ hash: "6299eb1d87f371966307668b92de6a0b"
+ }
+ Frame {
+ msec: 4336
+ hash: "4f66d8c7cb6971d0fc24089d123c547b"
+ }
+ Frame {
+ msec: 4352
+ hash: "d9906d61b31fabf968290ebcd6688f34"
+ }
+ Frame {
+ msec: 4368
+ hash: "5a1945993ff8096ba6b933d45586044a"
+ }
+ Frame {
+ msec: 4384
+ hash: "331535e54da9bbdbc2fbf2b244ad0199"
+ }
+ Frame {
+ msec: 4400
+ hash: "4dc39de0c54f6e0b77f94f6ae6c345ec"
+ }
+ Frame {
+ msec: 4416
+ hash: "ec309a298ce246c13eb666488eb75016"
+ }
+ Frame {
+ msec: 4432
+ hash: "a133819f8adc6265eb0e438261c869e3"
+ }
+ Frame {
+ msec: 4448
+ hash: "da4d64fd6b3ae7d49ee5c5c8d0117a37"
+ }
+ Frame {
+ msec: 4464
+ hash: "620dd1c3fc41ce657eac9d1a5b765fd4"
+ }
+ Frame {
+ msec: 4480
+ hash: "ff1c370bd1bf75a98ae7125e7dd5a9db"
+ }
+ Frame {
+ msec: 4496
+ hash: "59c6e4297109b5cc7c197749867dddae"
+ }
+ Frame {
+ msec: 4512
+ hash: "91b1719e86529d0c35a53a2d0a095dd6"
+ }
+ Frame {
+ msec: 4528
+ hash: "2994663d35c9eb453a27c1a1fa9aeeb8"
+ }
+ Frame {
+ msec: 4544
+ hash: "ae4ec37b9f6a00b3c9139e5cfe13d32e"
+ }
+ Frame {
+ msec: 4560
+ hash: "a98340236d1b65f47e88684168c1429d"
+ }
+ Frame {
+ msec: 4576
+ hash: "34848b483ea6a2bd412e29d26beb3ab0"
+ }
+ Frame {
+ msec: 4592
+ hash: "dd9bae0e2fca84b265d8cb59686ff88d"
+ }
+ Frame {
+ msec: 4608
+ hash: "18b6ef6f5913b0612b76e7b2e25073dd"
+ }
+ Frame {
+ msec: 4624
+ hash: "9398aab9478279aed1bc40c9378f8da4"
+ }
+ Frame {
+ msec: 4640
+ hash: "a297a304c12102f23bd1e0f0207e0df9"
+ }
+ Frame {
+ msec: 4656
+ hash: "091db9138cd6ae801ad857105a83c8f9"
+ }
+ Frame {
+ msec: 4672
+ hash: "253938ca4a4f13433ddd502eb94cb7cd"
+ }
+ Frame {
+ msec: 4688
+ hash: "6002df1793d290e4e31ee0c91c37bbe6"
+ }
+ Frame {
+ msec: 4704
+ hash: "212476fa1c3a52fb8eba03ec3aecdcd8"
+ }
+ Frame {
+ msec: 4720
+ hash: "80d4d8434d4e96a2bc23f5ed060d6ddc"
+ }
+ Frame {
+ msec: 4736
+ hash: "2d4add725f31a04558635ce4b73a758a"
+ }
+ Frame {
+ msec: 4752
+ hash: "57c06022ec1e502c4f49f43063c433e7"
+ }
+ Frame {
+ msec: 4768
+ hash: "8393e97990993f9d5f68ea65f8e4a2db"
+ }
+ Frame {
+ msec: 4784
+ hash: "9a1fcd96dffaf5c79ecc7f9427e02499"
+ }
+ Frame {
+ msec: 4800
+ image: "listview.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "5ae722cf541e3453e73bbee57dc379e9"
+ }
+ Frame {
+ msec: 4832
+ hash: "fc7326c2e2e56d9c3036e8dfc2ea77a8"
+ }
+ Frame {
+ msec: 4848
+ hash: "f22a2a68cea158f333b0457025d75490"
+ }
+ Frame {
+ msec: 4864
+ hash: "d684c8aa9b835779080f170cafead40f"
+ }
+ Frame {
+ msec: 4880
+ hash: "dd451e5e421f929d015981bc7aeb8c66"
+ }
+ Frame {
+ msec: 4896
+ hash: "d066f228295db7f46520495167d3e946"
+ }
+ Frame {
+ msec: 4912
+ hash: "ebf640a457e3498bade3220aafa70331"
+ }
+ Frame {
+ msec: 4928
+ hash: "190f5b1f3ce9d200790c34c50bcc62c5"
+ }
+ Frame {
+ msec: 4944
+ hash: "9d4ad865246eb008afa40740b5c9a208"
+ }
+ Frame {
+ msec: 4960
+ hash: "81c8b2c0b4f9e74f24d328a1d9b40a9f"
+ }
+ Frame {
+ msec: 4976
+ hash: "24acc300307e71bee79bce8de76f56cb"
+ }
+ Frame {
+ msec: 4992
+ hash: "1f9d31f94cfce6f868bfcc8a104d2465"
+ }
+ Frame {
+ msec: 5008
+ hash: "7a3cab008dcb7a893ae30797b33df6f2"
+ }
+ Frame {
+ msec: 5024
+ hash: "38d561a2950434e59513439c7f1120ea"
+ }
+ Frame {
+ msec: 5040
+ hash: "8d34131faa15bc126bd4d9ef3be39ef5"
+ }
+ Frame {
+ msec: 5056
+ hash: "85d57ef15791b56deb537795dd87911e"
+ }
+ Frame {
+ msec: 5072
+ hash: "71e932169915a6c8c2cef0b22febf316"
+ }
+ Frame {
+ msec: 5088
+ hash: "8b3452981963aeebadc9ac2013150263"
+ }
+ Frame {
+ msec: 5104
+ hash: "a3fb8abecfeb48ba1cd1fd8f40896fa0"
+ }
+ Frame {
+ msec: 5120
+ hash: "f53ab533f6a58ae45139f3da4bf8ab4e"
+ }
+ Frame {
+ msec: 5136
+ hash: "9ec7012404f3c1c7795810dcee5acc3b"
+ }
+ Frame {
+ msec: 5152
+ hash: "99ca43bab532dd5d7566e596c65053ce"
+ }
+ Frame {
+ msec: 5168
+ hash: "0af83ad2416821cc230cd2856d1a3e39"
+ }
+ Frame {
+ msec: 5184
+ hash: "86fa23ddf2005bbf35238ae04ae554ac"
+ }
+ Frame {
+ msec: 5200
+ hash: "bb52a748f1d85dde410cfa4f24e3ed20"
+ }
+ Frame {
+ msec: 5216
+ hash: "898b96bc5ee9a3ac61764e5cd9af8cfb"
+ }
+ Frame {
+ msec: 5232
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5248
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5264
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5280
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5296
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5312
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5328
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5344
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5360
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5376
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5392
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5408
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5424
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5440
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5456
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5472
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5488
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5504
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5520
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5536
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5552
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5568
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5584
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5600
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5616
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5632
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5648
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5664
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5680
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5696
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5712
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5728
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5744
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5760
+ image: "listview.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5792
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5808
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5824
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5840
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5856
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5872
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5888
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5904
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5920
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5936
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5952
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Frame {
+ msec: 5968
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 111; y: 230
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 111; y: 227
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5984
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 111; y: 223
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6000
+ hash: "3b88645092be28037fca4a6034f5b2f7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 111; y: 216
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 111; y: 210
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6016
+ hash: "0076b55d3da4ca365688b6a2c984103f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 112; y: 205
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6032
+ hash: "db846ad8e3200ca1fce36a38dc7beab8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 112; y: 192
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6048
+ hash: "3cb6b25725b4285f9c096d595224c5ca"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 111; y: 180
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6064
+ hash: "1832e12fdf3b464b02b296e727b33694"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 110; y: 173
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6080
+ hash: "6d18d2b5f65cbba4915d0725d24b40f3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 109; y: 158
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 107; y: 140
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6096
+ hash: "79bc7afc6b1aa5f8904b3e6d5d4a9389"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 103; y: 124
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6112
+ hash: "4436f2d15304c839aacec486c1fd6d96"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 101; y: 111
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6128
+ hash: "c3bffc7c95893cf9bbd8596208b7f657"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 101; y: 105
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 101; y: 100
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6144
+ hash: "04231c2fdc02729aa34ed4e403dd373b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 101; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6160
+ hash: "392d75c4b372825e78366eb63a618170"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 101; y: 87
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 102; y: 83
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6176
+ hash: "7f91f7bdb0cb62d600ac4aa573681fe3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 102; y: 79
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6192
+ hash: "69207181a382650c5e33145555f0d9ba"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 103; y: 76
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 103; y: 72
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6208
+ hash: "65a184b5c49b02e08114e437483f928d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 104; y: 68
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 105; y: 64
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6224
+ hash: "c22da9ce54d04f51fb55da755753a509"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 105; y: 61
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6240
+ hash: "59dbd5216847a62f60a1d0701a15bb62"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 106; y: 57
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 106; y: 53
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6256
+ hash: "bbfc902db6e6ca253afb1c90306b2a63"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 106; y: 47
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 106; y: 47
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6272
+ hash: "5c41f194afec5f7e3db9d98673d03d5c"
+ }
+ Frame {
+ msec: 6288
+ hash: "5c41f194afec5f7e3db9d98673d03d5c"
+ }
+ Frame {
+ msec: 6304
+ hash: "deb06d0f915d5f6ec39b1820d57b6af6"
+ }
+ Frame {
+ msec: 6320
+ hash: "deb06d0f915d5f6ec39b1820d57b6af6"
+ }
+ Frame {
+ msec: 6336
+ hash: "2a1a1f9239a6ccb308e51796f9b0bb89"
+ }
+ Frame {
+ msec: 6352
+ hash: "3c1b44201616b8271023bf05a3f3f0f7"
+ }
+ Frame {
+ msec: 6368
+ hash: "87afcef49db8b2b547e85e834f8ec304"
+ }
+ Frame {
+ msec: 6384
+ hash: "290081b4b1272ef09ec9964c128e61b5"
+ }
+ Frame {
+ msec: 6400
+ hash: "19bb3b23ee4b14a5f0a313106ef7c8c1"
+ }
+ Frame {
+ msec: 6416
+ hash: "65a184b5c49b02e08114e437483f928d"
+ }
+ Frame {
+ msec: 6432
+ hash: "832d2aefbcaf776f35039be527d367c5"
+ }
+ Frame {
+ msec: 6448
+ hash: "69207181a382650c5e33145555f0d9ba"
+ }
+ Frame {
+ msec: 6464
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6480
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6496
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6512
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6528
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6544
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6560
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6576
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6592
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6608
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6624
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6640
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6656
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6672
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6688
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6704
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6720
+ image: "listview.6.png"
+ }
+ Frame {
+ msec: 6736
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6752
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6768
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6784
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6800
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6816
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6832
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6848
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6864
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6880
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6896
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6912
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6928
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6944
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6960
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6976
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 6992
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7008
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7024
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7040
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7056
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7072
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7088
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7104
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7120
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7136
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7152
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7168
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7184
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7200
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7216
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7232
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7248
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7264
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7280
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Frame {
+ msec: 7296
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 519; y: 276
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7312
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 519; y: 275
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7328
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 519; y: 274
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7344
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 518; y: 273
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 518; y: 272
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7360
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 518; y: 271
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7376
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 518; y: 268
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7392
+ hash: "89fe95733476bd000457e36ee4ecfc73"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 518; y: 266
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 518; y: 265
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7408
+ hash: "9047f597b9e59ca652c172338bed6ef9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 517; y: 262
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7424
+ hash: "87476f78daecd6bb49e8d6e673d28100"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 517; y: 260
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7440
+ hash: "6bfd895c6b7d97e4102eb26608cdfeca"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 517; y: 254
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7456
+ hash: "e4c2b75beaee54a5781a5acbeb37ea64"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 517; y: 249
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7472
+ hash: "d5e816768e9c3db0631416bd86b1b461"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 517; y: 243
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7488
+ hash: "22cb512b302afc6c3c9dec1d47b3bf03"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 517; y: 237
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7504
+ hash: "a7e458e007954bd908cf27a1841d36ea"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 517; y: 231
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7520
+ hash: "0f9fa53b247f72e9a8ff6201b188b410"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 517; y: 225
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7536
+ hash: "c986ea3853dd33f7f2b5629f67429423"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 517; y: 219
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7552
+ hash: "114ffaa5cf38e4884a1d477884541b44"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 518; y: 215
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7568
+ hash: "7cdf1bb327484618909ded5411aca4ec"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 519; y: 208
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7584
+ hash: "d4c005194ed510f5d54a811176943dc2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 520; y: 202
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7600
+ hash: "3103351bc83675c877fb6dcd1a6ddbbc"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 196
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7616
+ hash: "2c13ddda8d89501c9487b83f8b115570"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 189
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7632
+ hash: "476834b6d88077f9983ed358c06bd0c3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 185
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7648
+ hash: "cc2148c6a7ba0bbe6ceea848b7e48621"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 177
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7664
+ hash: "5b8824848dd1de3632b26e04e95b5899"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 169
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7680
+ image: "listview.7.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 160
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7696
+ hash: "d0a4a8b631e3494043f261fb8da67938"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 156
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7712
+ hash: "985111215c3959a45b293879af701318"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 147
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7728
+ hash: "ed5917a3fe95777f2efdaa154af0c489"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 144
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7744
+ hash: "6fa9de2983f0e30cb96c035c28757b93"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 137
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7760
+ hash: "fd568c7d27618a71b0f0882ca57b685b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 130
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7776
+ hash: "f5b941f5741a9a78122605576809c395"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 124
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7792
+ hash: "ffc96a85d7dbbed257b69a0c735e21b8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 122
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7808
+ hash: "cfb6335c5449554e631d6e3106ea8a00"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7824
+ hash: "ff9786e85ee8af6177ac8e5cc1307462"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 111
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7840
+ hash: "3140b49dfee8e690b5c778044385e107"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 106
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7856
+ hash: "0d899af24685a9998a6b961023286fde"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 104
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7872
+ hash: "99ee1e8803c05e546a721b0c9ee39499"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 101
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7888
+ hash: "96e7da2f895500a786ed36cb295e9003"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7904
+ hash: "cd369fc5dc31814208e56cf7cd0decea"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7920
+ hash: "5fee72994b65a45b4900a3073f86a3e1"
+ }
+ Frame {
+ msec: 7936
+ hash: "9a2f8a65d842b8f92998e6411f7cd53c"
+ }
+ Frame {
+ msec: 7952
+ hash: "2848d69017ce71ae101ccdfa7c67f933"
+ }
+ Frame {
+ msec: 7968
+ hash: "6568aa88e81f988f65da435df7166167"
+ }
+ Frame {
+ msec: 7984
+ hash: "d5f15ee08a2d7667786757a378a7a7f4"
+ }
+ Frame {
+ msec: 8000
+ hash: "9b566bd02a561b32d1a4c1ec99c2e2c3"
+ }
+ Frame {
+ msec: 8016
+ hash: "580419e1c9e91046547d913f6b8790a4"
+ }
+ Frame {
+ msec: 8032
+ hash: "a5a3cd610ec0b35af1295ee6c41e09e3"
+ }
+ Frame {
+ msec: 8048
+ hash: "a5a3cd610ec0b35af1295ee6c41e09e3"
+ }
+ Frame {
+ msec: 8064
+ hash: "a5a3cd610ec0b35af1295ee6c41e09e3"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 521; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8080
+ hash: "a5a3cd610ec0b35af1295ee6c41e09e3"
+ }
+ Frame {
+ msec: 8096
+ hash: "a5a3cd610ec0b35af1295ee6c41e09e3"
+ }
+ Frame {
+ msec: 8112
+ hash: "83b91a371d682a501bc3a3fceabe4f8c"
+ }
+ Frame {
+ msec: 8128
+ hash: "798b1dbfa0cce362213f426e2c60ac0e"
+ }
+ Frame {
+ msec: 8144
+ hash: "d71b6a693c430a618c23413cb65bb320"
+ }
+ Frame {
+ msec: 8160
+ hash: "2baae394390da39447a67151bc503d65"
+ }
+ Frame {
+ msec: 8176
+ hash: "06688b05c61a7b862d39534207a8adab"
+ }
+ Frame {
+ msec: 8192
+ hash: "a1d3042e16709817906dcdc673ee52c7"
+ }
+ Frame {
+ msec: 8208
+ hash: "236dd41feac1b1a8a4bd7911bb184da2"
+ }
+ Frame {
+ msec: 8224
+ hash: "f3ec821bba1d32e90bdab0e85c07d7d8"
+ }
+ Frame {
+ msec: 8240
+ hash: "e328c35adf7ffc3d7e3af97e798ec8a5"
+ }
+ Frame {
+ msec: 8256
+ hash: "651101db68fd3ed1dc5f441c126dc31b"
+ }
+ Frame {
+ msec: 8272
+ hash: "651101db68fd3ed1dc5f441c126dc31b"
+ }
+ Frame {
+ msec: 8288
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8304
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8320
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8336
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8352
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8368
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8384
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8400
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8416
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8432
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8448
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8464
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8480
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8496
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8512
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8528
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8544
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8560
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8576
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8592
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8608
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8624
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8640
+ image: "listview.8.png"
+ }
+ Frame {
+ msec: 8656
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8672
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8688
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8704
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8720
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8736
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8752
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8768
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8784
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8800
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8816
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8832
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8848
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8864
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8880
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8896
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8912
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8928
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8944
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8960
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8976
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 8992
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9008
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9024
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9040
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9056
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9072
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9088
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9104
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9120
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9136
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9152
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9168
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9184
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9200
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9216
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9232
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9248
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9264
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9280
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9296
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9312
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9328
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9344
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9360
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9376
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9392
+ hash: "1171be123a361d72859c25434573482c"
+ }
+ Frame {
+ msec: 9408
+ hash: "1171be123a361d72859c25434573482c"
+ }
+}
diff --git a/tests/auto/declarative/visual/ListView/itemlist.qml b/tests/auto/declarative/visual/ListView/itemlist.qml
new file mode 100644
index 0000000..8cbbdb0
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/itemlist.qml
@@ -0,0 +1,40 @@
+// This example demonstrates placing items in a view using
+// a VisualItemModel
+
+import Qt 4.6
+
+Rectangle {
+ color: "lightgray"
+ width: 240
+ height: 320
+
+ VisualItemModel {
+ id: itemModel
+ objectName: "itemModel"
+ Rectangle {
+ objectName: "item1"
+ height: view.height; width: view.width; color: "#FFFEF0"
+ }
+ Rectangle {
+ objectName: "item2"
+ height: view.height; width: view.width; color: "#F0FFF7"
+ }
+ Rectangle {
+ objectName: "item3"
+ height: view.height; width: view.width; color: "#F4F0FF"
+ }
+ }
+
+ ListView {
+ id: view
+ objectName: "view"
+ anchors.fill: parent
+ anchors.bottomMargin: 30
+ model: itemModel
+ preferredHighlightBegin: 0
+ preferredHighlightEnd: 0
+ highlightRangeMode: "StrictlyEnforceRange"
+ orientation: ListView.Horizontal
+ flickDeceleration: 2000
+ }
+}
diff --git a/tests/auto/declarative/visual/ListView/listview.qml b/tests/auto/declarative/visual/ListView/listview.qml
new file mode 100644
index 0000000..fb9eecd
--- /dev/null
+++ b/tests/auto/declarative/visual/ListView/listview.qml
@@ -0,0 +1,81 @@
+import Qt 4.6
+
+Rectangle {
+ width: 600; height: 300; color: "white"
+
+ ListModel {
+ id: myModel
+ ListElement {
+ itemColor: "red"
+ }
+ ListElement {
+ itemColor: "green"
+ }
+ ListElement {
+ itemColor: "blue"
+ }
+ ListElement {
+ itemColor: "orange"
+ }
+ ListElement {
+ itemColor: "brown"
+ }
+ ListElement {
+ itemColor: "yellow"
+ }
+ ListElement {
+ itemColor: "purple"
+ }
+ ListElement {
+ itemColor: "darkred"
+ }
+ ListElement {
+ itemColor: "darkblue"
+ }
+ }
+
+ Component {
+ id: myDelegate
+ Item {
+ width: 200; height: 50
+ Rectangle {
+ x: 5; y : 5
+ width: 190; height: 40
+ opacity: 0.5
+ color: itemColor
+ }
+ }
+ }
+
+ Component {
+ id: myHighlight
+ Rectangle { color: "black" }
+ }
+
+ ListView {
+ id: list1
+ width: 200; height: parent.height
+ model: myModel; delegate: myDelegate
+ highlight: myHighlight; currentIndex: list3.currentIndex
+ focus: true
+ }
+ ListView {
+ id: list2
+ x: 200; width: 200; height: parent.height
+ model: myModel; delegate: myDelegate; highlight: myHighlight
+ preferredHighlightBegin: 80
+ preferredHighlightEnd: 220
+ highlightRangeMode: "ApplyRange"
+ currentIndex: list1.currentIndex
+ }
+ ListView {
+ id: list3
+ x: 400; width: 200; height: parent.height
+ model: myModel; delegate: myDelegate; highlight: myHighlight
+ currentIndex: list1.currentIndex
+ preferredHighlightBegin: 125
+ preferredHighlightEnd: 125
+ highlightRangeMode: "StrictlyEnforceRange"
+ flickDeceleration: 1000
+ }
+}
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.0.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.0.png
new file mode 100644
index 0000000..c59b816
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.1.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.1.png
new file mode 100644
index 0000000..d4dbc70
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.10.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.10.png
new file mode 100644
index 0000000..ed9d345
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.10.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.11.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.11.png
new file mode 100644
index 0000000..ed9d345
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.11.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.12.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.12.png
new file mode 100644
index 0000000..45ee400
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.12.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.13.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.13.png
new file mode 100644
index 0000000..c73e158
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.13.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.14.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.14.png
new file mode 100644
index 0000000..e2fff6d
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.14.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.15.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.15.png
new file mode 100644
index 0000000..d7a13df
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.15.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.16.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.16.png
new file mode 100644
index 0000000..beb3094
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.16.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.17.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.17.png
new file mode 100644
index 0000000..beb3094
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.17.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.18.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.18.png
new file mode 100644
index 0000000..beb3094
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.18.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.19.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.19.png
new file mode 100644
index 0000000..d3a2650
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.19.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.2.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.2.png
new file mode 100644
index 0000000..a09dd28
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.20.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.20.png
new file mode 100644
index 0000000..600462a
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.20.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.21.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.21.png
new file mode 100644
index 0000000..6defca0
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.21.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.22.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.22.png
new file mode 100644
index 0000000..91967e1
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.22.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.3.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.3.png
new file mode 100644
index 0000000..d099a79
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.4.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.4.png
new file mode 100644
index 0000000..385efc8
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.5.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.5.png
new file mode 100644
index 0000000..25a7c3c
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.6.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.6.png
new file mode 100644
index 0000000..25a7c3c
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.7.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.7.png
new file mode 100644
index 0000000..7a24f51
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.7.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.8.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.8.png
new file mode 100644
index 0000000..7a24f51
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.8.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.9.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.9.png
new file mode 100644
index 0000000..45ee400
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.9.png
Binary files differ
diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.qml b/tests/auto/declarative/visual/Package_Views/data/packageviews.qml
new file mode 100644
index 0000000..d062667
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.qml
@@ -0,0 +1,3751 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 32
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 48
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 64
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 80
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 96
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 112
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 128
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 144
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 160
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 176
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 192
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 208
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 224
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 240
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 256
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 272
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 288
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 304
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 320
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 336
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 352
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 368
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 384
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 400
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 416
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 432
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 448
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 464
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 480
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 496
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 512
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 528
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 544
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 560
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 576
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 592
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 608
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 624
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 640
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 656
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 672
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 688
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 704
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 720
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 736
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 752
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 768
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 784
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 800
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 816
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 832
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 848
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 864
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 880
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 896
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 912
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 928
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 944
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 960
+ image: "packageviews.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 992
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1008
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1024
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1040
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1056
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1072
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1088
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1104
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1120
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1136
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1152
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1168
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1184
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1200
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1216
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1232
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1248
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1264
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1280
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1296
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1312
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1328
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1344
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1360
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Frame {
+ msec: 1376
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 57; y: 164
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1392
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 57; y: 162
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1408
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 57; y: 159
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 57; y: 156
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1424
+ hash: "a327426c93b523526f993b5271ab4501"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 56; y: 152
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 56; y: 147
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1440
+ hash: "87b7cacfb2d9e8ad916e331b2cf1f13e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 55; y: 141
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 54; y: 133
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1456
+ hash: "34290c1435c1a96d08152479d2d1334e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 54; y: 126
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 54; y: 126
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1472
+ hash: "ef5fb09ec8fb4b0d97c864618d6f6231"
+ }
+ Frame {
+ msec: 1488
+ hash: "d5b4c2e1d4b0bc877c99739a67b4a4fb"
+ }
+ Frame {
+ msec: 1504
+ hash: "a3623a3f253590d51ee03b6849e88edb"
+ }
+ Frame {
+ msec: 1520
+ hash: "4c1115f1041629b7c37cf4ae001fd7d3"
+ }
+ Frame {
+ msec: 1536
+ hash: "845bb3d1f52bee4a469fb12d6875a323"
+ }
+ Frame {
+ msec: 1552
+ hash: "eb08b5a671149005dbafc8507bb78b18"
+ }
+ Frame {
+ msec: 1568
+ hash: "16744a5b90b29954faf0710010ac6369"
+ }
+ Frame {
+ msec: 1584
+ hash: "322bbe367fbbf0bf07f9153da652a5fc"
+ }
+ Frame {
+ msec: 1600
+ hash: "257769f7c3e24bb2d0cd674dfbe42913"
+ }
+ Frame {
+ msec: 1616
+ hash: "8e299cbcaeae4d53d0fc05e03d36e0d9"
+ }
+ Frame {
+ msec: 1632
+ hash: "f3fb7f30336045abb4557247aab5bde1"
+ }
+ Frame {
+ msec: 1648
+ hash: "468400fb4e9bfa454ea00f19aa5d77b5"
+ }
+ Frame {
+ msec: 1664
+ hash: "429cc820ada7a515b2cb71f133320949"
+ }
+ Frame {
+ msec: 1680
+ hash: "721ec7594d8f815e5648eb8d570d1179"
+ }
+ Frame {
+ msec: 1696
+ hash: "9bc4105a0456c36738c435323e690db1"
+ }
+ Frame {
+ msec: 1712
+ hash: "e54a84718dbdc45dd814089051772585"
+ }
+ Frame {
+ msec: 1728
+ hash: "2c969450ede6b6ea7e0e68ee54d02aaa"
+ }
+ Frame {
+ msec: 1744
+ hash: "c2015dd1d4bd223a7fe1df03027af2f3"
+ }
+ Frame {
+ msec: 1760
+ hash: "74108fedfb0967adea181893834bcd9b"
+ }
+ Frame {
+ msec: 1776
+ hash: "b04a22f1cfde6ede57117992cd97dc1c"
+ }
+ Frame {
+ msec: 1792
+ hash: "271d71cb03dd38100812466a973b79ef"
+ }
+ Frame {
+ msec: 1808
+ hash: "130709eecd8eca395085020a83e7553a"
+ }
+ Frame {
+ msec: 1824
+ hash: "a0e5e187ed5245fd766803d266195e6b"
+ }
+ Frame {
+ msec: 1840
+ hash: "d29c145f3ba39a7c2c6ac54b27f9cea1"
+ }
+ Frame {
+ msec: 1856
+ hash: "6e41349b4adb6e37a2f9f2482c0aa5b1"
+ }
+ Frame {
+ msec: 1872
+ hash: "c02c52d3c87c6befb65f3bf392981cd5"
+ }
+ Frame {
+ msec: 1888
+ hash: "ec48d113c8468bd1e1b465e248eecaee"
+ }
+ Frame {
+ msec: 1904
+ hash: "a2c9b917d1f0cff0e088d3b624d9eeb8"
+ }
+ Frame {
+ msec: 1920
+ image: "packageviews.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "c4d4f8a351316b4a33f42f5fb030f304"
+ }
+ Frame {
+ msec: 1952
+ hash: "1baee6be1da687309d84a992e430c915"
+ }
+ Frame {
+ msec: 1968
+ hash: "4245f02817f7a674c34c581cbd9e1181"
+ }
+ Frame {
+ msec: 1984
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2000
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2016
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2032
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2048
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2064
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2080
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2096
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2112
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2128
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2144
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2160
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2176
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2192
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2208
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2224
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2240
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2256
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2272
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2288
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 70; y: 89
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2304
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2320
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2336
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2352
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 70; y: 89
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2368
+ hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ }
+ Frame {
+ msec: 2384
+ hash: "3b9a75225adddb01e92286463e15bf98"
+ }
+ Frame {
+ msec: 2400
+ hash: "32f99602756898b4ec607d4124b5120f"
+ }
+ Frame {
+ msec: 2416
+ hash: "60007f14752d2d87ba6e335ad596f1ad"
+ }
+ Frame {
+ msec: 2432
+ hash: "dcfad2407f53f83964fa7be762a137bd"
+ }
+ Frame {
+ msec: 2448
+ hash: "fcc1a30a33bec046868734014132eb70"
+ }
+ Frame {
+ msec: 2464
+ hash: "f60592829a2765b3cd3a0cecb9c45426"
+ }
+ Frame {
+ msec: 2480
+ hash: "a0e26063acd1b53b5eeeb31187f38336"
+ }
+ Frame {
+ msec: 2496
+ hash: "d7f3e776038bd479db292bcba3a65fc7"
+ }
+ Frame {
+ msec: 2512
+ hash: "4af31954235ab8a7cf8462eaa64d7dda"
+ }
+ Frame {
+ msec: 2528
+ hash: "aff3f287c07f546e0d3e9e68731d82fe"
+ }
+ Frame {
+ msec: 2544
+ hash: "75fbc4e26466e8a1f66503addfcbb525"
+ }
+ Frame {
+ msec: 2560
+ hash: "cb4c91f725ec46dd066475efc2bc2d65"
+ }
+ Frame {
+ msec: 2576
+ hash: "106434203ccc2fd8246c56520095a473"
+ }
+ Frame {
+ msec: 2592
+ hash: "129ced0e7fc406e81b1ced72397adc5c"
+ }
+ Frame {
+ msec: 2608
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2624
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2640
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2656
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2672
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2688
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2704
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2720
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2736
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2752
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2768
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2784
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2800
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2816
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2832
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2848
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2864
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2880
+ image: "packageviews.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2912
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2928
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2944
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2960
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2976
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 2992
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3008
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3024
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3040
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3056
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3072
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3088
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3104
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3120
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3136
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3152
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3168
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3184
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3200
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3216
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3232
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3248
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3264
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3280
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3296
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3312
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3328
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3344
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3360
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3376
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3392
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 49; y: 162
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3408
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Frame {
+ msec: 3424
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 49; y: 161
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3440
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 49; y: 159
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 48; y: 157
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3456
+ hash: "49903693b112d5f35c4e877bef6bbdb0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 48; y: 153
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 48; y: 149
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3472
+ hash: "1c84452b0ce90ae6f136f5bcce408220"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 50; y: 144
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 50; y: 138
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 50; y: 138
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3488
+ hash: "4c77d402b995297dadb5e671f071605f"
+ }
+ Frame {
+ msec: 3504
+ hash: "babd28626a81bd48b39b56f8da69c360"
+ }
+ Frame {
+ msec: 3520
+ hash: "71654a76f9b94fafaf3767003598fb96"
+ }
+ Frame {
+ msec: 3536
+ hash: "87ad69a660e072e71f940db93be3a949"
+ }
+ Frame {
+ msec: 3552
+ hash: "147f7f3f1913bc5ac5889c1a4daa8026"
+ }
+ Frame {
+ msec: 3568
+ hash: "9c26b3ad7a5dacd56028afa7bf4deef6"
+ }
+ Frame {
+ msec: 3584
+ hash: "18611ff90e5af36c9b6396c3df4cd646"
+ }
+ Frame {
+ msec: 3600
+ hash: "84701fd73ed8e1951bd4c806b70654ac"
+ }
+ Frame {
+ msec: 3616
+ hash: "42b40f1683beb23f4fe5ade066c0626f"
+ }
+ Frame {
+ msec: 3632
+ hash: "8c6aeefaa6f36cdffcf7bdb1597c6fbe"
+ }
+ Frame {
+ msec: 3648
+ hash: "731cea2e0d8fb8aac6ae919b23b89b87"
+ }
+ Frame {
+ msec: 3664
+ hash: "d4dc70a8e09e7ec03e7c1f5123b7abef"
+ }
+ Frame {
+ msec: 3680
+ hash: "5246e2f52aa104e8030eef105a5b5a7c"
+ }
+ Frame {
+ msec: 3696
+ hash: "a9c3d0034c09ba81d19d57ff550d7b4f"
+ }
+ Frame {
+ msec: 3712
+ hash: "e9092b1be19273f1f29912cd493dd238"
+ }
+ Frame {
+ msec: 3728
+ hash: "c2b19c7b818c94e932558676a026f049"
+ }
+ Frame {
+ msec: 3744
+ hash: "6627c4d6daab8e6500dbd0d921bc1ebd"
+ }
+ Frame {
+ msec: 3760
+ hash: "45c584ca18e8bfd6aa495c16a977662a"
+ }
+ Frame {
+ msec: 3776
+ hash: "de79039a8bb623f7d48afe1549ae23e0"
+ }
+ Frame {
+ msec: 3792
+ hash: "076d29278466038071095093266553f5"
+ }
+ Frame {
+ msec: 3808
+ hash: "73ed162dc5f9983bf22446f63691f7e4"
+ }
+ Frame {
+ msec: 3824
+ hash: "4cc3648635884a69191f0cfe2051f621"
+ }
+ Frame {
+ msec: 3840
+ image: "packageviews.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 3872
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 3888
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 3904
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 3920
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 3936
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 3952
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 3968
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 3984
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4000
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4016
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4032
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4048
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4064
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4080
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4096
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4112
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4128
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4144
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4160
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4176
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4192
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4208
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4224
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4240
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4256
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4272
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4288
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4304
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4320
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4336
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4352
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Frame {
+ msec: 4368
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 151; y: 170
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 151; y: 168
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4384
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 152; y: 166
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 153; y: 163
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4400
+ hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 154; y: 160
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 155; y: 154
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4416
+ hash: "ac75b9adaecd10206c4daa07c93adb27"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 155; y: 148
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 156; y: 141
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4432
+ hash: "539ec244fd42801cfcf97adc12f48786"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 160; y: 121
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4448
+ hash: "7d7bc6f7d2ff1da352ddab0d679906e7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 162; y: 101
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 166; y: 83
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 166; y: 83
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4464
+ hash: "4b508eb55971a03c6dc8a50d0244fa21"
+ }
+ Frame {
+ msec: 4480
+ hash: "2ceb497ca10e6448a019b62a225a72e4"
+ }
+ Frame {
+ msec: 4496
+ hash: "1fd9b89ebcb8e707c9b1b13ba64061b4"
+ }
+ Frame {
+ msec: 4512
+ hash: "24a3a48843860f643e55ca6dfec84f98"
+ }
+ Frame {
+ msec: 4528
+ hash: "48ea9398101f44a707c44ee1c5102d0c"
+ }
+ Frame {
+ msec: 4544
+ hash: "d8f2cebcdb542e75bbbaa4391ca881b8"
+ }
+ Frame {
+ msec: 4560
+ hash: "df35827ac111c67588922aadd45b3c85"
+ }
+ Frame {
+ msec: 4576
+ hash: "c1e612548c8d5c2f844e94ad4c0f1db4"
+ }
+ Frame {
+ msec: 4592
+ hash: "c298bccebeb1f4528c935e5fd256479c"
+ }
+ Frame {
+ msec: 4608
+ hash: "4c01d969eba4eca32b8a3b7f6f9c99f0"
+ }
+ Frame {
+ msec: 4624
+ hash: "66c783ae698cb91195088591a9bd67c1"
+ }
+ Frame {
+ msec: 4640
+ hash: "5419f6889162fb0db6b8c9e521f57f4f"
+ }
+ Frame {
+ msec: 4656
+ hash: "d153dbf30acf36145d7fcb8e37dd5c6d"
+ }
+ Frame {
+ msec: 4672
+ hash: "ffbf186683dc979ef29cdd5ff50296fc"
+ }
+ Frame {
+ msec: 4688
+ hash: "ddcedde95d1ebcafe5b73924ecfa047a"
+ }
+ Frame {
+ msec: 4704
+ hash: "d94b9e92f2c1a5e0ea2f8dd21a905517"
+ }
+ Frame {
+ msec: 4720
+ hash: "92c27d497128ccdcbfe8224a0f55a302"
+ }
+ Frame {
+ msec: 4736
+ hash: "7146017581b03e6551822653e54d5001"
+ }
+ Frame {
+ msec: 4752
+ hash: "a39567e01b8963d3b71f5f525d1582d4"
+ }
+ Frame {
+ msec: 4768
+ hash: "842654ef5a24143e41412b2450b6024c"
+ }
+ Frame {
+ msec: 4784
+ hash: "c2a002588b4b3f89806d6d283c39ea54"
+ }
+ Frame {
+ msec: 4800
+ image: "packageviews.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "2bea5cc22ea4989f8f07fbf62d09880b"
+ }
+ Frame {
+ msec: 4832
+ hash: "b8326b959b75b05c050ff91f0c34fa55"
+ }
+ Frame {
+ msec: 4848
+ hash: "d5f2e63bd18b2067221ec80764c7500d"
+ }
+ Frame {
+ msec: 4864
+ hash: "157f93ebaa95664965539237ba121265"
+ }
+ Frame {
+ msec: 4880
+ hash: "5bda47a6295e500f24b6ba7bf04e9282"
+ }
+ Frame {
+ msec: 4896
+ hash: "0134d543cfbf085eb4b5ea4a0f5ae32f"
+ }
+ Frame {
+ msec: 4912
+ hash: "d27f2ad3bd9817c23caf01ba64335776"
+ }
+ Frame {
+ msec: 4928
+ hash: "4dd96288601f4481a24b75afedd34599"
+ }
+ Frame {
+ msec: 4944
+ hash: "d5ebfbd190fe2482af54004ad9434818"
+ }
+ Frame {
+ msec: 4960
+ hash: "6a8c5c64228b3be521407e00c2b6a1de"
+ }
+ Frame {
+ msec: 4976
+ hash: "645219e7aa6761bef1b11ac8f17f1f42"
+ }
+ Frame {
+ msec: 4992
+ hash: "54fff3170fa43d99eca2c87381ecaf1e"
+ }
+ Frame {
+ msec: 5008
+ hash: "54fff3170fa43d99eca2c87381ecaf1e"
+ }
+ Frame {
+ msec: 5024
+ hash: "00c3c11b9b266504b8cdbdf4edcc3a98"
+ }
+ Frame {
+ msec: 5040
+ hash: "00c3c11b9b266504b8cdbdf4edcc3a98"
+ }
+ Frame {
+ msec: 5056
+ hash: "00c3c11b9b266504b8cdbdf4edcc3a98"
+ }
+ Frame {
+ msec: 5072
+ hash: "54fff3170fa43d99eca2c87381ecaf1e"
+ }
+ Frame {
+ msec: 5088
+ hash: "6a8c5c64228b3be521407e00c2b6a1de"
+ }
+ Frame {
+ msec: 5104
+ hash: "f91cea801322d1bc6ac1b9eeae96c704"
+ }
+ Frame {
+ msec: 5120
+ hash: "d27f2ad3bd9817c23caf01ba64335776"
+ }
+ Frame {
+ msec: 5136
+ hash: "5bda47a6295e500f24b6ba7bf04e9282"
+ }
+ Frame {
+ msec: 5152
+ hash: "d5f2e63bd18b2067221ec80764c7500d"
+ }
+ Frame {
+ msec: 5168
+ hash: "b10145c10c2bc9d01ec6a49a399f728e"
+ }
+ Frame {
+ msec: 5184
+ hash: "f0b759a49bf21b0c9b311a1dd02d7807"
+ }
+ Frame {
+ msec: 5200
+ hash: "1c5546c3ddbde95d10921c8c32fd2d67"
+ }
+ Frame {
+ msec: 5216
+ hash: "c2a002588b4b3f89806d6d283c39ea54"
+ }
+ Frame {
+ msec: 5232
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5248
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5264
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5280
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5296
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5312
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5328
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5344
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5360
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5376
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5392
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5408
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5424
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5440
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5456
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5472
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5488
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5504
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5520
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5536
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5552
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5568
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5584
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5600
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5616
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5632
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5648
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5664
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5680
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5696
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5712
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5728
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5744
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5760
+ image: "packageviews.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5792
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5808
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5824
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5840
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5856
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5872
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5888
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5904
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5920
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5936
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5952
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5968
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 5984
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6000
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6016
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6032
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6048
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6064
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6080
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6096
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6112
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6128
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6144
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6160
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6176
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6192
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6208
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6224
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6240
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6256
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6272
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6288
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6304
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6320
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6336
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6352
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6368
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6384
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6400
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6416
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6432
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6448
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6464
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6480
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6496
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6512
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 177; y: 168
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6528
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6544
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6560
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6576
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 178; y: 168
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6592
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 178; y: 168
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6608
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6624
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6640
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6656
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6672
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6688
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6704
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6720
+ image: "packageviews.6.png"
+ }
+ Frame {
+ msec: 6736
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6752
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6768
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6784
+ hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ }
+ Frame {
+ msec: 6800
+ hash: "f6de07972a225d276b4b5c424dc490ef"
+ }
+ Frame {
+ msec: 6816
+ hash: "d8c400ca33d590a9b4d9b179b5634d94"
+ }
+ Frame {
+ msec: 6832
+ hash: "21ec87c22e52b3daa78bd94b771a105c"
+ }
+ Frame {
+ msec: 6848
+ hash: "19a3667f4051e40e944ec58abb16846a"
+ }
+ Frame {
+ msec: 6864
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 6880
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 6896
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 6912
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 6928
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 6944
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 6960
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 6976
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 6992
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7008
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7024
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7040
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7056
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7072
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7088
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7104
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7120
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7136
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7152
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7168
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7184
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7200
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7216
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7232
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7248
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7264
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7280
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7296
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7312
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7328
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7344
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7360
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7376
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7392
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7408
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 157; y: 37
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7424
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Frame {
+ msec: 7440
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 157; y: 39
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7456
+ hash: "08369a783b1f1f4e64da7dab40df6ef3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 157; y: 44
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 157; y: 51
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7472
+ hash: "e8ad02d4c2429a03ff0686888e4038bf"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 157; y: 59
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 158; y: 67
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7488
+ hash: "43dcc86aeff3b8b74ae1b87e735e8963"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 158; y: 87
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 158; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7504
+ hash: "96e10ce9e5a80caf626213e5c696d84d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 160; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7520
+ hash: "3b34cb99481d5418136840afd649807d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 164; y: 134
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 164; y: 134
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7536
+ hash: "494cf05eb3d8eb221d0e3c233c936e87"
+ }
+ Frame {
+ msec: 7552
+ hash: "e0d5f3aab9fbfac1de47f42202dbeb79"
+ }
+ Frame {
+ msec: 7568
+ hash: "8cd6919e15ea4320e00e79d43596ea80"
+ }
+ Frame {
+ msec: 7584
+ hash: "395a63aa12928a6b597eabd74f019a03"
+ }
+ Frame {
+ msec: 7600
+ hash: "16d4ccbda396a9afcaeac4ddca733012"
+ }
+ Frame {
+ msec: 7616
+ hash: "71955518b68a9817a41d5d0f63adcc57"
+ }
+ Frame {
+ msec: 7632
+ hash: "152f2569fe8849d5c4289699dba2ee32"
+ }
+ Frame {
+ msec: 7648
+ hash: "a1de2cb5acc31a9d73e005c3a44cee4f"
+ }
+ Frame {
+ msec: 7664
+ hash: "96ceaad68263b5165a65f557ae19d9cd"
+ }
+ Frame {
+ msec: 7680
+ image: "packageviews.7.png"
+ }
+ Frame {
+ msec: 7696
+ hash: "9ff5d2774820dac56655a44d965c7742"
+ }
+ Frame {
+ msec: 7712
+ hash: "79cdbfb2f93a35680eab38f0df2eaf66"
+ }
+ Frame {
+ msec: 7728
+ hash: "19896d510a27871fc589579e27adc0dc"
+ }
+ Frame {
+ msec: 7744
+ hash: "71b62e488897345eebf8d9640d50585f"
+ }
+ Frame {
+ msec: 7760
+ hash: "4853b95a3f1ae0ebbd468dff3605d595"
+ }
+ Frame {
+ msec: 7776
+ hash: "a8030aa0aede17d91758af08256cf39d"
+ }
+ Frame {
+ msec: 7792
+ hash: "a2a5e71349060ae262d337d9aa33b549"
+ }
+ Frame {
+ msec: 7808
+ hash: "7b5f32f0e53ab102ef6f1eca7da016dd"
+ }
+ Frame {
+ msec: 7824
+ hash: "7b5f32f0e53ab102ef6f1eca7da016dd"
+ }
+ Frame {
+ msec: 7840
+ hash: "25908df38057c7394135108d9618e28d"
+ }
+ Frame {
+ msec: 7856
+ hash: "d3b3ab6e43eef22ca71fc35c36b1f50d"
+ }
+ Frame {
+ msec: 7872
+ hash: "c25759db4e12acbe8e4701c7c86d1957"
+ }
+ Frame {
+ msec: 7888
+ hash: "fe67a155ead8495d646fa7bbcf5db6b4"
+ }
+ Frame {
+ msec: 7904
+ hash: "34e2877a8b84e53e5c85fb1b25d57e2b"
+ }
+ Frame {
+ msec: 7920
+ hash: "2fc6c5a0e9bb80e3c8f12553e7e96d02"
+ }
+ Frame {
+ msec: 7936
+ hash: "b5122a2530e21a01e93862bd8060e320"
+ }
+ Frame {
+ msec: 7952
+ hash: "9c55e0c920bcf5189fb24e1765d221db"
+ }
+ Frame {
+ msec: 7968
+ hash: "1106703562135e36ae62130200960fc8"
+ }
+ Frame {
+ msec: 7984
+ hash: "c24b57dbf01d2646fbbeb3e66636e220"
+ }
+ Frame {
+ msec: 8000
+ hash: "71663a05c04bb77c2e25299a9c6dd9ce"
+ }
+ Frame {
+ msec: 8016
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8032
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8048
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8064
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8080
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8096
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8112
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8128
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8144
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8160
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8176
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8192
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8208
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8224
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8240
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8256
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8272
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8288
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8304
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8320
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8336
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8352
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8368
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8384
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8400
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8416
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8432
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8448
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8464
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8480
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8496
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8512
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8528
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8544
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8560
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8576
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8592
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8608
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8624
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8640
+ image: "packageviews.8.png"
+ }
+ Frame {
+ msec: 8656
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8672
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8688
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Frame {
+ msec: 8704
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 46; y: 147
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8720
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 46; y: 146
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8736
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 46; y: 145
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 46; y: 143
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8752
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 46; y: 141
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8768
+ hash: "dd6caf22c0cacf5c34686785072da5f7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 46; y: 138
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 46; y: 134
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 46; y: 129
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8784
+ hash: "7b1354e70befc84c343145987c81562f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 45; y: 122
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8800
+ hash: "6107f00c6472d877b5c109dd58d73145"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 45; y: 115
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 45; y: 115
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8816
+ hash: "47288701643899e26b53d28595d59b29"
+ }
+ Frame {
+ msec: 8832
+ hash: "a3b4b613d19c8f21ec1b75c1c660ed1d"
+ }
+ Frame {
+ msec: 8848
+ hash: "7a5d9fe471eb673f68b77d97f9108bac"
+ }
+ Frame {
+ msec: 8864
+ hash: "20a09795ffcf05276d7a5be24b33e207"
+ }
+ Frame {
+ msec: 8880
+ hash: "225e529ac77f225fc8b84ed71cdcd70f"
+ }
+ Frame {
+ msec: 8896
+ hash: "e4188406a3d3d1f1b83547d362a187f8"
+ }
+ Frame {
+ msec: 8912
+ hash: "82707040aad297885ba1c8c6672dc017"
+ }
+ Frame {
+ msec: 8928
+ hash: "a369118e98e2bd67dc4242c5e8c86cb8"
+ }
+ Frame {
+ msec: 8944
+ hash: "001ef50f7d2b7db7e0db8d2190137d0c"
+ }
+ Frame {
+ msec: 8960
+ hash: "2db473b2bd9fd602ed0298501752dae9"
+ }
+ Frame {
+ msec: 8976
+ hash: "f9cdbb4e515abf23721627e3f2748960"
+ }
+ Frame {
+ msec: 8992
+ hash: "cbc072c5b117ce156a4d6661ae488a77"
+ }
+ Frame {
+ msec: 9008
+ hash: "79acb38cec803e6ebeb570dc4d7bbb30"
+ }
+ Frame {
+ msec: 9024
+ hash: "848014437545fc8d2e454a774586a8ca"
+ }
+ Frame {
+ msec: 9040
+ hash: "0836f3a48355f6384c6b3f452df1e7d6"
+ }
+ Frame {
+ msec: 9056
+ hash: "b3da223cdf138e915fcb424cf9181d6b"
+ }
+ Frame {
+ msec: 9072
+ hash: "1a7cf7e7ddaac64eeff0d23997580b8c"
+ }
+ Frame {
+ msec: 9088
+ hash: "cfbd055b2f905db503250b49120948db"
+ }
+ Frame {
+ msec: 9104
+ hash: "c5b8a4ce51ec806f0ce654a8977fb17d"
+ }
+ Frame {
+ msec: 9120
+ hash: "d09ba0ea9e7fed2f50d6463ac74da470"
+ }
+ Frame {
+ msec: 9136
+ hash: "47ec5bab098fd88ef5be3703c316717a"
+ }
+ Frame {
+ msec: 9152
+ hash: "3ea8c442ed43bd3a2aebc9cc2aacfc01"
+ }
+ Frame {
+ msec: 9168
+ hash: "f016f14b0b21781924ac2afe146b1b97"
+ }
+ Frame {
+ msec: 9184
+ hash: "7b7b6954cce0ca202585310520bbb3e3"
+ }
+ Frame {
+ msec: 9200
+ hash: "b0de94ee3b0ce4845101606d2d512426"
+ }
+ Frame {
+ msec: 9216
+ hash: "8dc56bcb2313bd8dd9ef0cbc098b80e5"
+ }
+ Frame {
+ msec: 9232
+ hash: "a1692b26fb73ade5a05e03de3f4a8dbe"
+ }
+ Frame {
+ msec: 9248
+ hash: "672dd46e629475d823b182104f15aa24"
+ }
+ Frame {
+ msec: 9264
+ hash: "2859e53d63c20af7891efc99d5e515b5"
+ }
+ Frame {
+ msec: 9280
+ hash: "b44b1c4eaa33fbd09c8e59c1bf2a8f2a"
+ }
+ Frame {
+ msec: 9296
+ hash: "d520fa81032ca25ec2cb6c358488049d"
+ }
+ Frame {
+ msec: 9312
+ hash: "3676c00bd5c3e9af8c4092afd80f58c2"
+ }
+ Frame {
+ msec: 9328
+ hash: "6be4d4c35aba5a8d32a28dd88f32acd1"
+ }
+ Frame {
+ msec: 9344
+ hash: "375473d4d838ef937c3164e7451d9391"
+ }
+ Frame {
+ msec: 9360
+ hash: "610253e766974af4958c3623547deebd"
+ }
+ Frame {
+ msec: 9376
+ hash: "20b79be381a95930c924240815cc63f4"
+ }
+ Frame {
+ msec: 9392
+ hash: "88130d7132f472ff8495d640adf290cc"
+ }
+ Frame {
+ msec: 9408
+ hash: "2e81f4c9a0221708146adcb508eb2d30"
+ }
+ Frame {
+ msec: 9424
+ hash: "977f52ed922ba5db66440f115f7484a2"
+ }
+ Frame {
+ msec: 9440
+ hash: "706f99c32d00be14ae67b4866fee0cd9"
+ }
+ Frame {
+ msec: 9456
+ hash: "210231604091497b510c4a1d42295574"
+ }
+ Frame {
+ msec: 9472
+ hash: "210231604091497b510c4a1d42295574"
+ }
+ Frame {
+ msec: 9488
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9504
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9520
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9536
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9552
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9568
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9584
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9600
+ image: "packageviews.9.png"
+ }
+ Frame {
+ msec: 9616
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9632
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9648
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9664
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9680
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9696
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9712
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9728
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9744
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9760
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9776
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9792
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9808
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9824
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9840
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9856
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9872
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9888
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9904
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9920
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9936
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9952
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9968
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 9984
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 10000
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 10016
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 10032
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 10048
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 10064
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 10080
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 10096
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 10112
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 10128
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 10144
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 10160
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 10176
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 48; y: 137
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10192
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 10208
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 10224
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 10240
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 10256
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 48; y: 137
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10272
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 10288
+ hash: "c54f97c72088b6319efba3c79bbef0fa"
+ }
+ Frame {
+ msec: 10304
+ hash: "3627adf820bc44f99cca852096f337a0"
+ }
+ Frame {
+ msec: 10320
+ hash: "48c0f775534ff9bbe9227e60ad9a3622"
+ }
+ Frame {
+ msec: 10336
+ hash: "da5c6fd80ee0dc20e81031c84ede20cf"
+ }
+ Frame {
+ msec: 10352
+ hash: "ce7595da55b274259771eb99a42df454"
+ }
+ Frame {
+ msec: 10368
+ hash: "c2dd2aa17b9508477699fefe55bfbd06"
+ }
+ Frame {
+ msec: 10384
+ hash: "4ee897ddfec1081eef8bc5d799774f82"
+ }
+ Frame {
+ msec: 10400
+ hash: "f4da67964a175acf4cde4a24b054c24c"
+ }
+ Frame {
+ msec: 10416
+ hash: "e3da951dad465f1a69d8d7c08e888f02"
+ }
+ Frame {
+ msec: 10432
+ hash: "ff862073eada170a07d209048367b823"
+ }
+ Frame {
+ msec: 10448
+ hash: "cb61d5a89c1acc2b646f3c07214bea4a"
+ }
+ Frame {
+ msec: 10464
+ hash: "15d842ac551c15a136c7598adf2fe2b1"
+ }
+ Frame {
+ msec: 10480
+ hash: "04b9e85f7418bbc402e51e0ce8149180"
+ }
+ Frame {
+ msec: 10496
+ hash: "455dff37edfac66f5e4ae78e10b93cf9"
+ }
+ Frame {
+ msec: 10512
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10528
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10544
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10560
+ image: "packageviews.10.png"
+ }
+ Frame {
+ msec: 10576
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10592
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10608
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10624
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10640
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10656
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10672
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10688
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10704
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10720
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10736
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10752
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10768
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10784
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10800
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10816
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10832
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10848
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10864
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10880
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10896
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10912
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10928
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10944
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10960
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10976
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 10992
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11008
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11024
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11040
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11056
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11072
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11088
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11104
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11120
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11136
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11152
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11168
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11184
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11200
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11216
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11232
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11248
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11264
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11280
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11296
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11312
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11328
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11344
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11360
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11376
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11392
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11408
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11424
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11440
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11456
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11472
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11488
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11504
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 47; y: 141
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11520
+ image: "packageviews.11.png"
+ }
+ Frame {
+ msec: 11536
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11552
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11568
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 47; y: 141
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11584
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11600
+ hash: "259e9da7c3b8738db1762128f2c8d4b0"
+ }
+ Frame {
+ msec: 11616
+ hash: "cf515f316c197a307a7fb8373df3b107"
+ }
+ Frame {
+ msec: 11632
+ hash: "927379ba611284d5c98a3eb5aca04f7c"
+ }
+ Frame {
+ msec: 11648
+ hash: "387ad2042589de0a19cb13aa0cac8872"
+ }
+ Frame {
+ msec: 11664
+ hash: "6536ad87d1f04b13c28c43ae0fed984f"
+ }
+ Frame {
+ msec: 11680
+ hash: "38d77d6610739614e95c70f32736f238"
+ }
+ Frame {
+ msec: 11696
+ hash: "9a6c3a95b61d3b9b787417600123b6d8"
+ }
+ Frame {
+ msec: 11712
+ hash: "782d907d7d170108beb030c93d9a4d94"
+ }
+ Frame {
+ msec: 11728
+ hash: "646ee08d1ffe676ca0363f70e14c2ed6"
+ }
+ Frame {
+ msec: 11744
+ hash: "830730ed9990c8f96fa5c7e6b4228884"
+ }
+ Frame {
+ msec: 11760
+ hash: "2e678862f358814278d38950c7c5765b"
+ }
+ Frame {
+ msec: 11776
+ hash: "c656eb6ace9caf86d417d79452c4ea34"
+ }
+ Frame {
+ msec: 11792
+ hash: "227a9bb3644c26622ef654ba2c61ddad"
+ }
+ Frame {
+ msec: 11808
+ hash: "bc8188bf8be749bfb28fc64bb5773922"
+ }
+ Frame {
+ msec: 11824
+ hash: "f1e90cfd466bdc26ba98632fe1e5360c"
+ }
+ Frame {
+ msec: 11840
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 11856
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 11872
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 11888
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 11904
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 11920
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 11936
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 11952
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 11968
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 11984
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12000
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12016
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12032
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12048
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12064
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12080
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12096
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12112
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12128
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12144
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12160
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12176
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12192
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12208
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12224
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12240
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12256
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12272
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12288
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12304
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12320
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12336
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12352
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12368
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12384
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12400
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12416
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12432
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12448
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12464
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12480
+ image: "packageviews.12.png"
+ }
+ Frame {
+ msec: 12496
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12512
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12528
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12544
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12560
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12576
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12592
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12608
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12624
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12640
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12656
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12672
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12688
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12704
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12720
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12736
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12752
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12768
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12784
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12800
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12816
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12832
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12848
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12864
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12880
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12896
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12912
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12928
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12944
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12960
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12976
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+ Frame {
+ msec: 12992
+ hash: "81795ee4213ac62e073d811aaf6b580c"
+ }
+}
diff --git a/tests/auto/declarative/visual/Package_Views/packageviews.qml b/tests/auto/declarative/visual/Package_Views/packageviews.qml
new file mode 100644
index 0000000..c8016b6
--- /dev/null
+++ b/tests/auto/declarative/visual/Package_Views/packageviews.qml
@@ -0,0 +1,89 @@
+import Qt 4.6
+
+Rectangle {
+ id: root
+ width: 200
+ height: 200
+ color: "black"
+
+ VisualDatamodel {
+ id: model
+ model: Listmodel {
+ ListElement { itemColor: "red" }
+ ListElement { itemColor: "green" }
+ ListElement { itemColor: "blue" }
+ ListElement { itemColor: "orange" }
+ ListElement { itemColor: "purple" }
+ ListElement { itemColor: "yellow" }
+ ListElement { itemColor: "slategrey" }
+ ListElement { itemColor: "cyan" }
+ ListElement { itemColor: "red" }
+ ListElement { itemColor: "green" }
+ ListElement { itemColor: "blue" }
+ ListElement { itemColor: "orange" }
+ ListElement { itemColor: "purple" }
+ ListElement { itemColor: "yellow" }
+ ListElement { itemColor: "slategrey" }
+ ListElement { itemColor: "cyan" }
+ }
+ delegate: Package {
+ Rectangle {
+ id: listItem; Package.name: "list"; width:root.width/2; height: 50; color: "transparent"; border.color: "white"
+ MouseRegion {
+ anchors.fill: parent
+ onClicked: myState.state = myState.state == "list" ? "grid" : "list"
+ }
+ }
+ Rectangle {
+ id: gridItem; Package.name: "grid"; width:50; height: 50; color: "transparent"; border.color: "white"
+ MouseRegion {
+ anchors.fill: parent
+ onClicked: myState.state = myState.state == "list" ? "grid" : "list"
+ }
+ }
+ Rectangle { id: myContent; width:50; height: 50; color: itemColor }
+
+ StateGroup {
+ id: myState
+ state: "list"
+ states: [
+ State {
+ name: "list"
+ ParentChange { target: myContent; parent: listItem }
+ PropertyChanges { target: myContent; x: 0; y: 0; width: listItem.width }
+ },
+ State {
+ name: "grid"
+ ParentChange { target: myContent; parent: gridItem }
+ PropertyChanges { target: myContent; x: 0; y: 0; width: gridItem.width }
+ }
+ ]
+
+ transitions: [
+ Transition {
+ from: "*"; to: "*"
+ SequentialAnimation {
+ ParentAction{}
+ NumberAnimation { matchProperties: "x,y,width"; easing: "easeInOutQuad" }
+ }
+ }
+ ]
+ }
+ }
+ }
+
+ ListView {
+ width: parent.width/2
+ height: parent.height
+ model: model.parts.list
+ }
+
+ GridView {
+ x: parent.width/2
+ width: parent.width/2
+ cellWidth: 50
+ cellHeight: 50
+ height: parent.height
+ model: model.parts.grid
+ }
+}
diff --git a/tests/auto/declarative/visual/animation/bindinganimation/bindinganimation.qml b/tests/auto/declarative/visual/animation/bindinganimation/bindinganimation.qml
new file mode 100644
index 0000000..732eb59
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/bindinganimation/bindinganimation.qml
@@ -0,0 +1,40 @@
+import Qt 4.6
+
+Rectangle {
+ color: "blue"
+ width: 320
+ height: 240
+ id: page
+ Rectangle {
+ id: myRectangle
+ width: 100
+ height: 100
+ color: "red"
+ x: 10
+ }
+ states: [
+ State {
+ name: "hello"
+ PropertyChanges {
+ target: myRectangle
+ x: 50 + 50
+ }
+ PropertyChanges {
+ target: myMouseRegion
+ onClicked: page.state = ''
+ }
+ }
+ ]
+ transitions: [
+ Transition {
+ NumberAnimation {
+ matchProperties: "x"
+ }
+ }
+ ]
+ MouseRegion {
+ id: myMouseRegion
+ anchors.fill: parent
+ onClicked: { page.state= 'hello' }
+ }
+}
diff --git a/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.0.png b/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.0.png
new file mode 100644
index 0000000..1b08c81
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.1.png b/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.1.png
new file mode 100644
index 0000000..f3074fc
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.2.png b/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.2.png
new file mode 100644
index 0000000..1b08c81
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.3.png b/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.3.png
new file mode 100644
index 0000000..e2560e0
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.4.png b/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.4.png
new file mode 100644
index 0000000..2ddde86
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.5.png b/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.5.png
new file mode 100644
index 0000000..f3074fc
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.6.png b/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.6.png
new file mode 100644
index 0000000..1b08c81
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.qml b/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.qml
new file mode 100644
index 0000000..8297c5a
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/bindinganimation/data/bindinganimation.qml
@@ -0,0 +1,1655 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 32
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 48
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 64
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 80
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 96
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 112
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 128
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 144
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 160
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 176
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 192
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 208
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 224
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 240
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 256
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 272
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 288
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 304
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 320
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 336
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 352
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 368
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 384
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 400
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 416
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 432
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 448
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 464
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 480
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 496
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 512
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 528
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 544
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 560
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 576
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 592
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 608
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 624
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 640
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 656
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 672
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 688
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 704
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 720
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 736
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 752
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 768
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 784
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 800
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 816
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 832
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 848
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 864
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 880
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 896
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 912
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 928
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 944
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 960
+ image: "bindinganimation.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 992
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 1008
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 1024
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 1040
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 1056
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 1072
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 1088
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 1104
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 1120
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 1136
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 1152
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 136; y: 174
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1168
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 1184
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 1200
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 1216
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 1232
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 1248
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 1264
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 1280
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 136; y: 174
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1296
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 1312
+ hash: "a78c9394bf3b81f192f42710cd7218b1"
+ }
+ Frame {
+ msec: 1328
+ hash: "7f08e8170feb1d02373c9ab42b6e882d"
+ }
+ Frame {
+ msec: 1344
+ hash: "967fbad8ac664400a3efbe66617d62aa"
+ }
+ Frame {
+ msec: 1360
+ hash: "abc2ec0bc7a93e75b5823310e6284db1"
+ }
+ Frame {
+ msec: 1376
+ hash: "afbd5b24e2f86646f5ec2aa22f3a4b5b"
+ }
+ Frame {
+ msec: 1392
+ hash: "9413dffb7ee853ba0125ac22ab22abbd"
+ }
+ Frame {
+ msec: 1408
+ hash: "fcae0317f81a3ddd713f4db1349a9da0"
+ }
+ Frame {
+ msec: 1424
+ hash: "37739777a5979f3ebf85e47e63341660"
+ }
+ Frame {
+ msec: 1440
+ hash: "72731478d80f024076ea639b55152360"
+ }
+ Frame {
+ msec: 1456
+ hash: "69058485ced6bc992a1a7c5ee34add4c"
+ }
+ Frame {
+ msec: 1472
+ hash: "391ad7ff2362e059f6170dfe306f94a7"
+ }
+ Frame {
+ msec: 1488
+ hash: "f9f74a2e38b52c9266f33e428b6acd9d"
+ }
+ Frame {
+ msec: 1504
+ hash: "25152412c4ea2aec6caf89486c073484"
+ }
+ Frame {
+ msec: 1520
+ hash: "ba403842ba3128b1cdf6a9cb28c90751"
+ }
+ Frame {
+ msec: 1536
+ hash: "e90cd68490cf3ce6ef9fe4e8f92feaa9"
+ }
+ Frame {
+ msec: 1552
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1568
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1584
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1600
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1616
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1632
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1648
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1664
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1680
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1696
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1712
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1728
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1744
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1760
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1776
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1792
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1808
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1824
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1840
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1856
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1872
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1888
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1904
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1920
+ image: "bindinganimation.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1952
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1968
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 1984
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2000
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2016
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2032
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2048
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2064
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2080
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2096
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2112
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2128
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2144
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2160
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2176
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2192
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2208
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2224
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2240
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 122; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2256
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2272
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2288
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2304
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2320
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2336
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2352
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 122; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2368
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 2384
+ hash: "adc501a3a2b8aaf72f58ba985b57424e"
+ }
+ Frame {
+ msec: 2400
+ hash: "bfa51b7c19753ef7b16d78afffc7b9dd"
+ }
+ Frame {
+ msec: 2416
+ hash: "ffa8471f57765b49fcdb9155393251e5"
+ }
+ Frame {
+ msec: 2432
+ hash: "ddb65481469c38f2331546ee03a44206"
+ }
+ Frame {
+ msec: 2448
+ hash: "6f48d1a9977b77cafd38a5903017605b"
+ }
+ Frame {
+ msec: 2464
+ hash: "4279c814163af3bd069ce21b3cd1c729"
+ }
+ Frame {
+ msec: 2480
+ hash: "17c46242c17983478f34cb49cb91ca6e"
+ }
+ Frame {
+ msec: 2496
+ hash: "42f65c58b1f5f4b5ba70855f4aaa7d2f"
+ }
+ Frame {
+ msec: 2512
+ hash: "6a74d6dc91a8b370200d3765c55c1136"
+ }
+ Frame {
+ msec: 2528
+ hash: "ecda10356cca33901c2acd0a702fee46"
+ }
+ Frame {
+ msec: 2544
+ hash: "4f58226bdbda7339d972eca065f75766"
+ }
+ Frame {
+ msec: 2560
+ hash: "a39c80859a7643c9879da9c77b644703"
+ }
+ Frame {
+ msec: 2576
+ hash: "16fe17b15900ff0464ab20ea921e5b1f"
+ }
+ Frame {
+ msec: 2592
+ hash: "bc5c83b2014b7260900587ae3637598f"
+ }
+ Frame {
+ msec: 2608
+ hash: "96c077e3a572edff04fa9b2f7020ffd0"
+ }
+ Frame {
+ msec: 2624
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 2640
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 2656
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 2672
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 2688
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 2704
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 2720
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 2736
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 2752
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 2768
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 2784
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 2800
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 2816
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 2832
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 2848
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 2864
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 2880
+ image: "bindinganimation.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 2912
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 2928
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 2944
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 2960
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 2976
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 2992
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 3008
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 3024
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 3040
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 3056
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 3072
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 3088
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 3104
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 3120
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 3136
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 3152
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 3168
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 122; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3184
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 3200
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 3216
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 3232
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 3248
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 3264
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 3280
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 122; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3296
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Frame {
+ msec: 3312
+ hash: "a78c9394bf3b81f192f42710cd7218b1"
+ }
+ Frame {
+ msec: 3328
+ hash: "7f08e8170feb1d02373c9ab42b6e882d"
+ }
+ Frame {
+ msec: 3344
+ hash: "967fbad8ac664400a3efbe66617d62aa"
+ }
+ Frame {
+ msec: 3360
+ hash: "abc2ec0bc7a93e75b5823310e6284db1"
+ }
+ Frame {
+ msec: 3376
+ hash: "afbd5b24e2f86646f5ec2aa22f3a4b5b"
+ }
+ Frame {
+ msec: 3392
+ hash: "9413dffb7ee853ba0125ac22ab22abbd"
+ }
+ Frame {
+ msec: 3408
+ hash: "fcae0317f81a3ddd713f4db1349a9da0"
+ }
+ Frame {
+ msec: 3424
+ hash: "37739777a5979f3ebf85e47e63341660"
+ }
+ Frame {
+ msec: 3440
+ hash: "72731478d80f024076ea639b55152360"
+ }
+ Frame {
+ msec: 3456
+ hash: "69058485ced6bc992a1a7c5ee34add4c"
+ }
+ Frame {
+ msec: 3472
+ hash: "391ad7ff2362e059f6170dfe306f94a7"
+ }
+ Mouse {
+ type: 4
+ button: 1
+ buttons: 1
+ x: 122; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3488
+ hash: "f9f74a2e38b52c9266f33e428b6acd9d"
+ }
+ Frame {
+ msec: 3504
+ hash: "25152412c4ea2aec6caf89486c073484"
+ }
+ Frame {
+ msec: 3520
+ hash: "ba403842ba3128b1cdf6a9cb28c90751"
+ }
+ Frame {
+ msec: 3536
+ hash: "e90cd68490cf3ce6ef9fe4e8f92feaa9"
+ }
+ Frame {
+ msec: 3552
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 3568
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 3584
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 3600
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 122; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3616
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 3632
+ hash: "adc501a3a2b8aaf72f58ba985b57424e"
+ }
+ Frame {
+ msec: 3648
+ hash: "bfa51b7c19753ef7b16d78afffc7b9dd"
+ }
+ Frame {
+ msec: 3664
+ hash: "ffa8471f57765b49fcdb9155393251e5"
+ }
+ Frame {
+ msec: 3680
+ hash: "ddb65481469c38f2331546ee03a44206"
+ }
+ Frame {
+ msec: 3696
+ hash: "6f48d1a9977b77cafd38a5903017605b"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 122; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3712
+ hash: "4279c814163af3bd069ce21b3cd1c729"
+ }
+ Frame {
+ msec: 3728
+ hash: "17c46242c17983478f34cb49cb91ca6e"
+ }
+ Frame {
+ msec: 3744
+ hash: "42f65c58b1f5f4b5ba70855f4aaa7d2f"
+ }
+ Frame {
+ msec: 3760
+ hash: "6a74d6dc91a8b370200d3765c55c1136"
+ }
+ Frame {
+ msec: 3776
+ hash: "ecda10356cca33901c2acd0a702fee46"
+ }
+ Frame {
+ msec: 3792
+ hash: "4f58226bdbda7339d972eca065f75766"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 122; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3808
+ hash: "4f58226bdbda7339d972eca065f75766"
+ }
+ Frame {
+ msec: 3824
+ hash: "5fae0bdc65c609cb766ce585b8c649db"
+ }
+ Frame {
+ msec: 3840
+ image: "bindinganimation.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "6a74d6dc91a8b370200d3765c55c1136"
+ }
+ Frame {
+ msec: 3872
+ hash: "4f41101378a104e72228eeb4ba395ca8"
+ }
+ Frame {
+ msec: 3888
+ hash: "37739777a5979f3ebf85e47e63341660"
+ }
+ Frame {
+ msec: 3904
+ hash: "f4fe2cc93d65e086ba8ded1438269eb2"
+ }
+ Mouse {
+ type: 4
+ button: 1
+ buttons: 1
+ x: 122; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3920
+ hash: "4279c814163af3bd069ce21b3cd1c729"
+ }
+ Frame {
+ msec: 3936
+ hash: "72a0c017a2fa90a4aeadfa6e552ff573"
+ }
+ Frame {
+ msec: 3952
+ hash: "391ad7ff2362e059f6170dfe306f94a7"
+ }
+ Frame {
+ msec: 3968
+ hash: "0b0c6419e1e5b016d9c22bd98fd452b1"
+ }
+ Frame {
+ msec: 3984
+ hash: "365c824c330398d267ea52ae9468b9ee"
+ }
+ Frame {
+ msec: 4000
+ hash: "65ad7e0189c096792331bd1bb0daf0db"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 122; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4016
+ hash: "65ad7e0189c096792331bd1bb0daf0db"
+ }
+ Frame {
+ msec: 4032
+ hash: "a21aa1984f068650cce2a124a82c12be"
+ }
+ Frame {
+ msec: 4048
+ hash: "8006ceaa02d22b5fdfeab400d39a0caf"
+ }
+ Frame {
+ msec: 4064
+ hash: "a2cebc35e5c2c709a2cd83e1df6eaeab"
+ }
+ Frame {
+ msec: 4080
+ hash: "07f751ea4cf877ba72fbb36f9da268d7"
+ }
+ Frame {
+ msec: 4096
+ hash: "72731478d80f024076ea639b55152360"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 122; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4112
+ hash: "37739777a5979f3ebf85e47e63341660"
+ }
+ Frame {
+ msec: 4128
+ hash: "ed47684a0b21836cd27549e0989e96dd"
+ }
+ Frame {
+ msec: 4144
+ hash: "772396bb23c713f34ea5c23bfbcb115e"
+ }
+ Frame {
+ msec: 4160
+ hash: "d9af30557f99b086bb1a185a946b580d"
+ }
+ Frame {
+ msec: 4176
+ hash: "575d30ac088448b01f49082519bbb3a1"
+ }
+ Frame {
+ msec: 4192
+ hash: "2e3f134664df8204a291af2c9f81239a"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 122; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4208
+ hash: "2e3f134664df8204a291af2c9f81239a"
+ }
+ Frame {
+ msec: 4224
+ hash: "4f58226bdbda7339d972eca065f75766"
+ }
+ Frame {
+ msec: 4240
+ hash: "5fae0bdc65c609cb766ce585b8c649db"
+ }
+ Frame {
+ msec: 4256
+ hash: "82363265ed2b611a54f8d48b2af22f11"
+ }
+ Frame {
+ msec: 4272
+ hash: "f9deee3a204c939562b896a6179743d2"
+ }
+ Frame {
+ msec: 4288
+ hash: "42f65c58b1f5f4b5ba70855f4aaa7d2f"
+ }
+ Mouse {
+ type: 4
+ button: 1
+ buttons: 1
+ x: 122; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4304
+ hash: "3223ed179c828fadb3eca9c6373176c1"
+ }
+ Frame {
+ msec: 4320
+ hash: "56125a260a79bc38bb0ef44fd65ba49b"
+ }
+ Frame {
+ msec: 4336
+ hash: "07f751ea4cf877ba72fbb36f9da268d7"
+ }
+ Frame {
+ msec: 4352
+ hash: "6f48d1a9977b77cafd38a5903017605b"
+ }
+ Frame {
+ msec: 4368
+ hash: "8006ceaa02d22b5fdfeab400d39a0caf"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 122; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4384
+ hash: "8006ceaa02d22b5fdfeab400d39a0caf"
+ }
+ Frame {
+ msec: 4400
+ hash: "6f48d1a9977b77cafd38a5903017605b"
+ }
+ Frame {
+ msec: 4416
+ hash: "69058485ced6bc992a1a7c5ee34add4c"
+ }
+ Frame {
+ msec: 4432
+ hash: "dafcce427161a70c3513841ac22aea00"
+ }
+ Frame {
+ msec: 4448
+ hash: "3223ed179c828fadb3eca9c6373176c1"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 122; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4464
+ hash: "b08811b237ce7a460c80d285f04d53d8"
+ }
+ Frame {
+ msec: 4480
+ hash: "fcae0317f81a3ddd713f4db1349a9da0"
+ }
+ Frame {
+ msec: 4496
+ hash: "772396bb23c713f34ea5c23bfbcb115e"
+ }
+ Frame {
+ msec: 4512
+ hash: "ecda10356cca33901c2acd0a702fee46"
+ }
+ Frame {
+ msec: 4528
+ hash: "575d30ac088448b01f49082519bbb3a1"
+ }
+ Frame {
+ msec: 4544
+ hash: "abc2ec0bc7a93e75b5823310e6284db1"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 122; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4560
+ hash: "abc2ec0bc7a93e75b5823310e6284db1"
+ }
+ Frame {
+ msec: 4576
+ hash: "575d30ac088448b01f49082519bbb3a1"
+ }
+ Frame {
+ msec: 4592
+ hash: "ecda10356cca33901c2acd0a702fee46"
+ }
+ Frame {
+ msec: 4608
+ hash: "772396bb23c713f34ea5c23bfbcb115e"
+ }
+ Frame {
+ msec: 4624
+ hash: "fcae0317f81a3ddd713f4db1349a9da0"
+ }
+ Frame {
+ msec: 4640
+ hash: "b08811b237ce7a460c80d285f04d53d8"
+ }
+ Mouse {
+ type: 4
+ button: 1
+ buttons: 1
+ x: 122; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4656
+ hash: "17c46242c17983478f34cb49cb91ca6e"
+ }
+ Frame {
+ msec: 4672
+ hash: "dafcce427161a70c3513841ac22aea00"
+ }
+ Frame {
+ msec: 4688
+ hash: "69058485ced6bc992a1a7c5ee34add4c"
+ }
+ Frame {
+ msec: 4704
+ hash: "6f48d1a9977b77cafd38a5903017605b"
+ }
+ Frame {
+ msec: 4720
+ hash: "ddb65481469c38f2331546ee03a44206"
+ }
+ Frame {
+ msec: 4736
+ hash: "a21aa1984f068650cce2a124a82c12be"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 122; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4752
+ hash: "a21aa1984f068650cce2a124a82c12be"
+ }
+ Frame {
+ msec: 4768
+ hash: "8006ceaa02d22b5fdfeab400d39a0caf"
+ }
+ Frame {
+ msec: 4784
+ hash: "6f48d1a9977b77cafd38a5903017605b"
+ }
+ Frame {
+ msec: 4800
+ image: "bindinganimation.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "56125a260a79bc38bb0ef44fd65ba49b"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 122; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4832
+ hash: "56c72b5da44bd5efdc47c3b9c3eac409"
+ }
+ Frame {
+ msec: 4848
+ hash: "42f65c58b1f5f4b5ba70855f4aaa7d2f"
+ }
+ Frame {
+ msec: 4864
+ hash: "6a74d6dc91a8b370200d3765c55c1136"
+ }
+ Frame {
+ msec: 4880
+ hash: "9413dffb7ee853ba0125ac22ab22abbd"
+ }
+ Frame {
+ msec: 4896
+ hash: "527b1f9e7a222483134675a73f9cf5b7"
+ }
+ Frame {
+ msec: 4912
+ hash: "ffeb3db6d3f177acf6f92049359a9025"
+ }
+ Frame {
+ msec: 4928
+ hash: "a39c80859a7643c9879da9c77b644703"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 122; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4944
+ hash: "a39c80859a7643c9879da9c77b644703"
+ }
+ Frame {
+ msec: 4960
+ hash: "ffeb3db6d3f177acf6f92049359a9025"
+ }
+ Frame {
+ msec: 4976
+ hash: "527b1f9e7a222483134675a73f9cf5b7"
+ }
+ Frame {
+ msec: 4992
+ hash: "9413dffb7ee853ba0125ac22ab22abbd"
+ }
+ Frame {
+ msec: 5008
+ hash: "6a74d6dc91a8b370200d3765c55c1136"
+ }
+ Frame {
+ msec: 5024
+ hash: "4f41101378a104e72228eeb4ba395ca8"
+ }
+ Frame {
+ msec: 5040
+ hash: "56c72b5da44bd5efdc47c3b9c3eac409"
+ }
+ Frame {
+ msec: 5056
+ hash: "72731478d80f024076ea639b55152360"
+ }
+ Frame {
+ msec: 5072
+ hash: "07f751ea4cf877ba72fbb36f9da268d7"
+ }
+ Frame {
+ msec: 5088
+ hash: "a2cebc35e5c2c709a2cd83e1df6eaeab"
+ }
+ Frame {
+ msec: 5104
+ hash: "8006ceaa02d22b5fdfeab400d39a0caf"
+ }
+ Frame {
+ msec: 5120
+ hash: "f9f74a2e38b52c9266f33e428b6acd9d"
+ }
+ Frame {
+ msec: 5136
+ hash: "a93f930ec8528f954cd4a770c9a8171b"
+ }
+ Frame {
+ msec: 5152
+ hash: "bfa51b7c19753ef7b16d78afffc7b9dd"
+ }
+ Frame {
+ msec: 5168
+ hash: "df62027b6b53c69a071cb3dc09c3a7ed"
+ }
+ Frame {
+ msec: 5184
+ hash: "0d59ac57f8790fe741a31d12c3438abf"
+ }
+ Frame {
+ msec: 5200
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5216
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5232
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5248
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5264
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5280
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5296
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5312
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5328
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5344
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5360
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5376
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5392
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5408
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5424
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5440
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5456
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5472
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5488
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5504
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5520
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5536
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5552
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5568
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5584
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5600
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5616
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5632
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5648
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5664
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5680
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5696
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5712
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5728
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5744
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5760
+ image: "bindinganimation.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5792
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5808
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5824
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5840
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+ Frame {
+ msec: 5856
+ hash: "383ba6b9efcc58fca512982a207631f6"
+ }
+}
diff --git a/tests/auto/declarative/visual/animation/colorAnimation/colorAnimation.qml b/tests/auto/declarative/visual/animation/colorAnimation/colorAnimation.qml
new file mode 100644
index 0000000..0e98d7e
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/colorAnimation/colorAnimation.qml
@@ -0,0 +1,41 @@
+import Qt 4.6
+
+Rectangle {
+ id: mainrect
+ width: 200; height: 200
+ state: "first"
+ states: [
+ State {
+ name: "first"
+ PropertyChanges {
+ target: mainrect
+ color: "red"
+ }
+ },
+ State {
+ name: "second"
+ PropertyChanges {
+ target: mainrect
+ color: "blue"
+ }
+ }
+ ]
+ transitions: [
+ Transition {
+ from: "first"
+ to: "second"
+ reversible: true
+ SequentialAnimation {
+ ColorAnimation {
+ duration: 2000
+ target: mainrect
+ property: "color"
+ }
+ }
+ }
+ ]
+ MouseRegion {
+ anchors.fill: parent
+ onClicked: { mainrect.state = 'second' }
+ }
+}
diff --git a/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.0.png b/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.0.png
new file mode 100644
index 0000000..f4a6cfd
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.1.png b/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.1.png
new file mode 100644
index 0000000..f4a6cfd
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.2.png b/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.2.png
new file mode 100644
index 0000000..f4a6cfd
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.qml b/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.qml
new file mode 100644
index 0000000..900bf5c
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/colorAnimation/data/colorAnimation.qml
@@ -0,0 +1,951 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 32
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 48
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 64
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 80
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 96
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 112
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 128
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 144
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 160
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 176
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 192
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 208
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 224
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 240
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 256
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 272
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 288
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 304
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 320
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 336
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 352
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 368
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 384
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 400
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 416
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 432
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 448
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 464
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 480
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 496
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 512
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 93; y: 136
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 528
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 544
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 560
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 576
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 592
+ hash: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 93; y: 136
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 608
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 624
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 640
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 656
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 672
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 688
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 704
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 720
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 736
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 752
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 768
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 784
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 800
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 816
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 832
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 848
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 864
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 880
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 896
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 912
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 928
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 944
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 960
+ image: "colorAnimation.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 992
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1008
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1024
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1040
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1056
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1072
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1088
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1104
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1120
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1136
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1152
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1168
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1184
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1200
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1216
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1232
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1248
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1264
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1280
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1296
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1312
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1328
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1344
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1360
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1376
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1392
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1408
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1424
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1440
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1456
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1472
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1488
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1504
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1520
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1536
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1552
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1568
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1584
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1600
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1616
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1632
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1648
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1664
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1680
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1696
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1712
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1728
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1744
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1760
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1776
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1792
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1808
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1824
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1840
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1856
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1872
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1888
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1904
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1920
+ image: "colorAnimation.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1952
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1968
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 1984
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2000
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2016
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2032
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2048
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2064
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2080
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2096
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2112
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2128
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2144
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2160
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2176
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2192
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2208
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2224
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2240
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2256
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2272
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2288
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2304
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2320
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2336
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2352
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2368
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2384
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2400
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2416
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2432
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2448
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2464
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2480
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2496
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2512
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2528
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2544
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2560
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2576
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2592
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2608
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2624
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2640
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2656
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2672
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2688
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2704
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2720
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2736
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2752
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2768
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2784
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2800
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2816
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2832
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2848
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2864
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2880
+ image: "colorAnimation.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2912
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2928
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2944
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2960
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2976
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2992
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3008
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3024
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3040
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3056
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3072
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3088
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3104
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3120
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3136
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3152
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3168
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3184
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3200
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3216
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3232
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3248
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3264
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3280
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3296
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3312
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3328
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3344
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3360
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3376
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3392
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3408
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3424
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3440
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3456
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3472
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3488
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3504
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3520
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3536
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3552
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3568
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3584
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3600
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3616
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3632
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3648
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3664
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 3680
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+}
diff --git a/tests/auto/declarative/visual/animation/easing/data/easing.0.png b/tests/auto/declarative/visual/animation/easing/data/easing.0.png
new file mode 100644
index 0000000..4f75bfd
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/easing/data/easing.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/easing/data/easing.1.png b/tests/auto/declarative/visual/animation/easing/data/easing.1.png
new file mode 100644
index 0000000..dc17765
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/easing/data/easing.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/easing/data/easing.2.png b/tests/auto/declarative/visual/animation/easing/data/easing.2.png
new file mode 100644
index 0000000..7f83548
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/easing/data/easing.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/easing/data/easing.3.png b/tests/auto/declarative/visual/animation/easing/data/easing.3.png
new file mode 100644
index 0000000..c68e0fa
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/easing/data/easing.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/easing/data/easing.qml b/tests/auto/declarative/visual/animation/easing/data/easing.qml
new file mode 100644
index 0000000..d8e8688
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/easing/data/easing.qml
@@ -0,0 +1,779 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 32
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 48
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 64
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 80
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 96
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 112
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 128
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 144
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 160
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 176
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 192
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 208
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 224
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 240
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 256
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 272
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 111; y: 419
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 288
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 304
+ hash: "8f4c40d2e2b4f064bcb77c5ae43928c6"
+ }
+ Frame {
+ msec: 320
+ hash: "8b65094a9b7d5394fc67f92ea058627f"
+ }
+ Frame {
+ msec: 336
+ hash: "da450826b471a60ba98dabc581631ba1"
+ }
+ Frame {
+ msec: 352
+ hash: "e820fb4f1bc97152aa940b07db549f1b"
+ }
+ Frame {
+ msec: 368
+ hash: "b7d8186beca2fa0e37099f72419350f4"
+ }
+ Frame {
+ msec: 384
+ hash: "8500b93774f214e5e4789e25500262b8"
+ }
+ Frame {
+ msec: 400
+ hash: "277e1dff70285cca536b3e1fc2590688"
+ }
+ Frame {
+ msec: 416
+ hash: "b05b18f92c2089c681661566117ae0f5"
+ }
+ Frame {
+ msec: 432
+ hash: "6fec9c6b6ac3e3ea4126e3824a8d7566"
+ }
+ Frame {
+ msec: 448
+ hash: "53c6c90dd1eb7ca47721fc116474aebf"
+ }
+ Frame {
+ msec: 464
+ hash: "cf729c4a31414af3d2705878ba615738"
+ }
+ Frame {
+ msec: 480
+ hash: "f146b8a68960d507f893ef001189220e"
+ }
+ Frame {
+ msec: 496
+ hash: "18ff56b870bb048af246f928ee42a9b0"
+ }
+ Frame {
+ msec: 512
+ hash: "beee98f73fe7e878ada37b3070fa0c1d"
+ }
+ Frame {
+ msec: 528
+ hash: "435d389082912950a0be2b5dff480319"
+ }
+ Frame {
+ msec: 544
+ hash: "dc39b080eaddeaf4e309b90b7d97a835"
+ }
+ Frame {
+ msec: 560
+ hash: "666b1cde53f78d7db9c81e21adbe406a"
+ }
+ Frame {
+ msec: 576
+ hash: "c5c9627f4329e48aa96ebfbc982b6ba6"
+ }
+ Frame {
+ msec: 592
+ hash: "a583042052e5da7e80a4956337d6d1ff"
+ }
+ Frame {
+ msec: 608
+ hash: "a4a5df787e15da6f28275a12898e7620"
+ }
+ Frame {
+ msec: 624
+ hash: "02cacec2ccc803ebc03c5540484cbcaa"
+ }
+ Frame {
+ msec: 640
+ hash: "00600df1f006f358feaf43bfae9d32a5"
+ }
+ Frame {
+ msec: 656
+ hash: "737c884ba0d6d38b66252f4b97a36c33"
+ }
+ Frame {
+ msec: 672
+ hash: "7eeeade8100c84a6b56efa51cf597baf"
+ }
+ Frame {
+ msec: 688
+ hash: "18ab79d495097f0103dcf14db1897a88"
+ }
+ Frame {
+ msec: 704
+ hash: "21d3b0da00c46a101e09048928cd8027"
+ }
+ Frame {
+ msec: 720
+ hash: "a5995b0341872c275ffbc5aaee6eb853"
+ }
+ Frame {
+ msec: 736
+ hash: "bb4a37c1bd5e412ebce54d9539017723"
+ }
+ Frame {
+ msec: 752
+ hash: "63dcde9e2751ca94ed7d739feb359221"
+ }
+ Frame {
+ msec: 768
+ hash: "5790c8407e2e4d1a6a937d86d57d8edb"
+ }
+ Frame {
+ msec: 784
+ hash: "3a1c77abf6822030db60a036027dc86e"
+ }
+ Frame {
+ msec: 800
+ hash: "2a13c573ab9846cce60384dd7138b2b4"
+ }
+ Frame {
+ msec: 816
+ hash: "98983c2525265830033495b61071a5aa"
+ }
+ Frame {
+ msec: 832
+ hash: "26d2bba3d77053b410715afb497d4063"
+ }
+ Frame {
+ msec: 848
+ hash: "fd65d954c16acee425d9de65af68ef40"
+ }
+ Frame {
+ msec: 864
+ hash: "094fcc18d28b19ac6b452dd8106d813b"
+ }
+ Frame {
+ msec: 880
+ hash: "160105f6f99a960763535e4d51990ef6"
+ }
+ Frame {
+ msec: 896
+ hash: "0d5d1e6a66fc1f49f1106f01fb5a1c52"
+ }
+ Frame {
+ msec: 912
+ hash: "f6abc32680865783a4d94ecb738f9ff6"
+ }
+ Frame {
+ msec: 928
+ hash: "350509eceb134d5b18647e5ad07dbb47"
+ }
+ Frame {
+ msec: 944
+ hash: "a84e4e7c5385dc1f24ca219f45d529a5"
+ }
+ Frame {
+ msec: 960
+ image: "easing.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "efcc5ae79da3fa2f4c7d6eaa35e32d33"
+ }
+ Frame {
+ msec: 992
+ hash: "ff4afce604c8ecb4f08d1ddef8552534"
+ }
+ Frame {
+ msec: 1008
+ hash: "e2e63e12e9a5f8459720dd8b023ed17b"
+ }
+ Frame {
+ msec: 1024
+ hash: "991a01f92bcfa9cd9fe98e3f39d192fc"
+ }
+ Frame {
+ msec: 1040
+ hash: "bc3d2f0f3fac650c981457f3694c2518"
+ }
+ Frame {
+ msec: 1056
+ hash: "ee39fc9b1a602bf813d9118aa21901ac"
+ }
+ Frame {
+ msec: 1072
+ hash: "42120d098f2adf1e331332b33442dd3e"
+ }
+ Frame {
+ msec: 1088
+ hash: "1660c69b77b800d1ab57b93f0fc12aa5"
+ }
+ Frame {
+ msec: 1104
+ hash: "0630a3d6b8cb5dece5dc660f05036ec6"
+ }
+ Frame {
+ msec: 1120
+ hash: "9163f0bd9c5888794d7a09d3359bf1e5"
+ }
+ Frame {
+ msec: 1136
+ hash: "e0b7ad4883f679948c852ff152ba7907"
+ }
+ Frame {
+ msec: 1152
+ hash: "f748fc44f99b706e42b899cb18dbaaf7"
+ }
+ Frame {
+ msec: 1168
+ hash: "c84442f0cb1cf0bb50dae7d1c701aaf8"
+ }
+ Frame {
+ msec: 1184
+ hash: "d7b41567e3f3aa9576fe2793872134b7"
+ }
+ Frame {
+ msec: 1200
+ hash: "a1d10ff1adb85000902486fc8e4faa8d"
+ }
+ Frame {
+ msec: 1216
+ hash: "44b7b5d77068e360ead3af84e7d80232"
+ }
+ Frame {
+ msec: 1232
+ hash: "486c0b19c1379d9eefdf575a085e2875"
+ }
+ Frame {
+ msec: 1248
+ hash: "1d474472856d4740d960eb2f788ca5a6"
+ }
+ Frame {
+ msec: 1264
+ hash: "c74082553ab0f4ee00f5044e3369580b"
+ }
+ Frame {
+ msec: 1280
+ hash: "89fcd5514f336075ad32cae69518c1e5"
+ }
+ Frame {
+ msec: 1296
+ hash: "9dd235eb98998d9bdd92e01300297257"
+ }
+ Frame {
+ msec: 1312
+ hash: "9dd235eb98998d9bdd92e01300297257"
+ }
+ Frame {
+ msec: 1328
+ hash: "9dd235eb98998d9bdd92e01300297257"
+ }
+ Frame {
+ msec: 1344
+ hash: "9dd235eb98998d9bdd92e01300297257"
+ }
+ Frame {
+ msec: 1360
+ hash: "9dd235eb98998d9bdd92e01300297257"
+ }
+ Frame {
+ msec: 1376
+ hash: "9dd235eb98998d9bdd92e01300297257"
+ }
+ Frame {
+ msec: 1392
+ hash: "9dd235eb98998d9bdd92e01300297257"
+ }
+ Frame {
+ msec: 1408
+ hash: "9dd235eb98998d9bdd92e01300297257"
+ }
+ Frame {
+ msec: 1424
+ hash: "9dd235eb98998d9bdd92e01300297257"
+ }
+ Frame {
+ msec: 1440
+ hash: "9dd235eb98998d9bdd92e01300297257"
+ }
+ Frame {
+ msec: 1456
+ hash: "9dd235eb98998d9bdd92e01300297257"
+ }
+ Frame {
+ msec: 1472
+ hash: "9dd235eb98998d9bdd92e01300297257"
+ }
+ Frame {
+ msec: 1488
+ hash: "9dd235eb98998d9bdd92e01300297257"
+ }
+ Frame {
+ msec: 1504
+ hash: "9dd235eb98998d9bdd92e01300297257"
+ }
+ Frame {
+ msec: 1520
+ hash: "9dd235eb98998d9bdd92e01300297257"
+ }
+ Frame {
+ msec: 1536
+ hash: "9dd235eb98998d9bdd92e01300297257"
+ }
+ Frame {
+ msec: 1552
+ hash: "9dd235eb98998d9bdd92e01300297257"
+ }
+ Frame {
+ msec: 1568
+ hash: "9dd235eb98998d9bdd92e01300297257"
+ }
+ Frame {
+ msec: 1584
+ hash: "9dd235eb98998d9bdd92e01300297257"
+ }
+ Frame {
+ msec: 1600
+ hash: "9dd235eb98998d9bdd92e01300297257"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 111; y: 419
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1616
+ hash: "9dd235eb98998d9bdd92e01300297257"
+ }
+ Frame {
+ msec: 1632
+ hash: "b77240f32e83d4f332d815c626f1e560"
+ }
+ Frame {
+ msec: 1648
+ hash: "7d89669231224cf8e02d75338c37c278"
+ }
+ Frame {
+ msec: 1664
+ hash: "a8cf7c179011ee8187a8e1111683e52e"
+ }
+ Frame {
+ msec: 1680
+ hash: "3e87a57e05da09a8260801320431b922"
+ }
+ Frame {
+ msec: 1696
+ hash: "a2b0d99c8a232715fe03e8772a36634c"
+ }
+ Frame {
+ msec: 1712
+ hash: "5b4634cd495ae7bb9c69a5c9c346189e"
+ }
+ Frame {
+ msec: 1728
+ hash: "492f8f2b84af355ef41c1a7cda3a8a73"
+ }
+ Frame {
+ msec: 1744
+ hash: "88e4eb08520fb5acc3d88ac4f0900542"
+ }
+ Frame {
+ msec: 1760
+ hash: "0c09cdcb906b4ce9840fd7502c39e5b9"
+ }
+ Frame {
+ msec: 1776
+ hash: "b054083bdd212cc03167a90df2d7eac5"
+ }
+ Frame {
+ msec: 1792
+ hash: "83971c2d37616ab92680364d6ac288a6"
+ }
+ Frame {
+ msec: 1808
+ hash: "a73951d25e2cb7c1d04c88c86dfa0e4d"
+ }
+ Frame {
+ msec: 1824
+ hash: "31fc8b20302abac97e506c37a14bbb7e"
+ }
+ Frame {
+ msec: 1840
+ hash: "f760ccd7339e01a9423da7b592498291"
+ }
+ Frame {
+ msec: 1856
+ hash: "24dfcd5553f854908396de751fb15b88"
+ }
+ Frame {
+ msec: 1872
+ hash: "1daf38a6e6199f980e9494a3eb480047"
+ }
+ Frame {
+ msec: 1888
+ hash: "a39e2de1090209e5dbc8cc26577ec97d"
+ }
+ Frame {
+ msec: 1904
+ hash: "f4edc780b063e34461263ed3b753be88"
+ }
+ Frame {
+ msec: 1920
+ image: "easing.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "a19b0353604491f56f72be0d20d76955"
+ }
+ Frame {
+ msec: 1952
+ hash: "9a70f109eebfcede2311ef77ceb50a44"
+ }
+ Frame {
+ msec: 1968
+ hash: "7b28313d6860aeefd4a4e136d38d62f8"
+ }
+ Frame {
+ msec: 1984
+ hash: "95d84f38473159fe6b38f84ffe371714"
+ }
+ Frame {
+ msec: 2000
+ hash: "07f91261794edb0ac1fde9bb4ff36011"
+ }
+ Frame {
+ msec: 2016
+ hash: "f9a4a6b92a9c2d265688f1bfac18fa0a"
+ }
+ Frame {
+ msec: 2032
+ hash: "cdec7cc00380fde4f73be997a992251a"
+ }
+ Frame {
+ msec: 2048
+ hash: "a52b34f84e98fcd8babb1d39979fc9c7"
+ }
+ Frame {
+ msec: 2064
+ hash: "bf05b3c79a9616f2e6c33d348b30e0ba"
+ }
+ Frame {
+ msec: 2080
+ hash: "c5931785685b4f4854d3ddfff5dd5466"
+ }
+ Frame {
+ msec: 2096
+ hash: "bae163e02b860a9ca19d1bcb60ac1f8e"
+ }
+ Frame {
+ msec: 2112
+ hash: "a36295a1ebb35e538f8899ae3ae3b36a"
+ }
+ Frame {
+ msec: 2128
+ hash: "b6448d61803d9b2c05b438aa8ce8bcd5"
+ }
+ Frame {
+ msec: 2144
+ hash: "631bf4caff2d93ef96a426100ffc5b32"
+ }
+ Frame {
+ msec: 2160
+ hash: "a8777c84a03996493f719f5fcfc80d00"
+ }
+ Frame {
+ msec: 2176
+ hash: "86e1759df103ef776bb03f24941f49da"
+ }
+ Frame {
+ msec: 2192
+ hash: "01a790ea60adeaf368c66bd53aa8fcb3"
+ }
+ Frame {
+ msec: 2208
+ hash: "79e5aca8ef6b9764f7f99cdfb51222ae"
+ }
+ Frame {
+ msec: 2224
+ hash: "82d10cc01b9be4683c5aa76096bd462c"
+ }
+ Frame {
+ msec: 2240
+ hash: "95d961a92c597e432611947f7480796a"
+ }
+ Frame {
+ msec: 2256
+ hash: "e8ee89b5313c7e2c66741fe1c2090029"
+ }
+ Frame {
+ msec: 2272
+ hash: "2e3e8cf25dc1a3f09e7bf2a086f8e3bb"
+ }
+ Frame {
+ msec: 2288
+ hash: "68ca8ad381f48db23d2bc5da9da0c17a"
+ }
+ Frame {
+ msec: 2304
+ hash: "e29f2411667049e8fae6c080f61c5869"
+ }
+ Frame {
+ msec: 2320
+ hash: "5b0a6fadedf3024e8ecb7f2c73a2277d"
+ }
+ Frame {
+ msec: 2336
+ hash: "af2eac625ef1fd928093ccd60bc0058e"
+ }
+ Frame {
+ msec: 2352
+ hash: "8a1ff780ebdc9e416e60ea0940e8f2d6"
+ }
+ Frame {
+ msec: 2368
+ hash: "7eb316c51cfd8ad972b7040247a651eb"
+ }
+ Frame {
+ msec: 2384
+ hash: "1bac7075c10c87a69e71c3859f0db41d"
+ }
+ Frame {
+ msec: 2400
+ hash: "0f16f40567729065cf9ecfcc15395a7b"
+ }
+ Frame {
+ msec: 2416
+ hash: "719f4e776776f0db5c68ae7c6177e9b7"
+ }
+ Frame {
+ msec: 2432
+ hash: "75172dbf31fd8d706f54748c59099845"
+ }
+ Frame {
+ msec: 2448
+ hash: "d730b550e05167b05350e0e6636dd97d"
+ }
+ Frame {
+ msec: 2464
+ hash: "e1f33eb5f023d9d42a99f8bc23223c45"
+ }
+ Frame {
+ msec: 2480
+ hash: "8a4b0df5bed6c7be73c194ce2bb6a271"
+ }
+ Frame {
+ msec: 2496
+ hash: "44a9ea371f12d4ac3a569121a995ae16"
+ }
+ Frame {
+ msec: 2512
+ hash: "14747e2e9e072210b9d6db50b4f704a1"
+ }
+ Frame {
+ msec: 2528
+ hash: "eea52abf430f8cc1adc37e7180036584"
+ }
+ Frame {
+ msec: 2544
+ hash: "0a9f6b14bc02e929a45bf4ebb736f9d3"
+ }
+ Frame {
+ msec: 2560
+ hash: "a68a6eef0fc8754564c47c88b60d9a2a"
+ }
+ Frame {
+ msec: 2576
+ hash: "eeb469e2fbda131d83538055e88ecdf7"
+ }
+ Frame {
+ msec: 2592
+ hash: "0f7b673472050e807c9d935fde5afd83"
+ }
+ Frame {
+ msec: 2608
+ hash: "80c90cce66bdd2324ca98bc591c22b44"
+ }
+ Frame {
+ msec: 2624
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 2640
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 2656
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 2672
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 2688
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 2704
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 2720
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 2736
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 2752
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 2768
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 2784
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 2800
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 2816
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 2832
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 2848
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 2864
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 2880
+ image: "easing.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 2912
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 2928
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 2944
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 2960
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 2976
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 2992
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 3008
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+ Frame {
+ msec: 3024
+ hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ }
+}
diff --git a/tests/auto/declarative/visual/animation/easing/easing.qml b/tests/auto/declarative/visual/animation/easing/easing.qml
new file mode 100644
index 0000000..1e8e907
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/easing/easing.qml
@@ -0,0 +1,193 @@
+import Qt 4.6
+
+Rectangle {
+ id: item
+ width: 600
+ height: layout.height
+ color: "white"
+ resources: [
+ ListModel {
+ id: easingtypes
+ ListElement {
+ type: "easeLinear"
+ }
+ ListElement {
+ type: "easeInQuad"
+ }
+ ListElement {
+ type: "easeOutQuad"
+ }
+ ListElement {
+ type: "easeInOutQuad"
+ }
+ ListElement {
+ type: "easeOutInQuad"
+ }
+ ListElement {
+ type: "easeInCubic"
+ }
+ ListElement {
+ type: "easeOutCubic"
+ }
+ ListElement {
+ type: "easeInOutCubic"
+ }
+ ListElement {
+ type: "easeOutInCubic"
+ }
+ ListElement {
+ type: "easeInQuart"
+ }
+ ListElement {
+ type: "easeOutQuart"
+ }
+ ListElement {
+ type: "easeInOutQuart"
+ }
+ ListElement {
+ type: "easeOutInQuart"
+ }
+ ListElement {
+ type: "easeInQuint"
+ }
+ ListElement {
+ type: "easeOutQuint"
+ }
+ ListElement {
+ type: "easeInOutQuint"
+ }
+ ListElement {
+ type: "easeOutInQuint"
+ }
+ ListElement {
+ type: "easeInSine"
+ }
+ ListElement {
+ type: "easeOutSine"
+ }
+ ListElement {
+ type: "easeInOutSine"
+ }
+ ListElement {
+ type: "easeOutInSine"
+ }
+ ListElement {
+ type: "easeInExpo"
+ }
+ ListElement {
+ type: "easeOutExpo"
+ }
+ ListElement {
+ type: "easeInOutExpo"
+ }
+ ListElement {
+ type: "easeOutInExpo"
+ }
+ ListElement {
+ type: "easeInCirc"
+ }
+ ListElement {
+ type: "easeOutCirc"
+ }
+ ListElement {
+ type: "easeInOutCirc"
+ }
+ ListElement {
+ type: "easeOutInCirc"
+ }
+ ListElement {
+ type: "easeInElastic"
+ }
+ ListElement {
+ type: "easeOutElastic"
+ }
+ ListElement {
+ type: "easeInOutElastic"
+ }
+ ListElement {
+ type: "easeOutInElastic"
+ }
+ ListElement {
+ type: "easeInBack"
+ }
+ ListElement {
+ type: "easeOutBack"
+ }
+ ListElement {
+ type: "easeInOutBack"
+ }
+ ListElement {
+ type: "easeOutInBack"
+ }
+ ListElement {
+ type: "easeOutBounce"
+ }
+ ListElement {
+ type: "easeInBounce"
+ }
+ ListElement {
+ type: "easeInOutBounce"
+ }
+ ListElement {
+ type: "easeOutInBounce"
+ }
+ }
+ ]
+ Column {
+ id: layout
+ anchors.left: item.left
+ anchors.right: item.right
+ Repeater {
+ model: easingtypes
+ Component {
+ Rectangle {
+ id: block
+ Text {
+ text: type
+ anchors.centerIn: parent
+ font.italic: true
+ color: index & 1 ? "black" : "white"
+ opacity: 0 // 1 for debugging
+ }
+ width: 120
+ height: 18
+ color: index & 1 ? "red" : "blue"
+ states: [
+ State {
+ name: "from"
+ when: !mouse.pressed
+ PropertyChanges {
+ target: block
+ x: 0
+ }
+ },
+ State {
+ name: "to"
+ when: mouse.pressed
+ PropertyChanges {
+ target: block
+ x: item.width-block.width
+ }
+ }
+ ]
+ transitions: [
+ Transition {
+ from: "*"
+ to: "to"
+ reversible: true
+ NumberAnimation {
+ matchProperties: "x"
+ easing: type
+ duration: 1000
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ MouseRegion {
+ id: mouse
+ anchors.fill: layout
+ }
+}
diff --git a/tests/auto/declarative/visual/animation/easing/pics/qtlogo.png b/tests/auto/declarative/visual/animation/easing/pics/qtlogo.png
new file mode 100644
index 0000000..399bd0b
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/easing/pics/qtlogo.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/parallelAnimation/data/parallelAnimation.0.png b/tests/auto/declarative/visual/animation/parallelAnimation/data/parallelAnimation.0.png
new file mode 100644
index 0000000..82c18d7
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/parallelAnimation/data/parallelAnimation.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/parallelAnimation/data/parallelAnimation.1.png b/tests/auto/declarative/visual/animation/parallelAnimation/data/parallelAnimation.1.png
new file mode 100644
index 0000000..b9a3b89
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/parallelAnimation/data/parallelAnimation.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/parallelAnimation/data/parallelAnimation.2.png b/tests/auto/declarative/visual/animation/parallelAnimation/data/parallelAnimation.2.png
new file mode 100644
index 0000000..789615b
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/parallelAnimation/data/parallelAnimation.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/parallelAnimation/data/parallelAnimation.qml b/tests/auto/declarative/visual/animation/parallelAnimation/data/parallelAnimation.qml
new file mode 100644
index 0000000..5f5b8fc
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/parallelAnimation/data/parallelAnimation.qml
@@ -0,0 +1,463 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 32
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 48
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 64
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 80
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 96
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 112
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 128
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 144
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 160
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 176
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 192
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 208
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 224
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 240
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 256
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 272
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 288
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 304
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 320
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 336
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 352
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 368
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 384
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 400
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 416
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 432
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 448
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 464
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 480
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 496
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 512
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 528
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 544
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 560
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 576
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 592
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 608
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 624
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 640
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 656
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 672
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 688
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 704
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 720
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 736
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 752
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 137; y: 74
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 768
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 784
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 800
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 816
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 832
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 848
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 864
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 137; y: 74
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 880
+ hash: "4faa7727bafeea0771f2db62f0141ac9"
+ }
+ Frame {
+ msec: 896
+ hash: "0fada111cb977c4de8c7499e44714f38"
+ }
+ Frame {
+ msec: 912
+ hash: "1817e010332117dcddc1a1b1a2caf52d"
+ }
+ Frame {
+ msec: 928
+ hash: "e4add6bf93479c9bca571419fe2fabf9"
+ }
+ Frame {
+ msec: 944
+ hash: "d8812e206d2cbf434d58db6a35439a44"
+ }
+ Frame {
+ msec: 960
+ image: "parallelAnimation.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "a238178c584aaf2563d29bff927d5bab"
+ }
+ Frame {
+ msec: 992
+ hash: "f583e9fe8feda02e796a61c5fed7b0eb"
+ }
+ Frame {
+ msec: 1008
+ hash: "b3a1a4fd85912831e551a8c07da1a561"
+ }
+ Frame {
+ msec: 1024
+ hash: "f7c111ee4a04af6c1da958f8b56c28ee"
+ }
+ Frame {
+ msec: 1040
+ hash: "f53fa374817d81ee44fb98e64e464b36"
+ }
+ Frame {
+ msec: 1056
+ hash: "547ddef13cbcaaf57bb1f4e2bb7bc822"
+ }
+ Frame {
+ msec: 1072
+ hash: "8b10ccfef926103a6d67d68eee250f83"
+ }
+ Frame {
+ msec: 1088
+ hash: "008bbb50dc659e6f5eea15290680edd7"
+ }
+ Frame {
+ msec: 1104
+ hash: "0217e3230d3df44363a023d0d7defc5f"
+ }
+ Frame {
+ msec: 1120
+ hash: "ab9907a92452de6878f4c346febe705c"
+ }
+ Frame {
+ msec: 1136
+ hash: "7bce31f347a7f0598d2d64026c702f3e"
+ }
+ Frame {
+ msec: 1152
+ hash: "032080184907bc5b01db7675802d7dbe"
+ }
+ Frame {
+ msec: 1168
+ hash: "2cba43a2e5febcc44bfd1379b9cb2591"
+ }
+ Frame {
+ msec: 1184
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1200
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1216
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1232
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1248
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1264
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1280
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1296
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1312
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1328
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1344
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1360
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1376
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1392
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1408
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1424
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1440
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1456
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1472
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1488
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1504
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1520
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1536
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1552
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1568
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1584
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1600
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1616
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1632
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1648
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1664
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1680
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1696
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1712
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+ Frame {
+ msec: 1728
+ hash: "b901a51b5605621adff7b34c61f8f320"
+ }
+}
diff --git a/tests/auto/declarative/visual/animation/parallelAnimation/parallelAnimation.qml b/tests/auto/declarative/visual/animation/parallelAnimation/parallelAnimation.qml
new file mode 100644
index 0000000..9e0422f
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/parallelAnimation/parallelAnimation.qml
@@ -0,0 +1,43 @@
+import Qt 4.6
+
+Rectangle {
+ width: 400; height: 200
+ Rectangle {
+ id: redRect
+ width: 100; height: 100
+ color: "red"
+ }
+ Rectangle {
+ id: redRect2
+ width: 100; height: 100
+ y: 100
+ color: "red"
+ }
+
+ MouseRegion {
+ anchors.fill: parent
+ onClicked: parent.state = "state1"
+ }
+
+ states: State {
+ name: "state1"
+ PropertyChanges {
+ target: redRect
+ x: 300
+ color: "purple"
+ }
+ PropertyChanges {
+ target: redRect2
+ x: 300
+ color: "purple"
+ }
+ }
+
+ transitions: Transition {
+ PropertyAnimation { matchTargets: redRect; matchProperties: "x,color"; duration: 300 }
+ ParallelAnimation {
+ NumberAnimation { matchTargets: redRect2; matchProperties: "x"; duration: 300 }
+ ColorAnimation { matchTargets: redRect2; matchProperties: "color"; duration: 300 }
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/animation/parentAction/data/parentAction.0.png b/tests/auto/declarative/visual/animation/parentAction/data/parentAction.0.png
new file mode 100644
index 0000000..a0032f8
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/parentAction/data/parentAction.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/parentAction/data/parentAction.1.png b/tests/auto/declarative/visual/animation/parentAction/data/parentAction.1.png
new file mode 100644
index 0000000..958b6af
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/parentAction/data/parentAction.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/parentAction/data/parentAction.2.png b/tests/auto/declarative/visual/animation/parentAction/data/parentAction.2.png
new file mode 100644
index 0000000..3a1811f
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/parentAction/data/parentAction.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/parentAction/data/parentAction.3.png b/tests/auto/declarative/visual/animation/parentAction/data/parentAction.3.png
new file mode 100644
index 0000000..36064c2
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/parentAction/data/parentAction.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/parentAction/data/parentAction.4.png b/tests/auto/declarative/visual/animation/parentAction/data/parentAction.4.png
new file mode 100644
index 0000000..c493a1d
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/parentAction/data/parentAction.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/parentAction/data/parentAction.5.png b/tests/auto/declarative/visual/animation/parentAction/data/parentAction.5.png
new file mode 100644
index 0000000..c493a1d
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/parentAction/data/parentAction.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/parentAction/data/parentAction.qml b/tests/auto/declarative/visual/animation/parentAction/data/parentAction.qml
new file mode 100644
index 0000000..de27af7
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/parentAction/data/parentAction.qml
@@ -0,0 +1,1207 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 32
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 48
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 64
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 80
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 96
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 112
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 128
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 144
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 160
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 176
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 192
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 208
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 224
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 240
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 256
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 272
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 288
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 304
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 320
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 336
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 352
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 368
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 384
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 400
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 416
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 432
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 448
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 464
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 480
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 496
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 512
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 528
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 544
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 560
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 576
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 150; y: 274
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 592
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 608
+ hash: "a7bb3d44c8bcf403906afa86f5bc3062"
+ }
+ Frame {
+ msec: 624
+ hash: "2b366e6009e70fa0227a1fee662fe1bf"
+ }
+ Frame {
+ msec: 640
+ hash: "c12869fb8002aa36c3bfad7fd0979240"
+ }
+ Frame {
+ msec: 656
+ hash: "56c583e77b5e0a8707e977dc937c2acf"
+ }
+ Frame {
+ msec: 672
+ hash: "6b191d57a45a3f2d010a7f44064e409a"
+ }
+ Frame {
+ msec: 688
+ hash: "9457ee33c999a63fa4bd4db5c3ceac8b"
+ }
+ Frame {
+ msec: 704
+ hash: "446b23b662640ad6ad8c456f956fe73a"
+ }
+ Frame {
+ msec: 720
+ hash: "23c59708069406486e4979c7d59f3f4a"
+ }
+ Frame {
+ msec: 736
+ hash: "c9ce43ddca79b5b6f26af2c2259dc071"
+ }
+ Frame {
+ msec: 752
+ hash: "e838229ba70c30112918f19bb471fa34"
+ }
+ Frame {
+ msec: 768
+ hash: "0cbaeddb2ff6408a37a68fc685e2bca0"
+ }
+ Frame {
+ msec: 784
+ hash: "616b4ec719586b151ba3d709e51038bf"
+ }
+ Frame {
+ msec: 800
+ hash: "89b2c709f5c3083c204a9450e605c1d4"
+ }
+ Frame {
+ msec: 816
+ hash: "427a5c2d13631d899ff2d673e762f114"
+ }
+ Frame {
+ msec: 832
+ hash: "958aa9ca5a6b91aa6dfbc2a1ae3e2deb"
+ }
+ Frame {
+ msec: 848
+ hash: "09a3ac0010ed8f3df2cfa7ed9d0a92e4"
+ }
+ Frame {
+ msec: 864
+ hash: "5607ea54f9990f3232d6f56080e1ef15"
+ }
+ Frame {
+ msec: 880
+ hash: "600682467c55288b9d5e65299637dd72"
+ }
+ Frame {
+ msec: 896
+ hash: "bc7a238611574a13650f854ceac35032"
+ }
+ Frame {
+ msec: 912
+ hash: "e5f6b19b3685a96d4d0c3b8384513643"
+ }
+ Frame {
+ msec: 928
+ hash: "d5d23b0fc09136fd1ae121e311866cc3"
+ }
+ Frame {
+ msec: 944
+ hash: "5099e5edd1a6bd37f5f6c836a6ca7644"
+ }
+ Frame {
+ msec: 960
+ image: "parentAction.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "97dd20f7774cfd8379e1d1b44f8ddc7b"
+ }
+ Frame {
+ msec: 992
+ hash: "ab2deea9e4f8c43ed58b5a355800ecda"
+ }
+ Frame {
+ msec: 1008
+ hash: "88ec383ce368259d3cc18612b6f5b941"
+ }
+ Frame {
+ msec: 1024
+ hash: "f84b20b849a77e50717f99b9d844240e"
+ }
+ Frame {
+ msec: 1040
+ hash: "6c042360c2d24ad56cec32d01ce82d6b"
+ }
+ Frame {
+ msec: 1056
+ hash: "c86b464720192f3e039fa5d8ab5f09bb"
+ }
+ Frame {
+ msec: 1072
+ hash: "35ec432fdf91fcd1dfcd945cfe785b09"
+ }
+ Frame {
+ msec: 1088
+ hash: "27a2ec28e4fef006622e8211fd709853"
+ }
+ Frame {
+ msec: 1104
+ hash: "8454d1f5ed89551e2a403c869885116a"
+ }
+ Frame {
+ msec: 1120
+ hash: "7e33aed53dc4338c168274d972c8e711"
+ }
+ Frame {
+ msec: 1136
+ hash: "e0192ea2049d6bae6012f00406630a92"
+ }
+ Frame {
+ msec: 1152
+ hash: "a2ea5489a373084169024035a0f69e71"
+ }
+ Frame {
+ msec: 1168
+ hash: "6947a72c4d959b90dafdaddcac815b3e"
+ }
+ Frame {
+ msec: 1184
+ hash: "0e22cc3c96d0934095b7254f0f28b18b"
+ }
+ Frame {
+ msec: 1200
+ hash: "72529ddc6f2678a783aedf445d7038a4"
+ }
+ Frame {
+ msec: 1216
+ hash: "38f03c0ee50488ffd23a2fb3d3445461"
+ }
+ Frame {
+ msec: 1232
+ hash: "b441721ed30c787874a2a71a94e1ba44"
+ }
+ Frame {
+ msec: 1248
+ hash: "1e37f26d78590414b2ef01c72ad136a9"
+ }
+ Frame {
+ msec: 1264
+ hash: "88e4af80d068485ebd8c3d51f9bbfe8d"
+ }
+ Frame {
+ msec: 1280
+ hash: "107707216c16c629d8409cf006f9f2dc"
+ }
+ Frame {
+ msec: 1296
+ hash: "f56f3f4f140ac072f7df47eddfc76844"
+ }
+ Frame {
+ msec: 1312
+ hash: "41239a9d8ed793c24967875aabeae8a5"
+ }
+ Frame {
+ msec: 1328
+ hash: "30035e37320dae4f9ead01a30895eb38"
+ }
+ Frame {
+ msec: 1344
+ hash: "fb2f535b42b862b65f8adb3ad1a46779"
+ }
+ Frame {
+ msec: 1360
+ hash: "e10ba7f74d52fc963e20a4647ff0d620"
+ }
+ Frame {
+ msec: 1376
+ hash: "5abf5388566bed2fdb71afc8cd7cfe9b"
+ }
+ Frame {
+ msec: 1392
+ hash: "91990471563e3c8292e8e8325a1d17a2"
+ }
+ Frame {
+ msec: 1408
+ hash: "59a6293a48f83a9197adcffed3f32f15"
+ }
+ Frame {
+ msec: 1424
+ hash: "db3e75df318e9f0d239ce9b76e92eff3"
+ }
+ Frame {
+ msec: 1440
+ hash: "3b5c64bc64a701edb5c2e40b23443bc3"
+ }
+ Frame {
+ msec: 1456
+ hash: "9db08c0375148b2317427591b5f43608"
+ }
+ Frame {
+ msec: 1472
+ hash: "2d761f1530846eff87a7625a120e0afd"
+ }
+ Frame {
+ msec: 1488
+ hash: "c5460f8c58b83c2ac15842ddb023ad4f"
+ }
+ Frame {
+ msec: 1504
+ hash: "0efb51810a2dc359c7964268c98ea8eb"
+ }
+ Frame {
+ msec: 1520
+ hash: "b92a42012df57eb261badf1f518b8e67"
+ }
+ Frame {
+ msec: 1536
+ hash: "8d348bae62af2d35bdfee806a1c39910"
+ }
+ Frame {
+ msec: 1552
+ hash: "762d9bb4ed11d249bfd902a541129d60"
+ }
+ Frame {
+ msec: 1568
+ hash: "bddbd9f64a9f7156984feccd5fa94093"
+ }
+ Frame {
+ msec: 1584
+ hash: "353a98e1573b0518941ff22bf2776244"
+ }
+ Frame {
+ msec: 1600
+ hash: "1765aed97e29f25dee93a77a06557b82"
+ }
+ Frame {
+ msec: 1616
+ hash: "73b5c2bdb7f268f7a33e129c8ba44013"
+ }
+ Frame {
+ msec: 1632
+ hash: "46ac1976fb9932d0ef6e0b5927386ad9"
+ }
+ Frame {
+ msec: 1648
+ hash: "90b5b5b46c9c352e8be41cc74f96133a"
+ }
+ Frame {
+ msec: 1664
+ hash: "0efe0036577c890fd45cd7dd53014616"
+ }
+ Frame {
+ msec: 1680
+ hash: "7f32df17481abf40ccb33afe6d17085d"
+ }
+ Frame {
+ msec: 1696
+ hash: "1fa8544c48a476764f4f8278c14b651d"
+ }
+ Frame {
+ msec: 1712
+ hash: "f8f06ece30f690deeba5999ce63bf40b"
+ }
+ Frame {
+ msec: 1728
+ hash: "885b230f4b2fe380c7cf68955940d206"
+ }
+ Frame {
+ msec: 1744
+ hash: "d0fc5aa4df46099bb46a1d7db30baa09"
+ }
+ Frame {
+ msec: 1760
+ hash: "8fa7fe5197cbe1ff67f8a2c47f1f0740"
+ }
+ Frame {
+ msec: 1776
+ hash: "aa3b3b03460daf54f085551e1a46c08b"
+ }
+ Frame {
+ msec: 1792
+ hash: "35a1728a2430027a9474fb7d61090643"
+ }
+ Frame {
+ msec: 1808
+ hash: "2b1cff3986b8b03f1061176a4722b0f9"
+ }
+ Frame {
+ msec: 1824
+ hash: "8047be1b35ee3d5078a68c6cdc35eeb7"
+ }
+ Frame {
+ msec: 1840
+ hash: "7f7afa48bb7d612b354c8488e72c8339"
+ }
+ Frame {
+ msec: 1856
+ hash: "691a876caefce9aa0f5140c17059b8f4"
+ }
+ Frame {
+ msec: 1872
+ hash: "903bec66e47db766dc431f060726988c"
+ }
+ Frame {
+ msec: 1888
+ hash: "f13593fc891f0b050c01b61963019da1"
+ }
+ Frame {
+ msec: 1904
+ hash: "aa00de965bdb370a5974b195c3fb38af"
+ }
+ Frame {
+ msec: 1920
+ image: "parentAction.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "168d3e27261c0943e6262b6be27adfb0"
+ }
+ Frame {
+ msec: 1952
+ hash: "6fafebd0b396e7c0a78c767c6af936ba"
+ }
+ Frame {
+ msec: 1968
+ hash: "827e3a3fcd6fd8588e9fcc043769b3a8"
+ }
+ Frame {
+ msec: 1984
+ hash: "155329bf1c1a6f6c37bf7e6e8a92c59b"
+ }
+ Frame {
+ msec: 2000
+ hash: "d3008d1e7cee5170171699ef6fb9aa81"
+ }
+ Frame {
+ msec: 2016
+ hash: "5c1244e7806e131a6063f22a66e4eb12"
+ }
+ Frame {
+ msec: 2032
+ hash: "fcd6b372229a6cf14face81e9d614456"
+ }
+ Frame {
+ msec: 2048
+ hash: "bf1a375a81bf43c5671cccc62e9a0462"
+ }
+ Frame {
+ msec: 2064
+ hash: "0e22404508470baaa6621f37361951fa"
+ }
+ Frame {
+ msec: 2080
+ hash: "45046f28c103caa161e41861f71731c4"
+ }
+ Frame {
+ msec: 2096
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2112
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2128
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2144
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2160
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2176
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2192
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2208
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2224
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2240
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2256
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2272
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2288
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2304
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2320
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2336
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2352
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2368
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2384
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2400
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2416
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2432
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2448
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2464
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2480
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2496
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2512
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2528
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2544
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2560
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2576
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2592
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2608
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2624
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2640
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2656
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2672
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2688
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2704
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2720
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2736
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2752
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 150; y: 274
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2768
+ hash: "7a92731c713470a2b2c91fd6b83447de"
+ }
+ Frame {
+ msec: 2784
+ hash: "44a0b46c21bd4c76d44883ba146e3614"
+ }
+ Frame {
+ msec: 2800
+ hash: "2224abc3333a2bc5fa1cf3c4e8d6a6f9"
+ }
+ Frame {
+ msec: 2816
+ hash: "ea9c05c0295a300e21aacbdfd5b4968e"
+ }
+ Frame {
+ msec: 2832
+ hash: "e630e2893f89a6ae536bcbd1a084af07"
+ }
+ Frame {
+ msec: 2848
+ hash: "af56f1e79eb3746efb9e4bcbc3fbced8"
+ }
+ Frame {
+ msec: 2864
+ hash: "96be8c3ba0d7a85c6f6df877b869b563"
+ }
+ Frame {
+ msec: 2880
+ image: "parentAction.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "603d8684cb6f097e3ab2a2e5ef053112"
+ }
+ Frame {
+ msec: 2912
+ hash: "0433d242d1dd40a3792f55f807ebbff4"
+ }
+ Frame {
+ msec: 2928
+ hash: "1190067cacc7361f6cfe09f153c7a07e"
+ }
+ Frame {
+ msec: 2944
+ hash: "98e917880471511122847ad8a406e3a3"
+ }
+ Frame {
+ msec: 2960
+ hash: "fff06869074a3a6c5823ed3fb6fa7a43"
+ }
+ Frame {
+ msec: 2976
+ hash: "602d95daee8f160a0fd784931d0a06bd"
+ }
+ Frame {
+ msec: 2992
+ hash: "f7e466bbd52f40e88ff567758f4db835"
+ }
+ Frame {
+ msec: 3008
+ hash: "54417a4c4fb71d458439ad2e2126f8e1"
+ }
+ Frame {
+ msec: 3024
+ hash: "fe150dd5056b9dbf1cd0b196e9a7a47b"
+ }
+ Frame {
+ msec: 3040
+ hash: "1384c871bead85916f7bfcdebc370697"
+ }
+ Frame {
+ msec: 3056
+ hash: "5f13339cc0e604b75a9d1d85342fa717"
+ }
+ Frame {
+ msec: 3072
+ hash: "655069d61b7a44e729a2cbb33d683c3e"
+ }
+ Frame {
+ msec: 3088
+ hash: "2324e9e4a02e41855b066983dbf0e61d"
+ }
+ Frame {
+ msec: 3104
+ hash: "0217baf091325b95c033ba073bd68ce5"
+ }
+ Frame {
+ msec: 3120
+ hash: "c27854c3af5b58db85846a1762ab18ba"
+ }
+ Frame {
+ msec: 3136
+ hash: "45246ee6383ceb6260f84571a885ba90"
+ }
+ Frame {
+ msec: 3152
+ hash: "d82ded86f093d1a376994cacf43d0343"
+ }
+ Frame {
+ msec: 3168
+ hash: "c9179d30f80c6101bca2bed40d6a859f"
+ }
+ Frame {
+ msec: 3184
+ hash: "a63e032d20a9d985c6c345434d98a364"
+ }
+ Frame {
+ msec: 3200
+ hash: "fc7d6797ce15edf7fadb9dae691ecd5c"
+ }
+ Frame {
+ msec: 3216
+ hash: "76cf37ad8c50fed8b1900784b647819c"
+ }
+ Frame {
+ msec: 3232
+ hash: "256aab3690c9ba928bb4d4dd3bbfc756"
+ }
+ Frame {
+ msec: 3248
+ hash: "90cab52fdefbae4e7d0f0f93b46ebeb0"
+ }
+ Frame {
+ msec: 3264
+ hash: "badb5103bf826dc467f6e620cc2b47be"
+ }
+ Frame {
+ msec: 3280
+ hash: "e7d0e437de5ebc0fa07b2a4ef11159cb"
+ }
+ Frame {
+ msec: 3296
+ hash: "5931b1c3932ab91446324165d7e2603a"
+ }
+ Frame {
+ msec: 3312
+ hash: "ce1808db90ba955ab3cb845500f4c013"
+ }
+ Frame {
+ msec: 3328
+ hash: "142f8a440d1fe2d868f47ba3006de9d7"
+ }
+ Frame {
+ msec: 3344
+ hash: "10d32a6cc90319ea66d7f2c1241590ce"
+ }
+ Frame {
+ msec: 3360
+ hash: "7f633559d715396e6de451b3dd2fadbd"
+ }
+ Frame {
+ msec: 3376
+ hash: "d44590ae51ceef5e082747c44bc41be9"
+ }
+ Frame {
+ msec: 3392
+ hash: "2b498181668fb1fbf65294d575654929"
+ }
+ Frame {
+ msec: 3408
+ hash: "7efeeffd08e4de440da83511313de729"
+ }
+ Frame {
+ msec: 3424
+ hash: "8de2331393d1e712192d11ed096836d3"
+ }
+ Frame {
+ msec: 3440
+ hash: "fa9381ef2e295865a9b8cb9b36a0eacf"
+ }
+ Frame {
+ msec: 3456
+ hash: "97debc4432c5ecb7f606a81e5411b02c"
+ }
+ Frame {
+ msec: 3472
+ hash: "eb4c1bb1f4398e3c18182c28a015be76"
+ }
+ Frame {
+ msec: 3488
+ hash: "a976aa509f4c6f309d9a6011eeae02aa"
+ }
+ Frame {
+ msec: 3504
+ hash: "457de7ee05e0ef0ef120a3d4e371c02e"
+ }
+ Frame {
+ msec: 3520
+ hash: "0c01f9f150fe33155fa20703735a6d27"
+ }
+ Frame {
+ msec: 3536
+ hash: "5af4f80624082a264010247ea8630a1a"
+ }
+ Frame {
+ msec: 3552
+ hash: "b23a1191d149549fa29a61b6dc70f037"
+ }
+ Frame {
+ msec: 3568
+ hash: "e00fb32cb13b1347e4b7b9fdbcca68e5"
+ }
+ Frame {
+ msec: 3584
+ hash: "fef0503c82f253f8bc3fb3e705a98aa7"
+ }
+ Frame {
+ msec: 3600
+ hash: "7a9beca28340d2aa89da5e05f5ac2a55"
+ }
+ Frame {
+ msec: 3616
+ hash: "f3c57ea07ab486ffa1f46da60de0b8f1"
+ }
+ Frame {
+ msec: 3632
+ hash: "ef0a4ad9ac339fd6ea50dbe6baa9387f"
+ }
+ Frame {
+ msec: 3648
+ hash: "1b317a9eb4ce022f005d551546c688a4"
+ }
+ Frame {
+ msec: 3664
+ hash: "628e912a4a26800b9b7b5e60e60e3a7d"
+ }
+ Frame {
+ msec: 3680
+ hash: "3587b75e4d834a88729754d2c2a4b193"
+ }
+ Frame {
+ msec: 3696
+ hash: "084bc1360a38123589baec5aae15b4ff"
+ }
+ Frame {
+ msec: 3712
+ hash: "47f0f6c3cdf456826a6fd6846e58dcc8"
+ }
+ Frame {
+ msec: 3728
+ hash: "ed982c4c3ebd132baaaf43efad40a3f7"
+ }
+ Frame {
+ msec: 3744
+ hash: "d7ddce47c23fada4c69d53d934582d71"
+ }
+ Frame {
+ msec: 3760
+ hash: "74f2f911bee26c4c551f4c70596753ae"
+ }
+ Frame {
+ msec: 3776
+ hash: "3ed7cbf10dfce3a485d7878766cf9da6"
+ }
+ Frame {
+ msec: 3792
+ hash: "87a74257551ab6c7fcfe05e815482ae9"
+ }
+ Frame {
+ msec: 3808
+ hash: "4f63e4904e97d4ce832b20b7317a9958"
+ }
+ Frame {
+ msec: 3824
+ hash: "f912da8781e547c6e28890655c1b8884"
+ }
+ Frame {
+ msec: 3840
+ image: "parentAction.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "faa640ccf993324400254ffb862ac279"
+ }
+ Frame {
+ msec: 3872
+ hash: "b67f342424d1b9a364b09da8994fcd6b"
+ }
+ Frame {
+ msec: 3888
+ hash: "b2407732194c1e0c2a9bfb379b94b562"
+ }
+ Frame {
+ msec: 3904
+ hash: "55733608d0302ef90c124322ac6d8dc6"
+ }
+ Frame {
+ msec: 3920
+ hash: "734f5b628a26d3d7c91ee84fb26d5b5f"
+ }
+ Frame {
+ msec: 3936
+ hash: "27839fefa4a218cd77843358392bb874"
+ }
+ Frame {
+ msec: 3952
+ hash: "8cac19559d37bd2b581cef0a4c707753"
+ }
+ Frame {
+ msec: 3968
+ hash: "91422870aa1471571e7dd8ff5103f76c"
+ }
+ Frame {
+ msec: 3984
+ hash: "7156166d5f8d13483467ef515627c95d"
+ }
+ Frame {
+ msec: 4000
+ hash: "6028e8374c2ce42a9a9e85b4a8b53027"
+ }
+ Frame {
+ msec: 4016
+ hash: "17c99592be58d2e03f9f173c47c0649b"
+ }
+ Frame {
+ msec: 4032
+ hash: "6084b53186c6a7eda38ac7fa34bf45ce"
+ }
+ Frame {
+ msec: 4048
+ hash: "e82131a8a5a06519f49308bbc25738cf"
+ }
+ Frame {
+ msec: 4064
+ hash: "77bdb69cbe55d9c503c6aa1c0f974d87"
+ }
+ Frame {
+ msec: 4080
+ hash: "b2346ec5d376651347281d5fb00fc4d7"
+ }
+ Frame {
+ msec: 4096
+ hash: "36a3b72c9d7f09795c546855a269801d"
+ }
+ Frame {
+ msec: 4112
+ hash: "4e5478b33baca797f3f8f72c2c6c51ad"
+ }
+ Frame {
+ msec: 4128
+ hash: "e59d12be3ed1f58de010d385ddfe78e5"
+ }
+ Frame {
+ msec: 4144
+ hash: "9674106a146effd47c2724a2dd82ae84"
+ }
+ Frame {
+ msec: 4160
+ hash: "862cec781f169f713032e6d52d3616ce"
+ }
+ Frame {
+ msec: 4176
+ hash: "c8d47bdfb6518ef4827677023313d559"
+ }
+ Frame {
+ msec: 4192
+ hash: "19413931b3e788067dfaef39b47d30ff"
+ }
+ Frame {
+ msec: 4208
+ hash: "600e426532c0348cd622257b0773efd5"
+ }
+ Frame {
+ msec: 4224
+ hash: "6d975e259d4efa108375d271451531c1"
+ }
+ Frame {
+ msec: 4240
+ hash: "50b0da4848564c063694202ce16ea808"
+ }
+ Frame {
+ msec: 4256
+ hash: "0a9450739031f680735b5210e6a30c3f"
+ }
+ Frame {
+ msec: 4272
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4288
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4304
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4320
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4336
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4352
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4368
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4384
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4400
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4416
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4432
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4448
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4464
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4480
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4496
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4512
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4528
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4544
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4560
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4576
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4592
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4608
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4624
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4640
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4656
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4672
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4688
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+ Frame {
+ msec: 4704
+ hash: "23ce049cd7e715c28f5845fd1a1fc195"
+ }
+}
diff --git a/tests/auto/declarative/visual/animation/parentAction/parentAction.qml b/tests/auto/declarative/visual/animation/parentAction/parentAction.qml
new file mode 100644
index 0000000..1e3f402
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/parentAction/parentAction.qml
@@ -0,0 +1,55 @@
+import Qt 4.6
+
+Rectangle {
+ width: 400; height: 400
+ Item {
+ scale: .5
+ rotation: 15
+ transformOrigin: "Center"
+ x: 10; y: 10
+ Rectangle {
+ id: myRect
+ x: 5
+ width: 100; height: 100
+ transformOrigin: "BottomLeft"
+ color: "red"
+ }
+ }
+ MouseRegion {
+ id: clickable
+ anchors.fill: parent
+ }
+
+ Item {
+ x: 200; y: 200
+ rotation: 52;
+ scale: 2
+ Item {
+ id: newParent
+ x: 100; y: 100
+ }
+ }
+
+ states: State {
+ name: "moved"
+ when: clickable.pressed
+ ParentChange {
+ target: myRect
+ parent: newParent
+ }
+ PropertyChanges {
+ target: myRect
+ rotation: -52
+ scale: 1
+ color: "blue"
+ }
+ }
+
+ transitions: Transition {
+ SequentialAnimation {
+ ColorAnimation { duration: 500}
+ ParentAction {}
+ NumberAnimation { matchProperties: "rotation, scale"; duration: 1000 }
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.0.png b/tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.0.png
new file mode 100644
index 0000000..693a794
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.1.png b/tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.1.png
new file mode 100644
index 0000000..06d43f1
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.2.png b/tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.2.png
new file mode 100644
index 0000000..e619baf
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.3.png b/tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.3.png
new file mode 100644
index 0000000..30c7671
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.4.png b/tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.4.png
new file mode 100644
index 0000000..132803c
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.5.png b/tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.5.png
new file mode 100644
index 0000000..8372bc3
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.qml b/tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.qml
new file mode 100644
index 0000000..73c6542
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/pauseAnimation/data/pauseAnimation.qml
@@ -0,0 +1,1619 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 32
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 48
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 64
+ hash: "dcf2867c127e041970047ec8f3edc04f"
+ }
+ Frame {
+ msec: 80
+ hash: "41ba853c3403f68a23e708df82e21c53"
+ }
+ Frame {
+ msec: 96
+ hash: "a725b59b4947357546bbfc7df3d830af"
+ }
+ Frame {
+ msec: 112
+ hash: "336d31586171f22d541b989d24b95cbb"
+ }
+ Frame {
+ msec: 128
+ hash: "6d63fb5c8a80f0280e88b2cdf8641bb9"
+ }
+ Frame {
+ msec: 144
+ hash: "ef8941674cb61f54853dc33652bb854e"
+ }
+ Frame {
+ msec: 160
+ hash: "b3f4a2165ec1ee971542b8ef89656cea"
+ }
+ Frame {
+ msec: 176
+ hash: "af3120fe262d2489c0ed33fbbee1549f"
+ }
+ Frame {
+ msec: 192
+ hash: "1373545e43fff7251cec9e8375ea267f"
+ }
+ Frame {
+ msec: 208
+ hash: "21f0b0437a999bbde66a913032d495c2"
+ }
+ Frame {
+ msec: 224
+ hash: "0809d32d5bc1bfce199b1f39a1c68d4f"
+ }
+ Frame {
+ msec: 240
+ hash: "022137587b39f5123835482178a1f1cf"
+ }
+ Frame {
+ msec: 256
+ hash: "97566ce9558d13ea0780bce233097b27"
+ }
+ Frame {
+ msec: 272
+ hash: "96d79b07da105b7f631ed61582b26f7e"
+ }
+ Frame {
+ msec: 288
+ hash: "f4732ff2df93fe67cb850dec34184924"
+ }
+ Frame {
+ msec: 304
+ hash: "054e6e52f74a3e24f04e6ad0071f79f8"
+ }
+ Frame {
+ msec: 320
+ hash: "f541af93a9fde62e4bd1c91d30f91e65"
+ }
+ Frame {
+ msec: 336
+ hash: "c4f844ee71f23635bb3ec7375f6a134f"
+ }
+ Frame {
+ msec: 352
+ hash: "3e52e06db2bf78762bb9816fe6b105d9"
+ }
+ Frame {
+ msec: 368
+ hash: "d9604be23a91327e6ab454609a9d4a13"
+ }
+ Frame {
+ msec: 384
+ hash: "dc98a9bdd99367c1e9b838d4be489dcc"
+ }
+ Frame {
+ msec: 400
+ hash: "e87b00bfc2c2a75a4234ec02a057ad3a"
+ }
+ Frame {
+ msec: 416
+ hash: "5be4f5c67941efb6fcea363c79f1e321"
+ }
+ Frame {
+ msec: 432
+ hash: "6cc9de62a0c8fa5e42eac1b01e99ac32"
+ }
+ Frame {
+ msec: 448
+ hash: "62a7133012348f2ec3a388fb685ecc3f"
+ }
+ Frame {
+ msec: 464
+ hash: "4ac43a03cc6f2020ab5f894d704092ac"
+ }
+ Frame {
+ msec: 480
+ hash: "c1a7b7d6d64ac5584c073c2881290696"
+ }
+ Frame {
+ msec: 496
+ hash: "29ece1bca4d21fb5862091317d430a13"
+ }
+ Frame {
+ msec: 512
+ hash: "29ece1bca4d21fb5862091317d430a13"
+ }
+ Frame {
+ msec: 528
+ hash: "29ece1bca4d21fb5862091317d430a13"
+ }
+ Frame {
+ msec: 544
+ hash: "29ece1bca4d21fb5862091317d430a13"
+ }
+ Frame {
+ msec: 560
+ hash: "29ece1bca4d21fb5862091317d430a13"
+ }
+ Frame {
+ msec: 576
+ hash: "c1a7b7d6d64ac5584c073c2881290696"
+ }
+ Frame {
+ msec: 592
+ hash: "c1a7b7d6d64ac5584c073c2881290696"
+ }
+ Frame {
+ msec: 608
+ hash: "4ac43a03cc6f2020ab5f894d704092ac"
+ }
+ Frame {
+ msec: 624
+ hash: "4ac43a03cc6f2020ab5f894d704092ac"
+ }
+ Frame {
+ msec: 640
+ hash: "ffd39c1122fe2f7877ef30591b539b40"
+ }
+ Frame {
+ msec: 656
+ hash: "62a7133012348f2ec3a388fb685ecc3f"
+ }
+ Frame {
+ msec: 672
+ hash: "45281a70021f81dbef30334b1480da1b"
+ }
+ Frame {
+ msec: 688
+ hash: "6cc9de62a0c8fa5e42eac1b01e99ac32"
+ }
+ Frame {
+ msec: 704
+ hash: "79ec710576427df73dd03f39fba6e2eb"
+ }
+ Frame {
+ msec: 720
+ hash: "5be4f5c67941efb6fcea363c79f1e321"
+ }
+ Frame {
+ msec: 736
+ hash: "7d9096b1eb940c82a37baf39ef3ccf3e"
+ }
+ Frame {
+ msec: 752
+ hash: "e87b00bfc2c2a75a4234ec02a057ad3a"
+ }
+ Frame {
+ msec: 768
+ hash: "da60100dc55023c3bab367d97c8f6a85"
+ }
+ Frame {
+ msec: 784
+ hash: "dc98a9bdd99367c1e9b838d4be489dcc"
+ }
+ Frame {
+ msec: 800
+ hash: "3f869538028a09020d5e8f528f4fb119"
+ }
+ Frame {
+ msec: 816
+ hash: "9650fd0364c01b11e4f5dcce51d008af"
+ }
+ Frame {
+ msec: 832
+ hash: "2cb09d9655ecc30ae6a591b28c0d355c"
+ }
+ Frame {
+ msec: 848
+ hash: "4db9bc6c11caf1d77794c2eabb62a44e"
+ }
+ Frame {
+ msec: 864
+ hash: "ce2b5dd7418868acf86fea6ad19cc0c5"
+ }
+ Frame {
+ msec: 880
+ hash: "7c27ef654e645679c90520d6cf00b0c4"
+ }
+ Frame {
+ msec: 896
+ hash: "ab3e211df3ef7f5f7a8d712edc891c0f"
+ }
+ Frame {
+ msec: 912
+ hash: "19d2ae617a49b57dd012677e2834469c"
+ }
+ Frame {
+ msec: 928
+ hash: "5025eb75c88f0760f637e0342b7f88a2"
+ }
+ Frame {
+ msec: 944
+ hash: "005acbef952a8ee536e6308a48223e65"
+ }
+ Frame {
+ msec: 960
+ image: "pauseAnimation.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "5f18a81707f23d377e81a27c1fc41ce9"
+ }
+ Frame {
+ msec: 992
+ hash: "bcc35497884c158396c7f60759d1fda4"
+ }
+ Frame {
+ msec: 1008
+ hash: "7a4528b000a4ea142d1c77407fa1f581"
+ }
+ Frame {
+ msec: 1024
+ hash: "ba967a7d810a4531e577e5f6bd2def33"
+ }
+ Frame {
+ msec: 1040
+ hash: "f5afd9cf8ffe27e9992454b9e68688cb"
+ }
+ Frame {
+ msec: 1056
+ hash: "51d475c7f64a86d3a18fb115297a7b6b"
+ }
+ Frame {
+ msec: 1072
+ hash: "49f5d6fd45c195a8d245b7fefc1277ab"
+ }
+ Frame {
+ msec: 1088
+ hash: "f9b0b278659e3a0f78611e6b7f0f2176"
+ }
+ Frame {
+ msec: 1104
+ hash: "0809d32d5bc1bfce199b1f39a1c68d4f"
+ }
+ Frame {
+ msec: 1120
+ hash: "b7208d103b63a936dff8dd8ed224237f"
+ }
+ Frame {
+ msec: 1136
+ hash: "a57c81049b0dc68090ec7c3327b9922c"
+ }
+ Frame {
+ msec: 1152
+ hash: "e553f365912586c6408c8c53b1b7d118"
+ }
+ Frame {
+ msec: 1168
+ hash: "af3120fe262d2489c0ed33fbbee1549f"
+ }
+ Frame {
+ msec: 1184
+ hash: "0c20d12464abbdc45041ea5d9f2719b1"
+ }
+ Frame {
+ msec: 1200
+ hash: "dd60cbaff6f34027474e92315dbc0ebc"
+ }
+ Frame {
+ msec: 1216
+ hash: "336d31586171f22d541b989d24b95cbb"
+ }
+ Frame {
+ msec: 1232
+ hash: "41ba853c3403f68a23e708df82e21c53"
+ }
+ Frame {
+ msec: 1248
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 1264
+ hash: "41ba853c3403f68a23e708df82e21c53"
+ }
+ Frame {
+ msec: 1280
+ hash: "a725b59b4947357546bbfc7df3d830af"
+ }
+ Frame {
+ msec: 1296
+ hash: "336d31586171f22d541b989d24b95cbb"
+ }
+ Frame {
+ msec: 1312
+ hash: "f0d8132489c2f2ef760e905b3c093726"
+ }
+ Frame {
+ msec: 1328
+ hash: "6d63fb5c8a80f0280e88b2cdf8641bb9"
+ }
+ Frame {
+ msec: 1344
+ hash: "dd60cbaff6f34027474e92315dbc0ebc"
+ }
+ Frame {
+ msec: 1360
+ hash: "ef8941674cb61f54853dc33652bb854e"
+ }
+ Frame {
+ msec: 1376
+ hash: "bc426fb7c31751665b0d3f16e2cb0173"
+ }
+ Frame {
+ msec: 1392
+ hash: "0c20d12464abbdc45041ea5d9f2719b1"
+ }
+ Frame {
+ msec: 1408
+ hash: "53ae93140252373eaa4d9da73756bd8e"
+ }
+ Frame {
+ msec: 1424
+ hash: "721d7061811b5439c2e8e395917494bc"
+ }
+ Frame {
+ msec: 1440
+ hash: "af3120fe262d2489c0ed33fbbee1549f"
+ }
+ Frame {
+ msec: 1456
+ hash: "a8b624ebfc9ab713d1ce55f318a6e90d"
+ }
+ Frame {
+ msec: 1472
+ hash: "a88a8129259f86df5a73addc3649ad37"
+ }
+ Frame {
+ msec: 1488
+ hash: "a88a8129259f86df5a73addc3649ad37"
+ }
+ Frame {
+ msec: 1504
+ hash: "3db5e30ef19ea693c21ccf72892c4390"
+ }
+ Frame {
+ msec: 1520
+ hash: "e553f365912586c6408c8c53b1b7d118"
+ }
+ Frame {
+ msec: 1536
+ hash: "e553f365912586c6408c8c53b1b7d118"
+ }
+ Frame {
+ msec: 1552
+ hash: "e553f365912586c6408c8c53b1b7d118"
+ }
+ Frame {
+ msec: 1568
+ hash: "1373545e43fff7251cec9e8375ea267f"
+ }
+ Frame {
+ msec: 1584
+ hash: "1373545e43fff7251cec9e8375ea267f"
+ }
+ Frame {
+ msec: 1600
+ hash: "1373545e43fff7251cec9e8375ea267f"
+ }
+ Frame {
+ msec: 1616
+ hash: "1373545e43fff7251cec9e8375ea267f"
+ }
+ Frame {
+ msec: 1632
+ hash: "1373545e43fff7251cec9e8375ea267f"
+ }
+ Frame {
+ msec: 1648
+ hash: "1373545e43fff7251cec9e8375ea267f"
+ }
+ Frame {
+ msec: 1664
+ hash: "e553f365912586c6408c8c53b1b7d118"
+ }
+ Frame {
+ msec: 1680
+ hash: "e553f365912586c6408c8c53b1b7d118"
+ }
+ Frame {
+ msec: 1696
+ hash: "3db5e30ef19ea693c21ccf72892c4390"
+ }
+ Frame {
+ msec: 1712
+ hash: "3db5e30ef19ea693c21ccf72892c4390"
+ }
+ Frame {
+ msec: 1728
+ hash: "a88a8129259f86df5a73addc3649ad37"
+ }
+ Frame {
+ msec: 1744
+ hash: "a8b624ebfc9ab713d1ce55f318a6e90d"
+ }
+ Frame {
+ msec: 1760
+ hash: "a8b624ebfc9ab713d1ce55f318a6e90d"
+ }
+ Frame {
+ msec: 1776
+ hash: "af3120fe262d2489c0ed33fbbee1549f"
+ }
+ Frame {
+ msec: 1792
+ hash: "721d7061811b5439c2e8e395917494bc"
+ }
+ Frame {
+ msec: 1808
+ hash: "b3f4a2165ec1ee971542b8ef89656cea"
+ }
+ Frame {
+ msec: 1824
+ hash: "0c20d12464abbdc45041ea5d9f2719b1"
+ }
+ Frame {
+ msec: 1840
+ hash: "bc426fb7c31751665b0d3f16e2cb0173"
+ }
+ Frame {
+ msec: 1856
+ hash: "ef8941674cb61f54853dc33652bb854e"
+ }
+ Frame {
+ msec: 1872
+ hash: "dd60cbaff6f34027474e92315dbc0ebc"
+ }
+ Frame {
+ msec: 1888
+ hash: "6d63fb5c8a80f0280e88b2cdf8641bb9"
+ }
+ Frame {
+ msec: 1904
+ hash: "e74fe4a6bd92cbe8629c8bc8a870104d"
+ }
+ Frame {
+ msec: 1920
+ image: "pauseAnimation.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "a725b59b4947357546bbfc7df3d830af"
+ }
+ Frame {
+ msec: 1952
+ hash: "dcf2867c127e041970047ec8f3edc04f"
+ }
+ Frame {
+ msec: 1968
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 1984
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 2000
+ hash: "dcf2867c127e041970047ec8f3edc04f"
+ }
+ Frame {
+ msec: 2016
+ hash: "41ba853c3403f68a23e708df82e21c53"
+ }
+ Frame {
+ msec: 2032
+ hash: "ce57e27af329eba4fac3ab891f0407ce"
+ }
+ Frame {
+ msec: 2048
+ hash: "ce57e27af329eba4fac3ab891f0407ce"
+ }
+ Frame {
+ msec: 2064
+ hash: "a725b59b4947357546bbfc7df3d830af"
+ }
+ Frame {
+ msec: 2080
+ hash: "a725b59b4947357546bbfc7df3d830af"
+ }
+ Frame {
+ msec: 2096
+ hash: "3042003c067b257de2cb32f650dde693"
+ }
+ Frame {
+ msec: 2112
+ hash: "3042003c067b257de2cb32f650dde693"
+ }
+ Frame {
+ msec: 2128
+ hash: "3042003c067b257de2cb32f650dde693"
+ }
+ Frame {
+ msec: 2144
+ hash: "3042003c067b257de2cb32f650dde693"
+ }
+ Frame {
+ msec: 2160
+ hash: "3042003c067b257de2cb32f650dde693"
+ }
+ Frame {
+ msec: 2176
+ hash: "3042003c067b257de2cb32f650dde693"
+ }
+ Frame {
+ msec: 2192
+ hash: "3042003c067b257de2cb32f650dde693"
+ }
+ Frame {
+ msec: 2208
+ hash: "3042003c067b257de2cb32f650dde693"
+ }
+ Frame {
+ msec: 2224
+ hash: "a725b59b4947357546bbfc7df3d830af"
+ }
+ Frame {
+ msec: 2240
+ hash: "a725b59b4947357546bbfc7df3d830af"
+ }
+ Frame {
+ msec: 2256
+ hash: "ce57e27af329eba4fac3ab891f0407ce"
+ }
+ Frame {
+ msec: 2272
+ hash: "ce57e27af329eba4fac3ab891f0407ce"
+ }
+ Frame {
+ msec: 2288
+ hash: "41ba853c3403f68a23e708df82e21c53"
+ }
+ Frame {
+ msec: 2304
+ hash: "dcf2867c127e041970047ec8f3edc04f"
+ }
+ Frame {
+ msec: 2320
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 2336
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2352
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 2368
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 2384
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 2400
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 2416
+ hash: "dcf2867c127e041970047ec8f3edc04f"
+ }
+ Frame {
+ msec: 2432
+ hash: "dcf2867c127e041970047ec8f3edc04f"
+ }
+ Frame {
+ msec: 2448
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 2464
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 2480
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 2496
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 2512
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2528
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2544
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2560
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2576
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2592
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2608
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2624
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2640
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2656
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2672
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2688
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2704
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2720
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2736
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2752
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2768
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2784
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2800
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2816
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2832
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2848
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2864
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2880
+ image: "pauseAnimation.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2912
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2928
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2944
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2960
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2976
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 2992
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3008
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3024
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3040
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3056
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3072
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3088
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3104
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3120
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3136
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3152
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3168
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3184
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3200
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3216
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3232
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3248
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3264
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3280
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3296
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3312
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3328
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3344
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3360
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3376
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3392
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3408
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3424
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3440
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3456
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3472
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3488
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3504
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3520
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3536
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 3552
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 3568
+ hash: "dcf2867c127e041970047ec8f3edc04f"
+ }
+ Frame {
+ msec: 3584
+ hash: "ce57e27af329eba4fac3ab891f0407ce"
+ }
+ Frame {
+ msec: 3600
+ hash: "3042003c067b257de2cb32f650dde693"
+ }
+ Frame {
+ msec: 3616
+ hash: "e74fe4a6bd92cbe8629c8bc8a870104d"
+ }
+ Frame {
+ msec: 3632
+ hash: "e11455d4e23a5a865e222a7aba4ba4f9"
+ }
+ Frame {
+ msec: 3648
+ hash: "8757668e56be6449ec375f0b8fed1be3"
+ }
+ Frame {
+ msec: 3664
+ hash: "53ae93140252373eaa4d9da73756bd8e"
+ }
+ Frame {
+ msec: 3680
+ hash: "a88a8129259f86df5a73addc3649ad37"
+ }
+ Frame {
+ msec: 3696
+ hash: "630d90eef2673a69e8ebc4ef1ba40e81"
+ }
+ Frame {
+ msec: 3712
+ hash: "b7208d103b63a936dff8dd8ed224237f"
+ }
+ Frame {
+ msec: 3728
+ hash: "1516c3547c7cf64832b3bc7da7c44521"
+ }
+ Frame {
+ msec: 3744
+ hash: "49f5d6fd45c195a8d245b7fefc1277ab"
+ }
+ Frame {
+ msec: 3760
+ hash: "f5afd9cf8ffe27e9992454b9e68688cb"
+ }
+ Frame {
+ msec: 3776
+ hash: "7a4528b000a4ea142d1c77407fa1f581"
+ }
+ Frame {
+ msec: 3792
+ hash: "5f18a81707f23d377e81a27c1fc41ce9"
+ }
+ Frame {
+ msec: 3808
+ hash: "005acbef952a8ee536e6308a48223e65"
+ }
+ Frame {
+ msec: 3824
+ hash: "85c135ef72d3d25658a3663e69ffb7c2"
+ }
+ Frame {
+ msec: 3840
+ image: "pauseAnimation.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "20258f07c613958c32f783466771391a"
+ }
+ Frame {
+ msec: 3872
+ hash: "9650fd0364c01b11e4f5dcce51d008af"
+ }
+ Frame {
+ msec: 3888
+ hash: "f340cdf60c6d4c29d26b7202a093ec70"
+ }
+ Frame {
+ msec: 3904
+ hash: "d754d35d0793f9f7d4f6249a874e4c45"
+ }
+ Frame {
+ msec: 3920
+ hash: "79ec710576427df73dd03f39fba6e2eb"
+ }
+ Frame {
+ msec: 3936
+ hash: "45281a70021f81dbef30334b1480da1b"
+ }
+ Frame {
+ msec: 3952
+ hash: "ffd39c1122fe2f7877ef30591b539b40"
+ }
+ Frame {
+ msec: 3968
+ hash: "4ac43a03cc6f2020ab5f894d704092ac"
+ }
+ Frame {
+ msec: 3984
+ hash: "c1a7b7d6d64ac5584c073c2881290696"
+ }
+ Frame {
+ msec: 4000
+ hash: "29ece1bca4d21fb5862091317d430a13"
+ }
+ Frame {
+ msec: 4016
+ hash: "29ece1bca4d21fb5862091317d430a13"
+ }
+ Frame {
+ msec: 4032
+ hash: "29ece1bca4d21fb5862091317d430a13"
+ }
+ Frame {
+ msec: 4048
+ hash: "29ece1bca4d21fb5862091317d430a13"
+ }
+ Frame {
+ msec: 4064
+ hash: "29ece1bca4d21fb5862091317d430a13"
+ }
+ Frame {
+ msec: 4080
+ hash: "c1a7b7d6d64ac5584c073c2881290696"
+ }
+ Frame {
+ msec: 4096
+ hash: "c1a7b7d6d64ac5584c073c2881290696"
+ }
+ Frame {
+ msec: 4112
+ hash: "4ac43a03cc6f2020ab5f894d704092ac"
+ }
+ Frame {
+ msec: 4128
+ hash: "4ac43a03cc6f2020ab5f894d704092ac"
+ }
+ Frame {
+ msec: 4144
+ hash: "ffd39c1122fe2f7877ef30591b539b40"
+ }
+ Frame {
+ msec: 4160
+ hash: "62a7133012348f2ec3a388fb685ecc3f"
+ }
+ Frame {
+ msec: 4176
+ hash: "45281a70021f81dbef30334b1480da1b"
+ }
+ Frame {
+ msec: 4192
+ hash: "6cc9de62a0c8fa5e42eac1b01e99ac32"
+ }
+ Frame {
+ msec: 4208
+ hash: "79ec710576427df73dd03f39fba6e2eb"
+ }
+ Frame {
+ msec: 4224
+ hash: "5be4f5c67941efb6fcea363c79f1e321"
+ }
+ Frame {
+ msec: 4240
+ hash: "7d9096b1eb940c82a37baf39ef3ccf3e"
+ }
+ Frame {
+ msec: 4256
+ hash: "e87b00bfc2c2a75a4234ec02a057ad3a"
+ }
+ Frame {
+ msec: 4272
+ hash: "da60100dc55023c3bab367d97c8f6a85"
+ }
+ Frame {
+ msec: 4288
+ hash: "dc98a9bdd99367c1e9b838d4be489dcc"
+ }
+ Frame {
+ msec: 4304
+ hash: "b2c778a5eff5f01edc54f03d8b4de8c7"
+ }
+ Frame {
+ msec: 4320
+ hash: "9650fd0364c01b11e4f5dcce51d008af"
+ }
+ Frame {
+ msec: 4336
+ hash: "2cb09d9655ecc30ae6a591b28c0d355c"
+ }
+ Frame {
+ msec: 4352
+ hash: "4db9bc6c11caf1d77794c2eabb62a44e"
+ }
+ Frame {
+ msec: 4368
+ hash: "ce2b5dd7418868acf86fea6ad19cc0c5"
+ }
+ Frame {
+ msec: 4384
+ hash: "c4f844ee71f23635bb3ec7375f6a134f"
+ }
+ Frame {
+ msec: 4400
+ hash: "4e1fda8a0495ef968c1cffb1257426d7"
+ }
+ Frame {
+ msec: 4416
+ hash: "19d2ae617a49b57dd012677e2834469c"
+ }
+ Frame {
+ msec: 4432
+ hash: "f438e8d2c16b5de677924c8411219b19"
+ }
+ Frame {
+ msec: 4448
+ hash: "005acbef952a8ee536e6308a48223e65"
+ }
+ Frame {
+ msec: 4464
+ hash: "87b71778d52cd8563d171151d4d32407"
+ }
+ Frame {
+ msec: 4480
+ hash: "691cd8bf5c7802ff6c5024827a379fc6"
+ }
+ Frame {
+ msec: 4496
+ hash: "ab442c0173c3d221b6782d28001dac77"
+ }
+ Frame {
+ msec: 4512
+ hash: "6f886d4538704c2fad4d84c68214109f"
+ }
+ Frame {
+ msec: 4528
+ hash: "56d39f233fae41c60499d6161f891cbc"
+ }
+ Frame {
+ msec: 4544
+ hash: "95d987c3fd1352fb81c42c63634fe53b"
+ }
+ Frame {
+ msec: 4560
+ hash: "96dc84c0c548021910e7c5b580179054"
+ }
+ Frame {
+ msec: 4576
+ hash: "ddb71cbd57f6e43744d533d4f72b08db"
+ }
+ Frame {
+ msec: 4592
+ hash: "f7ab4b197bea455b22f259913438d207"
+ }
+ Frame {
+ msec: 4608
+ hash: "2ad64cb01c9d50e0118d5ece0a644df2"
+ }
+ Frame {
+ msec: 4624
+ hash: "6579681c59dd571df0ee4429d74fb5c7"
+ }
+ Frame {
+ msec: 4640
+ hash: "630d90eef2673a69e8ebc4ef1ba40e81"
+ }
+ Frame {
+ msec: 4656
+ hash: "3db5e30ef19ea693c21ccf72892c4390"
+ }
+ Frame {
+ msec: 4672
+ hash: "721d7061811b5439c2e8e395917494bc"
+ }
+ Frame {
+ msec: 4688
+ hash: "bc426fb7c31751665b0d3f16e2cb0173"
+ }
+ Frame {
+ msec: 4704
+ hash: "e11455d4e23a5a865e222a7aba4ba4f9"
+ }
+ Frame {
+ msec: 4720
+ hash: "3042003c067b257de2cb32f650dde693"
+ }
+ Frame {
+ msec: 4736
+ hash: "dcf2867c127e041970047ec8f3edc04f"
+ }
+ Frame {
+ msec: 4752
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 4768
+ hash: "41ba853c3403f68a23e708df82e21c53"
+ }
+ Frame {
+ msec: 4784
+ hash: "a725b59b4947357546bbfc7df3d830af"
+ }
+ Frame {
+ msec: 4800
+ image: "pauseAnimation.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "f0d8132489c2f2ef760e905b3c093726"
+ }
+ Frame {
+ msec: 4832
+ hash: "e11455d4e23a5a865e222a7aba4ba4f9"
+ }
+ Frame {
+ msec: 4848
+ hash: "dd60cbaff6f34027474e92315dbc0ebc"
+ }
+ Frame {
+ msec: 4864
+ hash: "8757668e56be6449ec375f0b8fed1be3"
+ }
+ Frame {
+ msec: 4880
+ hash: "bc426fb7c31751665b0d3f16e2cb0173"
+ }
+ Frame {
+ msec: 4896
+ hash: "b3f4a2165ec1ee971542b8ef89656cea"
+ }
+ Frame {
+ msec: 4912
+ hash: "53ae93140252373eaa4d9da73756bd8e"
+ }
+ Frame {
+ msec: 4928
+ hash: "721d7061811b5439c2e8e395917494bc"
+ }
+ Frame {
+ msec: 4944
+ hash: "af3120fe262d2489c0ed33fbbee1549f"
+ }
+ Frame {
+ msec: 4960
+ hash: "a8b624ebfc9ab713d1ce55f318a6e90d"
+ }
+ Frame {
+ msec: 4976
+ hash: "a88a8129259f86df5a73addc3649ad37"
+ }
+ Frame {
+ msec: 4992
+ hash: "3db5e30ef19ea693c21ccf72892c4390"
+ }
+ Frame {
+ msec: 5008
+ hash: "3db5e30ef19ea693c21ccf72892c4390"
+ }
+ Frame {
+ msec: 5024
+ hash: "e553f365912586c6408c8c53b1b7d118"
+ }
+ Frame {
+ msec: 5040
+ hash: "e553f365912586c6408c8c53b1b7d118"
+ }
+ Frame {
+ msec: 5056
+ hash: "1373545e43fff7251cec9e8375ea267f"
+ }
+ Frame {
+ msec: 5072
+ hash: "1373545e43fff7251cec9e8375ea267f"
+ }
+ Frame {
+ msec: 5088
+ hash: "1373545e43fff7251cec9e8375ea267f"
+ }
+ Frame {
+ msec: 5104
+ hash: "1373545e43fff7251cec9e8375ea267f"
+ }
+ Frame {
+ msec: 5120
+ hash: "1373545e43fff7251cec9e8375ea267f"
+ }
+ Frame {
+ msec: 5136
+ hash: "1373545e43fff7251cec9e8375ea267f"
+ }
+ Frame {
+ msec: 5152
+ hash: "1373545e43fff7251cec9e8375ea267f"
+ }
+ Frame {
+ msec: 5168
+ hash: "e553f365912586c6408c8c53b1b7d118"
+ }
+ Frame {
+ msec: 5184
+ hash: "e553f365912586c6408c8c53b1b7d118"
+ }
+ Frame {
+ msec: 5200
+ hash: "3db5e30ef19ea693c21ccf72892c4390"
+ }
+ Frame {
+ msec: 5216
+ hash: "3db5e30ef19ea693c21ccf72892c4390"
+ }
+ Frame {
+ msec: 5232
+ hash: "a88a8129259f86df5a73addc3649ad37"
+ }
+ Frame {
+ msec: 5248
+ hash: "a8b624ebfc9ab713d1ce55f318a6e90d"
+ }
+ Frame {
+ msec: 5264
+ hash: "af3120fe262d2489c0ed33fbbee1549f"
+ }
+ Frame {
+ msec: 5280
+ hash: "721d7061811b5439c2e8e395917494bc"
+ }
+ Frame {
+ msec: 5296
+ hash: "53ae93140252373eaa4d9da73756bd8e"
+ }
+ Frame {
+ msec: 5312
+ hash: "b3f4a2165ec1ee971542b8ef89656cea"
+ }
+ Frame {
+ msec: 5328
+ hash: "0c20d12464abbdc45041ea5d9f2719b1"
+ }
+ Frame {
+ msec: 5344
+ hash: "8757668e56be6449ec375f0b8fed1be3"
+ }
+ Frame {
+ msec: 5360
+ hash: "ef8941674cb61f54853dc33652bb854e"
+ }
+ Frame {
+ msec: 5376
+ hash: "e11455d4e23a5a865e222a7aba4ba4f9"
+ }
+ Frame {
+ msec: 5392
+ hash: "6d63fb5c8a80f0280e88b2cdf8641bb9"
+ }
+ Frame {
+ msec: 5408
+ hash: "e74fe4a6bd92cbe8629c8bc8a870104d"
+ }
+ Frame {
+ msec: 5424
+ hash: "3042003c067b257de2cb32f650dde693"
+ }
+ Frame {
+ msec: 5440
+ hash: "ce57e27af329eba4fac3ab891f0407ce"
+ }
+ Frame {
+ msec: 5456
+ hash: "dcf2867c127e041970047ec8f3edc04f"
+ }
+ Frame {
+ msec: 5472
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 5488
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 5504
+ hash: "dcf2867c127e041970047ec8f3edc04f"
+ }
+ Frame {
+ msec: 5520
+ hash: "41ba853c3403f68a23e708df82e21c53"
+ }
+ Frame {
+ msec: 5536
+ hash: "ce57e27af329eba4fac3ab891f0407ce"
+ }
+ Frame {
+ msec: 5552
+ hash: "ce57e27af329eba4fac3ab891f0407ce"
+ }
+ Frame {
+ msec: 5568
+ hash: "a725b59b4947357546bbfc7df3d830af"
+ }
+ Frame {
+ msec: 5584
+ hash: "a725b59b4947357546bbfc7df3d830af"
+ }
+ Frame {
+ msec: 5600
+ hash: "3042003c067b257de2cb32f650dde693"
+ }
+ Frame {
+ msec: 5616
+ hash: "3042003c067b257de2cb32f650dde693"
+ }
+ Frame {
+ msec: 5632
+ hash: "3042003c067b257de2cb32f650dde693"
+ }
+ Frame {
+ msec: 5648
+ hash: "3042003c067b257de2cb32f650dde693"
+ }
+ Frame {
+ msec: 5664
+ hash: "3042003c067b257de2cb32f650dde693"
+ }
+ Frame {
+ msec: 5680
+ hash: "3042003c067b257de2cb32f650dde693"
+ }
+ Frame {
+ msec: 5696
+ hash: "3042003c067b257de2cb32f650dde693"
+ }
+ Frame {
+ msec: 5712
+ hash: "3042003c067b257de2cb32f650dde693"
+ }
+ Frame {
+ msec: 5728
+ hash: "a725b59b4947357546bbfc7df3d830af"
+ }
+ Frame {
+ msec: 5744
+ hash: "a725b59b4947357546bbfc7df3d830af"
+ }
+ Frame {
+ msec: 5760
+ image: "pauseAnimation.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "41ba853c3403f68a23e708df82e21c53"
+ }
+ Frame {
+ msec: 5792
+ hash: "41ba853c3403f68a23e708df82e21c53"
+ }
+ Frame {
+ msec: 5808
+ hash: "dcf2867c127e041970047ec8f3edc04f"
+ }
+ Frame {
+ msec: 5824
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 5840
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 5856
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 5872
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 5888
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 5904
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 5920
+ hash: "dcf2867c127e041970047ec8f3edc04f"
+ }
+ Frame {
+ msec: 5936
+ hash: "dcf2867c127e041970047ec8f3edc04f"
+ }
+ Frame {
+ msec: 5952
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 5968
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 5984
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 6000
+ hash: "675ebbdd22dd22ce45993df4af1acfe9"
+ }
+ Frame {
+ msec: 6016
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6032
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6048
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6064
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6080
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6096
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6112
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6128
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6144
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6160
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6176
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6192
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6208
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6224
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6240
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6256
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6272
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6288
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6304
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6320
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6336
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6352
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6368
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 6384
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6400
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+ Frame {
+ msec: 6416
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ }
+}
diff --git a/tests/auto/declarative/visual/animation/pauseAnimation/pauseAnimation.qml b/tests/auto/declarative/visual/animation/pauseAnimation/pauseAnimation.qml
new file mode 100644
index 0000000..f2e065d
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/pauseAnimation/pauseAnimation.qml
@@ -0,0 +1,29 @@
+import Qt 4.6
+
+Rectangle {
+ id: rect
+ width: 120
+ height: 200
+ color: "white"
+ Image {
+ id: img
+ source: "pics/qtlogo.png"
+ x: 60-width/2
+ y: 200-height
+ y: SequentialAnimation {
+ repeat: true
+ NumberAnimation {
+ to: 0; duration: 500
+ easing: "easeInOutQuad"
+ }
+ NumberAnimation {
+ to: 200-img.height
+ easing: "easeOutBounce"
+ duration: 2000
+ }
+ PauseAnimation {
+ duration: 1000
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/animation/pauseAnimation/pics/qtlogo.png b/tests/auto/declarative/visual/animation/pauseAnimation/pics/qtlogo.png
new file mode 100644
index 0000000..399bd0b
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/pauseAnimation/pics/qtlogo.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/propertyAction/data/propertyAction.0.png b/tests/auto/declarative/visual/animation/propertyAction/data/propertyAction.0.png
new file mode 100644
index 0000000..64d6b06
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/propertyAction/data/propertyAction.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/propertyAction/data/propertyAction.1.png b/tests/auto/declarative/visual/animation/propertyAction/data/propertyAction.1.png
new file mode 100644
index 0000000..f7fce15
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/propertyAction/data/propertyAction.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/propertyAction/data/propertyAction.2.png b/tests/auto/declarative/visual/animation/propertyAction/data/propertyAction.2.png
new file mode 100644
index 0000000..3080df5
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/propertyAction/data/propertyAction.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/propertyAction/data/propertyAction.qml b/tests/auto/declarative/visual/animation/propertyAction/data/propertyAction.qml
new file mode 100644
index 0000000..7c8c233
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/propertyAction/data/propertyAction.qml
@@ -0,0 +1,939 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 32
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 48
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 64
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 80
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 96
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 112
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 128
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 144
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 160
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 176
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 192
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 208
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 224
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 240
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 256
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 272
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 288
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 304
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 320
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 336
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 352
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 368
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 384
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 400
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 416
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 432
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 448
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 464
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 480
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 496
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 512
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 528
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 544
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 560
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 576
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 592
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 608
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 624
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 640
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 656
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 672
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 688
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 704
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 720
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 736
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 752
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 768
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 784
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 800
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 816
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 832
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 848
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 864
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 880
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 896
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 912
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 928
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 944
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 960
+ image: "propertyAction.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 992
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1008
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1024
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1040
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1056
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1072
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1088
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1104
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1120
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1136
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1152
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1168
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1184
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1200
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1216
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1232
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1248
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1264
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1280
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1296
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1312
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1328
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1344
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1360
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1376
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1392
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1408
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1424
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1440
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1456
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1472
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1488
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1504
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1520
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1536
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1552
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1568
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1584
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1600
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 109; y: 247
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1616
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1632
+ hash: "c91921dba899d7a86de3cd013773889f"
+ }
+ Frame {
+ msec: 1648
+ hash: "888c0fc86155e10b5fc577ef6ec5755a"
+ }
+ Frame {
+ msec: 1664
+ hash: "7fd61a8910bf7b0d2bf57653a268c5d8"
+ }
+ Frame {
+ msec: 1680
+ hash: "f42f5073f90a423adf011d0e168c8a9b"
+ }
+ Frame {
+ msec: 1696
+ hash: "a3d89deb6cfa2bbbaa1d7d5b5e5b48d5"
+ }
+ Frame {
+ msec: 1712
+ hash: "f10e997d7a17c18251a32d58b018105a"
+ }
+ Frame {
+ msec: 1728
+ hash: "09ffb57d5f67edfa34d6aad36a002554"
+ }
+ Frame {
+ msec: 1744
+ hash: "01f3a2f5b9815f1397a907b099339360"
+ }
+ Frame {
+ msec: 1760
+ hash: "58c0910c49748edd2ef8472960179472"
+ }
+ Frame {
+ msec: 1776
+ hash: "cc82c5f7f93c5bc1af1c6c509268566a"
+ }
+ Frame {
+ msec: 1792
+ hash: "3ef272c6439b85fbc166375d1b98403c"
+ }
+ Frame {
+ msec: 1808
+ hash: "98c576f0900e4b8752d1f951bb6bf391"
+ }
+ Frame {
+ msec: 1824
+ hash: "4d66dd64d8736ef50163e08723873478"
+ }
+ Frame {
+ msec: 1840
+ hash: "9a5d8455b6763456185625811253e0b1"
+ }
+ Frame {
+ msec: 1856
+ hash: "77e85731efa786a2492aae19a87523c6"
+ }
+ Frame {
+ msec: 1872
+ hash: "f3199d0c860f1236e0b9472bef8785bc"
+ }
+ Frame {
+ msec: 1888
+ hash: "f3199d0c860f1236e0b9472bef8785bc"
+ }
+ Frame {
+ msec: 1904
+ hash: "32ccdab249268b01d9f1658a736052f1"
+ }
+ Frame {
+ msec: 1920
+ image: "propertyAction.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "db3010ef552146df938c237f6c92bff5"
+ }
+ Frame {
+ msec: 1952
+ hash: "101e8595d0301e88376ec52ba9361f84"
+ }
+ Frame {
+ msec: 1968
+ hash: "119d548c59baa7e47266d2ceca663288"
+ }
+ Frame {
+ msec: 1984
+ hash: "f141fafe102a0b9a2bf33e8c3fc800ff"
+ }
+ Frame {
+ msec: 2000
+ hash: "b01f9ca8d4fbff17b3d48c70898a044d"
+ }
+ Frame {
+ msec: 2016
+ hash: "cf67954a2d1b22e8d2cfdc26419bafb8"
+ }
+ Frame {
+ msec: 2032
+ hash: "7680b2b5a63dea13d733947297e01355"
+ }
+ Frame {
+ msec: 2048
+ hash: "af1c017acf6b3c8cff86c9ceb60db3cb"
+ }
+ Frame {
+ msec: 2064
+ hash: "0b23ec51f71fddae5e2238ab5754f1db"
+ }
+ Frame {
+ msec: 2080
+ hash: "976643961ecbdc86335180ba812b874e"
+ }
+ Frame {
+ msec: 2096
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2112
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2128
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2144
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2160
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2176
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2192
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2208
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2224
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2240
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2256
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2272
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2288
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2304
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2320
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2336
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2352
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2368
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2384
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2400
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2416
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2432
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2448
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2464
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2480
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2496
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2512
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2528
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2544
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2560
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2576
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2592
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2608
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2624
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2640
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2656
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2672
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2688
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2704
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2720
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2736
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2752
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 109; y: 247
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2768
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2784
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2800
+ hash: "ab924ae435262e76381c2e4af5d64342"
+ }
+ Frame {
+ msec: 2816
+ hash: "d60758fc12471a19d31c85f058f2ded7"
+ }
+ Frame {
+ msec: 2832
+ hash: "c62e2956f8eb5d2c8cd76ba05c5929d5"
+ }
+ Frame {
+ msec: 2848
+ hash: "f2967ee7e035a9ff258116a2706529f8"
+ }
+ Frame {
+ msec: 2864
+ hash: "885c4705c6c29f69c56c44abc1251d75"
+ }
+ Frame {
+ msec: 2880
+ image: "propertyAction.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "f4af6871e522511f95bc4c5abfc2a562"
+ }
+ Frame {
+ msec: 2912
+ hash: "b27e1e7e0d90468525309528ccfe2823"
+ }
+ Frame {
+ msec: 2928
+ hash: "78e7d84a4466258b40315fe61b7ca15c"
+ }
+ Frame {
+ msec: 2944
+ hash: "471013d921d8d6e7468fd6aba0b75c71"
+ }
+ Frame {
+ msec: 2960
+ hash: "856048da893c9136ac5740bc89b64128"
+ }
+ Frame {
+ msec: 2976
+ hash: "32ccdab249268b01d9f1658a736052f1"
+ }
+ Frame {
+ msec: 2992
+ hash: "2264fa3acd979f104633c1301a0efd8f"
+ }
+ Frame {
+ msec: 3008
+ hash: "f3199d0c860f1236e0b9472bef8785bc"
+ }
+ Frame {
+ msec: 3024
+ hash: "ad899d1ecaa43a5541be7b70413caee5"
+ }
+ Frame {
+ msec: 3040
+ hash: "4e652524c992f5ee1b987275ca509728"
+ }
+ Frame {
+ msec: 3056
+ hash: "a44b3dec2a016694bc8553a51b29d46c"
+ }
+ Frame {
+ msec: 3072
+ hash: "7fbe20346bc3c28c345e0797b55599f3"
+ }
+ Frame {
+ msec: 3088
+ hash: "bcff18ad433bb4f08126ee66efb037d1"
+ }
+ Frame {
+ msec: 3104
+ hash: "836666c64f73c38e87de95944ff2fe72"
+ }
+ Frame {
+ msec: 3120
+ hash: "4379982d23db239b1741b5d72c53e160"
+ }
+ Frame {
+ msec: 3136
+ hash: "0ed9476337214e1493c1510b8a4c90f8"
+ }
+ Frame {
+ msec: 3152
+ hash: "dab637406577a1924c7dbb30680e1af3"
+ }
+ Frame {
+ msec: 3168
+ hash: "dcc79277fdb8966e5a3f2ed1b2fc4292"
+ }
+ Frame {
+ msec: 3184
+ hash: "5f207d1dfad4907f200d76104881bf56"
+ }
+ Frame {
+ msec: 3200
+ hash: "3434fc7f81e859722585dae97c557864"
+ }
+ Frame {
+ msec: 3216
+ hash: "7c775b9be8c5293d4962324574267c22"
+ }
+ Frame {
+ msec: 3232
+ hash: "da0ff6955c2e4cd86421bdb9053f56e6"
+ }
+ Frame {
+ msec: 3248
+ hash: "a1297d525a3ad41abbbb7c2f15efd4fb"
+ }
+ Frame {
+ msec: 3264
+ hash: "5326b220995b2a1eaa308ad10fd353fa"
+ }
+ Frame {
+ msec: 3280
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 3296
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 3312
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 3328
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 3344
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3360
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 3376
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 3392
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 3408
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 3424
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 3440
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 3456
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 3472
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 3488
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 3504
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 3520
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 3536
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 3552
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 3568
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 3584
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 3600
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 3616
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 3632
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+}
diff --git a/tests/auto/declarative/visual/animation/propertyAction/propertyAction.qml b/tests/auto/declarative/visual/animation/propertyAction/propertyAction.qml
new file mode 100644
index 0000000..b670166
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/propertyAction/propertyAction.qml
@@ -0,0 +1,34 @@
+import Qt 4.6
+
+Rectangle {
+ width: 400; height: 400
+ Rectangle {
+ id: myRect
+ width: 100; height: 100
+ color: "red"
+ }
+ MouseRegion {
+ id: clickable
+ anchors.fill: parent
+ }
+
+ states: State {
+ name: "state1"
+ when: clickable.pressed
+ PropertyChanges {
+ target: myRect
+ x: 50; y: 50
+ color: "blue"
+ }
+ }
+
+ transitions: Transition {
+ to: "state1"
+ reversible: true
+ SequentialAnimation {
+ ColorAnimation {}
+ PropertyAction { matchProperties: "x" }
+ NumberAnimation { matchProperties: "y"; easing: "InOutQuad" }
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/animation/reanchor/data/reanchor.0.png b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.0.png
new file mode 100644
index 0000000..c7bbf38
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/reanchor/data/reanchor.1.png b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.1.png
new file mode 100644
index 0000000..612500b
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/reanchor/data/reanchor.2.png b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.2.png
new file mode 100644
index 0000000..c7bbf38
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/reanchor/data/reanchor.3.png b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.3.png
new file mode 100644
index 0000000..c7bbf38
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/reanchor/data/reanchor.4.png b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.4.png
new file mode 100644
index 0000000..1910eb4
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/reanchor/data/reanchor.5.png b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.5.png
new file mode 100644
index 0000000..3b8eebd
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/reanchor/data/reanchor.6.png b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.6.png
new file mode 100644
index 0000000..c7bbf38
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/reanchor/data/reanchor.7.png b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.7.png
new file mode 100644
index 0000000..c7bbf38
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.7.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/reanchor/data/reanchor.8.png b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.8.png
new file mode 100644
index 0000000..960be31
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.8.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/reanchor/data/reanchor.qml b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.qml
new file mode 100644
index 0000000..0f58de5
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/reanchor/data/reanchor.qml
@@ -0,0 +1,2471 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 32
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 48
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 64
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 80
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 96
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 112
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 128
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 144
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 160
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 176
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 192
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 208
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 224
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 240
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 256
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 272
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 288
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 304
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 320
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 336
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 352
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 368
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 384
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 400
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 416
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 432
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 448
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 464
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 480
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 496
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 512
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 528
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 544
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 560
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 576
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 592
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 608
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 624
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 640
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 656
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 672
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 688
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 704
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 720
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 736
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 752
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 768
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 784
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 800
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 816
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 832
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 848
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 864
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 880
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 896
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 912
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 928
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 944
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 960
+ image: "reanchor.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 992
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1008
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1024
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1040
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1056
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1072
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1088
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1104
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1120
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1136
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1152
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1168
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1184
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1200
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1216
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1232
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1248
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1264
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1280
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1296
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1312
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1328
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1344
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1360
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 88; y: 115
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1376
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1392
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1408
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1424
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1440
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 88; y: 115
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1456
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 1472
+ hash: "c2d6dd91f3e9cdcacbadcb449c8a9896"
+ }
+ Frame {
+ msec: 1488
+ hash: "1098ea19aecebd71208e101d522c1981"
+ }
+ Frame {
+ msec: 1504
+ hash: "8cc59c20d796c073038518d2855fb6f0"
+ }
+ Frame {
+ msec: 1520
+ hash: "914a89d0cfdc68145024ce2305a5e76e"
+ }
+ Frame {
+ msec: 1536
+ hash: "7a2e3ca2660df24d9a6ec49a7422ebe1"
+ }
+ Frame {
+ msec: 1552
+ hash: "b71496d986d5f0aa76b4f1663627f1f7"
+ }
+ Frame {
+ msec: 1568
+ hash: "41b29a523db919bc0a4e0a9a88bfc873"
+ }
+ Frame {
+ msec: 1584
+ hash: "97632a0de766b9ffbf71f21eeb0ff9a2"
+ }
+ Frame {
+ msec: 1600
+ hash: "94cc196e62c150008461ff9996b4cae8"
+ }
+ Frame {
+ msec: 1616
+ hash: "32e96ad2d15fa2386d365ab249ddf4f4"
+ }
+ Frame {
+ msec: 1632
+ hash: "209394314f971b12fbc61ca45010cc62"
+ }
+ Frame {
+ msec: 1648
+ hash: "b917c2684dda8af00278b34ababdcf5c"
+ }
+ Frame {
+ msec: 1664
+ hash: "92b506860c1c5dc52f87c24c89921b05"
+ }
+ Frame {
+ msec: 1680
+ hash: "7b7e96113fa9359954be9b3ac87943c3"
+ }
+ Frame {
+ msec: 1696
+ hash: "42bc69db42c5df902038cec414246ec5"
+ }
+ Frame {
+ msec: 1712
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 1728
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 1744
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 1760
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 1776
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 1792
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 1808
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 1824
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 1840
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 1856
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 1872
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 1888
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 1904
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 1920
+ image: "reanchor.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 1952
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 1968
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 1984
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 2000
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 2016
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 2032
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 2048
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 2064
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 2080
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 2096
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 87; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2112
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 2128
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 2144
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 2160
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 2176
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 2192
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 2208
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 87; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2224
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 2240
+ hash: "2d1aa011f2008a6147ba593e3cf272d7"
+ }
+ Frame {
+ msec: 2256
+ hash: "206699ea84ce9fd60c1603b7a48a5134"
+ }
+ Frame {
+ msec: 2272
+ hash: "68eb6df93a2b6db7023f7c3cc71d5b5f"
+ }
+ Frame {
+ msec: 2288
+ hash: "5a4cd0620959dde92eeeaaa4dcd13091"
+ }
+ Frame {
+ msec: 2304
+ hash: "17b763187a777253b25b22f5dd7253ae"
+ }
+ Frame {
+ msec: 2320
+ hash: "1de9dcf4d385266f4482e2d0967d9119"
+ }
+ Frame {
+ msec: 2336
+ hash: "833496add6dbc3103a28a47e453a738b"
+ }
+ Frame {
+ msec: 2352
+ hash: "b3bab2e9c56db60cd54e68369e6b790d"
+ }
+ Frame {
+ msec: 2368
+ hash: "ee91c6cd909bec401a1a7eebd10b8b02"
+ }
+ Frame {
+ msec: 2384
+ hash: "0ed679ad0ab7bd3544947bccda88647b"
+ }
+ Frame {
+ msec: 2400
+ hash: "d7dfcdc8a4233821919f1732d8c39712"
+ }
+ Frame {
+ msec: 2416
+ hash: "c52829ee689e4c312a9dff8dbd4a79f9"
+ }
+ Frame {
+ msec: 2432
+ hash: "7962badda0e80a61b67943d3b31f892d"
+ }
+ Frame {
+ msec: 2448
+ hash: "fc5f2c24e3d8743ab5b20aaa122bacc2"
+ }
+ Frame {
+ msec: 2464
+ hash: "201b9ee6c9ac6208ef812fe2e95020ef"
+ }
+ Frame {
+ msec: 2480
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2496
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2512
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2528
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2544
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2560
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2576
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2592
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2608
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2624
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2640
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2656
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2672
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2688
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2704
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2720
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2736
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2752
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 87; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2768
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2784
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2800
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2816
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2832
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2848
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 2864
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 87; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2880
+ image: "reanchor.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "c2d6dd91f3e9cdcacbadcb449c8a9896"
+ }
+ Frame {
+ msec: 2912
+ hash: "1098ea19aecebd71208e101d522c1981"
+ }
+ Frame {
+ msec: 2928
+ hash: "8cc59c20d796c073038518d2855fb6f0"
+ }
+ Frame {
+ msec: 2944
+ hash: "914a89d0cfdc68145024ce2305a5e76e"
+ }
+ Frame {
+ msec: 2960
+ hash: "7a2e3ca2660df24d9a6ec49a7422ebe1"
+ }
+ Frame {
+ msec: 2976
+ hash: "b71496d986d5f0aa76b4f1663627f1f7"
+ }
+ Frame {
+ msec: 2992
+ hash: "41b29a523db919bc0a4e0a9a88bfc873"
+ }
+ Frame {
+ msec: 3008
+ hash: "97632a0de766b9ffbf71f21eeb0ff9a2"
+ }
+ Frame {
+ msec: 3024
+ hash: "94cc196e62c150008461ff9996b4cae8"
+ }
+ Frame {
+ msec: 3040
+ hash: "32e96ad2d15fa2386d365ab249ddf4f4"
+ }
+ Frame {
+ msec: 3056
+ hash: "209394314f971b12fbc61ca45010cc62"
+ }
+ Frame {
+ msec: 3072
+ hash: "b917c2684dda8af00278b34ababdcf5c"
+ }
+ Frame {
+ msec: 3088
+ hash: "92b506860c1c5dc52f87c24c89921b05"
+ }
+ Frame {
+ msec: 3104
+ hash: "7b7e96113fa9359954be9b3ac87943c3"
+ }
+ Frame {
+ msec: 3120
+ hash: "42bc69db42c5df902038cec414246ec5"
+ }
+ Frame {
+ msec: 3136
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 3152
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 3168
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 3184
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 3200
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 3216
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 3232
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 3248
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 3264
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 3280
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 3296
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 3312
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 3328
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 3344
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 3360
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 87; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3376
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 3392
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 3408
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 3424
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 3440
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 3456
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 3472
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 87; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3488
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 3504
+ hash: "2d1aa011f2008a6147ba593e3cf272d7"
+ }
+ Frame {
+ msec: 3520
+ hash: "206699ea84ce9fd60c1603b7a48a5134"
+ }
+ Frame {
+ msec: 3536
+ hash: "68eb6df93a2b6db7023f7c3cc71d5b5f"
+ }
+ Frame {
+ msec: 3552
+ hash: "5a4cd0620959dde92eeeaaa4dcd13091"
+ }
+ Frame {
+ msec: 3568
+ hash: "17b763187a777253b25b22f5dd7253ae"
+ }
+ Frame {
+ msec: 3584
+ hash: "1de9dcf4d385266f4482e2d0967d9119"
+ }
+ Frame {
+ msec: 3600
+ hash: "833496add6dbc3103a28a47e453a738b"
+ }
+ Frame {
+ msec: 3616
+ hash: "b3bab2e9c56db60cd54e68369e6b790d"
+ }
+ Frame {
+ msec: 3632
+ hash: "ee91c6cd909bec401a1a7eebd10b8b02"
+ }
+ Frame {
+ msec: 3648
+ hash: "0ed679ad0ab7bd3544947bccda88647b"
+ }
+ Frame {
+ msec: 3664
+ hash: "d7dfcdc8a4233821919f1732d8c39712"
+ }
+ Frame {
+ msec: 3680
+ hash: "c52829ee689e4c312a9dff8dbd4a79f9"
+ }
+ Frame {
+ msec: 3696
+ hash: "7962badda0e80a61b67943d3b31f892d"
+ }
+ Frame {
+ msec: 3712
+ hash: "fc5f2c24e3d8743ab5b20aaa122bacc2"
+ }
+ Frame {
+ msec: 3728
+ hash: "201b9ee6c9ac6208ef812fe2e95020ef"
+ }
+ Frame {
+ msec: 3744
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 3760
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 3776
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 3792
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 3808
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 3824
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 3840
+ image: "reanchor.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 3872
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 3888
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 3904
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 3920
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 3936
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 3952
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 3968
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 3984
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4000
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4016
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4032
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4048
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4064
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4080
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4096
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4112
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4128
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4144
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4160
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4176
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4192
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4208
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4224
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4240
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4256
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4272
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4288
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4304
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4320
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4336
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4352
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4368
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4384
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4400
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4416
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4432
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4448
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4464
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4480
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4496
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4512
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4528
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 174; y: 174
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4544
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4560
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4576
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4592
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4608
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4624
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4640
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4656
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 174; y: 174
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4672
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 4688
+ hash: "5d38bf4a033de31985ae9989107908af"
+ }
+ Frame {
+ msec: 4704
+ hash: "ed1bd2abd42848ecd07f0f0654c2b80f"
+ }
+ Frame {
+ msec: 4720
+ hash: "588de6662123733303d93f62c6481f6a"
+ }
+ Frame {
+ msec: 4736
+ hash: "aae79c2fbb2fd1ac7efa9802bff40f95"
+ }
+ Frame {
+ msec: 4752
+ hash: "f17512798136f67f25aaa0aeb60678e1"
+ }
+ Frame {
+ msec: 4768
+ hash: "79578a1e0e3e9cd45c210d0c5d3e75d6"
+ }
+ Frame {
+ msec: 4784
+ hash: "5dad4ff201744cda6ff41f89414c8d11"
+ }
+ Frame {
+ msec: 4800
+ image: "reanchor.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "c4559982aa3f3d291364deed4bd96d65"
+ }
+ Frame {
+ msec: 4832
+ hash: "0dff03ea9154bdb2a813358b04cfbde9"
+ }
+ Frame {
+ msec: 4848
+ hash: "09bdf2869dee1c0cbe3c8c2e9254580b"
+ }
+ Frame {
+ msec: 4864
+ hash: "ba7762978bbd63d624029910fe16fb6d"
+ }
+ Frame {
+ msec: 4880
+ hash: "f00d198ab8f4f625b60e9e2071d8adfd"
+ }
+ Frame {
+ msec: 4896
+ hash: "adcec9c9a5b0d60cf45b2915365ea09c"
+ }
+ Frame {
+ msec: 4912
+ hash: "a65cd6fbb26d618692ef23148015a4f2"
+ }
+ Frame {
+ msec: 4928
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 4944
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 4960
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 4976
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 4992
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5008
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5024
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5040
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5056
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5072
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5088
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5104
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5120
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5136
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5152
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5168
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5184
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5200
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5216
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5232
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5248
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5264
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5280
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5296
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5312
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5328
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5344
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5360
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5376
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5392
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5408
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5424
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5440
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5456
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5472
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5488
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5504
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5520
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5536
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5552
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5568
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5584
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5600
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5616
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5632
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5648
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5664
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5680
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5696
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5712
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5728
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5744
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5760
+ image: "reanchor.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5792
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5808
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 95; y: 78
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5824
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5840
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5856
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5872
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5888
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5904
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5920
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5936
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 95; y: 78
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5952
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 5968
+ hash: "103bbc9ce594851f5243b103f8fef1c1"
+ }
+ Frame {
+ msec: 5984
+ hash: "c381148b052be2e6244f24c2292b89cf"
+ }
+ Frame {
+ msec: 6000
+ hash: "2fda1d635fa47bff7de867df3dadfb4f"
+ }
+ Frame {
+ msec: 6016
+ hash: "4d35e00af33ad5dc84998cda2d066b4e"
+ }
+ Frame {
+ msec: 6032
+ hash: "14005d52d372acf6d3495f69bbf00b7d"
+ }
+ Frame {
+ msec: 6048
+ hash: "29728f64d12e858d960c4e197824ef43"
+ }
+ Frame {
+ msec: 6064
+ hash: "798822f0c20ef87cb01fe1dcd76c7585"
+ }
+ Frame {
+ msec: 6080
+ hash: "4cdeea0f91587ef32a2c2e282f6d00e6"
+ }
+ Frame {
+ msec: 6096
+ hash: "08ca5d16771e58da6cdd20b86dc65f03"
+ }
+ Frame {
+ msec: 6112
+ hash: "e9aeb432709d275048ad9d84fb21db1a"
+ }
+ Frame {
+ msec: 6128
+ hash: "3b642f27d356fd1815dc50f8e750623d"
+ }
+ Frame {
+ msec: 6144
+ hash: "7c1db0ec278849ec044ea0aa3383075b"
+ }
+ Frame {
+ msec: 6160
+ hash: "da902850879c95d4ddffbb1ba0060f25"
+ }
+ Frame {
+ msec: 6176
+ hash: "e4053bd0db7752e7a47e096da645b69b"
+ }
+ Frame {
+ msec: 6192
+ hash: "aabbb6d34399818347db265151a547b7"
+ }
+ Frame {
+ msec: 6208
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6224
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6240
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6256
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6272
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6288
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6304
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6320
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6336
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6352
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6368
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6384
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6400
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6416
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6432
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6448
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6464
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6480
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6496
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6512
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6528
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6544
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6560
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6576
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6592
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6608
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6624
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6640
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6656
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6672
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6688
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6704
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6720
+ image: "reanchor.6.png"
+ }
+ Frame {
+ msec: 6736
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6752
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6768
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6784
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6800
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6816
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6832
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6848
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6864
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6880
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6896
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6912
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6928
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6944
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6960
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6976
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 6992
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7008
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7024
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7040
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7056
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7072
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7088
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7104
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7120
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7136
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7152
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7168
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7184
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7200
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7216
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7232
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7248
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7264
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7280
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7296
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7312
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7328
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7344
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7360
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7376
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7392
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7408
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7424
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7440
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7456
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7472
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7488
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7504
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7520
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7536
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7552
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7568
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7584
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7600
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 86; y: 136
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7616
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7632
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7648
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Frame {
+ msec: 7664
+ hash: "213811853dbefdc418099721e3bf8651"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 86; y: 136
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7680
+ image: "reanchor.7.png"
+ }
+ Frame {
+ msec: 7696
+ hash: "c2d6dd91f3e9cdcacbadcb449c8a9896"
+ }
+ Frame {
+ msec: 7712
+ hash: "1098ea19aecebd71208e101d522c1981"
+ }
+ Frame {
+ msec: 7728
+ hash: "8cc59c20d796c073038518d2855fb6f0"
+ }
+ Frame {
+ msec: 7744
+ hash: "914a89d0cfdc68145024ce2305a5e76e"
+ }
+ Frame {
+ msec: 7760
+ hash: "7a2e3ca2660df24d9a6ec49a7422ebe1"
+ }
+ Frame {
+ msec: 7776
+ hash: "b71496d986d5f0aa76b4f1663627f1f7"
+ }
+ Frame {
+ msec: 7792
+ hash: "41b29a523db919bc0a4e0a9a88bfc873"
+ }
+ Frame {
+ msec: 7808
+ hash: "97632a0de766b9ffbf71f21eeb0ff9a2"
+ }
+ Frame {
+ msec: 7824
+ hash: "94cc196e62c150008461ff9996b4cae8"
+ }
+ Frame {
+ msec: 7840
+ hash: "32e96ad2d15fa2386d365ab249ddf4f4"
+ }
+ Frame {
+ msec: 7856
+ hash: "209394314f971b12fbc61ca45010cc62"
+ }
+ Frame {
+ msec: 7872
+ hash: "b917c2684dda8af00278b34ababdcf5c"
+ }
+ Frame {
+ msec: 7888
+ hash: "92b506860c1c5dc52f87c24c89921b05"
+ }
+ Frame {
+ msec: 7904
+ hash: "7b7e96113fa9359954be9b3ac87943c3"
+ }
+ Frame {
+ msec: 7920
+ hash: "42bc69db42c5df902038cec414246ec5"
+ }
+ Frame {
+ msec: 7936
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 7952
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 7968
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 7984
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8000
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8016
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8032
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8048
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8064
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8080
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8096
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8112
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8128
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8144
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8160
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8176
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8192
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8208
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8224
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8240
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8256
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8272
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8288
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8304
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8320
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8336
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8352
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8368
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8384
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8400
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 177; y: 173
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8416
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8432
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8448
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8464
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8480
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8496
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8512
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 177; y: 173
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8528
+ hash: "7eb4027421fd6aa7d668a704e40a6e61"
+ }
+ Frame {
+ msec: 8544
+ hash: "b4f30663a9b21e42375645e970f57d0b"
+ }
+ Frame {
+ msec: 8560
+ hash: "6c12dbf4af8801573515b61123d4b1d7"
+ }
+ Frame {
+ msec: 8576
+ hash: "facc61397c734bb4409d5664dc059a14"
+ }
+ Frame {
+ msec: 8592
+ hash: "897e15e37276454d11fac6a528e967a6"
+ }
+ Frame {
+ msec: 8608
+ hash: "cf8173519f1e042c227ff61c62308640"
+ }
+ Frame {
+ msec: 8624
+ hash: "d0fcda14ea4bcfebf04ccf99e292ac6a"
+ }
+ Frame {
+ msec: 8640
+ image: "reanchor.8.png"
+ }
+ Frame {
+ msec: 8656
+ hash: "74b4ababa97def538f5340e88a4419a4"
+ }
+ Frame {
+ msec: 8672
+ hash: "b96b5b64505b1814ddd42a52569d7fd9"
+ }
+ Frame {
+ msec: 8688
+ hash: "0e3e07aad030b2075c4bc61b02ebe49e"
+ }
+ Frame {
+ msec: 8704
+ hash: "c5eebc652c58e3a44d5ed481100ef242"
+ }
+ Frame {
+ msec: 8720
+ hash: "d4a74185304c126739af728ddda40e0c"
+ }
+ Frame {
+ msec: 8736
+ hash: "448572d3c1060b8311952429a7f9430d"
+ }
+ Frame {
+ msec: 8752
+ hash: "00f64c09657a8afd6caa186efb6ad860"
+ }
+ Frame {
+ msec: 8768
+ hash: "2a360e6feaaf303e9ee63145085796e6"
+ }
+ Frame {
+ msec: 8784
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 8800
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 8816
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 8832
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 8848
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 8864
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 8880
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 8896
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 8912
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 8928
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 8944
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 8960
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 8976
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 8992
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 9008
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 9024
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 9040
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 9056
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 9072
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 9088
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 9104
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 9120
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 9136
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 9152
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 9168
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 9184
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 9200
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 9216
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 9232
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 9248
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 9264
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 9280
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 9296
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+ Frame {
+ msec: 9312
+ hash: "1137e22c68e043950811dee295e19b04"
+ }
+}
diff --git a/tests/auto/declarative/visual/animation/reanchor/reanchor.qml b/tests/auto/declarative/visual/animation/reanchor/reanchor.qml
new file mode 100644
index 0000000..1cc68a9
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/reanchor/reanchor.qml
@@ -0,0 +1,68 @@
+import Qt 4.6
+
+Rectangle {
+ id: container
+ width: 200; height: 200
+ Rectangle {
+ id: myRect
+ objectName: "MyRect"
+ color: "green";
+ anchors.left: parent.left
+ anchors.right: rightGuideline.left
+ anchors.top: topGuideline.top
+ anchors.bottom: container.bottom
+ }
+ Item { id: leftGuideline; x: 10 }
+ Item { id: rightGuideline; x: 150 }
+ Item { id: topGuideline; y: 10 }
+ Item { id: bottomGuideline; y: 150 }
+ Item { id: topGuideline2; y: 50 }
+ Item { id: bottomGuideline2; y: 175 }
+
+ MouseRegion {
+ id: wholeArea
+ anchors.fill: parent
+ onClicked: {
+ if (container.state == "") {
+ container.state = "reanchored";
+ } else if (container.state == "reanchored") {
+ container.state = "reanchored2";
+ } else if (container.state == "reanchored2")
+ container.state = "reanchored";
+ }
+ }
+
+ states: [ State {
+ name: "reanchored"
+ AnchorChanges {
+ target: myRect;
+ left: leftGuideline.left
+ right: container.right
+ top: container.top
+ bottom: bottomGuideline.bottom
+ }
+ }, State {
+ name: "reanchored2"
+ AnchorChanges {
+ target: myRect;
+ reset: "left, right"
+ top: topGuideline2.top
+ bottom: bottomGuideline2.bottom
+ }
+ }]
+
+ transitions: Transition {
+ NumberAnimation { matchProperties: "x,y,width,height" }
+ }
+
+ MouseRegion {
+ width: 50; height: 50
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ onClicked: {
+ container.state = "";
+ }
+ }
+
+ state: "reanchored"
+}
diff --git a/tests/auto/declarative/visual/animation/scriptAction/data/scriptAction.0.png b/tests/auto/declarative/visual/animation/scriptAction/data/scriptAction.0.png
new file mode 100644
index 0000000..64d6b06
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/scriptAction/data/scriptAction.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/scriptAction/data/scriptAction.1.png b/tests/auto/declarative/visual/animation/scriptAction/data/scriptAction.1.png
new file mode 100644
index 0000000..1a25c63
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/scriptAction/data/scriptAction.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/animation/scriptAction/data/scriptAction.qml b/tests/auto/declarative/visual/animation/scriptAction/data/scriptAction.qml
new file mode 100644
index 0000000..01da490
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/scriptAction/data/scriptAction.qml
@@ -0,0 +1,535 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 32
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 48
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 64
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 80
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 96
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 112
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 128
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 144
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 160
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 176
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 192
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 208
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 224
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 240
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 256
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 272
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 288
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 304
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 320
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 336
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 352
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 368
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 384
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 400
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 416
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 432
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 448
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 464
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 480
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 496
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 512
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 528
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 544
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 560
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 576
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 592
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 608
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 624
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 640
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 656
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 672
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 688
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 704
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 720
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 736
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 752
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 768
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 784
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 800
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 816
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 832
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 848
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 864
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 880
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 896
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 912
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 928
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 944
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 960
+ image: "scriptAction.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 992
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1008
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1024
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1040
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1056
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1072
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1088
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 146; y: 259
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1104
+ hash: "55b713dcb7c810bf126e06cc97d26d24"
+ }
+ Frame {
+ msec: 1120
+ hash: "9850cd8ed4643900409d1a87ef0bc4cf"
+ }
+ Frame {
+ msec: 1136
+ hash: "1cf03396b01e931e4e7e8e7e57e19c5f"
+ }
+ Frame {
+ msec: 1152
+ hash: "25fe648b85ec2d82621853dcbdbf695a"
+ }
+ Frame {
+ msec: 1168
+ hash: "1ca701e56fe387d5849f6933eb53aee9"
+ }
+ Frame {
+ msec: 1184
+ hash: "b39ecb792659a053a8985e2a849d6d51"
+ }
+ Frame {
+ msec: 1200
+ hash: "9a783432a054beec81cc5687f75a36dc"
+ }
+ Frame {
+ msec: 1216
+ hash: "edbd222d7ba6c6f819ded45fe316d461"
+ }
+ Frame {
+ msec: 1232
+ hash: "eaf20159c4b90f90872bbd514d3a0cec"
+ }
+ Frame {
+ msec: 1248
+ hash: "964807dd9b91e765577a773ef1ce2593"
+ }
+ Frame {
+ msec: 1264
+ hash: "16e12026ab14657b0f36b8315684455d"
+ }
+ Frame {
+ msec: 1280
+ hash: "d001a6b2fec3c66baaa45d9ff93b3f63"
+ }
+ Frame {
+ msec: 1296
+ hash: "fef11eb5f635bc11cd9679b7213b3b92"
+ }
+ Frame {
+ msec: 1312
+ hash: "0a0cd5f5004048d88712cfe6943470c0"
+ }
+ Frame {
+ msec: 1328
+ hash: "0d83178afdae5feaa9915d56c24373ad"
+ }
+ Frame {
+ msec: 1344
+ hash: "0a9e6e0b7b23ce93dc4e1f886cf9c7d1"
+ }
+ Frame {
+ msec: 1360
+ hash: "f3199d0c860f1236e0b9472bef8785bc"
+ }
+ Frame {
+ msec: 1376
+ hash: "f3199d0c860f1236e0b9472bef8785bc"
+ }
+ Frame {
+ msec: 1392
+ hash: "32ccdab249268b01d9f1658a736052f1"
+ }
+ Frame {
+ msec: 1408
+ hash: "dc98f32a1a2d6e74998123b5232107b0"
+ }
+ Frame {
+ msec: 1424
+ hash: "db3010ef552146df938c237f6c92bff5"
+ }
+ Frame {
+ msec: 1440
+ hash: "101e8595d0301e88376ec52ba9361f84"
+ }
+ Frame {
+ msec: 1456
+ hash: "119d548c59baa7e47266d2ceca663288"
+ }
+ Frame {
+ msec: 1472
+ hash: "f141fafe102a0b9a2bf33e8c3fc800ff"
+ }
+ Frame {
+ msec: 1488
+ hash: "b01f9ca8d4fbff17b3d48c70898a044d"
+ }
+ Frame {
+ msec: 1504
+ hash: "cf67954a2d1b22e8d2cfdc26419bafb8"
+ }
+ Frame {
+ msec: 1520
+ hash: "7680b2b5a63dea13d733947297e01355"
+ }
+ Frame {
+ msec: 1536
+ hash: "af1c017acf6b3c8cff86c9ceb60db3cb"
+ }
+ Frame {
+ msec: 1552
+ hash: "0b23ec51f71fddae5e2238ab5754f1db"
+ }
+ Frame {
+ msec: 1568
+ hash: "976643961ecbdc86335180ba812b874e"
+ }
+ Frame {
+ msec: 1584
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1600
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1616
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1632
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1648
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1664
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1680
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1696
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1712
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1728
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1744
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1760
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1776
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1792
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1808
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1824
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1840
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1856
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1872
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1888
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1904
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1920
+ image: "scriptAction.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1952
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1968
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 1984
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2000
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2016
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2032
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+ Frame {
+ msec: 2048
+ hash: "aeed60899abb6c486a5b1df81f9a0224"
+ }
+}
diff --git a/tests/auto/declarative/visual/animation/scriptAction/scriptAction.qml b/tests/auto/declarative/visual/animation/scriptAction/scriptAction.qml
new file mode 100644
index 0000000..872701b
--- /dev/null
+++ b/tests/auto/declarative/visual/animation/scriptAction/scriptAction.qml
@@ -0,0 +1,35 @@
+import Qt 4.6
+
+Rectangle {
+ width: 400; height: 400
+ Rectangle {
+ id: myRect
+ width: 100; height: 100
+ color: "red"
+ }
+ MouseRegion {
+ id: clickable
+ anchors.fill: parent
+ }
+
+ states: State {
+ name: "state1"
+ when: clickable.pressed
+ PropertyChanges {
+ target: myRect
+ x: 50; y: 50
+ }
+ StateChangeScript {
+ name: "setColor"
+ script: myRect.color = "blue"
+ }
+ }
+
+ transitions: Transition {
+ SequentialAnimation {
+ NumberAnimation { matchProperties: "x"; easing: "InOutQuad" }
+ ScriptAction { stateChangeScriptName: "setColor" }
+ NumberAnimation { matchProperties: "y"; easing: "InOutQuad" }
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/fillmode/data/fillmode.0.png b/tests/auto/declarative/visual/fillmode/data/fillmode.0.png
new file mode 100644
index 0000000..9c9ceae
--- /dev/null
+++ b/tests/auto/declarative/visual/fillmode/data/fillmode.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/fillmode/data/fillmode.qml b/tests/auto/declarative/visual/fillmode/data/fillmode.qml
new file mode 100644
index 0000000..7ac6f51
--- /dev/null
+++ b/tests/auto/declarative/visual/fillmode/data/fillmode.qml
@@ -0,0 +1,279 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 32
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 48
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 64
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 80
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 96
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 112
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 128
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 144
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 160
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 176
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 192
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 208
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 224
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 240
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 256
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 272
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 288
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 304
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 320
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 336
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 352
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 368
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 384
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 400
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 416
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 432
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 448
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 464
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 480
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 496
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 512
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 528
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 544
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 560
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 576
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 592
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 608
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 624
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 640
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 656
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 672
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 688
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 704
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 720
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 736
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 752
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 768
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 784
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 800
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 816
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 832
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 848
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 864
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 880
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 896
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 912
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 928
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 944
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 960
+ image: "fillmode.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 992
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 1008
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 1024
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 1040
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+ Frame {
+ msec: 1056
+ hash: "c8cb8d51ca04231dc272133faaf2fb6d"
+ }
+}
diff --git a/tests/auto/declarative/visual/fillmode/face.png b/tests/auto/declarative/visual/fillmode/face.png
new file mode 100644
index 0000000..9623b1a
--- /dev/null
+++ b/tests/auto/declarative/visual/fillmode/face.png
Binary files differ
diff --git a/tests/auto/declarative/visual/fillmode/fillmode.qml b/tests/auto/declarative/visual/fillmode/fillmode.qml
new file mode 100644
index 0000000..8450bf2
--- /dev/null
+++ b/tests/auto/declarative/visual/fillmode/fillmode.qml
@@ -0,0 +1,16 @@
+import Qt 4.6
+
+Rectangle {
+ id: screen; width: 750; height: 600; color: "gray"
+ property string source: "face.png"
+
+ Grid {
+ columns: 3
+ Image { width: 250; height: 300; source: screen.source; fillMode: Image.Stretch }
+ Image { width: 250; height: 300; source: screen.source; fillMode: Image.PreserveAspectFit; smooth: true }
+ Image { width: 250; height: 300; source: screen.source; fillMode: Image.PreserveAspectCrop }
+ Image { width: 250; height: 300; source: screen.source; fillMode: Image.Tile; smooth: true }
+ Image { width: 250; height: 300; source: screen.source; fillMode: Image.TileHorizontally }
+ Image { width: 250; height: 300; source: screen.source; fillMode: Image.TileVertically }
+ }
+}
diff --git a/tests/auto/declarative/visual/focusscope/data-MAC/test.0.png b/tests/auto/declarative/visual/focusscope/data-MAC/test.0.png
new file mode 100644
index 0000000..0f33d99
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-MAC/test.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-MAC/test.1.png b/tests/auto/declarative/visual/focusscope/data-MAC/test.1.png
new file mode 100644
index 0000000..0f33d99
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-MAC/test.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-MAC/test.2.png b/tests/auto/declarative/visual/focusscope/data-MAC/test.2.png
new file mode 100644
index 0000000..06a3dbd
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-MAC/test.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-MAC/test.3.png b/tests/auto/declarative/visual/focusscope/data-MAC/test.3.png
new file mode 100644
index 0000000..e0d02d6
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-MAC/test.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-MAC/test.4.png b/tests/auto/declarative/visual/focusscope/data-MAC/test.4.png
new file mode 100644
index 0000000..e0d02d6
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-MAC/test.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-MAC/test.5.png b/tests/auto/declarative/visual/focusscope/data-MAC/test.5.png
new file mode 100644
index 0000000..e0d02d6
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-MAC/test.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-MAC/test.qml b/tests/auto/declarative/visual/focusscope/data-MAC/test.qml
new file mode 100644
index 0000000..44900fc
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-MAC/test.qml
@@ -0,0 +1,1599 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 32
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 48
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 64
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 80
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 96
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 112
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 128
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 144
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 160
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 176
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 192
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 208
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 224
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 240
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 256
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 272
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 288
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 304
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 320
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 336
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 352
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 368
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 384
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 400
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 416
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 432
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 448
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 464
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 480
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 496
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 512
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 528
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 544
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 560
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 576
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 592
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 608
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 624
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 640
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 656
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 672
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 688
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 704
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 720
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 736
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 752
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 768
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 784
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 800
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 816
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 832
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 848
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 864
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 880
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 896
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 912
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 928
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 944
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 960
+ image: "test.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 992
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1008
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1024
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1040
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1056
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1072
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1088
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1104
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1120
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1136
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1152
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1168
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1184
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1200
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1216
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1232
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1248
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1264
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1280
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1296
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1312
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1328
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1344
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1360
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1376
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1392
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1408
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1424
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1440
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1456
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1472
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1488
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1504
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1520
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1536
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1552
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1568
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1584
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1600
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1616
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1632
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1648
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1664
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1680
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1696
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1712
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1728
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1744
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1760
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1776
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1792
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 1808
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1824
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1840
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1856
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1872
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1888
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1904
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1920
+ image: "test.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1952
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1968
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 1984
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2000
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2016
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2032
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2048
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2064
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2080
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2096
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2112
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2128
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2144
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2160
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2176
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2192
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2208
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2224
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2240
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2256
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2272
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2288
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2304
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2320
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2336
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 2352
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2368
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2384
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2400
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2416
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2432
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2448
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2464
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2480
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2496
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2512
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2528
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2544
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2560
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2576
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2592
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2608
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2624
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2640
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2656
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2672
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2688
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2704
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2720
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2736
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2752
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2768
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2784
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2800
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2816
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2832
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2848
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2864
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2880
+ image: "test.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2912
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2928
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2944
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2960
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 2976
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Key {
+ type: 6
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2992
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3008
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3024
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3040
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3056
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3072
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3088
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Key {
+ type: 7
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3104
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3120
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3136
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3152
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3168
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3184
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3200
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3216
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3232
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3248
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3264
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3280
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3296
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3312
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3328
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3344
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3360
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3376
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3392
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3408
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3424
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3440
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3456
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3472
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3488
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3504
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3520
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Frame {
+ msec: 3536
+ hash: "70f4ce2881f2340167f314b49716707a"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3552
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3568
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3584
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3600
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3616
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3632
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3648
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3664
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3680
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3696
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3712
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3728
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3744
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3760
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3776
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3792
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3808
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3824
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3840
+ image: "test.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3872
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3888
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3904
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3920
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3936
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3952
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3968
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 3984
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 4000
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 4016
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 4032
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 4048
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 4064
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 4080
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 4096
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 4112
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 4128
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 4144
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 4160
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 4176
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4192
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4208
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4224
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4240
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4256
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4272
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4288
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4304
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4320
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4336
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4352
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4368
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4384
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4400
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4416
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4432
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4448
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4464
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4480
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4496
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4512
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4528
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4544
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4560
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4576
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4592
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4608
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4624
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4640
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4656
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4672
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4688
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4704
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4720
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4736
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4752
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4768
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Frame {
+ msec: 4784
+ hash: "773f573d4b37181f7a784597a30cd73d"
+ }
+ Key {
+ type: 6
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4800
+ image: "test.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 4832
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 4848
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 4864
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 4880
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 4896
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Key {
+ type: 7
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4912
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 4928
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 4944
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 4960
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 4976
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 4992
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5008
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5024
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5040
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5056
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5072
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5088
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5104
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5120
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5136
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5152
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5168
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5184
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5200
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5216
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5232
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5248
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5264
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5280
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5296
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5312
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5328
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5344
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5360
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5376
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5392
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5408
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5424
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5440
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5456
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5472
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5488
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5504
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5520
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5536
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5552
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5568
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5584
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5600
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5616
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5632
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5648
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5664
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5680
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5696
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5712
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5728
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5744
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5760
+ image: "test.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5792
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5808
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5824
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5840
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5856
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5872
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+ Frame {
+ msec: 5888
+ hash: "715a587be7a5803af2827e882236d187"
+ }
+}
diff --git a/tests/auto/declarative/visual/focusscope/data-MAC/test2.0.png b/tests/auto/declarative/visual/focusscope/data-MAC/test2.0.png
new file mode 100644
index 0000000..fa711c1
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-MAC/test2.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-MAC/test2.1.png b/tests/auto/declarative/visual/focusscope/data-MAC/test2.1.png
new file mode 100644
index 0000000..fa711c1
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-MAC/test2.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-MAC/test2.qml b/tests/auto/declarative/visual/focusscope/data-MAC/test2.qml
new file mode 100644
index 0000000..7837ad9
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-MAC/test2.qml
@@ -0,0 +1,607 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 32
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 48
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 64
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 80
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 96
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 112
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 128
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 144
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 160
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 176
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 192
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 208
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 224
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 240
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 256
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 272
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 288
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 304
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 320
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 336
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 352
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 368
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 384
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 400
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 416
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 432
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 448
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 464
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 480
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 496
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 512
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 528
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 544
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 560
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 576
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 592
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 608
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 624
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 640
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 656
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 672
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 688
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 704
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 720
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 736
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 752
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 768
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 784
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 800
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 816
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 832
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 848
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 864
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 880
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 896
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 912
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 928
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 944
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 960
+ image: "test2.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 992
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1008
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1024
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1040
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1056
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1072
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1088
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1104
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1120
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1136
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1152
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1168
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1184
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1200
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1216
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1232
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1248
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1264
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1280
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1296
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1312
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1328
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1344
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1360
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1376
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1392
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1408
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1424
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1440
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1456
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1472
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1488
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1504
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1520
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1536
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1552
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1568
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1584
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1600
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1616
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1632
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1648
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1664
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1680
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1696
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1712
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1728
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1744
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1760
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1776
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1792
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1808
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1824
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1840
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1856
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1872
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1888
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1904
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1920
+ image: "test2.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1952
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1968
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 1984
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2000
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2016
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2032
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2048
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2064
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2080
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2096
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2112
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2128
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2144
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2160
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2176
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2192
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2208
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2224
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2240
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2256
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2272
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2288
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2304
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2320
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2336
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2352
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+ Frame {
+ msec: 2368
+ hash: "9ecdd4addcaea53cdca16f3496ceb15c"
+ }
+}
diff --git a/tests/auto/declarative/visual/focusscope/data-MAC/test3.0.png b/tests/auto/declarative/visual/focusscope/data-MAC/test3.0.png
new file mode 100644
index 0000000..9309e37
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-MAC/test3.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-MAC/test3.1.png b/tests/auto/declarative/visual/focusscope/data-MAC/test3.1.png
new file mode 100644
index 0000000..20e6c8e
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-MAC/test3.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-MAC/test3.2.png b/tests/auto/declarative/visual/focusscope/data-MAC/test3.2.png
new file mode 100644
index 0000000..c7559ac
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-MAC/test3.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-MAC/test3.3.png b/tests/auto/declarative/visual/focusscope/data-MAC/test3.3.png
new file mode 100644
index 0000000..bf2844b
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-MAC/test3.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-MAC/test3.4.png b/tests/auto/declarative/visual/focusscope/data-MAC/test3.4.png
new file mode 100644
index 0000000..beef0bf
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-MAC/test3.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-MAC/test3.5.png b/tests/auto/declarative/visual/focusscope/data-MAC/test3.5.png
new file mode 100644
index 0000000..1847dc7
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-MAC/test3.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-MAC/test3.6.png b/tests/auto/declarative/visual/focusscope/data-MAC/test3.6.png
new file mode 100644
index 0000000..c7559ac
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-MAC/test3.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-MAC/test3.7.png b/tests/auto/declarative/visual/focusscope/data-MAC/test3.7.png
new file mode 100644
index 0000000..20e6c8e
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-MAC/test3.7.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-MAC/test3.8.png b/tests/auto/declarative/visual/focusscope/data-MAC/test3.8.png
new file mode 100644
index 0000000..9309e37
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-MAC/test3.8.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-MAC/test3.9.png b/tests/auto/declarative/visual/focusscope/data-MAC/test3.9.png
new file mode 100644
index 0000000..7ac879b
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-MAC/test3.9.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-MAC/test3.qml b/tests/auto/declarative/visual/focusscope/data-MAC/test3.qml
new file mode 100644
index 0000000..7308a23
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-MAC/test3.qml
@@ -0,0 +1,2879 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 32
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 48
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 64
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 80
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 96
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 112
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 128
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 144
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 160
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 176
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 192
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 208
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 224
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 240
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 256
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 272
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 288
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 304
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 320
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 336
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 352
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 368
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 384
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 400
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 416
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 432
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 448
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 464
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 480
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 496
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 512
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 528
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 544
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 560
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 576
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 592
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 608
+ hash: "ce962a38caeb7bf7eef05112fbb52f91"
+ }
+ Frame {
+ msec: 624
+ hash: "779f0660ce5bc2c2fc9f05d8b86158a8"
+ }
+ Frame {
+ msec: 640
+ hash: "615e07a3c83539321befb44aa8fac811"
+ }
+ Frame {
+ msec: 656
+ hash: "8a00b9f66ca7fdb0e4975f547025f873"
+ }
+ Frame {
+ msec: 672
+ hash: "43bbe82799b1d8453f89a7ef928b1e54"
+ }
+ Frame {
+ msec: 688
+ hash: "2cc468d6e14c27ff1c0bd6064ae47509"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 704
+ hash: "1dc9d1b95016ccbeaca5b7a867a5cc3a"
+ }
+ Frame {
+ msec: 720
+ hash: "f36734c91fe41a7947965dac97393ad4"
+ }
+ Frame {
+ msec: 736
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 752
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 768
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 784
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 800
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 816
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 832
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 848
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 864
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 880
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 896
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 912
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 928
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 944
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 960
+ image: "test3.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 992
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 1008
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 1024
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 1040
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 1056
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 1072
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 1088
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1104
+ hash: "1c29b3d1086b261c2a9e94d49567484f"
+ }
+ Frame {
+ msec: 1120
+ hash: "6ab17a210b45dae1ed99fd1689bb3e46"
+ }
+ Frame {
+ msec: 1136
+ hash: "feb504605f7f27ca3a2bf080c1fb1e19"
+ }
+ Frame {
+ msec: 1152
+ hash: "bec2d2e2222587a379af12a30e078886"
+ }
+ Frame {
+ msec: 1168
+ hash: "39cb2bdc44273023b557a0f56df61d85"
+ }
+ Frame {
+ msec: 1184
+ hash: "2cda045b452c4645be1cdb4efd238532"
+ }
+ Frame {
+ msec: 1200
+ hash: "1f3efbfadd22734b5fd656596c11885b"
+ }
+ Frame {
+ msec: 1216
+ hash: "7277c05a06e481a5af13e4fe39e322f8"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1232
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 1248
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 1264
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 1280
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 1296
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 1312
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 1328
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 1344
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 1360
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 1376
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 1392
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 1408
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 1424
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 1440
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 1456
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 1472
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 1488
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 1504
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 1520
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1536
+ hash: "c5f88e95ead1f4542b766577d80e70fd"
+ }
+ Frame {
+ msec: 1552
+ hash: "d38118f26b9c2b68dc8fdb8d2a959134"
+ }
+ Frame {
+ msec: 1568
+ hash: "44c483c899220f040aa7808f15fac429"
+ }
+ Frame {
+ msec: 1584
+ hash: "02a63967944c8c53a9741318e99a326e"
+ }
+ Frame {
+ msec: 1600
+ hash: "7fc10e91212af979e09c8d3b98625c1b"
+ }
+ Frame {
+ msec: 1616
+ hash: "d14b69d18adc548dfb68dae1559effdb"
+ }
+ Frame {
+ msec: 1632
+ hash: "cb9bce7fa14a367197fa34ad3acc4cdd"
+ }
+ Frame {
+ msec: 1648
+ hash: "105a0e3d36296eba16077c4cf93547ae"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1664
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 1680
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 1696
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 1712
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 1728
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 1744
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 1760
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 1776
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 1792
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 1808
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 1824
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 1840
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 1856
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 1872
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 1888
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 1904
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 1920
+ image: "test3.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 1952
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 1968
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 1984
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 2000
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2016
+ hash: "6e4e4321cda32abab394419a9e6494dc"
+ }
+ Frame {
+ msec: 2032
+ hash: "45b79c56379afa7243547fedfa3260db"
+ }
+ Frame {
+ msec: 2048
+ hash: "4635555c632f325a151d340a3eb742b9"
+ }
+ Frame {
+ msec: 2064
+ hash: "0255da44fa95548427139073c994234c"
+ }
+ Frame {
+ msec: 2080
+ hash: "eac0c428ea7b7aa55a469562d2cb3fd6"
+ }
+ Frame {
+ msec: 2096
+ hash: "06ab23a83a5900cfdde98d4563414511"
+ }
+ Frame {
+ msec: 2112
+ hash: "808e4a745c58872d52ec6a3e669aea5c"
+ }
+ Frame {
+ msec: 2128
+ hash: "e6231b43f93fd6ae3e0990def1168c39"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2144
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2160
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2176
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2192
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2208
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2224
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2240
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2256
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2272
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2288
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2304
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2320
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2336
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2352
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2368
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2384
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2400
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2416
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2432
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2448
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2464
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2480
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2496
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 2512
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2528
+ hash: "e1c32968e36cb95be250121187ddf13e"
+ }
+ Frame {
+ msec: 2544
+ hash: "70498453babe3ab5e0fec62bcd0ff332"
+ }
+ Frame {
+ msec: 2560
+ hash: "76fc1b1e6b22771bf08dfdd16b3f24e9"
+ }
+ Frame {
+ msec: 2576
+ hash: "c6be4f26750b8bc1a5b71ff381e462c6"
+ }
+ Frame {
+ msec: 2592
+ hash: "986f738d0f0f70b88f951d9f028ef61b"
+ }
+ Frame {
+ msec: 2608
+ hash: "2201ad4f92bcf24ab62d0ddb8b2a64c1"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2624
+ hash: "27e9a18cb70c8f2ab9e4dd7af321e8e4"
+ }
+ Frame {
+ msec: 2640
+ hash: "3a352127f49f8c589b7b7da1232caf6b"
+ }
+ Frame {
+ msec: 2656
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 2672
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 2688
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 2704
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 2720
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 2736
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 2752
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 2768
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 2784
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 2800
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 2816
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 2832
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 2848
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 2864
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 2880
+ image: "test3.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 2912
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 2928
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 2944
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 2960
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 2976
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2992
+ hash: "20f96d3fbef9d51d8b8a28a6d58fabb2"
+ }
+ Frame {
+ msec: 3008
+ hash: "1e5d888fd4685960b8ae0a79e2287e89"
+ }
+ Frame {
+ msec: 3024
+ hash: "2115c2e6689ce6669abf9f3741eb5df1"
+ }
+ Frame {
+ msec: 3040
+ hash: "c67949eb5f2210c6b2dad4ff352831ed"
+ }
+ Frame {
+ msec: 3056
+ hash: "d982500bee0a6f6fb0861fb3c32319eb"
+ }
+ Frame {
+ msec: 3072
+ hash: "ffb111084712d5ecf072ade52103b985"
+ }
+ Frame {
+ msec: 3088
+ hash: "e5d594c8f08b9d283a3998648a383332"
+ }
+ Frame {
+ msec: 3104
+ hash: "20632ba6a4c14386eb01167059f7b617"
+ }
+ Frame {
+ msec: 3120
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3136
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 3152
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 3168
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 3184
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 3200
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 3216
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 3232
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 3248
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 3264
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 3280
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 3296
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 3312
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 3328
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 3344
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 3360
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 3376
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 3392
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 3408
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 3424
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 3440
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 3456
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 3472
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 3488
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3504
+ hash: "f60a72dd52f6f319706dc97f873a484f"
+ }
+ Frame {
+ msec: 3520
+ hash: "a21fbcbb3c0ede708f2862959b84654f"
+ }
+ Frame {
+ msec: 3536
+ hash: "40e5f7530391e7641498c7870ce986c9"
+ }
+ Frame {
+ msec: 3552
+ hash: "809daf15ad3e9f981f1306da18dd6872"
+ }
+ Frame {
+ msec: 3568
+ hash: "4b053d234c8c9a5afb7800abe28ea96f"
+ }
+ Frame {
+ msec: 3584
+ hash: "e011e3aaf143befc8e207945fdfc9f47"
+ }
+ Frame {
+ msec: 3600
+ hash: "55539d51f833b8a98fc14031a4a70c4c"
+ }
+ Frame {
+ msec: 3616
+ hash: "07c2b526c022d0deae61acba26d7ea24"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3632
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 3648
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 3664
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 3680
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 3696
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 3712
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 3728
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 3744
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 3760
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 3776
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 3792
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 3808
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 3824
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 3840
+ image: "test3.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 3872
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 3888
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 3904
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 3920
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 3936
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 3952
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 3968
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 3984
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4000
+ hash: "7d2f24d5a68397bedc2f9e3652715126"
+ }
+ Frame {
+ msec: 4016
+ hash: "55ff9205bb36d8f8965fb122a8686203"
+ }
+ Frame {
+ msec: 4032
+ hash: "8968377cbbdf7a46b6f13690826ac711"
+ }
+ Frame {
+ msec: 4048
+ hash: "8ce9afffac571f1a2cc6986d79dd2c8f"
+ }
+ Frame {
+ msec: 4064
+ hash: "f75c375cdf8e1b83398e9b18e7c39852"
+ }
+ Frame {
+ msec: 4080
+ hash: "20c8db7fb344c056465175ed0fa9518a"
+ }
+ Frame {
+ msec: 4096
+ hash: "8135c2cae0dcf8ee6eccbfdd7b711bc0"
+ }
+ Frame {
+ msec: 4112
+ hash: "659fc24d328058eb118be5613ea25257"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4128
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4144
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4160
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4176
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4192
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4208
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4224
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4240
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4256
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4272
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4288
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4304
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4320
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4336
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4352
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4368
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4384
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4400
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4416
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4432
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4448
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4464
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4480
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4496
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4512
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4528
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4544
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4560
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4576
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4592
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4608
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4624
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4640
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4656
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4672
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4688
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4704
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4720
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4736
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4752
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4768
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4784
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4800
+ image: "test3.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4832
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4848
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4864
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4880
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4896
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4912
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4928
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4944
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4960
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4976
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 4992
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 5008
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 5024
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 5040
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 5056
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 5072
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 5088
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Frame {
+ msec: 5104
+ hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5120
+ hash: "f01088d95d8409f98ae19b7970ecf3ad"
+ }
+ Frame {
+ msec: 5136
+ hash: "393987a9e22db77233465e3d08cfb244"
+ }
+ Frame {
+ msec: 5152
+ hash: "40e58eac132aa3b5f66f244ab7b189be"
+ }
+ Frame {
+ msec: 5168
+ hash: "d60c98c5fafe6bfa73a3d0c55f8f6716"
+ }
+ Frame {
+ msec: 5184
+ hash: "775733a71bb1d39f51b9fbc7e28d9ffe"
+ }
+ Frame {
+ msec: 5200
+ hash: "a343457f584c6e63aaec36b5db4fb7d0"
+ }
+ Frame {
+ msec: 5216
+ hash: "7c416bd1be54135056b037642026251f"
+ }
+ Frame {
+ msec: 5232
+ hash: "42813b6c3ef437a7b3ea8f03bb8b1894"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5248
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5264
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5280
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5296
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5312
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5328
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5344
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5360
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5376
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5392
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5408
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5424
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5440
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5456
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5472
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5488
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5504
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5520
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5536
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5552
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5568
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5584
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5600
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5616
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5632
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5648
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5664
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5680
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5696
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Frame {
+ msec: 5712
+ hash: "cc0ab553f98262662e52191e0b370486"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5728
+ hash: "b3af171ca40a5f081e2bfc984b8da551"
+ }
+ Frame {
+ msec: 5744
+ hash: "aadbc8c960fbe2e8aac184a99ba818bd"
+ }
+ Frame {
+ msec: 5760
+ image: "test3.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "99fc06589f09cd10cfdf748f032eacbd"
+ }
+ Frame {
+ msec: 5792
+ hash: "f7915b1a8b9f7188263180a97c8b355f"
+ }
+ Frame {
+ msec: 5808
+ hash: "7fb30728fb764b659bad5bb6c4e71e2c"
+ }
+ Frame {
+ msec: 5824
+ hash: "4882459350feffaed89c2296c74b839d"
+ }
+ Frame {
+ msec: 5840
+ hash: "917a368858e431bebcd8f2fda67401f8"
+ }
+ Frame {
+ msec: 5856
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5872
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 5888
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 5904
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 5920
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 5936
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 5952
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 5968
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 5984
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 6000
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 6016
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 6032
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 6048
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 6064
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 6080
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 6096
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 6112
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 6128
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 6144
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 6160
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 6176
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 6192
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 6208
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 6224
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 6240
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 6256
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Frame {
+ msec: 6272
+ hash: "bfd0497c6505d42aefe6341adb850d89"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 6288
+ hash: "ada3c3558261701c705ecf79716df56a"
+ }
+ Frame {
+ msec: 6304
+ hash: "81c73fd3dd69eb767d8899a54c3088bb"
+ }
+ Frame {
+ msec: 6320
+ hash: "d54e7dd1e876666f64b5904240bf8764"
+ }
+ Frame {
+ msec: 6336
+ hash: "32bdeac66a43a967d549ca2ad8c59bbd"
+ }
+ Frame {
+ msec: 6352
+ hash: "04eec62cc40c8b31d989bead64909f9e"
+ }
+ Frame {
+ msec: 6368
+ hash: "cfffdd4edc35303ee260ed32956238b7"
+ }
+ Frame {
+ msec: 6384
+ hash: "fb562c38b9d2360517160f8a8ab29ced"
+ }
+ Frame {
+ msec: 6400
+ hash: "ba8ec8f0663bf1e62ff426b0c7d0d3b2"
+ }
+ Frame {
+ msec: 6416
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 6432
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6448
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6464
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6480
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6496
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6512
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6528
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6544
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6560
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6576
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6592
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6608
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6624
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6640
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6656
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6672
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6688
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6704
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6720
+ image: "test3.6.png"
+ }
+ Frame {
+ msec: 6736
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6752
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6768
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6784
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6800
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6816
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6832
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Frame {
+ msec: 6848
+ hash: "e3b2de8a4e3229880971d2144e55de1b"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 6864
+ hash: "e6292a001405924f6d5f1a4051c3f6cb"
+ }
+ Frame {
+ msec: 6880
+ hash: "0d8a6b740cc7b33659aa0a1cc2bd2aa9"
+ }
+ Frame {
+ msec: 6896
+ hash: "07c4267ff499c46977420d4be7529e04"
+ }
+ Frame {
+ msec: 6912
+ hash: "f69cd14d97de3ca8d21ace1df1d5a523"
+ }
+ Frame {
+ msec: 6928
+ hash: "1572b31fd3ae917d5701d0b8f1d2a2bc"
+ }
+ Frame {
+ msec: 6944
+ hash: "e3953027fe269a5d4c6581717d516c65"
+ }
+ Frame {
+ msec: 6960
+ hash: "e35e8a5dfa7309696fa20c6f5480ac50"
+ }
+ Frame {
+ msec: 6976
+ hash: "77e75e66118f911c8fff084e1a825d77"
+ }
+ Frame {
+ msec: 6992
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 7008
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7024
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7040
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7056
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7072
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7088
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7104
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7120
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7136
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7152
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7168
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7184
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7200
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7216
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7232
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7248
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7264
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7280
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7296
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7312
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7328
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7344
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7360
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7376
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7392
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7408
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7424
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Frame {
+ msec: 7440
+ hash: "e97f921f1c34246fc229c48a4b66466c"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 7456
+ hash: "8588c30394737cebc5580fe024589b08"
+ }
+ Frame {
+ msec: 7472
+ hash: "ca150a32b22cad95696ecfbad0ed3e67"
+ }
+ Frame {
+ msec: 7488
+ hash: "7f980e0cf67927918b1244456c38c7c0"
+ }
+ Frame {
+ msec: 7504
+ hash: "2bc38fb34a6875aabddce0f460914612"
+ }
+ Frame {
+ msec: 7520
+ hash: "328257a4691f341db39ee5ca677693eb"
+ }
+ Frame {
+ msec: 7536
+ hash: "05e0d8c986ff81e23f253d56ebdef46e"
+ }
+ Frame {
+ msec: 7552
+ hash: "be95d74a42318c52ab73ce694436a58b"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 7568
+ hash: "eba8512746494f3602d24dab86fb2559"
+ }
+ Frame {
+ msec: 7584
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7600
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7616
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7632
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7648
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7664
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7680
+ image: "test3.7.png"
+ }
+ Frame {
+ msec: 7696
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7712
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7728
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7744
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7760
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7776
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7792
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7808
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7824
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7840
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7856
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7872
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7888
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7904
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7920
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7936
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7952
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Frame {
+ msec: 7968
+ hash: "8f443766efd0f74e96e79ed3c267892c"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 7984
+ hash: "7b2b3a84e9649370ce282383a820c39b"
+ }
+ Frame {
+ msec: 8000
+ hash: "08547adce7e02eec593fa636af004257"
+ }
+ Frame {
+ msec: 8016
+ hash: "29789cfbd1b648ce705cf17d03298ffe"
+ }
+ Frame {
+ msec: 8032
+ hash: "9e89ef84c86b1fc0531f0bd5ee530ba5"
+ }
+ Frame {
+ msec: 8048
+ hash: "21b437a318c5ef87c38f9199772eafa6"
+ }
+ Frame {
+ msec: 8064
+ hash: "70c8c8fbcf2d0331ca7ede8641a6068b"
+ }
+ Frame {
+ msec: 8080
+ hash: "c277e9d4f89e99d974d03dcfe41a1755"
+ }
+ Frame {
+ msec: 8096
+ hash: "54c7a72a3f814e707777c16ddd4532b8"
+ }
+ Frame {
+ msec: 8112
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 8128
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8144
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8160
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8176
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8192
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8208
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8224
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8240
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8256
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8272
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8288
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8304
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8320
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8336
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8352
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8368
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8384
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8400
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8416
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8432
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8448
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8464
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8480
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Frame {
+ msec: 8496
+ hash: "bdf37518633a43d8dc47245f5b68550b"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 8512
+ hash: "7992512c72fe530fdd92866c96de29a0"
+ }
+ Frame {
+ msec: 8528
+ hash: "ad29d3653790efb998ac137538b4ce09"
+ }
+ Frame {
+ msec: 8544
+ hash: "f6daf0ad7f7c970ece3dc1898ab9f092"
+ }
+ Frame {
+ msec: 8560
+ hash: "417143caa8ed86082ea4e40aca7ca26e"
+ }
+ Frame {
+ msec: 8576
+ hash: "5215943d1fbffd5ef7c16d4ca6587628"
+ }
+ Frame {
+ msec: 8592
+ hash: "d143c87d3cf7560f911e98869983efef"
+ }
+ Frame {
+ msec: 8608
+ hash: "1fcb9b3d3b4c888c65334b88e240d79c"
+ }
+ Frame {
+ msec: 8624
+ hash: "61cec1c227eafafe6c03a33591b1825e"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 8640
+ image: "test3.8.png"
+ }
+ Frame {
+ msec: 8656
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 8672
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 8688
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 8704
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 8720
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 8736
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 8752
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 8768
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 8784
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 8800
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 8816
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 8832
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 8848
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 8864
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 8880
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 8896
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 8912
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 8928
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 8944
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 8960
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 8976
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 8992
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 9008
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 9024
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 9040
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Frame {
+ msec: 9056
+ hash: "57e009de047c348d3ae14a6271b2e6f2"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 9072
+ hash: "fcbb907bcf41602a5c30e2843a4b1fff"
+ }
+ Frame {
+ msec: 9088
+ hash: "5fee95daaa629bbf0cec3e41cd693502"
+ }
+ Frame {
+ msec: 9104
+ hash: "b9d721d2a8b0867bab29817b99b8ec2d"
+ }
+ Frame {
+ msec: 9120
+ hash: "e518e9872a502d3b2ff74d209626c9ee"
+ }
+ Frame {
+ msec: 9136
+ hash: "9c535d7da59ed2f2ce116e70c3e165cf"
+ }
+ Frame {
+ msec: 9152
+ hash: "e54fbcb23e01d5842885b92d4493535b"
+ }
+ Frame {
+ msec: 9168
+ hash: "7ac2467f24cef06c8842460ffe813ee0"
+ }
+ Frame {
+ msec: 9184
+ hash: "276293e289db5c9c7cd9612c73ef7792"
+ }
+ Frame {
+ msec: 9200
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 9216
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9232
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9248
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9264
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9280
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9296
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9312
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9328
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9344
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9360
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9376
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9392
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9408
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9424
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9440
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9456
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9472
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9488
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9504
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9520
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9536
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9552
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9568
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9584
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9600
+ image: "test3.9.png"
+ }
+ Frame {
+ msec: 9616
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9632
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9648
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9664
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9680
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9696
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9712
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9728
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9744
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9760
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9776
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9792
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9808
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9824
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9840
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9856
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9872
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9888
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9904
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9920
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9936
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9952
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9968
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 9984
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10000
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10016
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10032
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10048
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10064
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10080
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10096
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10112
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10128
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10144
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10160
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10176
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10192
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10208
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10224
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10240
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10256
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10272
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10288
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10304
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10320
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10336
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10352
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10368
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 10384
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10400
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10416
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+ Frame {
+ msec: 10432
+ hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ }
+}
diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test.0.png b/tests/auto/declarative/visual/focusscope/data-X11/test.0.png
new file mode 100644
index 0000000..f68f7dc
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-X11/test.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test.1.png b/tests/auto/declarative/visual/focusscope/data-X11/test.1.png
new file mode 100644
index 0000000..f68f7dc
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-X11/test.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test.2.png b/tests/auto/declarative/visual/focusscope/data-X11/test.2.png
new file mode 100644
index 0000000..e26c028
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-X11/test.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test.3.png b/tests/auto/declarative/visual/focusscope/data-X11/test.3.png
new file mode 100644
index 0000000..9c4b2f2
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-X11/test.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test.4.png b/tests/auto/declarative/visual/focusscope/data-X11/test.4.png
new file mode 100644
index 0000000..9c4b2f2
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-X11/test.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test.5.png b/tests/auto/declarative/visual/focusscope/data-X11/test.5.png
new file mode 100644
index 0000000..9c4b2f2
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-X11/test.5.png
Binary files differ
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..93189fa
--- /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: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 32
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 48
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 64
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 80
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 96
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 112
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 128
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 144
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 160
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 176
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 192
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 208
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 224
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 240
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 256
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 272
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 288
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 304
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 320
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 336
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 352
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 368
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 384
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 400
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 416
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 432
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 448
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 464
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 480
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 496
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 512
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 528
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 544
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 560
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 576
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 592
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 608
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 624
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 640
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 656
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 672
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 688
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 704
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 720
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 736
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 752
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 768
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 784
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 800
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 816
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 832
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 848
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 864
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 880
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 896
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 912
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 928
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 944
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 960
+ image: "test.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 992
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1008
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1024
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1040
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1056
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1072
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1088
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1104
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1120
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1136
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1152
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1168
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1184
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1200
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1216
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1232
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1248
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1264
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1280
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1296
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1312
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1328
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1344
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1360
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1376
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1392
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1408
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1424
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1440
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1456
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1472
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1488
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1504
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1520
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1536
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1552
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1568
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1584
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1600
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1616
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1632
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1648
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1664
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1680
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1696
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1712
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1728
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1744
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1760
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1776
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1792
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 1808
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1824
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1840
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1856
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1872
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1888
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1904
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1920
+ image: "test.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1952
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1968
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 1984
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2000
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2016
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2032
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2048
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2064
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2080
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2096
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2112
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2128
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2144
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2160
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2176
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2192
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2208
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2224
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2240
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2256
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2272
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2288
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2304
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2320
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2336
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 2352
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2368
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2384
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2400
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2416
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2432
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2448
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2464
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2480
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2496
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2512
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2528
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2544
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2560
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2576
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2592
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2608
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2624
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2640
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2656
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2672
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2688
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2704
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2720
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2736
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2752
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2768
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2784
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2800
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2816
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2832
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2848
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2864
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2880
+ image: "test.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2912
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2928
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2944
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2960
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 2976
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Key {
+ type: 6
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2992
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3008
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3024
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3040
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3056
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3072
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3088
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Key {
+ type: 7
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3104
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3120
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3136
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3152
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3168
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3184
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3200
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3216
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3232
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3248
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3264
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3280
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3296
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3312
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3328
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3344
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3360
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3376
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3392
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3408
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3424
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3440
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3456
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3472
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3488
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3504
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3520
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Frame {
+ msec: 3536
+ hash: "cd2aced96da9032ddd5e2cacf27d045d"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3552
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3568
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3584
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3600
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3616
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3632
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3648
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3664
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3680
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3696
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3712
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3728
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3744
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3760
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3776
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3792
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3808
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3824
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3840
+ image: "test.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3872
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3888
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3904
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3920
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3936
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3952
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3968
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 3984
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 4000
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 4016
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 4032
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 4048
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 4064
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 4080
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 4096
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 4112
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 4128
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 4144
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 4160
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 4176
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4192
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4208
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4224
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4240
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4256
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4272
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4288
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4304
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4320
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4336
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4352
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4368
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4384
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4400
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4416
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4432
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4448
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4464
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4480
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4496
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4512
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4528
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4544
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4560
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4576
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4592
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4608
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4624
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4640
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4656
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4672
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4688
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4704
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4720
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4736
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4752
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4768
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Frame {
+ msec: 4784
+ hash: "9157e592069482e801a091aa69758d26"
+ }
+ Key {
+ type: 6
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4800
+ image: "test.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 4832
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 4848
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 4864
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 4880
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 4896
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Key {
+ type: 7
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4912
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 4928
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 4944
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 4960
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 4976
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 4992
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5008
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5024
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5040
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5056
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5072
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5088
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5104
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5120
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5136
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5152
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5168
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5184
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5200
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5216
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5232
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5248
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5264
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5280
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5296
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5312
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5328
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5344
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5360
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5376
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5392
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5408
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5424
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5440
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5456
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5472
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5488
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5504
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5520
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5536
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5552
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5568
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5584
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5600
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5616
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5632
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5648
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5664
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5680
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5696
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5712
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5728
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5744
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5760
+ image: "test.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5792
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5808
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5824
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5840
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5856
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5872
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+ Frame {
+ msec: 5888
+ hash: "0de58b2460574baf17912e90ba8a89b2"
+ }
+}
diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test2.0.png b/tests/auto/declarative/visual/focusscope/data-X11/test2.0.png
new file mode 100644
index 0000000..6be7aef
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-X11/test2.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test2.1.png b/tests/auto/declarative/visual/focusscope/data-X11/test2.1.png
new file mode 100644
index 0000000..6be7aef
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-X11/test2.1.png
Binary files differ
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
new file mode 100644
index 0000000..5f93c67
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.1.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.1.png
new file mode 100644
index 0000000..3b4e0e6
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.2.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.2.png
new file mode 100644
index 0000000..54a3934
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.3.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.3.png
new file mode 100644
index 0000000..4f08fd2
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.4.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.4.png
new file mode 100644
index 0000000..9aee1f8
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.5.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.5.png
new file mode 100644
index 0000000..04eb05c
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.6.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.6.png
new file mode 100644
index 0000000..54a3934
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.7.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.7.png
new file mode 100644
index 0000000..3b4e0e6
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.7.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.8.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.8.png
new file mode 100644
index 0000000..2df55df
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.8.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.9.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.9.png
new file mode 100644
index 0000000..91816fd
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.9.png
Binary files differ
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..b1f628f
--- /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: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 32
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 48
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 64
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 80
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 96
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 112
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 128
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 144
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 160
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 176
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 192
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 208
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 224
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 240
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 256
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 272
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 288
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 304
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 320
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 336
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 352
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 368
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 384
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 400
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 416
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 432
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 448
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 464
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 480
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 496
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 512
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 528
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 544
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 560
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 576
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 592
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 608
+ hash: "ed71dfbe146870d1a0869d60c35ff9d7"
+ }
+ Frame {
+ msec: 624
+ hash: "ed71dfbe146870d1a0869d60c35ff9d7"
+ }
+ Frame {
+ msec: 640
+ hash: "34796cef9feb92f7f0e2e8d837d87d34"
+ }
+ Frame {
+ msec: 656
+ hash: "64fa8f195b57077aa03ca264fec9554a"
+ }
+ Frame {
+ msec: 672
+ hash: "ae33318904415e937363787273ecb566"
+ }
+ Frame {
+ msec: 688
+ hash: "67c3e1c8c728e7677a3554aadd9795c9"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 704
+ hash: "1857db7aa9eefe429d50e5b2ad87064b"
+ }
+ Frame {
+ msec: 720
+ hash: "507883a03bef0bc20755da1474731fdf"
+ }
+ Frame {
+ msec: 736
+ hash: "dafe7464394460e04d482c1f7a1e9ad0"
+ }
+ Frame {
+ msec: 752
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 768
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 784
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 800
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 816
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 832
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 848
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 864
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 880
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 896
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 912
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 928
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 944
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 960
+ image: "test3.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 992
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 1008
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 1024
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 1040
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 1056
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 1072
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 1088
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1104
+ hash: "7fb8cb07b6bca30912706cec43984d92"
+ }
+ Frame {
+ msec: 1120
+ hash: "7fb8cb07b6bca30912706cec43984d92"
+ }
+ Frame {
+ msec: 1136
+ hash: "c1915978cda982f6062790b2a583211b"
+ }
+ Frame {
+ msec: 1152
+ hash: "afdb50d740b3dc7be44021d826be4302"
+ }
+ Frame {
+ msec: 1168
+ hash: "4682717b9375b4b02a70378ddca30885"
+ }
+ Frame {
+ msec: 1184
+ hash: "aede0eebb3948a4a764e255b892b09be"
+ }
+ Frame {
+ msec: 1200
+ hash: "b42a147daec14a3da2548fd4de3a9a44"
+ }
+ Frame {
+ msec: 1216
+ hash: "2ff70f916f78fe3c199eb96ceb44ce4e"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1232
+ hash: "707ac8e58d317b97113903b45a482f6b"
+ }
+ Frame {
+ msec: 1248
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 1264
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 1280
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 1296
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 1312
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 1328
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 1344
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 1360
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 1376
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 1392
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 1408
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 1424
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 1440
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 1456
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 1472
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 1488
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 1504
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 1520
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1536
+ hash: "91525556fe23764f58b3a3f38a29cd76"
+ }
+ Frame {
+ msec: 1552
+ hash: "91525556fe23764f58b3a3f38a29cd76"
+ }
+ Frame {
+ msec: 1568
+ hash: "d1dc625bbf46fc51aaf47969ad27a8a4"
+ }
+ Frame {
+ msec: 1584
+ hash: "7d868176c7a8363a79ef8b8f4da56867"
+ }
+ Frame {
+ msec: 1600
+ hash: "d239e0b0e118d351680c6b4b2bc5d3b2"
+ }
+ Frame {
+ msec: 1616
+ hash: "8f6d1640dbc655eb3b326c66fcb97d3c"
+ }
+ Frame {
+ msec: 1632
+ hash: "d52b623b8449d71734f72c7bd661a1c4"
+ }
+ Frame {
+ msec: 1648
+ hash: "f7c0c77f3b5ed71321edd6bc7b605512"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1664
+ hash: "8b26397ff1a83baa894f82594a12a190"
+ }
+ Frame {
+ msec: 1680
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 1696
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 1712
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 1728
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 1744
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 1760
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 1776
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 1792
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 1808
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 1824
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 1840
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 1856
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 1872
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 1888
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 1904
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 1920
+ image: "test3.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 1952
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 1968
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 1984
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 2000
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2016
+ hash: "f63308a7cd48a8cb4d413d17120f5a26"
+ }
+ Frame {
+ msec: 2032
+ hash: "f63308a7cd48a8cb4d413d17120f5a26"
+ }
+ Frame {
+ msec: 2048
+ hash: "2e97db8ed93524dc197e76cc2d270999"
+ }
+ Frame {
+ msec: 2064
+ hash: "2b135d90684c0f94b8219c4b835b6da9"
+ }
+ Frame {
+ msec: 2080
+ hash: "c700a76932bb3bf72868b9e95d095db2"
+ }
+ Frame {
+ msec: 2096
+ hash: "08136d3c3de44ddab23d2d136ba1f310"
+ }
+ Frame {
+ msec: 2112
+ hash: "de701d641e004b61a3c0609556f52fe0"
+ }
+ Frame {
+ msec: 2128
+ hash: "4f7acd87f4de119ad88a53d2c9881037"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2144
+ hash: "deaf3c8a4680ef6f52cb4674a97e0767"
+ }
+ Frame {
+ msec: 2160
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 2176
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 2192
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 2208
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 2224
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 2240
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 2256
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 2272
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 2288
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 2304
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 2320
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 2336
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 2352
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 2368
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 2384
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 2400
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 2416
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 2432
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 2448
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 2464
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 2480
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 2496
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 2512
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2528
+ hash: "fe67b3a48a8a074377be64f619d5922a"
+ }
+ Frame {
+ msec: 2544
+ hash: "fe67b3a48a8a074377be64f619d5922a"
+ }
+ Frame {
+ msec: 2560
+ hash: "088691f4f46f7a8c9a3b8ea766d9a437"
+ }
+ Frame {
+ msec: 2576
+ hash: "bd747ea04c3b36378374f8ea1031458f"
+ }
+ Frame {
+ msec: 2592
+ hash: "2ebd0e3373eb75a3ad986e203952f78a"
+ }
+ Frame {
+ msec: 2608
+ hash: "b4d89e4f3aef9f351facd13bd83f3022"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2624
+ hash: "091de1bd1719e1fa6d914cf9708f4ac6"
+ }
+ Frame {
+ msec: 2640
+ hash: "0097d8ed156cb0c78c48dfacc557cba8"
+ }
+ Frame {
+ msec: 2656
+ hash: "faeb379e01283cb21ea695e96727918d"
+ }
+ Frame {
+ msec: 2672
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 2688
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 2704
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 2720
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 2736
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 2752
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 2768
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 2784
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 2800
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 2816
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 2832
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 2848
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 2864
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 2880
+ image: "test3.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 2912
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 2928
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 2944
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 2960
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 2976
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2992
+ hash: "b00a29d67edc26e75f5298b2836d4e47"
+ }
+ Frame {
+ msec: 3008
+ hash: "b00a29d67edc26e75f5298b2836d4e47"
+ }
+ Frame {
+ msec: 3024
+ hash: "6e47c87b5063877a609e8d23ddf2d314"
+ }
+ Frame {
+ msec: 3040
+ hash: "06f147a69c3e903905376ef1229290bf"
+ }
+ Frame {
+ msec: 3056
+ hash: "5f02ff1a1207f17efd224ccc800b0057"
+ }
+ Frame {
+ msec: 3072
+ hash: "6c0860fdb216bb79fd2da4647792628d"
+ }
+ Frame {
+ msec: 3088
+ hash: "eb579f67620adb762722428d44a1d841"
+ }
+ Frame {
+ msec: 3104
+ hash: "c579017a82e34a471a95f8a116a20b9e"
+ }
+ Frame {
+ msec: 3120
+ hash: "bb5c08ff104b230829579dfb8015bdcc"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3136
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 3152
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 3168
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 3184
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 3200
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 3216
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 3232
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 3248
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 3264
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 3280
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 3296
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 3312
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 3328
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 3344
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 3360
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 3376
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 3392
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 3408
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 3424
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 3440
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 3456
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 3472
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 3488
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3504
+ hash: "5aa664f268433f2724a1ab2cea1d6d25"
+ }
+ Frame {
+ msec: 3520
+ hash: "5aa664f268433f2724a1ab2cea1d6d25"
+ }
+ Frame {
+ msec: 3536
+ hash: "9e4854fd0c533efa75aec7d9a8bc41dd"
+ }
+ Frame {
+ msec: 3552
+ hash: "c4eee4eca804007dca6e6d9379cbfb1b"
+ }
+ Frame {
+ msec: 3568
+ hash: "c59774f00d54c0353b41202a39fc0dbd"
+ }
+ Frame {
+ msec: 3584
+ hash: "910e6b5b05530c60874eee00df0d62cf"
+ }
+ Frame {
+ msec: 3600
+ hash: "5b606a7a697c6d53fbe42e33333f96cc"
+ }
+ Frame {
+ msec: 3616
+ hash: "e1fce42312e8a31d74add4a447dd3df9"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3632
+ hash: "6250cb9ea51309922cf0a6647593bfee"
+ }
+ Frame {
+ msec: 3648
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 3664
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 3680
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 3696
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 3712
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 3728
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 3744
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 3760
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 3776
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 3792
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 3808
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 3824
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 3840
+ image: "test3.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 3872
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 3888
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 3904
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 3920
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 3936
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 3952
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 3968
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 3984
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4000
+ hash: "d6eecfb695deacae4bb2fe5adb2d5c3d"
+ }
+ Frame {
+ msec: 4016
+ hash: "d6eecfb695deacae4bb2fe5adb2d5c3d"
+ }
+ Frame {
+ msec: 4032
+ hash: "b48f481a8149c03139e29b619dbb3f3c"
+ }
+ Frame {
+ msec: 4048
+ hash: "994ba7fc208bbf081d54384d82d0fc07"
+ }
+ Frame {
+ msec: 4064
+ hash: "05d30293c12eb6a3e21cebd42bb1f383"
+ }
+ Frame {
+ msec: 4080
+ hash: "f2b4140a5d26f241a27e2a3027785559"
+ }
+ Frame {
+ msec: 4096
+ hash: "1189e519fd1611c5603e598fbcadca44"
+ }
+ Frame {
+ msec: 4112
+ hash: "ee98893d95e55cb76966c0cfe29d237b"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4128
+ hash: "9ff3010efeb8707c864def782405ad4c"
+ }
+ Frame {
+ msec: 4144
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4160
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4176
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4192
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4208
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4224
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4240
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4256
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4272
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4288
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4304
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4320
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4336
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4352
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4368
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4384
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4400
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4416
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4432
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4448
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4464
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4480
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4496
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4512
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4528
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4544
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4560
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4576
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4592
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4608
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4624
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4640
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4656
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4672
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4688
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4704
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4720
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4736
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4752
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4768
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4784
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4800
+ image: "test3.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4832
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4848
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4864
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4880
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4896
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4912
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4928
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4944
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4960
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4976
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 4992
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 5008
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 5024
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 5040
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 5056
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 5072
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 5088
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Frame {
+ msec: 5104
+ hash: "c842d544f87332bc133833e8966240ee"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5120
+ hash: "a857238777462319fcedd4f359ce1a04"
+ }
+ Frame {
+ msec: 5136
+ hash: "a857238777462319fcedd4f359ce1a04"
+ }
+ Frame {
+ msec: 5152
+ hash: "d9248d1257bf0232dcdf29fca7536ad1"
+ }
+ Frame {
+ msec: 5168
+ hash: "0405e029cc4b2fa80761c06fb8898b0d"
+ }
+ Frame {
+ msec: 5184
+ hash: "a36fb7e32e6aafbb84b62ef56be3cf70"
+ }
+ Frame {
+ msec: 5200
+ hash: "9846c73bbe57277bd36bbca1c489e644"
+ }
+ Frame {
+ msec: 5216
+ hash: "8f4840715082c48d520ddb55501cf8eb"
+ }
+ Frame {
+ msec: 5232
+ hash: "478fde3a6fd8cecc222b8c16743d231f"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5248
+ hash: "b2bb760c93d26c6db21ce6beccd36b66"
+ }
+ Frame {
+ msec: 5264
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5280
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5296
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5312
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5328
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5344
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5360
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5376
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5392
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5408
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5424
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5440
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5456
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5472
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5488
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5504
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5520
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5536
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5552
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5568
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5584
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5600
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5616
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5632
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5648
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5664
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5680
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5696
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Frame {
+ msec: 5712
+ hash: "1ef605e1a68ff993f4f971a85a6bee97"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5728
+ hash: "4780d8094833831f27d1aff3e0f9689f"
+ }
+ Frame {
+ msec: 5744
+ hash: "4780d8094833831f27d1aff3e0f9689f"
+ }
+ Frame {
+ msec: 5760
+ image: "test3.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "93c8d7980de378a055b7ca824882ae4e"
+ }
+ Frame {
+ msec: 5792
+ hash: "e0abe402f89c5d84e5a02f0e4bcbd5e3"
+ }
+ Frame {
+ msec: 5808
+ hash: "067ca20bcfab459a28af7e8dc2830032"
+ }
+ Frame {
+ msec: 5824
+ hash: "d27dc1a08c66cf5f4a84efe3be522ec3"
+ }
+ Frame {
+ msec: 5840
+ hash: "639f7555adc7958e807c2e774694fe25"
+ }
+ Frame {
+ msec: 5856
+ hash: "b55f5fcbc2284736695049b2cdc9c8ce"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5872
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 5888
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 5904
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 5920
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 5936
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 5952
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 5968
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 5984
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 6000
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 6016
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 6032
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 6048
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 6064
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 6080
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 6096
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 6112
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 6128
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 6144
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 6160
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 6176
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 6192
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 6208
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 6224
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 6240
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 6256
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Frame {
+ msec: 6272
+ hash: "f209867bbf74dbe0385655a522e322f1"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 6288
+ hash: "48910947dd160b33251c54ff45f6a0db"
+ }
+ Frame {
+ msec: 6304
+ hash: "48910947dd160b33251c54ff45f6a0db"
+ }
+ Frame {
+ msec: 6320
+ hash: "20b0f988a1517d67a0d3c78ae8af4e5a"
+ }
+ Frame {
+ msec: 6336
+ hash: "355b5b161176c31bcbae198b1581f59b"
+ }
+ Frame {
+ msec: 6352
+ hash: "19cbb853a93bd062a53d7908df54bfbd"
+ }
+ Frame {
+ msec: 6368
+ hash: "13fbe723f288cffd09f0a86b71457161"
+ }
+ Frame {
+ msec: 6384
+ hash: "0014ed3b1a868cf75bfffedb52674c5c"
+ }
+ Frame {
+ msec: 6400
+ hash: "a1c444be02b90e69319096b8a508947d"
+ }
+ Frame {
+ msec: 6416
+ hash: "b88a3f2f3290e4262757b1f5741cb5ce"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 6432
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6448
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6464
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6480
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6496
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6512
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6528
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6544
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6560
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6576
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6592
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6608
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6624
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6640
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6656
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6672
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6688
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6704
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6720
+ image: "test3.6.png"
+ }
+ Frame {
+ msec: 6736
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6752
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6768
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6784
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6800
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6816
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6832
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Frame {
+ msec: 6848
+ hash: "dc708a762ba7f1120eb14105571943f8"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 6864
+ hash: "a44bb76233c69780c178dddd79cc1968"
+ }
+ Frame {
+ msec: 6880
+ hash: "a44bb76233c69780c178dddd79cc1968"
+ }
+ Frame {
+ msec: 6896
+ hash: "154b11fd0468aa18d1ef1895f2e2923c"
+ }
+ Frame {
+ msec: 6912
+ hash: "fe7ecb02e63fbb7584405e7162f0ee21"
+ }
+ Frame {
+ msec: 6928
+ hash: "90b6fea69d106c628a9c7ff23a97e6c2"
+ }
+ Frame {
+ msec: 6944
+ hash: "3e233e837e24976d441b6cabc3b74098"
+ }
+ Frame {
+ msec: 6960
+ hash: "7a490f7be5c4c0ae09421f884e9adadb"
+ }
+ Frame {
+ msec: 6976
+ hash: "462d44603dd661ccf126c81197608056"
+ }
+ Frame {
+ msec: 6992
+ hash: "0b7ca73497c37255bccad6787d690236"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 7008
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7024
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7040
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7056
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7072
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7088
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7104
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7120
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7136
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7152
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7168
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7184
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7200
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7216
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7232
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7248
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7264
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7280
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7296
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7312
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7328
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7344
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7360
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7376
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7392
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7408
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7424
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Frame {
+ msec: 7440
+ hash: "224ade5c942415100b5418a11d043611"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 7456
+ hash: "95ff2a535a13fcdded94229d53848f7c"
+ }
+ Frame {
+ msec: 7472
+ hash: "95ff2a535a13fcdded94229d53848f7c"
+ }
+ Frame {
+ msec: 7488
+ hash: "d2386e4137632f15aa5ba9dd1a138a67"
+ }
+ Frame {
+ msec: 7504
+ hash: "9f2c40191c1a81f37543f5bfcb852bdf"
+ }
+ Frame {
+ msec: 7520
+ hash: "5facdbcc9d7ab0adfcb2ca9d1812a3f5"
+ }
+ Frame {
+ msec: 7536
+ hash: "7bbb08470e4f3eeabe710e0ea327c467"
+ }
+ Frame {
+ msec: 7552
+ hash: "630abf60d09d3a685d79e6da627b3aa2"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 7568
+ hash: "d8aed706508814cdbd1ef0984f112b94"
+ }
+ Frame {
+ msec: 7584
+ hash: "d191c2dc3e2edd05bfd649dcfa51029e"
+ }
+ Frame {
+ msec: 7600
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 7616
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 7632
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 7648
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 7664
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 7680
+ image: "test3.7.png"
+ }
+ Frame {
+ msec: 7696
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 7712
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 7728
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 7744
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 7760
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 7776
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 7792
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 7808
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 7824
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 7840
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 7856
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 7872
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 7888
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 7904
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 7920
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 7936
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 7952
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Frame {
+ msec: 7968
+ hash: "7ee37281a3f5788305f779bdd33852e5"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 7984
+ hash: "fb386abfd73a3feb05b573d16ffa93f9"
+ }
+ Frame {
+ msec: 8000
+ hash: "fb386abfd73a3feb05b573d16ffa93f9"
+ }
+ Frame {
+ msec: 8016
+ hash: "fa1374155fc5427c72bd09ec5a315172"
+ }
+ Frame {
+ msec: 8032
+ hash: "ee35a3edf91865e28b16b9fcab8b4c1c"
+ }
+ Frame {
+ msec: 8048
+ hash: "10f2677f7c8efe9f64e401940dec3ef7"
+ }
+ Frame {
+ msec: 8064
+ hash: "b2c53bb14a8a6643e69cad2bbb4aacf4"
+ }
+ Frame {
+ msec: 8080
+ hash: "7b7c7d167aca55464d1874ed726ec646"
+ }
+ Frame {
+ msec: 8096
+ hash: "19a828ca70133801f1f470f6e348857b"
+ }
+ Frame {
+ msec: 8112
+ hash: "bc829873ea3cf8ca8484d990d4b80aa2"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 8128
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8144
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8160
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8176
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8192
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8208
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8224
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8240
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8256
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8272
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8288
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8304
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8320
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8336
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8352
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8368
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8384
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8400
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8416
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8432
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8448
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8464
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8480
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Frame {
+ msec: 8496
+ hash: "201b90bc27073e945bb00c85501f4dc8"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 8512
+ hash: "d0d487fd66bcf4177188d4862bd74bc0"
+ }
+ Frame {
+ msec: 8528
+ hash: "d0d487fd66bcf4177188d4862bd74bc0"
+ }
+ Frame {
+ msec: 8544
+ hash: "4a4c2e49e4852748916a4d68710e4ae6"
+ }
+ Frame {
+ msec: 8560
+ hash: "0135092d8a296b7121495cc3994a0f9d"
+ }
+ Frame {
+ msec: 8576
+ hash: "7e004aae70236568d635ba929e085b2b"
+ }
+ Frame {
+ msec: 8592
+ hash: "3e6a4f60a57515a6bfe4d803c7c22da8"
+ }
+ Frame {
+ msec: 8608
+ hash: "142b866861f539837b0bdabaf48028e7"
+ }
+ Frame {
+ msec: 8624
+ hash: "32a4757602c923366566d9005c78f6cf"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 8640
+ image: "test3.8.png"
+ }
+ Frame {
+ msec: 8656
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 8672
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 8688
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 8704
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 8720
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 8736
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 8752
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 8768
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 8784
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 8800
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 8816
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 8832
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 8848
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 8864
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 8880
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 8896
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 8912
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 8928
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 8944
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 8960
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 8976
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 8992
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 9008
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 9024
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 9040
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Frame {
+ msec: 9056
+ hash: "358a3fbfa70526a40f2179cb2fd100d4"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 9072
+ hash: "b1dc330f31b064f1e3ff4e913773cde8"
+ }
+ Frame {
+ msec: 9088
+ hash: "b1dc330f31b064f1e3ff4e913773cde8"
+ }
+ Frame {
+ msec: 9104
+ hash: "a0419dede71451f36c93960c8ef8c00c"
+ }
+ Frame {
+ msec: 9120
+ hash: "b8141758fc93aa1b286fd60f91e6fa7e"
+ }
+ Frame {
+ msec: 9136
+ hash: "8b0d786f239c545be3f51622c336f1e1"
+ }
+ Frame {
+ msec: 9152
+ hash: "25ec52efac83de4f8cade8f257b93b8e"
+ }
+ Frame {
+ msec: 9168
+ hash: "5a1476841b9aaa0e85c397c0447be352"
+ }
+ Frame {
+ msec: 9184
+ hash: "d648b0911e6ab78e53121fde8b66b50b"
+ }
+ Frame {
+ msec: 9200
+ hash: "f552863ff4b76286d03240409c0a928b"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 9216
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9232
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9248
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9264
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9280
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9296
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9312
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9328
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9344
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9360
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9376
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9392
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9408
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9424
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9440
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9456
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9472
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9488
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9504
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9520
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9536
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9552
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9568
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9584
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9600
+ image: "test3.9.png"
+ }
+ Frame {
+ msec: 9616
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9632
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9648
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9664
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9680
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9696
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9712
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9728
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9744
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9760
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9776
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9792
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9808
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9824
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9840
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9856
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9872
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9888
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9904
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9920
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9936
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9952
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9968
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 9984
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10000
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10016
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10032
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10048
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10064
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10080
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10096
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10112
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10128
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10144
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10160
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10176
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10192
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10208
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10224
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10240
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10256
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10272
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10288
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10304
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10320
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10336
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10352
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10368
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 10384
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10400
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10416
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+ Frame {
+ msec: 10432
+ hash: "f3b4cab7975190f756c923f16ce4c298"
+ }
+}
diff --git a/tests/auto/declarative/visual/focusscope/data/test.0.png b/tests/auto/declarative/visual/focusscope/data/test.0.png
new file mode 100644
index 0000000..67b99e0
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data/test.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data/test.1.png b/tests/auto/declarative/visual/focusscope/data/test.1.png
new file mode 100644
index 0000000..67b99e0
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data/test.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data/test.2.png b/tests/auto/declarative/visual/focusscope/data/test.2.png
new file mode 100644
index 0000000..69f0366
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data/test.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data/test.3.png b/tests/auto/declarative/visual/focusscope/data/test.3.png
new file mode 100644
index 0000000..afe0bd9
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data/test.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data/test.4.png b/tests/auto/declarative/visual/focusscope/data/test.4.png
new file mode 100644
index 0000000..afe0bd9
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data/test.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data/test.5.png b/tests/auto/declarative/visual/focusscope/data/test.5.png
new file mode 100644
index 0000000..afe0bd9
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data/test.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data/test.qml b/tests/auto/declarative/visual/focusscope/data/test.qml
new file mode 100644
index 0000000..d86c034
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data/test.qml
@@ -0,0 +1,1599 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 32
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 48
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 64
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 80
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 96
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 112
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 128
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 144
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 160
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 176
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 192
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 208
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 224
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 240
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 256
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 272
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 288
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 304
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 320
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 336
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 352
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 368
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 384
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 400
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 416
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 432
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 448
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 464
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 480
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 496
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 512
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 528
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 544
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 560
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 576
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 592
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 608
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 624
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 640
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 656
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 672
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 688
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 704
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 720
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 736
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 752
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 768
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 784
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 800
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 816
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 832
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 848
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 864
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 880
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 896
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 912
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 928
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 944
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 960
+ image: "test.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 992
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1008
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1024
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1040
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1056
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1072
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1088
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1104
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1120
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1136
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1152
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1168
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1184
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1200
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1216
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1232
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1248
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1264
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1280
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1296
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1312
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1328
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1344
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1360
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1376
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1392
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1408
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1424
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1440
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1456
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1472
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1488
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1504
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1520
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1536
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1552
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1568
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1584
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1600
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1616
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1632
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1648
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1664
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1680
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1696
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1712
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1728
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1744
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1760
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1776
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1792
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 1808
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1824
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1840
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1856
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1872
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1888
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1904
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1920
+ image: "test.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1952
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1968
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 1984
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2000
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2016
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2032
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2048
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2064
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2080
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2096
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2112
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2128
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2144
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2160
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2176
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2192
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2208
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2224
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2240
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2256
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2272
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2288
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2304
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2320
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2336
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 2352
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2368
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2384
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2400
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2416
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2432
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2448
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2464
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2480
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2496
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2512
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2528
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2544
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2560
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2576
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2592
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2608
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2624
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2640
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2656
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2672
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2688
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2704
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2720
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2736
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2752
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2768
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2784
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2800
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2816
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2832
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2848
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2864
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2880
+ image: "test.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2912
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2928
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2944
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2960
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 2976
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Key {
+ type: 6
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2992
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3008
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3024
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3040
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3056
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3072
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3088
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Key {
+ type: 7
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3104
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3120
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3136
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3152
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3168
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3184
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3200
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3216
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3232
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3248
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3264
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3280
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3296
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3312
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3328
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3344
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3360
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3376
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3392
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3408
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3424
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3440
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3456
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3472
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3488
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3504
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3520
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Frame {
+ msec: 3536
+ hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3552
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3568
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3584
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3600
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3616
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3632
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3648
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3664
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3680
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3696
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3712
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3728
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3744
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3760
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3776
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3792
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3808
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3824
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3840
+ image: "test.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3872
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3888
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3904
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3920
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3936
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3952
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3968
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 3984
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 4000
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 4016
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 4032
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 4048
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 4064
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 4080
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 4096
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 4112
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 4128
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 4144
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 4160
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 4176
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4192
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4208
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4224
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4240
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4256
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4272
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4288
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4304
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4320
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4336
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4352
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4368
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4384
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4400
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4416
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4432
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4448
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4464
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4480
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4496
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4512
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4528
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4544
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4560
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4576
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4592
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4608
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4624
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4640
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4656
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4672
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4688
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4704
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4720
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4736
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4752
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4768
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Frame {
+ msec: 4784
+ hash: "7e4814e27214ecbeb55992e319a88102"
+ }
+ Key {
+ type: 6
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4800
+ image: "test.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 4832
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 4848
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 4864
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 4880
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 4896
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Key {
+ type: 7
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4912
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 4928
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 4944
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 4960
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 4976
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 4992
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5008
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5024
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5040
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5056
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5072
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5088
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5104
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5120
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5136
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5152
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5168
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5184
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5200
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5216
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5232
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5248
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5264
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5280
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5296
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5312
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5328
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5344
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5360
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5376
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5392
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5408
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5424
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5440
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5456
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5472
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5488
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5504
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5520
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5536
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5552
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5568
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5584
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5600
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5616
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5632
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5648
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5664
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5680
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5696
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5712
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5728
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5744
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5760
+ image: "test.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5792
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5808
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5824
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5840
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5856
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5872
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+ Frame {
+ msec: 5888
+ hash: "6f85c2226e6e408f4699762f687b83e1"
+ }
+}
diff --git a/tests/auto/declarative/visual/focusscope/data/test2.0.png b/tests/auto/declarative/visual/focusscope/data/test2.0.png
new file mode 100644
index 0000000..555a968
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data/test2.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data/test2.1.png b/tests/auto/declarative/visual/focusscope/data/test2.1.png
new file mode 100644
index 0000000..555a968
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data/test2.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data/test2.qml b/tests/auto/declarative/visual/focusscope/data/test2.qml
new file mode 100644
index 0000000..fedc96a
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data/test2.qml
@@ -0,0 +1,607 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 32
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 48
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 64
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 80
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 96
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 112
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 128
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 144
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 160
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 176
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 192
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 208
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 224
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 240
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 256
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 272
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 288
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 304
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 320
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 336
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 352
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 368
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 384
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 400
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 416
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 432
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 448
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 464
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 480
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 496
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 512
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 528
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 544
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 560
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 576
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 592
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 608
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 624
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 640
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 656
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 672
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 688
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 704
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 720
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 736
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 752
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 768
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 784
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 800
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 816
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 832
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 848
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 864
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 880
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 896
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 912
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 928
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 944
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 960
+ image: "test2.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 992
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1008
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1024
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1040
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1056
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1072
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1088
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1104
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1120
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1136
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1152
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1168
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1184
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1200
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1216
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1232
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1248
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1264
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1280
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1296
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1312
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1328
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1344
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1360
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1376
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1392
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1408
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1424
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1440
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1456
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1472
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1488
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1504
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1520
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1536
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1552
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1568
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1584
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1600
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1616
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1632
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1648
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1664
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1680
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1696
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1712
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1728
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1744
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1760
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1776
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1792
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1808
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1824
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1840
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1856
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1872
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1888
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1904
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1920
+ image: "test2.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1952
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1968
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 1984
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2000
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2016
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2032
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2048
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2064
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2080
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2096
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2112
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2128
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2144
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2160
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2176
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2192
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2208
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2224
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2240
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2256
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2272
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2288
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2304
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2320
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2336
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2352
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+ Frame {
+ msec: 2368
+ hash: "bb4131579c66dc948f2e27e236deb4ab"
+ }
+}
diff --git a/tests/auto/declarative/visual/focusscope/data/test3.0.png b/tests/auto/declarative/visual/focusscope/data/test3.0.png
new file mode 100644
index 0000000..374acf5
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data/test3.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data/test3.1.png b/tests/auto/declarative/visual/focusscope/data/test3.1.png
new file mode 100644
index 0000000..b75cb10
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data/test3.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data/test3.2.png b/tests/auto/declarative/visual/focusscope/data/test3.2.png
new file mode 100644
index 0000000..9b2f919
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data/test3.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data/test3.3.png b/tests/auto/declarative/visual/focusscope/data/test3.3.png
new file mode 100644
index 0000000..bf63032
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data/test3.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data/test3.4.png b/tests/auto/declarative/visual/focusscope/data/test3.4.png
new file mode 100644
index 0000000..6981a06
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data/test3.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data/test3.5.png b/tests/auto/declarative/visual/focusscope/data/test3.5.png
new file mode 100644
index 0000000..5856325
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data/test3.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data/test3.6.png b/tests/auto/declarative/visual/focusscope/data/test3.6.png
new file mode 100644
index 0000000..9b2f919
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data/test3.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data/test3.7.png b/tests/auto/declarative/visual/focusscope/data/test3.7.png
new file mode 100644
index 0000000..b75cb10
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data/test3.7.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data/test3.8.png b/tests/auto/declarative/visual/focusscope/data/test3.8.png
new file mode 100644
index 0000000..374acf5
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data/test3.8.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data/test3.9.png b/tests/auto/declarative/visual/focusscope/data/test3.9.png
new file mode 100644
index 0000000..11a08bd
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data/test3.9.png
Binary files differ
diff --git a/tests/auto/declarative/visual/focusscope/data/test3.qml b/tests/auto/declarative/visual/focusscope/data/test3.qml
new file mode 100644
index 0000000..8ce7944
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/data/test3.qml
@@ -0,0 +1,2879 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 32
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 48
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 64
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 80
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 96
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 112
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 128
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 144
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 160
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 176
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 192
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 208
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 224
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 240
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 256
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 272
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 288
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 304
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 320
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 336
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 352
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 368
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 384
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 400
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 416
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 432
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 448
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 464
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 480
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 496
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 512
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 528
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 544
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 560
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 576
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 592
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 608
+ hash: "c114718c158f107e8a7d06bf49d30855"
+ }
+ Frame {
+ msec: 624
+ hash: "c71bf3c6ef7addc3c1f55e3f92c001ac"
+ }
+ Frame {
+ msec: 640
+ hash: "b075c33ed606041dfb57a03f92cf5574"
+ }
+ Frame {
+ msec: 656
+ hash: "1933a060fc0b889082df94054a2d3c7e"
+ }
+ Frame {
+ msec: 672
+ hash: "cc4133e796a242493538131c789c392c"
+ }
+ Frame {
+ msec: 688
+ hash: "cbc16ad8bcb8dcf73ae101ca4899adac"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 704
+ hash: "1a5e008ef5640ad85a19b307244a36f7"
+ }
+ Frame {
+ msec: 720
+ hash: "6a0c9d0f3ac068d65d590c844dae4ebb"
+ }
+ Frame {
+ msec: 736
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 752
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 768
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 784
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 800
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 816
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 832
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 848
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 864
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 880
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 896
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 912
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 928
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 944
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 960
+ image: "test3.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 992
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 1008
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 1024
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 1040
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 1056
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 1072
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 1088
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1104
+ hash: "ac2f6e2f5f379ad8717aa3754f2aab80"
+ }
+ Frame {
+ msec: 1120
+ hash: "e896c5b5a4fd121e5c25aba0a17c11f3"
+ }
+ Frame {
+ msec: 1136
+ hash: "1d1228cf0b205e46a969a0016245bb9e"
+ }
+ Frame {
+ msec: 1152
+ hash: "d07b1d53655e549c503223fddfa62038"
+ }
+ Frame {
+ msec: 1168
+ hash: "d774614f13d1a19eff3c451c4abce7e5"
+ }
+ Frame {
+ msec: 1184
+ hash: "0e8445283c961a41c22ede2f26ab0d0c"
+ }
+ Frame {
+ msec: 1200
+ hash: "f85ced79a9d521b70b093d43d1335914"
+ }
+ Frame {
+ msec: 1216
+ hash: "3f70531768847686f202336827ed5c51"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1232
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 1248
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 1264
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 1280
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 1296
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 1312
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 1328
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 1344
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 1360
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 1376
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 1392
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 1408
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 1424
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 1440
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 1456
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 1472
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 1488
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 1504
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 1520
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1536
+ hash: "c59557a62fb22756ecae00bf36589f19"
+ }
+ Frame {
+ msec: 1552
+ hash: "c2938aac121e121eb138b2cdc485a23c"
+ }
+ Frame {
+ msec: 1568
+ hash: "aa582bd07789a0ce000bb014b4924969"
+ }
+ Frame {
+ msec: 1584
+ hash: "59d7a7fed20a11ecb12de08c77f0f303"
+ }
+ Frame {
+ msec: 1600
+ hash: "9a1d7649e44e2c2436855b92abbae030"
+ }
+ Frame {
+ msec: 1616
+ hash: "e46c47a221da37bbdffcdf671e84774b"
+ }
+ Frame {
+ msec: 1632
+ hash: "85ff7ef61ef08dc97065b0536f9f8766"
+ }
+ Frame {
+ msec: 1648
+ hash: "1159f274e5c2947875484d04a3ac6694"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1664
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 1680
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 1696
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 1712
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 1728
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 1744
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 1760
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 1776
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 1792
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 1808
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 1824
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 1840
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 1856
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 1872
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 1888
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 1904
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 1920
+ image: "test3.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 1952
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 1968
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 1984
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 2000
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2016
+ hash: "26e5e7612374c7a4f7ac26a284c735b4"
+ }
+ Frame {
+ msec: 2032
+ hash: "03c63a8bab380ebcd02f2bf2f588df85"
+ }
+ Frame {
+ msec: 2048
+ hash: "1a7c4738de4f1123c7e639c935095476"
+ }
+ Frame {
+ msec: 2064
+ hash: "8362cb8a253dcb2e9ef7fb070579d639"
+ }
+ Frame {
+ msec: 2080
+ hash: "8fae548ad1f2e16738c14636b905efef"
+ }
+ Frame {
+ msec: 2096
+ hash: "05fca78fea63817204b2303495baaec7"
+ }
+ Frame {
+ msec: 2112
+ hash: "5bf7b04177db667f23f1bc4f0066bc44"
+ }
+ Frame {
+ msec: 2128
+ hash: "aa10d0614604f0563d4fc458b7bb9260"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2144
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2160
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2176
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2192
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2208
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2224
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2240
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2256
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2272
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2288
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2304
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2320
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2336
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2352
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2368
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2384
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2400
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2416
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2432
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2448
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2464
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2480
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2496
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 2512
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2528
+ hash: "1823a5c00778550c6b46416e6a2b730f"
+ }
+ Frame {
+ msec: 2544
+ hash: "7ca64f71eee9d3a926335de026be5fe2"
+ }
+ Frame {
+ msec: 2560
+ hash: "5f9e44b8374a490793b479440ce3b701"
+ }
+ Frame {
+ msec: 2576
+ hash: "b0969884a9654d87da9941fb9eb4c99a"
+ }
+ Frame {
+ msec: 2592
+ hash: "aeadf244a67b3c9e5c119b52aa0f15a0"
+ }
+ Frame {
+ msec: 2608
+ hash: "2d990e5ae8d3660079bdea7f2b5245a7"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2624
+ hash: "5998faffa17f9ffbf1cb39cdc09cdd54"
+ }
+ Frame {
+ msec: 2640
+ hash: "bf8089df5d863f627cd44294f322d796"
+ }
+ Frame {
+ msec: 2656
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 2672
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 2688
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 2704
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 2720
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 2736
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 2752
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 2768
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 2784
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 2800
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 2816
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 2832
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 2848
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 2864
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 2880
+ image: "test3.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 2912
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 2928
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 2944
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 2960
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 2976
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2992
+ hash: "d707cb6e2587eecba275d1e7ceb9d020"
+ }
+ Frame {
+ msec: 3008
+ hash: "fddd144d4d2e475330ff87f4e6febe35"
+ }
+ Frame {
+ msec: 3024
+ hash: "06115e65296d1a77ab956cd3984303ee"
+ }
+ Frame {
+ msec: 3040
+ hash: "6881ec448625fdc23f1241bd60362460"
+ }
+ Frame {
+ msec: 3056
+ hash: "d94fdfd178377328e3b840c32f774958"
+ }
+ Frame {
+ msec: 3072
+ hash: "d2cba0b3aac8002aa2de51f7b1442985"
+ }
+ Frame {
+ msec: 3088
+ hash: "c0ea81cddf6b1f5b4b4157dade6b8ca0"
+ }
+ Frame {
+ msec: 3104
+ hash: "964a80740cc7ba474d5d10b76cca1b14"
+ }
+ Frame {
+ msec: 3120
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3136
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 3152
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 3168
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 3184
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 3200
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 3216
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 3232
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 3248
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 3264
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 3280
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 3296
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 3312
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 3328
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 3344
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 3360
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 3376
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 3392
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 3408
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 3424
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 3440
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 3456
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 3472
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 3488
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3504
+ hash: "56634199c96e5c4588c2954f0595fcaa"
+ }
+ Frame {
+ msec: 3520
+ hash: "a51221b77045e51cba2b0913546961cb"
+ }
+ Frame {
+ msec: 3536
+ hash: "9910569a15164882056802e5ecfaef42"
+ }
+ Frame {
+ msec: 3552
+ hash: "17080817e0b23212828d2cee23eff98f"
+ }
+ Frame {
+ msec: 3568
+ hash: "791fee9758645fe21fe52918e5435f7d"
+ }
+ Frame {
+ msec: 3584
+ hash: "e0fcea2889a4825075322524025a4bdf"
+ }
+ Frame {
+ msec: 3600
+ hash: "825f58093f328182fa32b3cbc573101f"
+ }
+ Frame {
+ msec: 3616
+ hash: "550972282584bd52108728290bd4aa5e"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3632
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 3648
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 3664
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 3680
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 3696
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 3712
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 3728
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 3744
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 3760
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 3776
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 3792
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 3808
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 3824
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 3840
+ image: "test3.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 3872
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 3888
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 3904
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 3920
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 3936
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 3952
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 3968
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 3984
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4000
+ hash: "a2386a0135e8ffd9f2ac12345ede3553"
+ }
+ Frame {
+ msec: 4016
+ hash: "9550cdc0032bc3ea0a611f2584f43cca"
+ }
+ Frame {
+ msec: 4032
+ hash: "3f39909102a04f0e41a97b10dde4425a"
+ }
+ Frame {
+ msec: 4048
+ hash: "535d56a4d450cf0222f94573a88bbf80"
+ }
+ Frame {
+ msec: 4064
+ hash: "c4b782cfb9399689b0cbfc2a97305984"
+ }
+ Frame {
+ msec: 4080
+ hash: "23604b04198d53e0ba4a0955d8bcf124"
+ }
+ Frame {
+ msec: 4096
+ hash: "a440962d680f70eb47af38a91390b8c0"
+ }
+ Frame {
+ msec: 4112
+ hash: "da4b079f00248a073ce49f749ff0cc77"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4128
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4144
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4160
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4176
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4192
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4208
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4224
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4240
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4256
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4272
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4288
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4304
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4320
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4336
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4352
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4368
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4384
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4400
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4416
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4432
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4448
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4464
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4480
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4496
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4512
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4528
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4544
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4560
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4576
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4592
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4608
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4624
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4640
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4656
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4672
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4688
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4704
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4720
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4736
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4752
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4768
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4784
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4800
+ image: "test3.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4832
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4848
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4864
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4880
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4896
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4912
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4928
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4944
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4960
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4976
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 4992
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 5008
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 5024
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 5040
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 5056
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 5072
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 5088
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Frame {
+ msec: 5104
+ hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5120
+ hash: "58be5253b74ac1cecf08714e670e30af"
+ }
+ Frame {
+ msec: 5136
+ hash: "a8e15f6e28a67941730f9cfe8ea7f0ff"
+ }
+ Frame {
+ msec: 5152
+ hash: "f1bfd2e2cd3a3ff08ae36e785d33e626"
+ }
+ Frame {
+ msec: 5168
+ hash: "b61fd5c58ddaf806e72d77bed92e91f3"
+ }
+ Frame {
+ msec: 5184
+ hash: "f192f6b779fa6bdfd4bc9c8671dd3147"
+ }
+ Frame {
+ msec: 5200
+ hash: "1cf034cfdfe3cafa832e28950c90d67b"
+ }
+ Frame {
+ msec: 5216
+ hash: "b0d2223f7f2c302784654f03cb3a5c1c"
+ }
+ Frame {
+ msec: 5232
+ hash: "19d089ac37fd42c1be99facd38a954e3"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5248
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5264
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5280
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5296
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5312
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5328
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5344
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5360
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5376
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5392
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5408
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5424
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5440
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5456
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5472
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5488
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5504
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5520
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5536
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5552
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5568
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5584
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5600
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5616
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5632
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5648
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5664
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5680
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5696
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Frame {
+ msec: 5712
+ hash: "0cf213791ef1263f9dfc867df96e8211"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5728
+ hash: "51db47388acad98d18a8a2aaca279dba"
+ }
+ Frame {
+ msec: 5744
+ hash: "c83747a4356fa12593020452dbf43fe8"
+ }
+ Frame {
+ msec: 5760
+ image: "test3.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "39d476722de92703d0a2259b5c62554e"
+ }
+ Frame {
+ msec: 5792
+ hash: "3f01e465470c3d5ab58b52f3e1517374"
+ }
+ Frame {
+ msec: 5808
+ hash: "63570753ba8c5f1525bf4cee38e8cad8"
+ }
+ Frame {
+ msec: 5824
+ hash: "31beab91ef4cadcf0b379b32786530ac"
+ }
+ Frame {
+ msec: 5840
+ hash: "46cd2e22eb4ef988752e2b3441bdd450"
+ }
+ Frame {
+ msec: 5856
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5872
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 5888
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 5904
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 5920
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 5936
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 5952
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 5968
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 5984
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 6000
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 6016
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 6032
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 6048
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 6064
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 6080
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 6096
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 6112
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 6128
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 6144
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 6160
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 6176
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 6192
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 6208
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 6224
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 6240
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 6256
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Frame {
+ msec: 6272
+ hash: "3e44d7064e55c510401b5008a06d9b82"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 6288
+ hash: "78c4aaf2427e0aa9b6d11ddf95df55f7"
+ }
+ Frame {
+ msec: 6304
+ hash: "d4859df2de6afa90c1997b1b4d6448ab"
+ }
+ Frame {
+ msec: 6320
+ hash: "f885e6a8cc09d06985a83f60e29a0a34"
+ }
+ Frame {
+ msec: 6336
+ hash: "41f27dbf80b0bc00498962162a5fe9db"
+ }
+ Frame {
+ msec: 6352
+ hash: "41800797032deeed5ccc87375b4093cb"
+ }
+ Frame {
+ msec: 6368
+ hash: "253276d23d8a0f195155361a27403496"
+ }
+ Frame {
+ msec: 6384
+ hash: "274bf40aacababde8fde71abf065d1aa"
+ }
+ Frame {
+ msec: 6400
+ hash: "86071a6486d35d3c10f318ab6bac7577"
+ }
+ Frame {
+ msec: 6416
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 6432
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6448
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6464
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6480
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6496
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6512
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6528
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6544
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6560
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6576
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6592
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6608
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6624
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6640
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6656
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6672
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6688
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6704
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6720
+ image: "test3.6.png"
+ }
+ Frame {
+ msec: 6736
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6752
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6768
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6784
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6800
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6816
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6832
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Frame {
+ msec: 6848
+ hash: "f75305426b87e1cdc325ae6668367be9"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 6864
+ hash: "eea514e956369c55f9fe9bfc5b8bbda4"
+ }
+ Frame {
+ msec: 6880
+ hash: "b28436abb5ce17310b63ed96a7034000"
+ }
+ Frame {
+ msec: 6896
+ hash: "40c656f467200785a951dd8f98cf28f5"
+ }
+ Frame {
+ msec: 6912
+ hash: "38c6c6b29c9a7f0eba87a538a336c338"
+ }
+ Frame {
+ msec: 6928
+ hash: "b3f939577616f8ded1e11ee6e6dce882"
+ }
+ Frame {
+ msec: 6944
+ hash: "d72b00208712f039a5d7a06fbfacd4bd"
+ }
+ Frame {
+ msec: 6960
+ hash: "c7a079a37f6bd7a8da706e6ba5d048ee"
+ }
+ Frame {
+ msec: 6976
+ hash: "561cdf098bdc35fc852fbe8fff2471e2"
+ }
+ Frame {
+ msec: 6992
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 7008
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7024
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7040
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7056
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7072
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7088
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7104
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7120
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7136
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7152
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7168
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7184
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7200
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7216
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7232
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7248
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7264
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7280
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7296
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7312
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7328
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7344
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7360
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7376
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7392
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7408
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7424
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Frame {
+ msec: 7440
+ hash: "0461d0e31648d2c155bee0145094c153"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 7456
+ hash: "096530df53ed21214cf93381ac0d23ea"
+ }
+ Frame {
+ msec: 7472
+ hash: "36e7cee0725fb16c5d7e08875a3b88f7"
+ }
+ Frame {
+ msec: 7488
+ hash: "a2b68c7e9e4ef04c1429190d01a3288b"
+ }
+ Frame {
+ msec: 7504
+ hash: "6ee23f5d2c0ddc21499c8685ae46df64"
+ }
+ Frame {
+ msec: 7520
+ hash: "dc423d32154882b99b7bde596697c83a"
+ }
+ Frame {
+ msec: 7536
+ hash: "e82852d1d2a21f67029870601b00b124"
+ }
+ Frame {
+ msec: 7552
+ hash: "7cd2773c33d7f34feb3b1e4752f63753"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 7568
+ hash: "2371f0ddf1b0ddcdb36f24e72b62d3a5"
+ }
+ Frame {
+ msec: 7584
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7600
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7616
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7632
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7648
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7664
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7680
+ image: "test3.7.png"
+ }
+ Frame {
+ msec: 7696
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7712
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7728
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7744
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7760
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7776
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7792
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7808
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7824
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7840
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7856
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7872
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7888
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7904
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7920
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7936
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7952
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Frame {
+ msec: 7968
+ hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 7984
+ hash: "93fd3abe0b99ed76d880f6f059636335"
+ }
+ Frame {
+ msec: 8000
+ hash: "a273ec355c79968013c70aca1b2d5737"
+ }
+ Frame {
+ msec: 8016
+ hash: "6b2df83c0645530ca007cde136838725"
+ }
+ Frame {
+ msec: 8032
+ hash: "47d5ed89f7e9c89df33bab14ca967f77"
+ }
+ Frame {
+ msec: 8048
+ hash: "c777e0d1a1f03e7a1bc16483f98c0622"
+ }
+ Frame {
+ msec: 8064
+ hash: "ac7e693d7dbc8e8ff2318cb611b68b76"
+ }
+ Frame {
+ msec: 8080
+ hash: "593e9711ae94a5b4f49544e0cf26d188"
+ }
+ Frame {
+ msec: 8096
+ hash: "afce51158cb19dd6ae8c72ce19964251"
+ }
+ Frame {
+ msec: 8112
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 8128
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8144
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8160
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8176
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8192
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8208
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8224
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8240
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8256
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8272
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8288
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8304
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8320
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8336
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8352
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8368
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8384
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8400
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8416
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8432
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8448
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8464
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8480
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Frame {
+ msec: 8496
+ hash: "30c5f9005238542c83b2d994cb61de16"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 8512
+ hash: "136c689aca9aa0cf957035137a926653"
+ }
+ Frame {
+ msec: 8528
+ hash: "b7418e46bca4bc8c953c15b03c23ec89"
+ }
+ Frame {
+ msec: 8544
+ hash: "e99575fe130e741f13329704303b76ca"
+ }
+ Frame {
+ msec: 8560
+ hash: "a2b7d528f9c145c4db0845bc76b3571f"
+ }
+ Frame {
+ msec: 8576
+ hash: "77f8beccd0134b8991ddb2ac92d64ecb"
+ }
+ Frame {
+ msec: 8592
+ hash: "fc359bc56852093020084af44987746a"
+ }
+ Frame {
+ msec: 8608
+ hash: "9f3479a702bc79062fff916678e974f1"
+ }
+ Frame {
+ msec: 8624
+ hash: "55c8c91ff26671f9f3049f1e1aaf5958"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 8640
+ image: "test3.8.png"
+ }
+ Frame {
+ msec: 8656
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 8672
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 8688
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 8704
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 8720
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 8736
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 8752
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 8768
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 8784
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 8800
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 8816
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 8832
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 8848
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 8864
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 8880
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 8896
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 8912
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 8928
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 8944
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 8960
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 8976
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 8992
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 9008
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 9024
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 9040
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Frame {
+ msec: 9056
+ hash: "216a02433edb100e6ff3db4944f6b061"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 9072
+ hash: "367ee34ab6a6cb0197e064db85638be7"
+ }
+ Frame {
+ msec: 9088
+ hash: "c61db7f2c0402a63efe779bec816a7db"
+ }
+ Frame {
+ msec: 9104
+ hash: "29d4d2679a502a1cb8a21807c43153c2"
+ }
+ Frame {
+ msec: 9120
+ hash: "3f531d4111efbbac256d4281db1fdeba"
+ }
+ Frame {
+ msec: 9136
+ hash: "9f343d8b4dc12cc7ab5ae1ff08067baf"
+ }
+ Frame {
+ msec: 9152
+ hash: "eb29b7d6ef2b5507425b2c30ddb58fa8"
+ }
+ Frame {
+ msec: 9168
+ hash: "883c0d35567deb6de9125441da89a1fe"
+ }
+ Frame {
+ msec: 9184
+ hash: "7c25e95ea2b38288b5ba5737108ef5d1"
+ }
+ Frame {
+ msec: 9200
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 9216
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9232
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9248
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9264
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9280
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9296
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9312
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9328
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9344
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9360
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9376
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9392
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9408
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9424
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9440
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9456
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9472
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9488
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9504
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9520
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9536
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9552
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9568
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9584
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9600
+ image: "test3.9.png"
+ }
+ Frame {
+ msec: 9616
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9632
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9648
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9664
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9680
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9696
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9712
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9728
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9744
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9760
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9776
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9792
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9808
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9824
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9840
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9856
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9872
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9888
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9904
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9920
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9936
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9952
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9968
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 9984
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10000
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10016
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10032
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10048
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10064
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10080
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10096
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10112
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10128
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10144
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10160
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10176
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10192
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10208
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10224
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10240
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10256
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10272
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10288
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10304
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10320
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10336
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10352
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10368
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 10384
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10400
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10416
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+ Frame {
+ msec: 10432
+ hash: "f192b84337784a6d31c309af7e32b5f7"
+ }
+}
diff --git a/tests/auto/declarative/visual/focusscope/test.qml b/tests/auto/declarative/visual/focusscope/test.qml
new file mode 100644
index 0000000..401c7dc
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/test.qml
@@ -0,0 +1,76 @@
+import Qt 4.6
+
+Rectangle {
+ color: "white"
+ width: 800
+ height: 600
+
+ Keys.onDigit9Pressed: console.log("Error - Root")
+
+ FocusScope {
+ id: myScope
+ focus: true
+
+ Keys.onDigit9Pressed: console.log("Error - FocusScope")
+
+ Rectangle {
+ height: 120
+ width: 420
+
+ color: "transparent"
+ border.width: 5
+ border.color: myScope.wantsFocus?"blue":"black"
+
+ Rectangle {
+ id: item1
+ x: 10; y: 10
+ width: 100; height: 100; color: "green"
+ border.width: 5
+ border.color: wantsFocus?"blue":"black"
+ Keys.onDigit9Pressed: console.log("Top Left");
+ KeyNavigation.right: item2
+ focus: true
+
+ Rectangle {
+ width: 50; height: 50; anchors.centerIn: parent
+ color: parent.focus?"red":"transparent"
+ }
+ }
+
+ Rectangle {
+ id: item2
+ x: 310; y: 10
+ width: 100; height: 100; color: "green"
+ border.width: 5
+ border.color: wantsFocus?"blue":"black"
+ KeyNavigation.left: item1
+ Keys.onDigit9Pressed: console.log("Top Right");
+
+ Rectangle {
+ width: 50; height: 50; anchors.centerIn: parent
+ color: parent.focus?"red":"transparent"
+ }
+ }
+ }
+ KeyNavigation.down: item3
+ }
+
+ Text { x:100; y:170; text: "Blue border indicates scoped focus\nBlack border indicates NOT scoped focus\nRed box indicates active focus\nUse arrow keys to navigate\nPress \"9\" to print currently focused item" }
+
+ Rectangle {
+ id: item3
+ x: 10; y: 300
+ width: 100; height: 100; color: "green"
+ border.width: 5
+ border.color: wantsFocus?"blue":"black"
+
+ Keys.onDigit9Pressed: console.log("Bottom Left");
+ KeyNavigation.up: myScope
+
+ Rectangle {
+ width: 50; height: 50; anchors.centerIn: parent
+ color: parent.focus?"red":"transparent"
+ }
+ }
+
+}
diff --git a/tests/auto/declarative/visual/focusscope/test2.qml b/tests/auto/declarative/visual/focusscope/test2.qml
new file mode 100644
index 0000000..5b6971a
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/test2.qml
@@ -0,0 +1,40 @@
+import Qt 4.6
+
+Rectangle {
+ color: "white"
+ width: 800
+ height: 600
+
+ Text { text: "All five rectangles should be red" }
+
+ FocusScope {
+ y: 100
+ focus: true
+ Rectangle { width: 50; height: 50; color: parent.wantsFocus?"red":"blue" }
+
+ FocusScope {
+ y: 100
+ focus: true
+ Rectangle { width: 50; height: 50; color: parent.wantsFocus?"red":"blue" }
+
+ FocusScope {
+ y: 100
+ focus: true
+ Rectangle { width: 50; height: 50; color: parent.wantsFocus?"red":"blue" }
+
+ FocusScope {
+ y: 100
+ focus: true
+ Rectangle { width: 50; height: 50; color: parent.wantsFocus?"red":"blue" }
+
+ FocusScope {
+ y: 100
+ focus: true
+ Rectangle { width: 50; height: 50; color: parent.wantsFocus?"red":"blue" }
+ }
+ }
+ }
+ }
+ }
+
+}
diff --git a/tests/auto/declarative/visual/focusscope/test3.qml b/tests/auto/declarative/visual/focusscope/test3.qml
new file mode 100644
index 0000000..855bdc5
--- /dev/null
+++ b/tests/auto/declarative/visual/focusscope/test3.qml
@@ -0,0 +1,52 @@
+import Qt 4.6
+
+Rectangle {
+ color: "white"
+ width: 800
+ height: 600
+
+ Listmodel {
+ id: model
+ ListElement { name: "1" }
+ ListElement { name: "2" }
+ ListElement { name: "3" }
+ ListElement { name: "4" }
+ ListElement { name: "5" }
+ ListElement { name: "6" }
+ ListElement { name: "7" }
+ ListElement { name: "8" }
+ ListElement { name: "9" }
+ }
+
+ Component {
+ id: verticalDelegate
+ FocusScope {
+ id: root
+ width: 50; height: 50;
+ Keys.onDigit9Pressed: console.log("Error - " + name)
+ Rectangle {
+ focus: true
+ Keys.onDigit9Pressed: console.log(name)
+ width: 50; height: 50;
+ color: root.ListView.isCurrentItem?"red":"green"
+ Text { text: name; anchors.centerIn: parent }
+ }
+ }
+ }
+
+ ListView {
+ width: 800; height: 50; orientation: "Horizontal"
+ focus: true
+ model: model
+ delegate: verticalDelegate
+ preferredHighlightBegin: 100
+ preferredHighlightEnd: 101
+ highlightRangeMode: ListView.StrictlyEnforceRange
+ }
+
+
+ Text {
+ y: 100; x: 50
+ text: "Currently selected element should be red\nPressing \"9\" should print the number of the currently selected item\nBe sure to scroll all the way to the right, pause, and then all the way to the left."
+ }
+}
diff --git a/tests/auto/declarative/visual/qfxwebview/autosize/autosize.qml b/tests/auto/declarative/visual/qfxwebview/autosize/autosize.qml
new file mode 100644
index 0000000..74c6844
--- /dev/null
+++ b/tests/auto/declarative/visual/qfxwebview/autosize/autosize.qml
@@ -0,0 +1,60 @@
+import Qt 4.6
+
+// The WebView size is determined by the width, height,
+// preferredWidth, and preferredHeight properties.
+Rectangle {
+ id: rect
+ color: "white"
+ width: 200
+ height: layout.height
+ Column {
+ id: layout
+ spacing: 2
+ WebView {
+ html: "No width defined."
+ Rectangle { color: "#10000000"
+ anchors.fill: parent
+ }
+ }
+ WebView {
+ width: rect.width
+ html: "The width is full."
+ Rectangle {
+ color: "#10000000"
+ anchors.fill: parent
+ }
+ }
+ WebView {
+ width: rect.width/2
+ html: "The width is half."
+ Rectangle {
+ color: "#10000000"
+ anchors.fill: parent
+ }
+ }
+ WebView {
+ preferredWidth: rect.width/2
+ html: "The preferredWidth is half."
+ Rectangle {
+ color: "#10000000"
+ anchors.fill: parent
+ }
+ }
+ WebView {
+ preferredWidth: rect.width/2
+ html: "The_preferredWidth_is_half."
+ Rectangle {
+ color: "#10000000"
+ anchors.fill: parent
+ }
+ }
+ WebView {
+ width: rect.width/2
+ html: "The_width_is_half."
+ Rectangle {
+ color: "#10000000"
+ anchors.fill: parent
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/qfxwebview/autosize/data-X11/autosize.0.png b/tests/auto/declarative/visual/qfxwebview/autosize/data-X11/autosize.0.png
new file mode 100644
index 0000000..1f28b9a
--- /dev/null
+++ b/tests/auto/declarative/visual/qfxwebview/autosize/data-X11/autosize.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qfxwebview/autosize/data-X11/autosize.qml b/tests/auto/declarative/visual/qfxwebview/autosize/data-X11/autosize.qml
new file mode 100644
index 0000000..d920a4c
--- /dev/null
+++ b/tests/auto/declarative/visual/qfxwebview/autosize/data-X11/autosize.qml
@@ -0,0 +1,83 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "0c70d855adc847fe33d7959ccb98bb8b"
+ }
+ Frame {
+ msec: 32
+ hash: "0c70d855adc847fe33d7959ccb98bb8b"
+ }
+ Frame {
+ msec: 48
+ hash: "0c70d855adc847fe33d7959ccb98bb8b"
+ }
+ Frame {
+ msec: 64
+ hash: "0c70d855adc847fe33d7959ccb98bb8b"
+ }
+ Frame {
+ msec: 80
+ hash: "0c70d855adc847fe33d7959ccb98bb8b"
+ }
+ Frame {
+ msec: 96
+ hash: "0c70d855adc847fe33d7959ccb98bb8b"
+ }
+ Frame {
+ msec: 112
+ hash: "0c70d855adc847fe33d7959ccb98bb8b"
+ }
+ Frame {
+ msec: 128
+ hash: "0c70d855adc847fe33d7959ccb98bb8b"
+ }
+ Frame {
+ msec: 144
+ hash: "0c70d855adc847fe33d7959ccb98bb8b"
+ }
+ Frame {
+ msec: 160
+ hash: "0c70d855adc847fe33d7959ccb98bb8b"
+ }
+ Frame {
+ msec: 176
+ hash: "0c70d855adc847fe33d7959ccb98bb8b"
+ }
+ Frame {
+ msec: 192
+ hash: "0c70d855adc847fe33d7959ccb98bb8b"
+ }
+ Frame {
+ msec: 208
+ hash: "0c70d855adc847fe33d7959ccb98bb8b"
+ }
+ Frame {
+ msec: 224
+ hash: "0c70d855adc847fe33d7959ccb98bb8b"
+ }
+ Frame {
+ msec: 240
+ hash: "0c70d855adc847fe33d7959ccb98bb8b"
+ }
+ Frame {
+ msec: 256
+ hash: "0c70d855adc847fe33d7959ccb98bb8b"
+ }
+ Frame {
+ msec: 272
+ hash: "0c70d855adc847fe33d7959ccb98bb8b"
+ }
+ Frame {
+ msec: 288
+ hash: "0c70d855adc847fe33d7959ccb98bb8b"
+ }
+ Frame {
+ msec: 304
+ hash: "0c70d855adc847fe33d7959ccb98bb8b"
+ }
+}
diff --git a/tests/auto/declarative/visual/qfxwebview/autosize/data/autosize.0.png b/tests/auto/declarative/visual/qfxwebview/autosize/data/autosize.0.png
new file mode 100644
index 0000000..1f28b9a
--- /dev/null
+++ b/tests/auto/declarative/visual/qfxwebview/autosize/data/autosize.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qfxwebview/autosize/data/autosize.qml b/tests/auto/declarative/visual/qfxwebview/autosize/data/autosize.qml
new file mode 100644
index 0000000..47999be
--- /dev/null
+++ b/tests/auto/declarative/visual/qfxwebview/autosize/data/autosize.qml
@@ -0,0 +1,83 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "66539e1b1983d95386b0d30d6e969904"
+ }
+ Frame {
+ msec: 32
+ hash: "66539e1b1983d95386b0d30d6e969904"
+ }
+ Frame {
+ msec: 48
+ hash: "66539e1b1983d95386b0d30d6e969904"
+ }
+ Frame {
+ msec: 64
+ hash: "66539e1b1983d95386b0d30d6e969904"
+ }
+ Frame {
+ msec: 80
+ hash: "66539e1b1983d95386b0d30d6e969904"
+ }
+ Frame {
+ msec: 96
+ hash: "66539e1b1983d95386b0d30d6e969904"
+ }
+ Frame {
+ msec: 112
+ hash: "66539e1b1983d95386b0d30d6e969904"
+ }
+ Frame {
+ msec: 128
+ hash: "66539e1b1983d95386b0d30d6e969904"
+ }
+ Frame {
+ msec: 144
+ hash: "66539e1b1983d95386b0d30d6e969904"
+ }
+ Frame {
+ msec: 160
+ hash: "66539e1b1983d95386b0d30d6e969904"
+ }
+ Frame {
+ msec: 176
+ hash: "66539e1b1983d95386b0d30d6e969904"
+ }
+ Frame {
+ msec: 192
+ hash: "66539e1b1983d95386b0d30d6e969904"
+ }
+ Frame {
+ msec: 208
+ hash: "66539e1b1983d95386b0d30d6e969904"
+ }
+ Frame {
+ msec: 224
+ hash: "66539e1b1983d95386b0d30d6e969904"
+ }
+ Frame {
+ msec: 240
+ hash: "66539e1b1983d95386b0d30d6e969904"
+ }
+ Frame {
+ msec: 256
+ hash: "66539e1b1983d95386b0d30d6e969904"
+ }
+ Frame {
+ msec: 272
+ hash: "66539e1b1983d95386b0d30d6e969904"
+ }
+ Frame {
+ msec: 288
+ hash: "66539e1b1983d95386b0d30d6e969904"
+ }
+ Frame {
+ msec: 304
+ hash: "66539e1b1983d95386b0d30d6e969904"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmleasefollow/data/easefollow.0.png b/tests/auto/declarative/visual/qmleasefollow/data/easefollow.0.png
new file mode 100644
index 0000000..21b6afb
--- /dev/null
+++ b/tests/auto/declarative/visual/qmleasefollow/data/easefollow.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmleasefollow/data/easefollow.1.png b/tests/auto/declarative/visual/qmleasefollow/data/easefollow.1.png
new file mode 100644
index 0000000..bb8a02b
--- /dev/null
+++ b/tests/auto/declarative/visual/qmleasefollow/data/easefollow.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmleasefollow/data/easefollow.2.png b/tests/auto/declarative/visual/qmleasefollow/data/easefollow.2.png
new file mode 100644
index 0000000..da60237
--- /dev/null
+++ b/tests/auto/declarative/visual/qmleasefollow/data/easefollow.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmleasefollow/data/easefollow.3.png b/tests/auto/declarative/visual/qmleasefollow/data/easefollow.3.png
new file mode 100644
index 0000000..3e943e8
--- /dev/null
+++ b/tests/auto/declarative/visual/qmleasefollow/data/easefollow.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmleasefollow/data/easefollow.4.png b/tests/auto/declarative/visual/qmleasefollow/data/easefollow.4.png
new file mode 100644
index 0000000..4fbaf26
--- /dev/null
+++ b/tests/auto/declarative/visual/qmleasefollow/data/easefollow.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmleasefollow/data/easefollow.5.png b/tests/auto/declarative/visual/qmleasefollow/data/easefollow.5.png
new file mode 100644
index 0000000..c10d196
--- /dev/null
+++ b/tests/auto/declarative/visual/qmleasefollow/data/easefollow.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmleasefollow/data/easefollow.6.png b/tests/auto/declarative/visual/qmleasefollow/data/easefollow.6.png
new file mode 100644
index 0000000..a672c06
--- /dev/null
+++ b/tests/auto/declarative/visual/qmleasefollow/data/easefollow.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmleasefollow/data/easefollow.qml b/tests/auto/declarative/visual/qmleasefollow/data/easefollow.qml
new file mode 100644
index 0000000..029a2fc
--- /dev/null
+++ b/tests/auto/declarative/visual/qmleasefollow/data/easefollow.qml
@@ -0,0 +1,1807 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "1f60efdb8704b92c9361daa468a25391"
+ }
+ Frame {
+ msec: 32
+ hash: "3bb6a87617e0e5d4922e573eec975886"
+ }
+ Frame {
+ msec: 48
+ hash: "268941737e6324d580890b151de621fb"
+ }
+ Frame {
+ msec: 64
+ hash: "99c674eccc082d7f0982257a748d93e5"
+ }
+ Frame {
+ msec: 80
+ hash: "2970467e8262c8a3f0b11be71245d048"
+ }
+ Frame {
+ msec: 96
+ hash: "63cbd06d6bb035d27c18dba49238d8b2"
+ }
+ Frame {
+ msec: 112
+ hash: "49f77bb3d323f882c0ec56e1f1040b3a"
+ }
+ Frame {
+ msec: 128
+ hash: "40263c5f9b5d2236536163785f832b4d"
+ }
+ Frame {
+ msec: 144
+ hash: "dc63b1c21a2027c4beb9c297a3677fbd"
+ }
+ Frame {
+ msec: 160
+ hash: "4fab52ea29a819fec032f19dbcbef012"
+ }
+ Frame {
+ msec: 176
+ hash: "60b48407a8f8ae2cce7d3e7c8b21991c"
+ }
+ Frame {
+ msec: 192
+ hash: "6e542c681092a5ebeef0534fa2bd2d6c"
+ }
+ Frame {
+ msec: 208
+ hash: "c7c6471969bbf81efdb86d1695548fc6"
+ }
+ Frame {
+ msec: 224
+ hash: "b7f4ad9a49feb400894209c02b94478a"
+ }
+ Frame {
+ msec: 240
+ hash: "3eb58b2f5233aead976183c13f241113"
+ }
+ Frame {
+ msec: 256
+ hash: "54f2036c50c6d8079fc0cadc01385980"
+ }
+ Frame {
+ msec: 272
+ hash: "f297659d75f6e724d72bd548821f4c9f"
+ }
+ Frame {
+ msec: 288
+ hash: "112798f080336fc9c603a7e9097dd8aa"
+ }
+ Frame {
+ msec: 304
+ hash: "c432e6ec2b53ca43cb7a7325d0cc379b"
+ }
+ Frame {
+ msec: 320
+ hash: "4a6d3db3efd665ad7f372bf3f2508ed7"
+ }
+ Frame {
+ msec: 336
+ hash: "0befa5dc4d2cc196fed0eb1a3aa75b8f"
+ }
+ Frame {
+ msec: 352
+ hash: "a34d010b50d59c362b54e44d69c2df91"
+ }
+ Frame {
+ msec: 368
+ hash: "cbdacced50186c87066ce1d46548b27e"
+ }
+ Frame {
+ msec: 384
+ hash: "a4060010ae4d3c0973bda48d68f7bd0a"
+ }
+ Frame {
+ msec: 400
+ hash: "47353437da587f732f986004c09884d0"
+ }
+ Frame {
+ msec: 416
+ hash: "080c348145167bbec671a04da6f7564f"
+ }
+ Frame {
+ msec: 432
+ hash: "69dead737c717a076ae3865680341fb4"
+ }
+ Frame {
+ msec: 448
+ hash: "1efdc31c5c8fa72fc848877deb6caaa4"
+ }
+ Frame {
+ msec: 464
+ hash: "28d7da1e933d0585d03acf4a529e7b42"
+ }
+ Frame {
+ msec: 480
+ hash: "bf85534124bf025b7ede0d6c80b8e443"
+ }
+ Frame {
+ msec: 496
+ hash: "cdbeb2d51541b1b1eff060efe993db91"
+ }
+ Frame {
+ msec: 512
+ hash: "52ad56ae16c8ab523adda8edc512dd87"
+ }
+ Frame {
+ msec: 528
+ hash: "61b1937f4c8dd2cb0ddd7031c5bfb3ab"
+ }
+ Frame {
+ msec: 544
+ hash: "1b109baba71b16827f90da654af093a3"
+ }
+ Frame {
+ msec: 560
+ hash: "d56621362802c8626868f36ba1e7db22"
+ }
+ Frame {
+ msec: 576
+ hash: "ee5555ec3ad8760f43bbf5958a925936"
+ }
+ Frame {
+ msec: 592
+ hash: "1ed2831144a453af1978605c0e42d17c"
+ }
+ Frame {
+ msec: 608
+ hash: "c74d5cdb3395a702269dfa88c8c9d975"
+ }
+ Frame {
+ msec: 624
+ hash: "ea98ddd9588cc23fd82a342ec2925ba8"
+ }
+ Frame {
+ msec: 640
+ hash: "e76b94d6d57f1a510f7649eaab892562"
+ }
+ Frame {
+ msec: 656
+ hash: "022f40b6fe9dbaf8019855234acb3461"
+ }
+ Frame {
+ msec: 672
+ hash: "467da4f48aa6aeb113f0797facf157e8"
+ }
+ Frame {
+ msec: 688
+ hash: "8df407aadd4d896eb6537e1555a0242f"
+ }
+ Frame {
+ msec: 704
+ hash: "122e4671881e31f54e617729f4fbb3b0"
+ }
+ Frame {
+ msec: 720
+ hash: "562718f101c3cd7525b890076413df5e"
+ }
+ Frame {
+ msec: 736
+ hash: "07feae99ecf4b70eb094fd3e10deca56"
+ }
+ Frame {
+ msec: 752
+ hash: "0980d133b1006cc07796023880415163"
+ }
+ Frame {
+ msec: 768
+ hash: "7112b6ac97678b3b942c64c5108f0329"
+ }
+ Frame {
+ msec: 784
+ hash: "bb9f893a9aaee60ab6c30918552828a4"
+ }
+ Frame {
+ msec: 800
+ hash: "65d1f29437aaaea33676757276f1e434"
+ }
+ Frame {
+ msec: 816
+ hash: "52adcf2509f3236ac8ef571708e77206"
+ }
+ Frame {
+ msec: 832
+ hash: "22df5e7eda8a813531d0e0366cbfbf64"
+ }
+ Frame {
+ msec: 848
+ hash: "fe9b7b7812dd2410b8ed2eb19aa78f4d"
+ }
+ Frame {
+ msec: 864
+ hash: "141e22de4469f316b5ef5471f3c7bba0"
+ }
+ Frame {
+ msec: 880
+ hash: "1125c0a105fc4a2cae36b798058ce23f"
+ }
+ Frame {
+ msec: 896
+ hash: "8c17c5da2ae867fb0016a485ba9e4166"
+ }
+ Frame {
+ msec: 912
+ hash: "d8da9fc7ec4dcefb894c5a6a71e9d001"
+ }
+ Frame {
+ msec: 928
+ hash: "00ff642bea89fd89de394d78f8c5db33"
+ }
+ Frame {
+ msec: 944
+ hash: "8549063d517a3ce1ffd44c56b3b6cf5e"
+ }
+ Frame {
+ msec: 960
+ image: "easefollow.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "95a642caa72bb31cc1e04ecc12d07cd0"
+ }
+ Frame {
+ msec: 992
+ hash: "e65c823476bf920d0386f62ca831e6a0"
+ }
+ Frame {
+ msec: 1008
+ hash: "91e8913dc693c91a674a10b5b088dd8f"
+ }
+ Frame {
+ msec: 1024
+ hash: "1a469ffa0d530f72c78dc14783891c78"
+ }
+ Frame {
+ msec: 1040
+ hash: "6e46a83d07f8bc034b421103ef0e4f8c"
+ }
+ Frame {
+ msec: 1056
+ hash: "8ddacab411a8b73b6c9e69576fa1b003"
+ }
+ Frame {
+ msec: 1072
+ hash: "41f419a85fe44efe27c9a526d83a1e9a"
+ }
+ Frame {
+ msec: 1088
+ hash: "73d4ece31b258f9caf4556ce20a5be1f"
+ }
+ Frame {
+ msec: 1104
+ hash: "ef3ebe0acb50386cf79b9f08fbba2fbc"
+ }
+ Frame {
+ msec: 1120
+ hash: "c11a84d2fa80f28adb1466409812e987"
+ }
+ Frame {
+ msec: 1136
+ hash: "2e9db854b02d28b38063ff2a8e821ed1"
+ }
+ Frame {
+ msec: 1152
+ hash: "48e073c0e6b19aea8314629a2179af87"
+ }
+ Frame {
+ msec: 1168
+ hash: "77e518b7428d93b67a8fb0d33d85ed97"
+ }
+ Frame {
+ msec: 1184
+ hash: "1d18323af9c62e015513451883f8b39f"
+ }
+ Frame {
+ msec: 1200
+ hash: "df49889ba157cdc1ca240d08d2760ad7"
+ }
+ Frame {
+ msec: 1216
+ hash: "7b8cd2bcf0a4c38ab870f27894a43d2f"
+ }
+ Frame {
+ msec: 1232
+ hash: "84f10e0c9fd57dd1799df7fc34c5ef01"
+ }
+ Frame {
+ msec: 1248
+ hash: "ead4e609bc4a0755032b1648485b9625"
+ }
+ Frame {
+ msec: 1264
+ hash: "9a9829c3bd4a3a4155383c37e21e8db8"
+ }
+ Frame {
+ msec: 1280
+ hash: "5008917f60256abad867f32c1caf954d"
+ }
+ Frame {
+ msec: 1296
+ hash: "c21455d66ed0754177af5ce44b7c7600"
+ }
+ Frame {
+ msec: 1312
+ hash: "e8332f2586d80a2700b610e8fe5c72d9"
+ }
+ Frame {
+ msec: 1328
+ hash: "0d0c8af138f98bae8a370ebec4a4796c"
+ }
+ Frame {
+ msec: 1344
+ hash: "04065e8feeb900d18deeb941572f7f10"
+ }
+ Frame {
+ msec: 1360
+ hash: "992a225b1f25bf5b21dd7f8a55dc4b70"
+ }
+ Frame {
+ msec: 1376
+ hash: "8ef739d91ee2a4337cbfc3dc94ce9845"
+ }
+ Frame {
+ msec: 1392
+ hash: "46744977a26b37ab65e65e1891ceafe7"
+ }
+ Frame {
+ msec: 1408
+ hash: "1b4c0d79eeb8d6b2e30172f3664407b9"
+ }
+ Frame {
+ msec: 1424
+ hash: "d572831ed34d14d1125570b8b8767bdb"
+ }
+ Frame {
+ msec: 1440
+ hash: "8b785c756d11e0fc18959d0897a45673"
+ }
+ Frame {
+ msec: 1456
+ hash: "164a71ffcea63ceb6c1ebeb8d0d07af1"
+ }
+ Frame {
+ msec: 1472
+ hash: "e128dc12d5117eed9f7c0a16e8348ba2"
+ }
+ Frame {
+ msec: 1488
+ hash: "4c7db5b12d83bf22b1c88ac06ca7c385"
+ }
+ Frame {
+ msec: 1504
+ hash: "c7283df8dbd78121e17a5893e3ea4f3c"
+ }
+ Frame {
+ msec: 1520
+ hash: "fea768e5bb43f6d86d88ced9f73915de"
+ }
+ Frame {
+ msec: 1536
+ hash: "b99b54f8e75452c539bb4e7b6a36e944"
+ }
+ Frame {
+ msec: 1552
+ hash: "b7274938d16f03b376ad9739e2e893f1"
+ }
+ Frame {
+ msec: 1568
+ hash: "e61601942193add8c1c8ebf5c5319932"
+ }
+ Frame {
+ msec: 1584
+ hash: "8fdc2181e0120391505706716ba7e5d7"
+ }
+ Frame {
+ msec: 1600
+ hash: "66f737ed28453da5175d6b5e807c374d"
+ }
+ Frame {
+ msec: 1616
+ hash: "2e00a7895d61edbe794f0a8000871b30"
+ }
+ Frame {
+ msec: 1632
+ hash: "1a279fc6b7c4105eccc4e3bc99481bef"
+ }
+ Frame {
+ msec: 1648
+ hash: "bc1dea4d23ca9bc29b72a8c2bde4787b"
+ }
+ Frame {
+ msec: 1664
+ hash: "8ef40e0be5fb82b32b365b3d4b85421d"
+ }
+ Frame {
+ msec: 1680
+ hash: "ee37c68bf38d5eed4e3e9a31306f6801"
+ }
+ Frame {
+ msec: 1696
+ hash: "303d760c87a7a833606c8e9f46cb5fc0"
+ }
+ Frame {
+ msec: 1712
+ hash: "cc2563b47c58efd39bec6b4e0f2995bb"
+ }
+ Frame {
+ msec: 1728
+ hash: "33f7daf09497510475283d6dc7c51228"
+ }
+ Frame {
+ msec: 1744
+ hash: "5b5e2de9934c80bd49e0eb7afd85151d"
+ }
+ Frame {
+ msec: 1760
+ hash: "5e6bf706336789ca6b60a82998b70113"
+ }
+ Frame {
+ msec: 1776
+ hash: "b4d4a860f49bfb88dd2079862b40b7ec"
+ }
+ Frame {
+ msec: 1792
+ hash: "07b571fa55327487e34a592c778beb67"
+ }
+ Frame {
+ msec: 1808
+ hash: "cb5b349a536cf75a83734181b3eab92b"
+ }
+ Frame {
+ msec: 1824
+ hash: "ce903bb58c5c86f2955e68412893aedf"
+ }
+ Frame {
+ msec: 1840
+ hash: "ffa89e879558c83ed538812a93e2fe29"
+ }
+ Frame {
+ msec: 1856
+ hash: "562aa66bf537853be82a654542c8b80e"
+ }
+ Frame {
+ msec: 1872
+ hash: "dc45dac0cc20220bcc81210fb5506ee2"
+ }
+ Frame {
+ msec: 1888
+ hash: "3b429eb827df0800a1ad8b906ea32ef9"
+ }
+ Frame {
+ msec: 1904
+ hash: "d6ebaf12515d9e24cdbf6d75080c0b28"
+ }
+ Frame {
+ msec: 1920
+ image: "easefollow.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "9f6d26224055c809dc2f3490cd0ff880"
+ }
+ Frame {
+ msec: 1952
+ hash: "5630cc8f0b401f7d81bdceaaae5cce68"
+ }
+ Frame {
+ msec: 1968
+ hash: "dafda60467e5e2b99c41543dd191ac2d"
+ }
+ Frame {
+ msec: 1984
+ hash: "e053cb07a734278cd111d612883c165e"
+ }
+ Frame {
+ msec: 2000
+ hash: "63870f3e99c11707004dab9439d61389"
+ }
+ Frame {
+ msec: 2016
+ hash: "14c311a6fab45f828c3a19535ea9edc8"
+ }
+ Frame {
+ msec: 2032
+ hash: "13e614446cbfcbfd2a7ecc5f0e8688df"
+ }
+ Frame {
+ msec: 2048
+ hash: "173c97f59da05b9347180a4824e60c06"
+ }
+ Frame {
+ msec: 2064
+ hash: "932e2a9bbcb7dc5befca8f63d8fa3c95"
+ }
+ Frame {
+ msec: 2080
+ hash: "4b8f232ffe0cbc7f900de5737c9f95be"
+ }
+ Frame {
+ msec: 2096
+ hash: "9686d294d4e931a5eed0e6b5bda63377"
+ }
+ Frame {
+ msec: 2112
+ hash: "969c569d92e3ec51dfbdd20d64432224"
+ }
+ Frame {
+ msec: 2128
+ hash: "0cef3550cca9fb5611b836098c517dd1"
+ }
+ Frame {
+ msec: 2144
+ hash: "6728080a09aa5d48462a3abb8e285e8a"
+ }
+ Frame {
+ msec: 2160
+ hash: "4b904dc671b7fc72db0b6e52543e96bd"
+ }
+ Frame {
+ msec: 2176
+ hash: "38232f89dffc9b16db6ea60b02f8d1be"
+ }
+ Frame {
+ msec: 2192
+ hash: "6b41f2a0f950eddad217a03e137f9a9b"
+ }
+ Frame {
+ msec: 2208
+ hash: "be576ea74c2c404da46fcf1d22de6df9"
+ }
+ Frame {
+ msec: 2224
+ hash: "3f44bad4b51ceff2944337064a5efa91"
+ }
+ Frame {
+ msec: 2240
+ hash: "e1ab98ac1366e9fd8af62a6a26878c73"
+ }
+ Frame {
+ msec: 2256
+ hash: "bd131e1725a54b3dbbb86a29ca8a56a9"
+ }
+ Frame {
+ msec: 2272
+ hash: "4d3e8af70f228643803f780c4e36f1a6"
+ }
+ Frame {
+ msec: 2288
+ hash: "853a5ab4271af7a7638454cfa883aa33"
+ }
+ Frame {
+ msec: 2304
+ hash: "ede9260157000f346900153ce2409278"
+ }
+ Frame {
+ msec: 2320
+ hash: "b2b16d8ce1ba89f0d9558ac387e25c3d"
+ }
+ Frame {
+ msec: 2336
+ hash: "387d338910453637c5cf80fa35528e56"
+ }
+ Frame {
+ msec: 2352
+ hash: "26deabf9cdd994455f2a8802eb0e04dc"
+ }
+ Frame {
+ msec: 2368
+ hash: "13939659a315dae1b81e3ea166102edf"
+ }
+ Frame {
+ msec: 2384
+ hash: "be92b55bb7562372401b25a9167abb2b"
+ }
+ Frame {
+ msec: 2400
+ hash: "ee7bf60d7ee97b7de5e909b9af88df80"
+ }
+ Frame {
+ msec: 2416
+ hash: "434313a3bcd1d7582b0d89b9a145ef09"
+ }
+ Frame {
+ msec: 2432
+ hash: "0857ca59a283897e3df62b9633488f83"
+ }
+ Frame {
+ msec: 2448
+ hash: "76718fc7e3d21b54930bc8307a57733a"
+ }
+ Frame {
+ msec: 2464
+ hash: "93a91588b38129053a462b920fd686e3"
+ }
+ Frame {
+ msec: 2480
+ hash: "2a2486c52fde915696fd8cbd3682e8db"
+ }
+ Frame {
+ msec: 2496
+ hash: "b1f4ab6cc5fb4a3a1b4885f2d1b29277"
+ }
+ Frame {
+ msec: 2512
+ hash: "4258afce8a85a2e9ead149e34b43d8fc"
+ }
+ Frame {
+ msec: 2528
+ hash: "6672c71b98e13d51ebb523aed9036a72"
+ }
+ Frame {
+ msec: 2544
+ hash: "eaa39af7eb78948f433e3b44a9454317"
+ }
+ Frame {
+ msec: 2560
+ hash: "0a766bc97bea67d4b848c703eaa6777a"
+ }
+ Frame {
+ msec: 2576
+ hash: "0b461ec1885ede1dd96b71cf38bfd3d6"
+ }
+ Frame {
+ msec: 2592
+ hash: "15efc929370a3864529080e30db1026a"
+ }
+ Frame {
+ msec: 2608
+ hash: "e1529e30ff1e4ea1b092a88e85f2f1f6"
+ }
+ Frame {
+ msec: 2624
+ hash: "f29bd9dbf7317e94b885da63f0cb7374"
+ }
+ Frame {
+ msec: 2640
+ hash: "e5294e087e2ce0d7d936c0129b6c37ae"
+ }
+ Frame {
+ msec: 2656
+ hash: "9c63129e774b391cc398cf5da5c9339c"
+ }
+ Frame {
+ msec: 2672
+ hash: "4371d85854419d4b00671176bb7c5a2b"
+ }
+ Frame {
+ msec: 2688
+ hash: "dd10b3f50e2fdc56c75f00321634b1cc"
+ }
+ Frame {
+ msec: 2704
+ hash: "aac6256b21152a5f1f8c576b667d275e"
+ }
+ Frame {
+ msec: 2720
+ hash: "c937c44037b2228590d334df4d56a86f"
+ }
+ Frame {
+ msec: 2736
+ hash: "f6c714db51cbd1bdb737afe612c33f9c"
+ }
+ Frame {
+ msec: 2752
+ hash: "0bba45af79f3201bc7cf042d5c648f73"
+ }
+ Frame {
+ msec: 2768
+ hash: "941b08ddbafea3bd46262c060b1e290b"
+ }
+ Frame {
+ msec: 2784
+ hash: "d898918dc2023de239b4ab38f7420960"
+ }
+ Frame {
+ msec: 2800
+ hash: "d1a16dc2282329113093d06862e7a871"
+ }
+ Frame {
+ msec: 2816
+ hash: "bba5359475f643fbeee240e71e843d4c"
+ }
+ Frame {
+ msec: 2832
+ hash: "03cf861f4b6bc767e723e47e95c2448b"
+ }
+ Frame {
+ msec: 2848
+ hash: "a64bf158c6199b88bc2db3b741d342f0"
+ }
+ Frame {
+ msec: 2864
+ hash: "cf0fe7cb42ba842f1c28c1211adb768d"
+ }
+ Frame {
+ msec: 2880
+ image: "easefollow.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "9b3c6414e4ef5a452a5c92bb0b893fc3"
+ }
+ Frame {
+ msec: 2912
+ hash: "7cc7ddec3ac2d8cac33c0b0f80a7544d"
+ }
+ Frame {
+ msec: 2928
+ hash: "7dd4e7d606e953c872c57fad786d64aa"
+ }
+ Frame {
+ msec: 2944
+ hash: "117cc903a39d99ca22f6556095e6f883"
+ }
+ Frame {
+ msec: 2960
+ hash: "c6c9304fd65fee1909473bdb21ac7806"
+ }
+ Frame {
+ msec: 2976
+ hash: "8e704fe81c040f49c4d80e7dcc46084d"
+ }
+ Frame {
+ msec: 2992
+ hash: "d202d5c0a058e1e088fdd280e59f17bb"
+ }
+ Frame {
+ msec: 3008
+ hash: "90c072dea32c056f8bd6d010df681929"
+ }
+ Frame {
+ msec: 3024
+ hash: "80b4e99f1b47e64084e295a2a3e1121e"
+ }
+ Frame {
+ msec: 3040
+ hash: "41d6307075ec9ae9e92d227921f71289"
+ }
+ Frame {
+ msec: 3056
+ hash: "f33de23cf4a5c4881310c6866261d387"
+ }
+ Frame {
+ msec: 3072
+ hash: "441faa0a1fc95d66b27479dfc1e40188"
+ }
+ Frame {
+ msec: 3088
+ hash: "2314b5f6ba3864abd5e87bc87bd621b0"
+ }
+ Frame {
+ msec: 3104
+ hash: "e71e3b0ad953258ceef3101e38283fdb"
+ }
+ Frame {
+ msec: 3120
+ hash: "890c3b0e727f136bf1ccc486531c9677"
+ }
+ Frame {
+ msec: 3136
+ hash: "2a0d23e6dcc6475c323dbf8eb36e8094"
+ }
+ Frame {
+ msec: 3152
+ hash: "692682e82347936f87a66484b428e959"
+ }
+ Frame {
+ msec: 3168
+ hash: "cf4005c08789762ad21be1a1d78755c9"
+ }
+ Frame {
+ msec: 3184
+ hash: "566184563091626bb20ae679e3ce3b91"
+ }
+ Frame {
+ msec: 3200
+ hash: "f88a24ad3bbc2699924bb9a7ff6490b3"
+ }
+ Frame {
+ msec: 3216
+ hash: "23f3f63d07b2bdc2b82ff4e8606a634d"
+ }
+ Frame {
+ msec: 3232
+ hash: "fe121c71ce469ec6f0bf957eb2f0447b"
+ }
+ Frame {
+ msec: 3248
+ hash: "ba217690a33c701afe11842aa8105cbb"
+ }
+ Frame {
+ msec: 3264
+ hash: "e5c7c1323108f13ba26f5198cc62c137"
+ }
+ Frame {
+ msec: 3280
+ hash: "664f76d3d0008b56be2790c470befc91"
+ }
+ Frame {
+ msec: 3296
+ hash: "b3f54070ba64b983ccd2a15941ef4c35"
+ }
+ Frame {
+ msec: 3312
+ hash: "8a0ba2ae36ad3811778f3a3bc55743f5"
+ }
+ Frame {
+ msec: 3328
+ hash: "bfdc71733ca45a2ba2e8abf751554a62"
+ }
+ Frame {
+ msec: 3344
+ hash: "686e4d7bb5ae148d37fc2a1f6004a33a"
+ }
+ Frame {
+ msec: 3360
+ hash: "29c553d9fe42fdbbd019d0ead61dffa0"
+ }
+ Frame {
+ msec: 3376
+ hash: "bfa2b72c6554a2ed80a3b86f2cbed986"
+ }
+ Frame {
+ msec: 3392
+ hash: "074ff90417a947f0a04926d5675d073b"
+ }
+ Frame {
+ msec: 3408
+ hash: "6f56f9e0aa40149156ca71d6f8d4476a"
+ }
+ Frame {
+ msec: 3424
+ hash: "950ce749bbf572021de2dd1688cb87e6"
+ }
+ Frame {
+ msec: 3440
+ hash: "2d0903bd71862dc6f28bd702d955ae99"
+ }
+ Frame {
+ msec: 3456
+ hash: "2733adae56728f1b744a4086ecb98052"
+ }
+ Frame {
+ msec: 3472
+ hash: "779859d739e799bba15beeb97d18e682"
+ }
+ Frame {
+ msec: 3488
+ hash: "9074386cfabe136b8839637e5cd58f57"
+ }
+ Frame {
+ msec: 3504
+ hash: "fa5bcbf20c6ad0a218f23d98961229a1"
+ }
+ Frame {
+ msec: 3520
+ hash: "5406c94da1717eaa5eb0010564216059"
+ }
+ Frame {
+ msec: 3536
+ hash: "27d0a3c3a33c04df843bebd72ef79824"
+ }
+ Frame {
+ msec: 3552
+ hash: "270df9c99c2679071b854b3d82337f79"
+ }
+ Frame {
+ msec: 3568
+ hash: "5b3945505443a67e7a91f66fe42b4fe3"
+ }
+ Frame {
+ msec: 3584
+ hash: "9a2f8565c354cb366725368ed323ccf4"
+ }
+ Frame {
+ msec: 3600
+ hash: "6702cb7ccd61c008b511932d7bd5d107"
+ }
+ Frame {
+ msec: 3616
+ hash: "f6b86c3a1cc88357f588b6dae11aae30"
+ }
+ Frame {
+ msec: 3632
+ hash: "b10c23937f420db72af8abaf126f71c2"
+ }
+ Frame {
+ msec: 3648
+ hash: "7d6b0810ffc6e488c8168e19bccb7358"
+ }
+ Frame {
+ msec: 3664
+ hash: "c01ef69ec46391909619434e9d9dd0ce"
+ }
+ Frame {
+ msec: 3680
+ hash: "a046464fccb0c5ba1f63f8b569821a44"
+ }
+ Frame {
+ msec: 3696
+ hash: "8763c526924d882438f9aa9bfb4fe87d"
+ }
+ Frame {
+ msec: 3712
+ hash: "dede7a62d6e5c10e8f30caa075bd8dfd"
+ }
+ Frame {
+ msec: 3728
+ hash: "3b408e5c986f5bb01d8c3949876b792f"
+ }
+ Frame {
+ msec: 3744
+ hash: "0a458f3b17cdd3ea85522779c9346af9"
+ }
+ Frame {
+ msec: 3760
+ hash: "fef521f0301cce90af88d37e6d441ec8"
+ }
+ Frame {
+ msec: 3776
+ hash: "3d083e0822242b3b37c6839ca91a1f68"
+ }
+ Frame {
+ msec: 3792
+ hash: "f8fe013a717e6e61830137bdc78a8b40"
+ }
+ Frame {
+ msec: 3808
+ hash: "0ae80ad65dd194043500fa50b5a547a6"
+ }
+ Frame {
+ msec: 3824
+ hash: "a53c67fa32ef971eaea202fa5d8a6ad6"
+ }
+ Frame {
+ msec: 3840
+ image: "easefollow.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "41f86bbf0658b127f01e8d46d7ec941b"
+ }
+ Frame {
+ msec: 3872
+ hash: "d20f21df127565f9eb87c5d759a638d9"
+ }
+ Frame {
+ msec: 3888
+ hash: "85ff94f03cea3e111807e90d062c1367"
+ }
+ Frame {
+ msec: 3904
+ hash: "aa637850fe5f05a71ac4c7d31dbb36ee"
+ }
+ Frame {
+ msec: 3920
+ hash: "c86a67096c5e62bb73b785cdf6a5b6b1"
+ }
+ Frame {
+ msec: 3936
+ hash: "9d53537f2c50a0016bf7bb522b2ec3d8"
+ }
+ Frame {
+ msec: 3952
+ hash: "b48630c27c27785ddce568a85d4dc58f"
+ }
+ Frame {
+ msec: 3968
+ hash: "01c1bdb6e261cc509f26712b13eeb554"
+ }
+ Frame {
+ msec: 3984
+ hash: "af8a44284695fd999acd5944434f0372"
+ }
+ Frame {
+ msec: 4000
+ hash: "b156d9d6d5163f007ac4a309d8927ae9"
+ }
+ Frame {
+ msec: 4016
+ hash: "2df3715416c3c005f04b66fe1258c0d8"
+ }
+ Frame {
+ msec: 4032
+ hash: "96b4a7c6b8542b50fc345b54d38ec82a"
+ }
+ Frame {
+ msec: 4048
+ hash: "7e62e757fafa06833444c3a7e1d96ce4"
+ }
+ Frame {
+ msec: 4064
+ hash: "5222a8f9366c7d974d0687d05d229069"
+ }
+ Frame {
+ msec: 4080
+ hash: "ec96169f4633c3bddfd582feeb8e9ad4"
+ }
+ Frame {
+ msec: 4096
+ hash: "cb10db893d1e1cb2a370507dc5679985"
+ }
+ Frame {
+ msec: 4112
+ hash: "d7e346c2ac77796bde639bd829b72e85"
+ }
+ Frame {
+ msec: 4128
+ hash: "ba5bea8857e4fb444bedd3873563e7db"
+ }
+ Frame {
+ msec: 4144
+ hash: "05556fba5d1714f70fd6c2bfb43d213b"
+ }
+ Frame {
+ msec: 4160
+ hash: "aeeabf35f9759f045a670a9b9f90dc68"
+ }
+ Frame {
+ msec: 4176
+ hash: "131bd453f4c7726e5fdd546252700e2e"
+ }
+ Frame {
+ msec: 4192
+ hash: "7c5c3b5bb7a4082e6b9b43640e29f4e2"
+ }
+ Frame {
+ msec: 4208
+ hash: "07515e21b7a7895f333e4a8bbd2202eb"
+ }
+ Frame {
+ msec: 4224
+ hash: "6cf136f223ac6edd39ba6ed9b4445884"
+ }
+ Frame {
+ msec: 4240
+ hash: "84264f5745add8a922101735ed8def84"
+ }
+ Frame {
+ msec: 4256
+ hash: "660863d1e4b361f2e5445b417be0d2ad"
+ }
+ Frame {
+ msec: 4272
+ hash: "7ceb86f4b16546370d72164d0ca3147c"
+ }
+ Frame {
+ msec: 4288
+ hash: "a13e97da9722545ad87ac3c5eb92c497"
+ }
+ Frame {
+ msec: 4304
+ hash: "5896b5307cbd609d2062d3607786d40c"
+ }
+ Frame {
+ msec: 4320
+ hash: "c8c511115394116e4544c67f615ea5d5"
+ }
+ Frame {
+ msec: 4336
+ hash: "59ca5fdf12a735e5c292901b54acccb2"
+ }
+ Frame {
+ msec: 4352
+ hash: "155cce2738d34e0eac86f5eb63d638f0"
+ }
+ Frame {
+ msec: 4368
+ hash: "83a840c3ae7dbd9a05c17fdd8be07d7a"
+ }
+ Frame {
+ msec: 4384
+ hash: "800a15de28b14d88f0ad58fc3f4a2520"
+ }
+ Frame {
+ msec: 4400
+ hash: "c8381439a3cd3f9e7f80061023723a6e"
+ }
+ Frame {
+ msec: 4416
+ hash: "e3d63000db4b9458b202dece49d1bdba"
+ }
+ Frame {
+ msec: 4432
+ hash: "c943e56781695798f3c221f8ab09681a"
+ }
+ Frame {
+ msec: 4448
+ hash: "1137ee66d7fbf5a84c33f5ffff15b3dd"
+ }
+ Frame {
+ msec: 4464
+ hash: "5a98013cc4462aad18cad8d941f77aa0"
+ }
+ Frame {
+ msec: 4480
+ hash: "d0b3748fb49a13c0ad9a68b0e2914921"
+ }
+ Frame {
+ msec: 4496
+ hash: "12113f71f9117670acbd7877edded7e0"
+ }
+ Frame {
+ msec: 4512
+ hash: "22983424da08cdae7a9c6a8905b37736"
+ }
+ Frame {
+ msec: 4528
+ hash: "b2db5618a025cefb2650124c81880c49"
+ }
+ Frame {
+ msec: 4544
+ hash: "84fb5e7edc5b42163a83e0cd362b3a46"
+ }
+ Frame {
+ msec: 4560
+ hash: "39d6f1ed0f60a0c366c22e1442c455ac"
+ }
+ Frame {
+ msec: 4576
+ hash: "702367f6e4aaa2a862e57f9e02a08758"
+ }
+ Frame {
+ msec: 4592
+ hash: "ecc75293bc156c560d55cb7d278a4e58"
+ }
+ Frame {
+ msec: 4608
+ hash: "e68af8e97ce65376fd7904e599440c92"
+ }
+ Frame {
+ msec: 4624
+ hash: "75fe9f766d6cf636cd72d8879a461439"
+ }
+ Frame {
+ msec: 4640
+ hash: "162aef147ef4bbb0cd92bd70e4f37f62"
+ }
+ Frame {
+ msec: 4656
+ hash: "d879aae8949976c7bad4d97f1e5b5549"
+ }
+ Frame {
+ msec: 4672
+ hash: "8a983d7228190721f988de2d72cb3aa2"
+ }
+ Frame {
+ msec: 4688
+ hash: "a4f3c63fde664d128cd35b129a4f9a23"
+ }
+ Frame {
+ msec: 4704
+ hash: "115fb5f3c9b7f1c28ab379596faba91c"
+ }
+ Frame {
+ msec: 4720
+ hash: "ea9600c4d6c77a3b32e59401aa84fe96"
+ }
+ Frame {
+ msec: 4736
+ hash: "bd6531fdd9cfd46af2df73bacb31f4c5"
+ }
+ Frame {
+ msec: 4752
+ hash: "33bdcf1df50eab5e7963c649fbd32226"
+ }
+ Frame {
+ msec: 4768
+ hash: "236e88fb72369a55f9eba4b50712ae85"
+ }
+ Frame {
+ msec: 4784
+ hash: "5eb3c14a6296fb3a1c58603b2fc937c8"
+ }
+ Frame {
+ msec: 4800
+ image: "easefollow.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "31d11a1ce6422524241c77603fe53e61"
+ }
+ Frame {
+ msec: 4832
+ hash: "44e8b9947026c10b922c84883dd8e889"
+ }
+ Frame {
+ msec: 4848
+ hash: "d049e4f7c4bc1849398859a4d630c1b3"
+ }
+ Frame {
+ msec: 4864
+ hash: "e83b4757898e4eeef74be8213619fbfa"
+ }
+ Frame {
+ msec: 4880
+ hash: "d08f40615f2d5abc6236e856a67575dd"
+ }
+ Frame {
+ msec: 4896
+ hash: "d9cb26bf1b8bbafb2aed8f74bd454077"
+ }
+ Frame {
+ msec: 4912
+ hash: "aa321b94a6cc53b2ebac80e834c0a908"
+ }
+ Frame {
+ msec: 4928
+ hash: "48da37164be156b67a4b3b14e50f2375"
+ }
+ Frame {
+ msec: 4944
+ hash: "f522ce7728a4a9e7fad86c72f29bd8f9"
+ }
+ Frame {
+ msec: 4960
+ hash: "9bc1d16b4bda596702a3d8a3fad8a5c5"
+ }
+ Frame {
+ msec: 4976
+ hash: "5275dccf18745dec6c59b846de17d9ef"
+ }
+ Frame {
+ msec: 4992
+ hash: "4eb6babc177b96f69b148d52f56d82d7"
+ }
+ Frame {
+ msec: 5008
+ hash: "ccdfb454070ac04c4fe4f3513c52f8c8"
+ }
+ Frame {
+ msec: 5024
+ hash: "07f6adad6e8ff4f0eff92c758636a951"
+ }
+ Frame {
+ msec: 5040
+ hash: "241e0ad9218d49be477509e008e45548"
+ }
+ Frame {
+ msec: 5056
+ hash: "151a482e821779da8a61063f1cc73f8c"
+ }
+ Frame {
+ msec: 5072
+ hash: "1499d207c5a3a9bc7bbb84d9c5e35578"
+ }
+ Frame {
+ msec: 5088
+ hash: "c253753f653157a5058ef071f16b8bbb"
+ }
+ Frame {
+ msec: 5104
+ hash: "ec9fea5a870724a106b952edef7fb466"
+ }
+ Frame {
+ msec: 5120
+ hash: "99b673f8ed049d31a2aecabcc46d841d"
+ }
+ Frame {
+ msec: 5136
+ hash: "61e77fea693ea55aafbdc94c40c3ab33"
+ }
+ Frame {
+ msec: 5152
+ hash: "53e44a3732ee6858d5bd596b4c5d5305"
+ }
+ Frame {
+ msec: 5168
+ hash: "5b25d3894a56dc4f4a0aa8f88cb69e23"
+ }
+ Frame {
+ msec: 5184
+ hash: "5683ad02f1b9126f4e4ff6b03044fdc6"
+ }
+ Frame {
+ msec: 5200
+ hash: "0a3ec255575ec1b70e0b10cf59c7c5fd"
+ }
+ Frame {
+ msec: 5216
+ hash: "0f5f46fe3fdf42d4651891f13c8afc7e"
+ }
+ Frame {
+ msec: 5232
+ hash: "b6955407245c73e356a460d99dad77be"
+ }
+ Frame {
+ msec: 5248
+ hash: "6018b53414921943b37c33fa04a29697"
+ }
+ Frame {
+ msec: 5264
+ hash: "ff184d349ce0b648f8c1fce91ae997f6"
+ }
+ Frame {
+ msec: 5280
+ hash: "9c112a3a785d970593887eeab72fa7fe"
+ }
+ Frame {
+ msec: 5296
+ hash: "00384fb20d4c6cd6236d519d2d734cc3"
+ }
+ Frame {
+ msec: 5312
+ hash: "601ea99400e5f50ee9a5a4b74b6f3017"
+ }
+ Frame {
+ msec: 5328
+ hash: "9afed04bf7eca24d9b6d31ac84ae59c2"
+ }
+ Frame {
+ msec: 5344
+ hash: "1983319c8043bfe403513af7ccb5b924"
+ }
+ Frame {
+ msec: 5360
+ hash: "b0244e4e1b61202ede78405415c22bca"
+ }
+ Frame {
+ msec: 5376
+ hash: "ec5516b1aaeace8784b04649c51ab40b"
+ }
+ Frame {
+ msec: 5392
+ hash: "8ff7d2001594abb588f769bab15406d7"
+ }
+ Frame {
+ msec: 5408
+ hash: "64d5fd96a1726aa5276f9b508566676f"
+ }
+ Frame {
+ msec: 5424
+ hash: "ab49497a6c825038354f076bdbbbc235"
+ }
+ Frame {
+ msec: 5440
+ hash: "6b821e43be932800b20af58a7b5a1ff7"
+ }
+ Frame {
+ msec: 5456
+ hash: "683a2902300f930e2a81a82dc37c583b"
+ }
+ Frame {
+ msec: 5472
+ hash: "86d7946d7fbb66369ccbf26430939225"
+ }
+ Frame {
+ msec: 5488
+ hash: "fb38f5fb6555fc14e95a47c595a6ea0c"
+ }
+ Frame {
+ msec: 5504
+ hash: "3878f685d9fa3299e9ffe78c22595387"
+ }
+ Frame {
+ msec: 5520
+ hash: "b48840a68ff007901b02332c7177f315"
+ }
+ Frame {
+ msec: 5536
+ hash: "9d847abc99220b04aceef12e5c09aac0"
+ }
+ Frame {
+ msec: 5552
+ hash: "9893ac89fda64d96ec4140c3c87e17a5"
+ }
+ Frame {
+ msec: 5568
+ hash: "cd94e1c36e6be9877cd9c12df42bd968"
+ }
+ Frame {
+ msec: 5584
+ hash: "c1ce5e53b74af022dc103ad74ff5f1af"
+ }
+ Frame {
+ msec: 5600
+ hash: "b3630e08eac02a9578a00b01baabaaba"
+ }
+ Frame {
+ msec: 5616
+ hash: "0eb9241aa1f9526c1e24ba76d630805c"
+ }
+ Frame {
+ msec: 5632
+ hash: "1b532ae7f9253469467522d4ca66c47b"
+ }
+ Frame {
+ msec: 5648
+ hash: "7e6e49079ed6330da2e337a5e4ffd730"
+ }
+ Frame {
+ msec: 5664
+ hash: "0391d668f4b906b244a5f5c1713573c2"
+ }
+ Frame {
+ msec: 5680
+ hash: "8070fa3280d0d64bf976d4a276359c4c"
+ }
+ Frame {
+ msec: 5696
+ hash: "f7d0d36a2d40c798f56ac7ecc1effca6"
+ }
+ Frame {
+ msec: 5712
+ hash: "9f8e35ee5080e811c670c480a9c2bd9f"
+ }
+ Frame {
+ msec: 5728
+ hash: "c7fea75a43a59a11aa504df32afcdaf8"
+ }
+ Frame {
+ msec: 5744
+ hash: "7e549a93ffc6ddcc3d8111f10c05b29e"
+ }
+ Frame {
+ msec: 5760
+ image: "easefollow.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "92d298262f610a2dafa095e3d67c80af"
+ }
+ Frame {
+ msec: 5792
+ hash: "db8826b0b2feece0999863b8827a6234"
+ }
+ Frame {
+ msec: 5808
+ hash: "12c7050e8094bb39212aed0163666d1a"
+ }
+ Frame {
+ msec: 5824
+ hash: "69531beace5c749bf90160a4b25f736a"
+ }
+ Frame {
+ msec: 5840
+ hash: "ce873e4dbc8853183b54d59991b2e030"
+ }
+ Frame {
+ msec: 5856
+ hash: "fa1078973634578d69527402b11fb7e0"
+ }
+ Frame {
+ msec: 5872
+ hash: "1e3b3db590567c0afd1913101192cda9"
+ }
+ Frame {
+ msec: 5888
+ hash: "7b9e097018278b784973a546da3d401a"
+ }
+ Frame {
+ msec: 5904
+ hash: "a7b0667093888480de6697280aeea9ba"
+ }
+ Frame {
+ msec: 5920
+ hash: "e381f2422ead86575abf643b0b0c9797"
+ }
+ Frame {
+ msec: 5936
+ hash: "44b08f5a0de2a6955e02f67753f409c8"
+ }
+ Frame {
+ msec: 5952
+ hash: "db04665e58448ecc7f95baa3e4ea79a5"
+ }
+ Frame {
+ msec: 5968
+ hash: "0e4aae728d8d543538a9446c41e18e91"
+ }
+ Frame {
+ msec: 5984
+ hash: "e3cd1bbb1d9963e5c74d36e526a871b0"
+ }
+ Frame {
+ msec: 6000
+ hash: "bcd893a0e200ddda4e1468c159018865"
+ }
+ Frame {
+ msec: 6016
+ hash: "9c5293356aa6312f909e655e9bcf961b"
+ }
+ Frame {
+ msec: 6032
+ hash: "0bab7b9166f6af554d4fa0badeec739e"
+ }
+ Frame {
+ msec: 6048
+ hash: "e74996581f0aaeced118c5cbfd977d90"
+ }
+ Frame {
+ msec: 6064
+ hash: "5d128eb20a2a23da8c2d9a35293e5769"
+ }
+ Frame {
+ msec: 6080
+ hash: "ebbbc343698287faf7ffa7526a726b54"
+ }
+ Frame {
+ msec: 6096
+ hash: "d812172192cc19590f9a2d7dbf970439"
+ }
+ Frame {
+ msec: 6112
+ hash: "60263addb1b4b5ac43f8199b8ed77e40"
+ }
+ Frame {
+ msec: 6128
+ hash: "702a1ff2876eaaa59359811bb6437c5b"
+ }
+ Frame {
+ msec: 6144
+ hash: "8f81dc43decce5094ee7a089f0009730"
+ }
+ Frame {
+ msec: 6160
+ hash: "efda5dd9edd83a0da089d0b28806c6b6"
+ }
+ Frame {
+ msec: 6176
+ hash: "7274a33a7a5272d7abdaf41f4b2bf664"
+ }
+ Frame {
+ msec: 6192
+ hash: "0cc80077476e721a3da85c17cc56a65e"
+ }
+ Frame {
+ msec: 6208
+ hash: "e65a534f0e7e70520a9c2cfa09ee8159"
+ }
+ Frame {
+ msec: 6224
+ hash: "b05b514c63bd8998785382e6a9cbd849"
+ }
+ Frame {
+ msec: 6240
+ hash: "10a04d641e0cc65c120d8bcf2f3e54c8"
+ }
+ Frame {
+ msec: 6256
+ hash: "68418e2206a496dd15a05b50fec6f87e"
+ }
+ Frame {
+ msec: 6272
+ hash: "6549e0989e1c86e3a7eb0dcc8dd31380"
+ }
+ Frame {
+ msec: 6288
+ hash: "bd0193c2cbc8958f674f4ec52a693b72"
+ }
+ Frame {
+ msec: 6304
+ hash: "746440b45a3688dbd32b34c57454e956"
+ }
+ Frame {
+ msec: 6320
+ hash: "6b54ee8af30be2178e8b3afab5dcb4c7"
+ }
+ Frame {
+ msec: 6336
+ hash: "ba2fbad3fe2fe25ec0c0c542659168dc"
+ }
+ Frame {
+ msec: 6352
+ hash: "84bd72703bd8200f8f090783d06ae451"
+ }
+ Frame {
+ msec: 6368
+ hash: "17c9fb063280c2ee4cb4a13273bbb199"
+ }
+ Frame {
+ msec: 6384
+ hash: "df28fd55719f5c2d164596d02c2faff2"
+ }
+ Frame {
+ msec: 6400
+ hash: "c2e280e78e892200d40022d17ce695b7"
+ }
+ Frame {
+ msec: 6416
+ hash: "c657caa0c5158e178ec5df80bbad6bcb"
+ }
+ Frame {
+ msec: 6432
+ hash: "d91f4f6ec6503fe8280f9b02dd11e64a"
+ }
+ Frame {
+ msec: 6448
+ hash: "0fb9400cdca9dbd4035fbf8af9952360"
+ }
+ Frame {
+ msec: 6464
+ hash: "cac0e1b4aa094306b95f90ede4705391"
+ }
+ Frame {
+ msec: 6480
+ hash: "e60a4bb14300a937a767effee931c60f"
+ }
+ Frame {
+ msec: 6496
+ hash: "8b461397e3f210ee7e9305dcab2af2db"
+ }
+ Frame {
+ msec: 6512
+ hash: "6ce9ec0942dd06c9f73929a7e176852c"
+ }
+ Frame {
+ msec: 6528
+ hash: "da36e254635eea854a6552ba008117f9"
+ }
+ Frame {
+ msec: 6544
+ hash: "0bec6402b5eb09d05ce8e9ff5253ea8d"
+ }
+ Frame {
+ msec: 6560
+ hash: "72f6610527d395ca590eda166ef6bc4e"
+ }
+ Frame {
+ msec: 6576
+ hash: "622ae3fd47adb2432e2a40d3c5539393"
+ }
+ Frame {
+ msec: 6592
+ hash: "0b18c49e2bbf9370216e06b555faf183"
+ }
+ Frame {
+ msec: 6608
+ hash: "0c090bb975fb883301b52479fd6f5fdf"
+ }
+ Frame {
+ msec: 6624
+ hash: "c4205d7ecb7327426d9591e77247acab"
+ }
+ Frame {
+ msec: 6640
+ hash: "f0e0075243e4b8aa97056248fe6033ed"
+ }
+ Frame {
+ msec: 6656
+ hash: "47f99b40a8764ee9d9e429061fb7acb2"
+ }
+ Frame {
+ msec: 6672
+ hash: "49e8c1e974b0716570d85109b53817a5"
+ }
+ Frame {
+ msec: 6688
+ hash: "72f981bad831b6ed858009527902f734"
+ }
+ Frame {
+ msec: 6704
+ hash: "e959a0493b06369a429f90f66cb65977"
+ }
+ Frame {
+ msec: 6720
+ image: "easefollow.6.png"
+ }
+ Frame {
+ msec: 6736
+ hash: "93470d983282f24425558f47ad705154"
+ }
+ Frame {
+ msec: 6752
+ hash: "cdccbe1a7c7abd4a6a6ee754ed0c9759"
+ }
+ Frame {
+ msec: 6768
+ hash: "0e1b7b5332a9fcdb492db5314a2a0267"
+ }
+ Frame {
+ msec: 6784
+ hash: "1e1ffe3439aab51d0b325474e7d8dc28"
+ }
+ Frame {
+ msec: 6800
+ hash: "e8e7e9b5871caf77f15678616d6c9c8a"
+ }
+ Frame {
+ msec: 6816
+ hash: "9771fff3b7752154d093c038bea73d28"
+ }
+ Frame {
+ msec: 6832
+ hash: "1af851ea214cbddb0e3a743084a5cf6b"
+ }
+ Frame {
+ msec: 6848
+ hash: "1566182a7e29bbb738705a90c4909617"
+ }
+ Frame {
+ msec: 6864
+ hash: "feed650e1d948fe622234d212fb745f2"
+ }
+ Frame {
+ msec: 6880
+ hash: "3cd3d063275b91f9680717421c118ba4"
+ }
+ Frame {
+ msec: 6896
+ hash: "c1f088801334762cd499e7cc70e1e59a"
+ }
+ Frame {
+ msec: 6912
+ hash: "e8f8d153e7a027a5092a9209411d97f7"
+ }
+ Frame {
+ msec: 6928
+ hash: "f11747c3533b4b2fc77a64ca0cace8b0"
+ }
+ Frame {
+ msec: 6944
+ hash: "21618c67a2a8bbce86fc872060ad40e8"
+ }
+ Frame {
+ msec: 6960
+ hash: "02da96335db74b87ceefe91b1dfe72e6"
+ }
+ Frame {
+ msec: 6976
+ hash: "2b2e4143143ead8dea5865fd782f1775"
+ }
+ Frame {
+ msec: 6992
+ hash: "13e710900b05e26cdb030b1e2b2be715"
+ }
+ Frame {
+ msec: 7008
+ hash: "29e8995d17aac4d02034debcbb9fcb98"
+ }
+ Frame {
+ msec: 7024
+ hash: "1099db1b3e4c69e84c6ab1b7c311bf1e"
+ }
+ Frame {
+ msec: 7040
+ hash: "cc7cb720043334f1eeb385dce4389dc2"
+ }
+ Frame {
+ msec: 7056
+ hash: "34c7a62c1bc7261e2fd31c40068b37a7"
+ }
+ Frame {
+ msec: 7072
+ hash: "7fafbe05cbcaa21893e3aa0f1fcfb5a0"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 7088
+ hash: "5b26c8cf047706633795a8ed3e703a89"
+ }
+ Frame {
+ msec: 7104
+ hash: "e0774bf9e74d0cde81c5cb216a9258fc"
+ }
+ Frame {
+ msec: 7120
+ hash: "0870262f643245e13f4fba79fd575897"
+ }
+ Frame {
+ msec: 7136
+ hash: "8faf0d050bb435ade8af5012c1a6b0dc"
+ }
+ Frame {
+ msec: 7152
+ hash: "382c037895cc39a6870db57b5016c01f"
+ }
+ Frame {
+ msec: 7168
+ hash: "f1f5a2cbc103ab1bee9f537fa8266e03"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmleasefollow/easefollow.qml b/tests/auto/declarative/visual/qmleasefollow/easefollow.qml
new file mode 100644
index 0000000..bd3270f
--- /dev/null
+++ b/tests/auto/declarative/visual/qmleasefollow/easefollow.qml
@@ -0,0 +1,40 @@
+import Qt 4.6
+
+Rectangle {
+ width: 800; height: 240; color: "gray"
+
+ Rectangle {
+ id: rect
+ width: 50; height: 20; y: 30; color: "black"
+ x: SequentialAnimation {
+ repeat: true
+ NumberAnimation { from: 50; to: 700; duration: 2000 }
+ NumberAnimation { from: 700; to: 50; duration: 2000 }
+ }
+ }
+
+ Rectangle {
+ width: 50; height: 20; y: 60; color: "red"
+ x: EaseFollow { source: rect.x; velocity: 400 }
+ }
+
+ Rectangle {
+ width: 50; height: 20; y: 90; color: "yellow"
+ x: EaseFollow { source: rect.x; velocity: 300; reversingMode: EaseFollow.Immediate }
+ }
+
+ Rectangle {
+ width: 50; height: 20; y: 120; color: "green"
+ x: EaseFollow { source: rect.x; reversingMode: EaseFollow.Sync }
+ }
+
+ Rectangle {
+ width: 50; height: 20; y: 150; color: "purple"
+ x: EaseFollow { source: rect.x; maximumEasingTime: 200 }
+ }
+
+ Rectangle {
+ width: 50; height: 20; y: 180; color: "blue"
+ x: EaseFollow { source: rect.x; duration: 300 }
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/animated-smooth.qml b/tests/auto/declarative/visual/qmlgraphicsborderimage/animated-smooth.qml
new file mode 100644
index 0000000..0ceaf49
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/animated-smooth.qml
@@ -0,0 +1,55 @@
+import Qt 4.6
+import "content"
+
+Rectangle {
+ id: page
+ color: "white"
+ width: 1030; height: 540
+
+ MyBorderImage {
+ x: 20; y: 20; minWidth: 120; maxWidth: 240
+ minHeight: 120; maxHeight: 240
+ source: "content/colors.png"; margin: 30; antialiased: true
+ }
+ MyBorderImage {
+ x: 270; y: 20; minWidth: 120; maxWidth: 240
+ minHeight: 120; maxHeight: 240; antialiased: true
+ source: "content/colors.png"; margin: 30
+ horizontalMode: BorderImage.Repeat; verticalMode: BorderImage.Repeat
+ }
+ MyBorderImage {
+ x: 520; y: 20; minWidth: 120; maxWidth: 240
+ minHeight: 120; maxHeight: 240; antialiased: true
+ source: "content/colors.png"; margin: 30
+ horizontalMode: BorderImage.Stretch; verticalMode: BorderImage.Repeat
+ }
+ MyBorderImage {
+ x: 770; y: 20; minWidth: 120; maxWidth: 240
+ minHeight: 120; maxHeight: 240; antialiased: true
+ source: "content/colors.png"; margin: 30
+ horizontalMode: BorderImage.Round; verticalMode: BorderImage.Round
+ }
+ MyBorderImage {
+ x: 20; y: 280; minWidth: 60; maxWidth: 200
+ minHeight: 40; maxHeight: 200; antialiased: true
+ source: "content/bw.png"; margin: 10
+ }
+ MyBorderImage {
+ x: 270; y: 280; minWidth: 60; maxWidth: 200
+ minHeight: 40; maxHeight: 200; antialiased: true
+ source: "content/bw.png"; margin: 10
+ horizontalMode: BorderImage.Repeat; verticalMode: BorderImage.Repeat
+ }
+ MyBorderImage {
+ x: 520; y: 280; minWidth: 60; maxWidth: 200
+ minHeight: 40; maxHeight: 200; antialiased: true
+ source: "content/bw.png"; margin: 10
+ horizontalMode: BorderImage.Stretch; verticalMode: BorderImage.Repeat
+ }
+ MyBorderImage {
+ x: 770; y: 280; minWidth: 60; maxWidth: 200
+ minHeight: 40; maxHeight: 200; antialiased: true
+ source: "content/bw.png"; margin: 10
+ horizontalMode: BorderImage.Round; verticalMode: BorderImage.Round
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/animated.qml b/tests/auto/declarative/visual/qmlgraphicsborderimage/animated.qml
new file mode 100644
index 0000000..29c02b3
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/animated.qml
@@ -0,0 +1,55 @@
+import Qt 4.6
+import "content"
+
+Rectangle {
+ id: page
+ color: "white"
+ width: 1030; height: 540
+
+ MyBorderImage {
+ x: 20; y: 20; minWidth: 120; maxWidth: 240
+ minHeight: 120; maxHeight: 240
+ source: "content/colors.png"; margin: 30
+ }
+ MyBorderImage {
+ x: 270; y: 20; minWidth: 120; maxWidth: 240
+ minHeight: 120; maxHeight: 240
+ source: "content/colors.png"; margin: 30
+ horizontalMode: BorderImage.Repeat; verticalMode: BorderImage.Repeat
+ }
+ MyBorderImage {
+ x: 520; y: 20; minWidth: 120; maxWidth: 240
+ minHeight: 120; maxHeight: 240
+ source: "content/colors.png"; margin: 30
+ horizontalMode: BorderImage.Stretch; verticalMode: BorderImage.Repeat
+ }
+ MyBorderImage {
+ x: 770; y: 20; minWidth: 120; maxWidth: 240
+ minHeight: 120; maxHeight: 240
+ source: "content/colors.png"; margin: 30
+ horizontalMode: BorderImage.Round; verticalMode: BorderImage.Round
+ }
+ MyBorderImage {
+ x: 20; y: 280; minWidth: 60; maxWidth: 200
+ minHeight: 40; maxHeight: 200
+ source: "content/bw.png"; margin: 10
+ }
+ MyBorderImage {
+ x: 270; y: 280; minWidth: 60; maxWidth: 200
+ minHeight: 40; maxHeight: 200
+ source: "content/bw.png"; margin: 10
+ horizontalMode: BorderImage.Repeat; verticalMode: BorderImage.Repeat
+ }
+ MyBorderImage {
+ x: 520; y: 280; minWidth: 60; maxWidth: 200
+ minHeight: 40; maxHeight: 200
+ source: "content/bw.png"; margin: 10
+ horizontalMode: BorderImage.Stretch; verticalMode: BorderImage.Repeat
+ }
+ MyBorderImage {
+ x: 770; y: 280; minWidth: 60; maxWidth: 200
+ minHeight: 40; maxHeight: 200
+ source: "content/bw.png"; margin: 10
+ horizontalMode: BorderImage.Round; verticalMode: BorderImage.Round
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/borders.qml b/tests/auto/declarative/visual/qmlgraphicsborderimage/borders.qml
new file mode 100644
index 0000000..9879416
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/borders.qml
@@ -0,0 +1,18 @@
+import Qt 4.6
+
+Rectangle {
+ id: page
+ color: "white"
+ width: 520; height: 280
+
+ BorderImage {
+ x: 20; y: 20; width: 230; height: 240
+ smooth: true
+ source: "content/colors-stretch.sci"
+ }
+ BorderImage {
+ x: 270; y: 20; width: 230; height: 240
+ smooth: true
+ source: "content/colors-round.sci"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/content/MyBorderImage.qml b/tests/auto/declarative/visual/qmlgraphicsborderimage/content/MyBorderImage.qml
new file mode 100644
index 0000000..eb1ec00
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/content/MyBorderImage.qml
@@ -0,0 +1,38 @@
+import Qt 4.6
+
+Item {
+ property alias horizontalMode: image.horizontalTileMode
+ property alias verticalMode: image.verticalTileMode
+ property alias source: image.source
+ property alias antialiased: image.smooth
+
+ property int minWidth
+ property int minHeight
+ property int maxWidth
+ property int maxHeight
+ property int margin
+
+ id: container
+ width: 240; height: 240
+
+ BorderImage {
+ id: image; x: container.width / 2 - width / 2; y: container.height / 2 - height / 2
+
+ width: SequentialAnimation {
+ repeat: true
+ NumberAnimation { from: container.minWidth; to: container.maxWidth; duration: 2000; easing: "easeInOutQuad"}
+ NumberAnimation { from: container.maxWidth; to: container.minWidth; duration: 2000; easing: "easeInOutQuad" }
+ }
+
+ height: SequentialAnimation {
+ repeat: true
+ NumberAnimation { from: container.minHeight; to: container.maxHeight; duration: 2000; easing: "easeInOutQuad"}
+ NumberAnimation { from: container.maxHeight; to: container.minHeight; duration: 2000; easing: "easeInOutQuad" }
+ }
+
+ border.top: container.margin
+ border.left: container.margin
+ border.bottom: container.margin
+ border.right: container.margin
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/content/bw.png b/tests/auto/declarative/visual/qmlgraphicsborderimage/content/bw.png
new file mode 100644
index 0000000..486eaae
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/content/bw.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/content/colors-round.sci b/tests/auto/declarative/visual/qmlgraphicsborderimage/content/colors-round.sci
new file mode 100644
index 0000000..506f6f5
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/content/colors-round.sci
@@ -0,0 +1,7 @@
+border.left:30
+border.top:30
+border.right:30
+border.bottom:30
+horizontalTileRule:Round
+verticalTileRule:Round
+source:colors.png
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/content/colors-stretch.sci b/tests/auto/declarative/visual/qmlgraphicsborderimage/content/colors-stretch.sci
new file mode 100644
index 0000000..e4989a7
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/content/colors-stretch.sci
@@ -0,0 +1,5 @@
+border.left:30
+border.top:30
+border.right:30
+border.bottom:30
+source:colors.png
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/content/colors.png b/tests/auto/declarative/visual/qmlgraphicsborderimage/content/colors.png
new file mode 100644
index 0000000..dfb62f3
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/content/colors.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.0.png b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.0.png
new file mode 100644
index 0000000..9a6b079
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.1.png b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.1.png
new file mode 100644
index 0000000..1f960e5
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.2.png b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.2.png
new file mode 100644
index 0000000..85a2729
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.3.png b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.3.png
new file mode 100644
index 0000000..de6ff7c
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.4.png b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.4.png
new file mode 100644
index 0000000..fe7d3dd
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.5.png b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.5.png
new file mode 100644
index 0000000..e73bef5
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.6.png b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.6.png
new file mode 100644
index 0000000..0c75422
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.qml b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.qml
new file mode 100644
index 0000000..043f5e2
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated-smooth.qml
@@ -0,0 +1,1823 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 32
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 48
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 64
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 80
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 96
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 112
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 128
+ hash: "cd2180be80101c2aa4350b51b7a6f502"
+ }
+ Frame {
+ msec: 144
+ hash: "de471829f8ad3b43bf1b4df9d1d65a4d"
+ }
+ Frame {
+ msec: 160
+ hash: "ed9f2ca797894612600bc4b7fbaecb84"
+ }
+ Frame {
+ msec: 176
+ hash: "59470d71fa4426d0283e86371f2bfc2a"
+ }
+ Frame {
+ msec: 192
+ hash: "9a2f92efb51bcc6293d6a8e82d5314ea"
+ }
+ Frame {
+ msec: 208
+ hash: "7b66e21652a7d0982226e281a48411a9"
+ }
+ Frame {
+ msec: 224
+ hash: "a716c8d2c94433dee719f92f0822c8ec"
+ }
+ Frame {
+ msec: 240
+ hash: "f22a47b846cfee96ebdf39bbce2e6d51"
+ }
+ Frame {
+ msec: 256
+ hash: "5a8932d13d624932a65694fd19ec05cd"
+ }
+ Frame {
+ msec: 272
+ hash: "48e62dd171f5da82b5aa26c765e4042c"
+ }
+ Frame {
+ msec: 288
+ hash: "63d3c47f7dec1236440a05e0a8380900"
+ }
+ Frame {
+ msec: 304
+ hash: "323af110731b7af0c30f8862ff59b833"
+ }
+ Frame {
+ msec: 320
+ hash: "83c029e328e80af83158c37089cf0ece"
+ }
+ Frame {
+ msec: 336
+ hash: "3f9a09ae19be34348bb2552915360cf7"
+ }
+ Frame {
+ msec: 352
+ hash: "df624d70cae1bcefda8d69c0ff055d83"
+ }
+ Frame {
+ msec: 368
+ hash: "d671a3b971468e1d8aa30ab655e020a9"
+ }
+ Frame {
+ msec: 384
+ hash: "74c837b29f7f05b615123f0e608b523f"
+ }
+ Frame {
+ msec: 400
+ hash: "277ef98ea859fb7685fe6cd44a538a7d"
+ }
+ Frame {
+ msec: 416
+ hash: "0a8da7a3f57c3e06e4be5ea1d8a83ae9"
+ }
+ Frame {
+ msec: 432
+ hash: "456be9c208d690c479ba12bf6325dde0"
+ }
+ Frame {
+ msec: 448
+ hash: "10307beea6d99ab0ff5863f8e35555ed"
+ }
+ Frame {
+ msec: 464
+ hash: "170a1d5fe3422cf5223a78015a6a45fd"
+ }
+ Frame {
+ msec: 480
+ hash: "64ecb03aa538e74d0b99c6dec7751401"
+ }
+ Frame {
+ msec: 496
+ hash: "f3a7e74a1839f9366f9eeec4d2b80d1e"
+ }
+ Frame {
+ msec: 512
+ hash: "37c3f25e5cfdb48d7e3ab0cf8ffb9154"
+ }
+ Frame {
+ msec: 528
+ hash: "0af81ee0d76ff8335a0e347dc086ca37"
+ }
+ Frame {
+ msec: 544
+ hash: "061406edcbd2d4930ab89c3fcab63c7f"
+ }
+ Frame {
+ msec: 560
+ hash: "31d65134f340d82dd40f2401bda3fb7e"
+ }
+ Frame {
+ msec: 576
+ hash: "16c16c77c65b36d1e0954d5ead2642be"
+ }
+ Frame {
+ msec: 592
+ hash: "61c16009b65a55bffb63e27727e1615e"
+ }
+ Frame {
+ msec: 608
+ hash: "e1474c2cdd8768ca1ef45bf3bc5234ca"
+ }
+ Frame {
+ msec: 624
+ hash: "89c159ef00d273ecfe61332e1bf7244d"
+ }
+ Frame {
+ msec: 640
+ hash: "f4d0d3bca25e67908b38910f47b4757e"
+ }
+ Frame {
+ msec: 656
+ hash: "0e0c40f8e11a7bd499c80562ac6f8a82"
+ }
+ Frame {
+ msec: 672
+ hash: "4310a4c3037d845f088f21ad608f366a"
+ }
+ Frame {
+ msec: 688
+ hash: "3d518cd0348d6202243364af1dd6ce89"
+ }
+ Frame {
+ msec: 704
+ hash: "41987e6b4248d7944c0dbc6eb3862023"
+ }
+ Frame {
+ msec: 720
+ hash: "3e81338d38723d56f2d6c428271f81c1"
+ }
+ Frame {
+ msec: 736
+ hash: "902683d72f789399e9d99d1cea1bf177"
+ }
+ Frame {
+ msec: 752
+ hash: "efc119983701908a904deb24108c59cb"
+ }
+ Frame {
+ msec: 768
+ hash: "3a77785cfd7755f567619d8e04583f6a"
+ }
+ Frame {
+ msec: 784
+ hash: "fd85d1dd931033973283a408b5e328a8"
+ }
+ Frame {
+ msec: 800
+ hash: "5d3e85acabe5e5ff802eb7731676274f"
+ }
+ Frame {
+ msec: 816
+ hash: "ae12f1f37a746e16b06e6b869c89fac1"
+ }
+ Frame {
+ msec: 832
+ hash: "a15f19f374bbfb6a922b69d080a91eaa"
+ }
+ Frame {
+ msec: 848
+ hash: "84ef6dda8318b623832f58c46d762e89"
+ }
+ Frame {
+ msec: 864
+ hash: "b699285764f5e8866a9996f4a0dccc69"
+ }
+ Frame {
+ msec: 880
+ hash: "ddd8a006ef048c8d929144aa9fcd7c5a"
+ }
+ Frame {
+ msec: 896
+ hash: "177666cb3bb784c83196886b2c6cf6b6"
+ }
+ Frame {
+ msec: 912
+ hash: "9cd29b4b023a8b92573575fb3c3dda83"
+ }
+ Frame {
+ msec: 928
+ hash: "adc670a9aa0326744cb23e4f5912e6c7"
+ }
+ Frame {
+ msec: 944
+ hash: "48db9a5e6aad9a9563a3cd35fb7fa9b6"
+ }
+ Frame {
+ msec: 960
+ image: "animated-smooth.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "64b21b89576fdd0083f60a26f57b9c11"
+ }
+ Frame {
+ msec: 992
+ hash: "0d407ee07692d0e5a480a60952807b3c"
+ }
+ Frame {
+ msec: 1008
+ hash: "845170815a87565dc4229792032b3357"
+ }
+ Frame {
+ msec: 1024
+ hash: "8b8120cfc14de03e048632fdea61be21"
+ }
+ Frame {
+ msec: 1040
+ hash: "b0070117f1c24a4da87434725d4bb989"
+ }
+ Frame {
+ msec: 1056
+ hash: "0239d697642ca1d1b1d1daa3ea048e1e"
+ }
+ Frame {
+ msec: 1072
+ hash: "3df54504f8891306fa8f1e9e2075a5e2"
+ }
+ Frame {
+ msec: 1088
+ hash: "853429387cc639496c7338244de7e1b7"
+ }
+ Frame {
+ msec: 1104
+ hash: "bd70500fbdfe5aa2fe4362a97a1dee2d"
+ }
+ Frame {
+ msec: 1120
+ hash: "b375e723b2396b13b8f55cfc0c81c3c3"
+ }
+ Frame {
+ msec: 1136
+ hash: "53f05993ba3b426949badd2e4cd66d84"
+ }
+ Frame {
+ msec: 1152
+ hash: "23291a0239c69ea07db959e709b1ff5f"
+ }
+ Frame {
+ msec: 1168
+ hash: "2192094410e2d7c8d9d4aa5f8deacff5"
+ }
+ Frame {
+ msec: 1184
+ hash: "d6615fc345831a3cc5b9a7196284b632"
+ }
+ Frame {
+ msec: 1200
+ hash: "92176cce4836dcae4dfca94e49b041a8"
+ }
+ Frame {
+ msec: 1216
+ hash: "2a1fcfb753ca237b518da26e67c928e5"
+ }
+ Frame {
+ msec: 1232
+ hash: "42be5d26afb9f066dd27cc9fbaf6ce20"
+ }
+ Frame {
+ msec: 1248
+ hash: "bd045f4532d78bba0ef1b64118fd9f24"
+ }
+ Frame {
+ msec: 1264
+ hash: "7f9999a9c87af43b9703323efab31770"
+ }
+ Frame {
+ msec: 1280
+ hash: "0640fcb0b24d3ba4ab8695f78271a438"
+ }
+ Frame {
+ msec: 1296
+ hash: "7c9a98e2101c33e17c1bd7e6c2d921ff"
+ }
+ Frame {
+ msec: 1312
+ hash: "fce2648975106bc5c0ca9a4530f7f748"
+ }
+ Frame {
+ msec: 1328
+ hash: "39cc17ee2e889f17dd07179fda99e431"
+ }
+ Frame {
+ msec: 1344
+ hash: "39c46d85d20f7ef3eca1d09c7eb6a068"
+ }
+ Frame {
+ msec: 1360
+ hash: "d65d50fbb920e683b041a1c72238225b"
+ }
+ Frame {
+ msec: 1376
+ hash: "49a1df977b0494c7c72ca0b65c394e13"
+ }
+ Frame {
+ msec: 1392
+ hash: "05cbce0eaa80b4610a9067af8c40f819"
+ }
+ Frame {
+ msec: 1408
+ hash: "00ab7798bcd77a99886dff0414f35382"
+ }
+ Frame {
+ msec: 1424
+ hash: "5cc90d798786c270ddd2616512f4459f"
+ }
+ Frame {
+ msec: 1440
+ hash: "e5df07ea21e8e415c3ec82560f2d0f34"
+ }
+ Frame {
+ msec: 1456
+ hash: "ddf1f5c0b97fe4821719ec5bf4bd091b"
+ }
+ Frame {
+ msec: 1472
+ hash: "c61d2aa7f934fb5a9f9f7883e063b51c"
+ }
+ Frame {
+ msec: 1488
+ hash: "29ddde3300d0520a4c01b5536d8b9e7a"
+ }
+ Frame {
+ msec: 1504
+ hash: "2fede2f5d871654f3f8a6e9d890adeac"
+ }
+ Frame {
+ msec: 1520
+ hash: "deed4c06c9b713834490832b88e7acaf"
+ }
+ Frame {
+ msec: 1536
+ hash: "c2edb016cfdd47c192d1c48281ee76ed"
+ }
+ Frame {
+ msec: 1552
+ hash: "a261be47ae89e6b53e6bc1c1197154ae"
+ }
+ Frame {
+ msec: 1568
+ hash: "e860e97ebd73b7d1d5d5d90458b34bfe"
+ }
+ Frame {
+ msec: 1584
+ hash: "a087b532ecb2f28e4ee60819228c2522"
+ }
+ Frame {
+ msec: 1600
+ hash: "64df51b4c1bf744b2aae1c6d908c2cc3"
+ }
+ Frame {
+ msec: 1616
+ hash: "4520003d4b221a3de6834b2729b3026d"
+ }
+ Frame {
+ msec: 1632
+ hash: "d1110817827c318ceb0c112e8c2bfc1d"
+ }
+ Frame {
+ msec: 1648
+ hash: "83d49474db15d5779923972ff5f55917"
+ }
+ Frame {
+ msec: 1664
+ hash: "3bae40654ec551d69e7c8c72f631c7a5"
+ }
+ Frame {
+ msec: 1680
+ hash: "774740a393f3e9b8f12b81cce8da8280"
+ }
+ Frame {
+ msec: 1696
+ hash: "d8e398a1ce9ca45c19951e93bd5c932a"
+ }
+ Frame {
+ msec: 1712
+ hash: "2b7eb8a9fe26b032be8b4b9c00995912"
+ }
+ Frame {
+ msec: 1728
+ hash: "47e920e3884ccf2f0f49e78070af6929"
+ }
+ Frame {
+ msec: 1744
+ hash: "fc913807eb1069d611495fbd5d43ee3d"
+ }
+ Frame {
+ msec: 1760
+ hash: "5d9ee853f083d514fbe51d6953d8e000"
+ }
+ Frame {
+ msec: 1776
+ hash: "5736362b42bc2d801e02edabb983663a"
+ }
+ Frame {
+ msec: 1792
+ hash: "e3a2b5c7247acfc1b30825233fbfd56b"
+ }
+ Frame {
+ msec: 1808
+ hash: "48952ffa5e300778eafa768b9fe7df0c"
+ }
+ Frame {
+ msec: 1824
+ hash: "fe04cae65aeec18697eca4f3f83a40e9"
+ }
+ Frame {
+ msec: 1840
+ hash: "382d454f2366c1fb4ca472faa3bfa5e9"
+ }
+ Frame {
+ msec: 1856
+ hash: "89022a8e2feb3dcb845de69aafc333ad"
+ }
+ Frame {
+ msec: 1872
+ hash: "25506557c853a0020e98cf3992956989"
+ }
+ Frame {
+ msec: 1888
+ hash: "9a64706c52c9e962816953e32950b8ba"
+ }
+ Frame {
+ msec: 1904
+ hash: "3cbfded47413172ada64095e65c55e8a"
+ }
+ Frame {
+ msec: 1920
+ image: "animated-smooth.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "c5e399e29b988148913e62ee208b3326"
+ }
+ Frame {
+ msec: 1952
+ hash: "3991bc7760b7981d80665e3a7654c9f4"
+ }
+ Frame {
+ msec: 1968
+ hash: "05312f9529c94d3331ace7d73c544284"
+ }
+ Frame {
+ msec: 1984
+ hash: "a94de4e90a8f8eb4ec33fe902afd226c"
+ }
+ Frame {
+ msec: 2000
+ hash: "723f87da7e5b002a2e9b0bcbc81f9458"
+ }
+ Frame {
+ msec: 2016
+ hash: "6b8ded0d9386a3fff0601a100c513080"
+ }
+ Frame {
+ msec: 2032
+ hash: "f976cd5046ef5391536859e63db905bd"
+ }
+ Frame {
+ msec: 2048
+ hash: "a94de4e90a8f8eb4ec33fe902afd226c"
+ }
+ Frame {
+ msec: 2064
+ hash: "05312f9529c94d3331ace7d73c544284"
+ }
+ Frame {
+ msec: 2080
+ hash: "b980703c1d0018937e83a8ba8862469e"
+ }
+ Frame {
+ msec: 2096
+ hash: "c5e399e29b988148913e62ee208b3326"
+ }
+ Frame {
+ msec: 2112
+ hash: "3b7b83e97d17440b42e6ef4b962076d8"
+ }
+ Frame {
+ msec: 2128
+ hash: "3cbfded47413172ada64095e65c55e8a"
+ }
+ Frame {
+ msec: 2144
+ hash: "9a64706c52c9e962816953e32950b8ba"
+ }
+ Frame {
+ msec: 2160
+ hash: "25506557c853a0020e98cf3992956989"
+ }
+ Frame {
+ msec: 2176
+ hash: "89022a8e2feb3dcb845de69aafc333ad"
+ }
+ Frame {
+ msec: 2192
+ hash: "382d454f2366c1fb4ca472faa3bfa5e9"
+ }
+ Frame {
+ msec: 2208
+ hash: "fe04cae65aeec18697eca4f3f83a40e9"
+ }
+ Frame {
+ msec: 2224
+ hash: "48952ffa5e300778eafa768b9fe7df0c"
+ }
+ Frame {
+ msec: 2240
+ hash: "e3a2b5c7247acfc1b30825233fbfd56b"
+ }
+ Frame {
+ msec: 2256
+ hash: "5736362b42bc2d801e02edabb983663a"
+ }
+ Frame {
+ msec: 2272
+ hash: "5d9ee853f083d514fbe51d6953d8e000"
+ }
+ Frame {
+ msec: 2288
+ hash: "fe899138116774df4c4441687e3019c5"
+ }
+ Frame {
+ msec: 2304
+ hash: "47e920e3884ccf2f0f49e78070af6929"
+ }
+ Frame {
+ msec: 2320
+ hash: "2b7eb8a9fe26b032be8b4b9c00995912"
+ }
+ Frame {
+ msec: 2336
+ hash: "64cd225202ed6c91b02c368a9160a656"
+ }
+ Frame {
+ msec: 2352
+ hash: "774740a393f3e9b8f12b81cce8da8280"
+ }
+ Frame {
+ msec: 2368
+ hash: "3bae40654ec551d69e7c8c72f631c7a5"
+ }
+ Frame {
+ msec: 2384
+ hash: "83d49474db15d5779923972ff5f55917"
+ }
+ Frame {
+ msec: 2400
+ hash: "d1110817827c318ceb0c112e8c2bfc1d"
+ }
+ Frame {
+ msec: 2416
+ hash: "4520003d4b221a3de6834b2729b3026d"
+ }
+ Frame {
+ msec: 2432
+ hash: "64df51b4c1bf744b2aae1c6d908c2cc3"
+ }
+ Frame {
+ msec: 2448
+ hash: "a087b532ecb2f28e4ee60819228c2522"
+ }
+ Frame {
+ msec: 2464
+ hash: "e860e97ebd73b7d1d5d5d90458b34bfe"
+ }
+ Frame {
+ msec: 2480
+ hash: "a261be47ae89e6b53e6bc1c1197154ae"
+ }
+ Frame {
+ msec: 2496
+ hash: "c2edb016cfdd47c192d1c48281ee76ed"
+ }
+ Frame {
+ msec: 2512
+ hash: "deed4c06c9b713834490832b88e7acaf"
+ }
+ Frame {
+ msec: 2528
+ hash: "2fede2f5d871654f3f8a6e9d890adeac"
+ }
+ Frame {
+ msec: 2544
+ hash: "29ddde3300d0520a4c01b5536d8b9e7a"
+ }
+ Frame {
+ msec: 2560
+ hash: "c61d2aa7f934fb5a9f9f7883e063b51c"
+ }
+ Frame {
+ msec: 2576
+ hash: "ddf1f5c0b97fe4821719ec5bf4bd091b"
+ }
+ Frame {
+ msec: 2592
+ hash: "e5df07ea21e8e415c3ec82560f2d0f34"
+ }
+ Frame {
+ msec: 2608
+ hash: "5cc90d798786c270ddd2616512f4459f"
+ }
+ Frame {
+ msec: 2624
+ hash: "00ab7798bcd77a99886dff0414f35382"
+ }
+ Frame {
+ msec: 2640
+ hash: "05cbce0eaa80b4610a9067af8c40f819"
+ }
+ Frame {
+ msec: 2656
+ hash: "a676f45d946aeb9fa577c0e862735b01"
+ }
+ Frame {
+ msec: 2672
+ hash: "d65d50fbb920e683b041a1c72238225b"
+ }
+ Frame {
+ msec: 2688
+ hash: "39c46d85d20f7ef3eca1d09c7eb6a068"
+ }
+ Frame {
+ msec: 2704
+ hash: "39cc17ee2e889f17dd07179fda99e431"
+ }
+ Frame {
+ msec: 2720
+ hash: "fce2648975106bc5c0ca9a4530f7f748"
+ }
+ Frame {
+ msec: 2736
+ hash: "7c9a98e2101c33e17c1bd7e6c2d921ff"
+ }
+ Frame {
+ msec: 2752
+ hash: "0640fcb0b24d3ba4ab8695f78271a438"
+ }
+ Frame {
+ msec: 2768
+ hash: "2084ccc60ddd493399c128717816d33b"
+ }
+ Frame {
+ msec: 2784
+ hash: "bd045f4532d78bba0ef1b64118fd9f24"
+ }
+ Frame {
+ msec: 2800
+ hash: "42be5d26afb9f066dd27cc9fbaf6ce20"
+ }
+ Frame {
+ msec: 2816
+ hash: "2a1fcfb753ca237b518da26e67c928e5"
+ }
+ Frame {
+ msec: 2832
+ hash: "92176cce4836dcae4dfca94e49b041a8"
+ }
+ Frame {
+ msec: 2848
+ hash: "d6615fc345831a3cc5b9a7196284b632"
+ }
+ Frame {
+ msec: 2864
+ hash: "85ef33fcb3f91e4fc20391bf94455984"
+ }
+ Frame {
+ msec: 2880
+ image: "animated-smooth.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "53f05993ba3b426949badd2e4cd66d84"
+ }
+ Frame {
+ msec: 2912
+ hash: "b375e723b2396b13b8f55cfc0c81c3c3"
+ }
+ Frame {
+ msec: 2928
+ hash: "bd70500fbdfe5aa2fe4362a97a1dee2d"
+ }
+ Frame {
+ msec: 2944
+ hash: "853429387cc639496c7338244de7e1b7"
+ }
+ Frame {
+ msec: 2960
+ hash: "3df54504f8891306fa8f1e9e2075a5e2"
+ }
+ Frame {
+ msec: 2976
+ hash: "0239d697642ca1d1b1d1daa3ea048e1e"
+ }
+ Frame {
+ msec: 2992
+ hash: "b0070117f1c24a4da87434725d4bb989"
+ }
+ Frame {
+ msec: 3008
+ hash: "8b8120cfc14de03e048632fdea61be21"
+ }
+ Frame {
+ msec: 3024
+ hash: "845170815a87565dc4229792032b3357"
+ }
+ Frame {
+ msec: 3040
+ hash: "0d407ee07692d0e5a480a60952807b3c"
+ }
+ Frame {
+ msec: 3056
+ hash: "64b21b89576fdd0083f60a26f57b9c11"
+ }
+ Frame {
+ msec: 3072
+ hash: "d7e96278583f83ab636ed68fa130e4d2"
+ }
+ Frame {
+ msec: 3088
+ hash: "48db9a5e6aad9a9563a3cd35fb7fa9b6"
+ }
+ Frame {
+ msec: 3104
+ hash: "adc670a9aa0326744cb23e4f5912e6c7"
+ }
+ Frame {
+ msec: 3120
+ hash: "9cd29b4b023a8b92573575fb3c3dda83"
+ }
+ Frame {
+ msec: 3136
+ hash: "177666cb3bb784c83196886b2c6cf6b6"
+ }
+ Frame {
+ msec: 3152
+ hash: "ddd8a006ef048c8d929144aa9fcd7c5a"
+ }
+ Frame {
+ msec: 3168
+ hash: "b699285764f5e8866a9996f4a0dccc69"
+ }
+ Frame {
+ msec: 3184
+ hash: "84ef6dda8318b623832f58c46d762e89"
+ }
+ Frame {
+ msec: 3200
+ hash: "a15f19f374bbfb6a922b69d080a91eaa"
+ }
+ Frame {
+ msec: 3216
+ hash: "ae12f1f37a746e16b06e6b869c89fac1"
+ }
+ Frame {
+ msec: 3232
+ hash: "5d3e85acabe5e5ff802eb7731676274f"
+ }
+ Frame {
+ msec: 3248
+ hash: "fd85d1dd931033973283a408b5e328a8"
+ }
+ Frame {
+ msec: 3264
+ hash: "3a77785cfd7755f567619d8e04583f6a"
+ }
+ Frame {
+ msec: 3280
+ hash: "efc119983701908a904deb24108c59cb"
+ }
+ Frame {
+ msec: 3296
+ hash: "902683d72f789399e9d99d1cea1bf177"
+ }
+ Frame {
+ msec: 3312
+ hash: "3e81338d38723d56f2d6c428271f81c1"
+ }
+ Frame {
+ msec: 3328
+ hash: "41987e6b4248d7944c0dbc6eb3862023"
+ }
+ Frame {
+ msec: 3344
+ hash: "3d518cd0348d6202243364af1dd6ce89"
+ }
+ Frame {
+ msec: 3360
+ hash: "4310a4c3037d845f088f21ad608f366a"
+ }
+ Frame {
+ msec: 3376
+ hash: "0e0c40f8e11a7bd499c80562ac6f8a82"
+ }
+ Frame {
+ msec: 3392
+ hash: "f4d0d3bca25e67908b38910f47b4757e"
+ }
+ Frame {
+ msec: 3408
+ hash: "f602e3eda1889d1a7e49560f0dfb5d4c"
+ }
+ Frame {
+ msec: 3424
+ hash: "e1474c2cdd8768ca1ef45bf3bc5234ca"
+ }
+ Frame {
+ msec: 3440
+ hash: "c8312ede0998636a6bd6451d13636577"
+ }
+ Frame {
+ msec: 3456
+ hash: "16c16c77c65b36d1e0954d5ead2642be"
+ }
+ Frame {
+ msec: 3472
+ hash: "31d65134f340d82dd40f2401bda3fb7e"
+ }
+ Frame {
+ msec: 3488
+ hash: "061406edcbd2d4930ab89c3fcab63c7f"
+ }
+ Frame {
+ msec: 3504
+ hash: "0af81ee0d76ff8335a0e347dc086ca37"
+ }
+ Frame {
+ msec: 3520
+ hash: "0f347763f25350ebb62dda1536372b45"
+ }
+ Frame {
+ msec: 3536
+ hash: "f3a7e74a1839f9366f9eeec4d2b80d1e"
+ }
+ Frame {
+ msec: 3552
+ hash: "64ecb03aa538e74d0b99c6dec7751401"
+ }
+ Frame {
+ msec: 3568
+ hash: "170a1d5fe3422cf5223a78015a6a45fd"
+ }
+ Frame {
+ msec: 3584
+ hash: "10307beea6d99ab0ff5863f8e35555ed"
+ }
+ Frame {
+ msec: 3600
+ hash: "456be9c208d690c479ba12bf6325dde0"
+ }
+ Frame {
+ msec: 3616
+ hash: "0a8da7a3f57c3e06e4be5ea1d8a83ae9"
+ }
+ Frame {
+ msec: 3632
+ hash: "277ef98ea859fb7685fe6cd44a538a7d"
+ }
+ Frame {
+ msec: 3648
+ hash: "74c837b29f7f05b615123f0e608b523f"
+ }
+ Frame {
+ msec: 3664
+ hash: "d671a3b971468e1d8aa30ab655e020a9"
+ }
+ Frame {
+ msec: 3680
+ hash: "df624d70cae1bcefda8d69c0ff055d83"
+ }
+ Frame {
+ msec: 3696
+ hash: "3f9a09ae19be34348bb2552915360cf7"
+ }
+ Frame {
+ msec: 3712
+ hash: "83c029e328e80af83158c37089cf0ece"
+ }
+ Frame {
+ msec: 3728
+ hash: "323af110731b7af0c30f8862ff59b833"
+ }
+ Frame {
+ msec: 3744
+ hash: "63d3c47f7dec1236440a05e0a8380900"
+ }
+ Frame {
+ msec: 3760
+ hash: "48e62dd171f5da82b5aa26c765e4042c"
+ }
+ Frame {
+ msec: 3776
+ hash: "5a8932d13d624932a65694fd19ec05cd"
+ }
+ Frame {
+ msec: 3792
+ hash: "8419b295f67cae133760da79dfc26505"
+ }
+ Frame {
+ msec: 3808
+ hash: "a716c8d2c94433dee719f92f0822c8ec"
+ }
+ Frame {
+ msec: 3824
+ hash: "7b66e21652a7d0982226e281a48411a9"
+ }
+ Frame {
+ msec: 3840
+ image: "animated-smooth.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "59470d71fa4426d0283e86371f2bfc2a"
+ }
+ Frame {
+ msec: 3872
+ hash: "d56ba74d38c1889a278929d1c1b7f17a"
+ }
+ Frame {
+ msec: 3888
+ hash: "de471829f8ad3b43bf1b4df9d1d65a4d"
+ }
+ Frame {
+ msec: 3904
+ hash: "cd2180be80101c2aa4350b51b7a6f502"
+ }
+ Frame {
+ msec: 3920
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 3936
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 3952
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 3968
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 3984
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 4000
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 4016
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 4032
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 4048
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 4064
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 4080
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 4096
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 4112
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 4128
+ hash: "cd2180be80101c2aa4350b51b7a6f502"
+ }
+ Frame {
+ msec: 4144
+ hash: "de471829f8ad3b43bf1b4df9d1d65a4d"
+ }
+ Frame {
+ msec: 4160
+ hash: "ed9f2ca797894612600bc4b7fbaecb84"
+ }
+ Frame {
+ msec: 4176
+ hash: "59470d71fa4426d0283e86371f2bfc2a"
+ }
+ Frame {
+ msec: 4192
+ hash: "9a2f92efb51bcc6293d6a8e82d5314ea"
+ }
+ Frame {
+ msec: 4208
+ hash: "7b66e21652a7d0982226e281a48411a9"
+ }
+ Frame {
+ msec: 4224
+ hash: "a716c8d2c94433dee719f92f0822c8ec"
+ }
+ Frame {
+ msec: 4240
+ hash: "f22a47b846cfee96ebdf39bbce2e6d51"
+ }
+ Frame {
+ msec: 4256
+ hash: "5a8932d13d624932a65694fd19ec05cd"
+ }
+ Frame {
+ msec: 4272
+ hash: "48e62dd171f5da82b5aa26c765e4042c"
+ }
+ Frame {
+ msec: 4288
+ hash: "63d3c47f7dec1236440a05e0a8380900"
+ }
+ Frame {
+ msec: 4304
+ hash: "323af110731b7af0c30f8862ff59b833"
+ }
+ Frame {
+ msec: 4320
+ hash: "83c029e328e80af83158c37089cf0ece"
+ }
+ Frame {
+ msec: 4336
+ hash: "3f9a09ae19be34348bb2552915360cf7"
+ }
+ Frame {
+ msec: 4352
+ hash: "df624d70cae1bcefda8d69c0ff055d83"
+ }
+ Frame {
+ msec: 4368
+ hash: "d671a3b971468e1d8aa30ab655e020a9"
+ }
+ Frame {
+ msec: 4384
+ hash: "74c837b29f7f05b615123f0e608b523f"
+ }
+ Frame {
+ msec: 4400
+ hash: "277ef98ea859fb7685fe6cd44a538a7d"
+ }
+ Frame {
+ msec: 4416
+ hash: "0a8da7a3f57c3e06e4be5ea1d8a83ae9"
+ }
+ Frame {
+ msec: 4432
+ hash: "456be9c208d690c479ba12bf6325dde0"
+ }
+ Frame {
+ msec: 4448
+ hash: "10307beea6d99ab0ff5863f8e35555ed"
+ }
+ Frame {
+ msec: 4464
+ hash: "170a1d5fe3422cf5223a78015a6a45fd"
+ }
+ Frame {
+ msec: 4480
+ hash: "64ecb03aa538e74d0b99c6dec7751401"
+ }
+ Frame {
+ msec: 4496
+ hash: "f3a7e74a1839f9366f9eeec4d2b80d1e"
+ }
+ Frame {
+ msec: 4512
+ hash: "37c3f25e5cfdb48d7e3ab0cf8ffb9154"
+ }
+ Frame {
+ msec: 4528
+ hash: "0af81ee0d76ff8335a0e347dc086ca37"
+ }
+ Frame {
+ msec: 4544
+ hash: "061406edcbd2d4930ab89c3fcab63c7f"
+ }
+ Frame {
+ msec: 4560
+ hash: "31d65134f340d82dd40f2401bda3fb7e"
+ }
+ Frame {
+ msec: 4576
+ hash: "16c16c77c65b36d1e0954d5ead2642be"
+ }
+ Frame {
+ msec: 4592
+ hash: "61c16009b65a55bffb63e27727e1615e"
+ }
+ Frame {
+ msec: 4608
+ hash: "e1474c2cdd8768ca1ef45bf3bc5234ca"
+ }
+ Frame {
+ msec: 4624
+ hash: "89c159ef00d273ecfe61332e1bf7244d"
+ }
+ Frame {
+ msec: 4640
+ hash: "f4d0d3bca25e67908b38910f47b4757e"
+ }
+ Frame {
+ msec: 4656
+ hash: "0e0c40f8e11a7bd499c80562ac6f8a82"
+ }
+ Frame {
+ msec: 4672
+ hash: "4310a4c3037d845f088f21ad608f366a"
+ }
+ Frame {
+ msec: 4688
+ hash: "3d518cd0348d6202243364af1dd6ce89"
+ }
+ Frame {
+ msec: 4704
+ hash: "41987e6b4248d7944c0dbc6eb3862023"
+ }
+ Frame {
+ msec: 4720
+ hash: "3e81338d38723d56f2d6c428271f81c1"
+ }
+ Frame {
+ msec: 4736
+ hash: "902683d72f789399e9d99d1cea1bf177"
+ }
+ Frame {
+ msec: 4752
+ hash: "efc119983701908a904deb24108c59cb"
+ }
+ Frame {
+ msec: 4768
+ hash: "3a77785cfd7755f567619d8e04583f6a"
+ }
+ Frame {
+ msec: 4784
+ hash: "fd85d1dd931033973283a408b5e328a8"
+ }
+ Frame {
+ msec: 4800
+ image: "animated-smooth.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "ae12f1f37a746e16b06e6b869c89fac1"
+ }
+ Frame {
+ msec: 4832
+ hash: "a15f19f374bbfb6a922b69d080a91eaa"
+ }
+ Frame {
+ msec: 4848
+ hash: "84ef6dda8318b623832f58c46d762e89"
+ }
+ Frame {
+ msec: 4864
+ hash: "b699285764f5e8866a9996f4a0dccc69"
+ }
+ Frame {
+ msec: 4880
+ hash: "ddd8a006ef048c8d929144aa9fcd7c5a"
+ }
+ Frame {
+ msec: 4896
+ hash: "177666cb3bb784c83196886b2c6cf6b6"
+ }
+ Frame {
+ msec: 4912
+ hash: "9cd29b4b023a8b92573575fb3c3dda83"
+ }
+ Frame {
+ msec: 4928
+ hash: "adc670a9aa0326744cb23e4f5912e6c7"
+ }
+ Frame {
+ msec: 4944
+ hash: "48db9a5e6aad9a9563a3cd35fb7fa9b6"
+ }
+ Frame {
+ msec: 4960
+ hash: "d7e96278583f83ab636ed68fa130e4d2"
+ }
+ Frame {
+ msec: 4976
+ hash: "64b21b89576fdd0083f60a26f57b9c11"
+ }
+ Frame {
+ msec: 4992
+ hash: "0d407ee07692d0e5a480a60952807b3c"
+ }
+ Frame {
+ msec: 5008
+ hash: "845170815a87565dc4229792032b3357"
+ }
+ Frame {
+ msec: 5024
+ hash: "8b8120cfc14de03e048632fdea61be21"
+ }
+ Frame {
+ msec: 5040
+ hash: "b0070117f1c24a4da87434725d4bb989"
+ }
+ Frame {
+ msec: 5056
+ hash: "0239d697642ca1d1b1d1daa3ea048e1e"
+ }
+ Frame {
+ msec: 5072
+ hash: "3df54504f8891306fa8f1e9e2075a5e2"
+ }
+ Frame {
+ msec: 5088
+ hash: "853429387cc639496c7338244de7e1b7"
+ }
+ Frame {
+ msec: 5104
+ hash: "bd70500fbdfe5aa2fe4362a97a1dee2d"
+ }
+ Frame {
+ msec: 5120
+ hash: "b375e723b2396b13b8f55cfc0c81c3c3"
+ }
+ Frame {
+ msec: 5136
+ hash: "53f05993ba3b426949badd2e4cd66d84"
+ }
+ Frame {
+ msec: 5152
+ hash: "23291a0239c69ea07db959e709b1ff5f"
+ }
+ Frame {
+ msec: 5168
+ hash: "2192094410e2d7c8d9d4aa5f8deacff5"
+ }
+ Frame {
+ msec: 5184
+ hash: "d6615fc345831a3cc5b9a7196284b632"
+ }
+ Frame {
+ msec: 5200
+ hash: "92176cce4836dcae4dfca94e49b041a8"
+ }
+ Frame {
+ msec: 5216
+ hash: "2a1fcfb753ca237b518da26e67c928e5"
+ }
+ Frame {
+ msec: 5232
+ hash: "42be5d26afb9f066dd27cc9fbaf6ce20"
+ }
+ Frame {
+ msec: 5248
+ hash: "bd045f4532d78bba0ef1b64118fd9f24"
+ }
+ Frame {
+ msec: 5264
+ hash: "7f9999a9c87af43b9703323efab31770"
+ }
+ Frame {
+ msec: 5280
+ hash: "0640fcb0b24d3ba4ab8695f78271a438"
+ }
+ Frame {
+ msec: 5296
+ hash: "7c9a98e2101c33e17c1bd7e6c2d921ff"
+ }
+ Frame {
+ msec: 5312
+ hash: "fce2648975106bc5c0ca9a4530f7f748"
+ }
+ Frame {
+ msec: 5328
+ hash: "39cc17ee2e889f17dd07179fda99e431"
+ }
+ Frame {
+ msec: 5344
+ hash: "39c46d85d20f7ef3eca1d09c7eb6a068"
+ }
+ Frame {
+ msec: 5360
+ hash: "d65d50fbb920e683b041a1c72238225b"
+ }
+ Frame {
+ msec: 5376
+ hash: "49a1df977b0494c7c72ca0b65c394e13"
+ }
+ Frame {
+ msec: 5392
+ hash: "05cbce0eaa80b4610a9067af8c40f819"
+ }
+ Frame {
+ msec: 5408
+ hash: "00ab7798bcd77a99886dff0414f35382"
+ }
+ Frame {
+ msec: 5424
+ hash: "5cc90d798786c270ddd2616512f4459f"
+ }
+ Frame {
+ msec: 5440
+ hash: "e5df07ea21e8e415c3ec82560f2d0f34"
+ }
+ Frame {
+ msec: 5456
+ hash: "ddf1f5c0b97fe4821719ec5bf4bd091b"
+ }
+ Frame {
+ msec: 5472
+ hash: "c61d2aa7f934fb5a9f9f7883e063b51c"
+ }
+ Frame {
+ msec: 5488
+ hash: "29ddde3300d0520a4c01b5536d8b9e7a"
+ }
+ Frame {
+ msec: 5504
+ hash: "2fede2f5d871654f3f8a6e9d890adeac"
+ }
+ Frame {
+ msec: 5520
+ hash: "deed4c06c9b713834490832b88e7acaf"
+ }
+ Frame {
+ msec: 5536
+ hash: "c2edb016cfdd47c192d1c48281ee76ed"
+ }
+ Frame {
+ msec: 5552
+ hash: "a261be47ae89e6b53e6bc1c1197154ae"
+ }
+ Frame {
+ msec: 5568
+ hash: "e860e97ebd73b7d1d5d5d90458b34bfe"
+ }
+ Frame {
+ msec: 5584
+ hash: "a087b532ecb2f28e4ee60819228c2522"
+ }
+ Frame {
+ msec: 5600
+ hash: "64df51b4c1bf744b2aae1c6d908c2cc3"
+ }
+ Frame {
+ msec: 5616
+ hash: "4520003d4b221a3de6834b2729b3026d"
+ }
+ Frame {
+ msec: 5632
+ hash: "d1110817827c318ceb0c112e8c2bfc1d"
+ }
+ Frame {
+ msec: 5648
+ hash: "83d49474db15d5779923972ff5f55917"
+ }
+ Frame {
+ msec: 5664
+ hash: "3bae40654ec551d69e7c8c72f631c7a5"
+ }
+ Frame {
+ msec: 5680
+ hash: "774740a393f3e9b8f12b81cce8da8280"
+ }
+ Frame {
+ msec: 5696
+ hash: "d8e398a1ce9ca45c19951e93bd5c932a"
+ }
+ Frame {
+ msec: 5712
+ hash: "2b7eb8a9fe26b032be8b4b9c00995912"
+ }
+ Frame {
+ msec: 5728
+ hash: "47e920e3884ccf2f0f49e78070af6929"
+ }
+ Frame {
+ msec: 5744
+ hash: "fc913807eb1069d611495fbd5d43ee3d"
+ }
+ Frame {
+ msec: 5760
+ image: "animated-smooth.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "5736362b42bc2d801e02edabb983663a"
+ }
+ Frame {
+ msec: 5792
+ hash: "e3a2b5c7247acfc1b30825233fbfd56b"
+ }
+ Frame {
+ msec: 5808
+ hash: "48952ffa5e300778eafa768b9fe7df0c"
+ }
+ Frame {
+ msec: 5824
+ hash: "fe04cae65aeec18697eca4f3f83a40e9"
+ }
+ Frame {
+ msec: 5840
+ hash: "382d454f2366c1fb4ca472faa3bfa5e9"
+ }
+ Frame {
+ msec: 5856
+ hash: "89022a8e2feb3dcb845de69aafc333ad"
+ }
+ Frame {
+ msec: 5872
+ hash: "25506557c853a0020e98cf3992956989"
+ }
+ Frame {
+ msec: 5888
+ hash: "9a64706c52c9e962816953e32950b8ba"
+ }
+ Frame {
+ msec: 5904
+ hash: "3cbfded47413172ada64095e65c55e8a"
+ }
+ Frame {
+ msec: 5920
+ hash: "ec7e1190dd4fe122545e6ce6c8740500"
+ }
+ Frame {
+ msec: 5936
+ hash: "c5e399e29b988148913e62ee208b3326"
+ }
+ Frame {
+ msec: 5952
+ hash: "3991bc7760b7981d80665e3a7654c9f4"
+ }
+ Frame {
+ msec: 5968
+ hash: "05312f9529c94d3331ace7d73c544284"
+ }
+ Frame {
+ msec: 5984
+ hash: "a94de4e90a8f8eb4ec33fe902afd226c"
+ }
+ Frame {
+ msec: 6000
+ hash: "723f87da7e5b002a2e9b0bcbc81f9458"
+ }
+ Frame {
+ msec: 6016
+ hash: "6b8ded0d9386a3fff0601a100c513080"
+ }
+ Frame {
+ msec: 6032
+ hash: "f976cd5046ef5391536859e63db905bd"
+ }
+ Frame {
+ msec: 6048
+ hash: "a94de4e90a8f8eb4ec33fe902afd226c"
+ }
+ Frame {
+ msec: 6064
+ hash: "05312f9529c94d3331ace7d73c544284"
+ }
+ Frame {
+ msec: 6080
+ hash: "b980703c1d0018937e83a8ba8862469e"
+ }
+ Frame {
+ msec: 6096
+ hash: "c5e399e29b988148913e62ee208b3326"
+ }
+ Frame {
+ msec: 6112
+ hash: "3b7b83e97d17440b42e6ef4b962076d8"
+ }
+ Frame {
+ msec: 6128
+ hash: "3cbfded47413172ada64095e65c55e8a"
+ }
+ Frame {
+ msec: 6144
+ hash: "9a64706c52c9e962816953e32950b8ba"
+ }
+ Frame {
+ msec: 6160
+ hash: "25506557c853a0020e98cf3992956989"
+ }
+ Frame {
+ msec: 6176
+ hash: "89022a8e2feb3dcb845de69aafc333ad"
+ }
+ Frame {
+ msec: 6192
+ hash: "382d454f2366c1fb4ca472faa3bfa5e9"
+ }
+ Frame {
+ msec: 6208
+ hash: "fe04cae65aeec18697eca4f3f83a40e9"
+ }
+ Frame {
+ msec: 6224
+ hash: "48952ffa5e300778eafa768b9fe7df0c"
+ }
+ Frame {
+ msec: 6240
+ hash: "e3a2b5c7247acfc1b30825233fbfd56b"
+ }
+ Frame {
+ msec: 6256
+ hash: "5736362b42bc2d801e02edabb983663a"
+ }
+ Frame {
+ msec: 6272
+ hash: "5d9ee853f083d514fbe51d6953d8e000"
+ }
+ Frame {
+ msec: 6288
+ hash: "fe899138116774df4c4441687e3019c5"
+ }
+ Frame {
+ msec: 6304
+ hash: "47e920e3884ccf2f0f49e78070af6929"
+ }
+ Frame {
+ msec: 6320
+ hash: "2b7eb8a9fe26b032be8b4b9c00995912"
+ }
+ Frame {
+ msec: 6336
+ hash: "64cd225202ed6c91b02c368a9160a656"
+ }
+ Frame {
+ msec: 6352
+ hash: "774740a393f3e9b8f12b81cce8da8280"
+ }
+ Frame {
+ msec: 6368
+ hash: "3bae40654ec551d69e7c8c72f631c7a5"
+ }
+ Frame {
+ msec: 6384
+ hash: "83d49474db15d5779923972ff5f55917"
+ }
+ Frame {
+ msec: 6400
+ hash: "d1110817827c318ceb0c112e8c2bfc1d"
+ }
+ Frame {
+ msec: 6416
+ hash: "4520003d4b221a3de6834b2729b3026d"
+ }
+ Frame {
+ msec: 6432
+ hash: "64df51b4c1bf744b2aae1c6d908c2cc3"
+ }
+ Frame {
+ msec: 6448
+ hash: "a087b532ecb2f28e4ee60819228c2522"
+ }
+ Frame {
+ msec: 6464
+ hash: "e860e97ebd73b7d1d5d5d90458b34bfe"
+ }
+ Frame {
+ msec: 6480
+ hash: "a261be47ae89e6b53e6bc1c1197154ae"
+ }
+ Frame {
+ msec: 6496
+ hash: "c2edb016cfdd47c192d1c48281ee76ed"
+ }
+ Frame {
+ msec: 6512
+ hash: "deed4c06c9b713834490832b88e7acaf"
+ }
+ Frame {
+ msec: 6528
+ hash: "2fede2f5d871654f3f8a6e9d890adeac"
+ }
+ Frame {
+ msec: 6544
+ hash: "29ddde3300d0520a4c01b5536d8b9e7a"
+ }
+ Frame {
+ msec: 6560
+ hash: "c61d2aa7f934fb5a9f9f7883e063b51c"
+ }
+ Frame {
+ msec: 6576
+ hash: "ddf1f5c0b97fe4821719ec5bf4bd091b"
+ }
+ Frame {
+ msec: 6592
+ hash: "e5df07ea21e8e415c3ec82560f2d0f34"
+ }
+ Frame {
+ msec: 6608
+ hash: "5cc90d798786c270ddd2616512f4459f"
+ }
+ Frame {
+ msec: 6624
+ hash: "00ab7798bcd77a99886dff0414f35382"
+ }
+ Frame {
+ msec: 6640
+ hash: "05cbce0eaa80b4610a9067af8c40f819"
+ }
+ Frame {
+ msec: 6656
+ hash: "a676f45d946aeb9fa577c0e862735b01"
+ }
+ Frame {
+ msec: 6672
+ hash: "d65d50fbb920e683b041a1c72238225b"
+ }
+ Frame {
+ msec: 6688
+ hash: "39c46d85d20f7ef3eca1d09c7eb6a068"
+ }
+ Frame {
+ msec: 6704
+ hash: "39cc17ee2e889f17dd07179fda99e431"
+ }
+ Frame {
+ msec: 6720
+ image: "animated-smooth.6.png"
+ }
+ Frame {
+ msec: 6736
+ hash: "7c9a98e2101c33e17c1bd7e6c2d921ff"
+ }
+ Frame {
+ msec: 6752
+ hash: "0640fcb0b24d3ba4ab8695f78271a438"
+ }
+ Frame {
+ msec: 6768
+ hash: "2084ccc60ddd493399c128717816d33b"
+ }
+ Frame {
+ msec: 6784
+ hash: "bd045f4532d78bba0ef1b64118fd9f24"
+ }
+ Frame {
+ msec: 6800
+ hash: "42be5d26afb9f066dd27cc9fbaf6ce20"
+ }
+ Frame {
+ msec: 6816
+ hash: "2a1fcfb753ca237b518da26e67c928e5"
+ }
+ Frame {
+ msec: 6832
+ hash: "92176cce4836dcae4dfca94e49b041a8"
+ }
+ Frame {
+ msec: 6848
+ hash: "d6615fc345831a3cc5b9a7196284b632"
+ }
+ Frame {
+ msec: 6864
+ hash: "85ef33fcb3f91e4fc20391bf94455984"
+ }
+ Frame {
+ msec: 6880
+ hash: "23291a0239c69ea07db959e709b1ff5f"
+ }
+ Frame {
+ msec: 6896
+ hash: "53f05993ba3b426949badd2e4cd66d84"
+ }
+ Frame {
+ msec: 6912
+ hash: "b375e723b2396b13b8f55cfc0c81c3c3"
+ }
+ Frame {
+ msec: 6928
+ hash: "bd70500fbdfe5aa2fe4362a97a1dee2d"
+ }
+ Frame {
+ msec: 6944
+ hash: "853429387cc639496c7338244de7e1b7"
+ }
+ Frame {
+ msec: 6960
+ hash: "3df54504f8891306fa8f1e9e2075a5e2"
+ }
+ Frame {
+ msec: 6976
+ hash: "0239d697642ca1d1b1d1daa3ea048e1e"
+ }
+ Frame {
+ msec: 6992
+ hash: "b0070117f1c24a4da87434725d4bb989"
+ }
+ Frame {
+ msec: 7008
+ hash: "8b8120cfc14de03e048632fdea61be21"
+ }
+ Frame {
+ msec: 7024
+ hash: "845170815a87565dc4229792032b3357"
+ }
+ Frame {
+ msec: 7040
+ hash: "0d407ee07692d0e5a480a60952807b3c"
+ }
+ Frame {
+ msec: 7056
+ hash: "64b21b89576fdd0083f60a26f57b9c11"
+ }
+ Frame {
+ msec: 7072
+ hash: "d7e96278583f83ab636ed68fa130e4d2"
+ }
+ Frame {
+ msec: 7088
+ hash: "48db9a5e6aad9a9563a3cd35fb7fa9b6"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 7104
+ hash: "adc670a9aa0326744cb23e4f5912e6c7"
+ }
+ Frame {
+ msec: 7120
+ hash: "9cd29b4b023a8b92573575fb3c3dda83"
+ }
+ Frame {
+ msec: 7136
+ hash: "177666cb3bb784c83196886b2c6cf6b6"
+ }
+ Frame {
+ msec: 7152
+ hash: "ddd8a006ef048c8d929144aa9fcd7c5a"
+ }
+ Frame {
+ msec: 7168
+ hash: "b699285764f5e8866a9996f4a0dccc69"
+ }
+ Frame {
+ msec: 7184
+ hash: "84ef6dda8318b623832f58c46d762e89"
+ }
+ Frame {
+ msec: 7200
+ hash: "a15f19f374bbfb6a922b69d080a91eaa"
+ }
+ Frame {
+ msec: 7216
+ hash: "ae12f1f37a746e16b06e6b869c89fac1"
+ }
+ Frame {
+ msec: 7232
+ hash: "5d3e85acabe5e5ff802eb7731676274f"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.0.png b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.0.png
new file mode 100644
index 0000000..99228f9
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.1.png b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.1.png
new file mode 100644
index 0000000..a2dcd00
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.2.png b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.2.png
new file mode 100644
index 0000000..8a80020
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.3.png b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.3.png
new file mode 100644
index 0000000..02b57ef
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.4.png b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.4.png
new file mode 100644
index 0000000..df0f6cc
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.5.png b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.5.png
new file mode 100644
index 0000000..0add64d
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.6.png b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.6.png
new file mode 100644
index 0000000..0886207
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.7.png b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.7.png
new file mode 100644
index 0000000..bc1a7b0
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.7.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.qml b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.qml
new file mode 100644
index 0000000..29e591a
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/animated.qml
@@ -0,0 +1,2091 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 32
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 48
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 64
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 80
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 96
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 112
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 128
+ hash: "4c60d345821f515c7811f3b69eb94607"
+ }
+ Frame {
+ msec: 144
+ hash: "aacf9ae3c23d174a1c1cda493600e355"
+ }
+ Frame {
+ msec: 160
+ hash: "228d5312c261d1a5455faf69ec2f2520"
+ }
+ Frame {
+ msec: 176
+ hash: "465ec993948f7b75aeb5759976f4620d"
+ }
+ Frame {
+ msec: 192
+ hash: "755cfccc38bababc468fe6e1076804bb"
+ }
+ Frame {
+ msec: 208
+ hash: "b63e4d1686057828fd8781f1c33585f5"
+ }
+ Frame {
+ msec: 224
+ hash: "c5b3dede34b0d1d78135e39c41d117c6"
+ }
+ Frame {
+ msec: 240
+ hash: "4d45d70f997c2c67166905c97a900d2e"
+ }
+ Frame {
+ msec: 256
+ hash: "7b4d12e5a877507e7454aa1b8ed87c2d"
+ }
+ Frame {
+ msec: 272
+ hash: "08b9be66e23c7b6f6f629c7470394601"
+ }
+ Frame {
+ msec: 288
+ hash: "3dac1d9632378bd18c1c938a4868e3fb"
+ }
+ Frame {
+ msec: 304
+ hash: "406224b535b4425d2708df0083acdc8e"
+ }
+ Frame {
+ msec: 320
+ hash: "482bb92d4f0ad5d7c7e379b9e1ad326e"
+ }
+ Frame {
+ msec: 336
+ hash: "8419f1d75b14130730bcfec4e3a9b058"
+ }
+ Frame {
+ msec: 352
+ hash: "a85ee8be6a47bbd1b14137803ce606ec"
+ }
+ Frame {
+ msec: 368
+ hash: "c1936628aec13e08e9581dcd2c6d5717"
+ }
+ Frame {
+ msec: 384
+ hash: "75c9bf83ca3fe24612c245698c089430"
+ }
+ Frame {
+ msec: 400
+ hash: "8c66a33d26eec2a1133f4362710a5fab"
+ }
+ Frame {
+ msec: 416
+ hash: "2266df495ab5265e7514a506d3bf5bc6"
+ }
+ Frame {
+ msec: 432
+ hash: "01947e631c3db43f7c5b4427229bc0c8"
+ }
+ Frame {
+ msec: 448
+ hash: "3f62f032239d412d3637198f5e3e83d6"
+ }
+ Frame {
+ msec: 464
+ hash: "06d8d8a1a41893d4e27725948a75caf4"
+ }
+ Frame {
+ msec: 480
+ hash: "6b48bfd0c7993f746d6301c2a0f61d23"
+ }
+ Frame {
+ msec: 496
+ hash: "ac8f096e8c7cc23bfb01de69cf3e266e"
+ }
+ Frame {
+ msec: 512
+ hash: "dd4c9e63001bc6e0e63ea4db2d85301f"
+ }
+ Frame {
+ msec: 528
+ hash: "2a7bed775824968e318c3d40fbc5b1c2"
+ }
+ Frame {
+ msec: 544
+ hash: "3152e5f29015ece423fbdd11a2b382b8"
+ }
+ Frame {
+ msec: 560
+ hash: "f1a7a4a67a21f5025294af4bea3f8998"
+ }
+ Frame {
+ msec: 576
+ hash: "a40014d842471784e1222eb205395f6f"
+ }
+ Frame {
+ msec: 592
+ hash: "18c2f321a149e38b258ac264d40c2376"
+ }
+ Frame {
+ msec: 608
+ hash: "4ae120bb6dc2bd5ff81cc99ae03c191e"
+ }
+ Frame {
+ msec: 624
+ hash: "19d05a96f3ae7388e854bbf1075b51c1"
+ }
+ Frame {
+ msec: 640
+ hash: "e418b5f54705515dce5ce3b4cbc45d19"
+ }
+ Frame {
+ msec: 656
+ hash: "554e1d360463871e7c05cfe6f8abe1dd"
+ }
+ Frame {
+ msec: 672
+ hash: "153237f8cf37e29ad2f32f7a8a6aecdb"
+ }
+ Frame {
+ msec: 688
+ hash: "60f158382f75103c78e2b9b408e0fe65"
+ }
+ Frame {
+ msec: 704
+ hash: "4e60300cfab8634e04dcd1b556251d31"
+ }
+ Frame {
+ msec: 720
+ hash: "6a521f952e05d91b86ad78fd6f5de4f9"
+ }
+ Frame {
+ msec: 736
+ hash: "b74521d6ac531414aeeca0fb28379d11"
+ }
+ Frame {
+ msec: 752
+ hash: "a6f17da2dd581bdc249ff62f833dc025"
+ }
+ Frame {
+ msec: 768
+ hash: "93d9f0a7c387cbe653a9a088f8f4ef2b"
+ }
+ Frame {
+ msec: 784
+ hash: "1ea07ee309ce2c52cbc36370b75a872f"
+ }
+ Frame {
+ msec: 800
+ hash: "593a8a45c3a0cd7ce1cb6bd1913136ba"
+ }
+ Frame {
+ msec: 816
+ hash: "c7eb7837dce71c914186326216214eeb"
+ }
+ Frame {
+ msec: 832
+ hash: "0cba07ca38c7f0483244832a42d9ac53"
+ }
+ Frame {
+ msec: 848
+ hash: "93cf31eabb454ec536c638a506be0648"
+ }
+ Frame {
+ msec: 864
+ hash: "e8a61d3858244127cb2b2812f04f5ce9"
+ }
+ Frame {
+ msec: 880
+ hash: "1ac8c393f084aa1894c26610b7f40ea6"
+ }
+ Frame {
+ msec: 896
+ hash: "8861bf848da5c96b35addff736b01520"
+ }
+ Frame {
+ msec: 912
+ hash: "f04e84ad3579d6334077abe73101d206"
+ }
+ Frame {
+ msec: 928
+ hash: "eac4600372f0fdfadee88896ac915a48"
+ }
+ Frame {
+ msec: 944
+ hash: "ff0928dfd16b2da9811a172c19817a97"
+ }
+ Frame {
+ msec: 960
+ image: "animated.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "7383209c80b403b93da3264eadbc047f"
+ }
+ Frame {
+ msec: 992
+ hash: "86360bd58bba5fdd901c105ddb2e3ade"
+ }
+ Frame {
+ msec: 1008
+ hash: "bc747167dfb3388ac63e9e68a86b9a03"
+ }
+ Frame {
+ msec: 1024
+ hash: "bccb4b8a494bd45bd70c2524a02a9dc3"
+ }
+ Frame {
+ msec: 1040
+ hash: "ae48da4a66f93c806725ce749700aac8"
+ }
+ Frame {
+ msec: 1056
+ hash: "c763f56728e17fc119539a4d45dfccc3"
+ }
+ Frame {
+ msec: 1072
+ hash: "956429472da133324c970774f77784f5"
+ }
+ Frame {
+ msec: 1088
+ hash: "a4ddb4956d71fd642d54757938100cf3"
+ }
+ Frame {
+ msec: 1104
+ hash: "ec0aea8dc8c269d1f0aee5817347ac55"
+ }
+ Frame {
+ msec: 1120
+ hash: "68dae343cf324391ec6721cea14575f7"
+ }
+ Frame {
+ msec: 1136
+ hash: "81d2fc6727dc7449d1a87b4abea9b704"
+ }
+ Frame {
+ msec: 1152
+ hash: "c3a1f12febc979150028737722d6d045"
+ }
+ Frame {
+ msec: 1168
+ hash: "80ebac4d923f67fb8dba3d133ce657ba"
+ }
+ Frame {
+ msec: 1184
+ hash: "7c22fc3e30377cc14326833bdd23ddd8"
+ }
+ Frame {
+ msec: 1200
+ hash: "5359f5e45e5467c62c2d9521c8199c48"
+ }
+ Frame {
+ msec: 1216
+ hash: "30f84a7f67b13a945ba6d5935ea92da5"
+ }
+ Frame {
+ msec: 1232
+ hash: "08f55088cdce741c67539f73291e53ab"
+ }
+ Frame {
+ msec: 1248
+ hash: "93128906d054e44bfd126fc22bdc3102"
+ }
+ Frame {
+ msec: 1264
+ hash: "97f7a2175dcf9ac2581a92d614d72f88"
+ }
+ Frame {
+ msec: 1280
+ hash: "587cb6e05048579088e88e0180e3ad48"
+ }
+ Frame {
+ msec: 1296
+ hash: "985868869ef2c332da379460a2f3a71b"
+ }
+ Frame {
+ msec: 1312
+ hash: "94084ca4998fcda408f6987f52c34185"
+ }
+ Frame {
+ msec: 1328
+ hash: "e91bb914c1eb63cd4269b30a220a128a"
+ }
+ Frame {
+ msec: 1344
+ hash: "e880d93963c80e4fab5173554c9600fc"
+ }
+ Frame {
+ msec: 1360
+ hash: "84c94704c16e246df1048f958cc8cefb"
+ }
+ Frame {
+ msec: 1376
+ hash: "4f1eace868a6688e5b24ce48a1f0fd18"
+ }
+ Frame {
+ msec: 1392
+ hash: "99de44f74f8e1f79652ab46afb4bb59e"
+ }
+ Frame {
+ msec: 1408
+ hash: "44072400ca3f0237d1aebae28a94becc"
+ }
+ Frame {
+ msec: 1424
+ hash: "a1bd4e995365e79389dba80f9e3b7af8"
+ }
+ Frame {
+ msec: 1440
+ hash: "95d776c84fe155617fc4ee51bdb45b7e"
+ }
+ Frame {
+ msec: 1456
+ hash: "3b95eb8cbfc831e1ebee2e456b026ab4"
+ }
+ Frame {
+ msec: 1472
+ hash: "826c7741ba0c51de407bb799e8f360b5"
+ }
+ Frame {
+ msec: 1488
+ hash: "11673a112566a64aca3c7010b9cc9c4d"
+ }
+ Frame {
+ msec: 1504
+ hash: "e1e6c7a7f51bcccd749710dbbf9e97f6"
+ }
+ Frame {
+ msec: 1520
+ hash: "5b027815ea3c1ea54e1a02c798c468db"
+ }
+ Frame {
+ msec: 1536
+ hash: "65c514c9e926affe1da0b4826d2754c7"
+ }
+ Frame {
+ msec: 1552
+ hash: "73c5f23f51797a33f4d2898738e6356e"
+ }
+ Frame {
+ msec: 1568
+ hash: "acd9a2e76b22ab0ff809fd3ec3a018ec"
+ }
+ Frame {
+ msec: 1584
+ hash: "fb17df681d99d5de05f6329bba697ea5"
+ }
+ Frame {
+ msec: 1600
+ hash: "1bf7a98884b506b38326f59f85a53f41"
+ }
+ Frame {
+ msec: 1616
+ hash: "0b1a741975e3d9ef8f5e78f371c89441"
+ }
+ Frame {
+ msec: 1632
+ hash: "a6937ee49648ed0cb409063bf1da3b87"
+ }
+ Frame {
+ msec: 1648
+ hash: "a790f0e884ab85f7802dd094e4ef550f"
+ }
+ Frame {
+ msec: 1664
+ hash: "3b644aac161f0a75bfb64f5075373190"
+ }
+ Frame {
+ msec: 1680
+ hash: "b12faa76c07adc21634cd8f8cb8436ae"
+ }
+ Frame {
+ msec: 1696
+ hash: "3fb20f9dbd40b4729235e13af9643afc"
+ }
+ Frame {
+ msec: 1712
+ hash: "f57727419bb51fb1e589b960ddeb20ae"
+ }
+ Frame {
+ msec: 1728
+ hash: "7b78cba247f2c209ed81e003ca25d0a5"
+ }
+ Frame {
+ msec: 1744
+ hash: "8172e076b05d95248d89e815fde820ef"
+ }
+ Frame {
+ msec: 1760
+ hash: "a88d6fc324ef48aa52c642a1662ec679"
+ }
+ Frame {
+ msec: 1776
+ hash: "74c1e71378b502bc1b732a55806a10f1"
+ }
+ Frame {
+ msec: 1792
+ hash: "6eae517ad33f0609c31ef1f8f80ba899"
+ }
+ Frame {
+ msec: 1808
+ hash: "a67e9a0f55512fb1c55f13c6b483923b"
+ }
+ Frame {
+ msec: 1824
+ hash: "4887cd34d9926a361f3ca2e75be53ea6"
+ }
+ Frame {
+ msec: 1840
+ hash: "13ca95adab171d9fad9ee8b75d0226bc"
+ }
+ Frame {
+ msec: 1856
+ hash: "affab9fb48c889a2680eb81458d400f9"
+ }
+ Frame {
+ msec: 1872
+ hash: "7aa0cbf73f7999be7cde4ec739efbc33"
+ }
+ Frame {
+ msec: 1888
+ hash: "36c054064c9a76f4072492e55c70fb6c"
+ }
+ Frame {
+ msec: 1904
+ hash: "d1ed4916cb1ecff60277d74369ff311b"
+ }
+ Frame {
+ msec: 1920
+ image: "animated.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "29245946cbd811fe6bf6b2b41cc13002"
+ }
+ Frame {
+ msec: 1952
+ hash: "8a9dd7a2d10771633e6896f3f4a722ae"
+ }
+ Frame {
+ msec: 1968
+ hash: "058c918e83bfdd665cd836566b53959b"
+ }
+ Frame {
+ msec: 1984
+ hash: "fdf3b7a0391119e2fe77be8d6a17481d"
+ }
+ Frame {
+ msec: 2000
+ hash: "ed5d80c33dbf72624385b1cf43784626"
+ }
+ Frame {
+ msec: 2016
+ hash: "911591db1519ba264847f09868e38e0e"
+ }
+ Frame {
+ msec: 2032
+ hash: "ed5d80c33dbf72624385b1cf43784626"
+ }
+ Frame {
+ msec: 2048
+ hash: "fdf3b7a0391119e2fe77be8d6a17481d"
+ }
+ Frame {
+ msec: 2064
+ hash: "058c918e83bfdd665cd836566b53959b"
+ }
+ Frame {
+ msec: 2080
+ hash: "8a9dd7a2d10771633e6896f3f4a722ae"
+ }
+ Frame {
+ msec: 2096
+ hash: "29245946cbd811fe6bf6b2b41cc13002"
+ }
+ Frame {
+ msec: 2112
+ hash: "63ebaa4869728f5e2891d068e4b0091c"
+ }
+ Frame {
+ msec: 2128
+ hash: "d1ed4916cb1ecff60277d74369ff311b"
+ }
+ Frame {
+ msec: 2144
+ hash: "36c054064c9a76f4072492e55c70fb6c"
+ }
+ Frame {
+ msec: 2160
+ hash: "7aa0cbf73f7999be7cde4ec739efbc33"
+ }
+ Frame {
+ msec: 2176
+ hash: "affab9fb48c889a2680eb81458d400f9"
+ }
+ Frame {
+ msec: 2192
+ hash: "13ca95adab171d9fad9ee8b75d0226bc"
+ }
+ Frame {
+ msec: 2208
+ hash: "4887cd34d9926a361f3ca2e75be53ea6"
+ }
+ Frame {
+ msec: 2224
+ hash: "a67e9a0f55512fb1c55f13c6b483923b"
+ }
+ Frame {
+ msec: 2240
+ hash: "6eae517ad33f0609c31ef1f8f80ba899"
+ }
+ Frame {
+ msec: 2256
+ hash: "74c1e71378b502bc1b732a55806a10f1"
+ }
+ Frame {
+ msec: 2272
+ hash: "a88d6fc324ef48aa52c642a1662ec679"
+ }
+ Frame {
+ msec: 2288
+ hash: "8172e076b05d95248d89e815fde820ef"
+ }
+ Frame {
+ msec: 2304
+ hash: "7b78cba247f2c209ed81e003ca25d0a5"
+ }
+ Frame {
+ msec: 2320
+ hash: "f57727419bb51fb1e589b960ddeb20ae"
+ }
+ Frame {
+ msec: 2336
+ hash: "3fb20f9dbd40b4729235e13af9643afc"
+ }
+ Frame {
+ msec: 2352
+ hash: "b12faa76c07adc21634cd8f8cb8436ae"
+ }
+ Frame {
+ msec: 2368
+ hash: "3b644aac161f0a75bfb64f5075373190"
+ }
+ Frame {
+ msec: 2384
+ hash: "a790f0e884ab85f7802dd094e4ef550f"
+ }
+ Frame {
+ msec: 2400
+ hash: "a6937ee49648ed0cb409063bf1da3b87"
+ }
+ Frame {
+ msec: 2416
+ hash: "0b1a741975e3d9ef8f5e78f371c89441"
+ }
+ Frame {
+ msec: 2432
+ hash: "1bf7a98884b506b38326f59f85a53f41"
+ }
+ Frame {
+ msec: 2448
+ hash: "fb17df681d99d5de05f6329bba697ea5"
+ }
+ Frame {
+ msec: 2464
+ hash: "acd9a2e76b22ab0ff809fd3ec3a018ec"
+ }
+ Frame {
+ msec: 2480
+ hash: "73c5f23f51797a33f4d2898738e6356e"
+ }
+ Frame {
+ msec: 2496
+ hash: "65c514c9e926affe1da0b4826d2754c7"
+ }
+ Frame {
+ msec: 2512
+ hash: "5b027815ea3c1ea54e1a02c798c468db"
+ }
+ Frame {
+ msec: 2528
+ hash: "e1e6c7a7f51bcccd749710dbbf9e97f6"
+ }
+ Frame {
+ msec: 2544
+ hash: "11673a112566a64aca3c7010b9cc9c4d"
+ }
+ Frame {
+ msec: 2560
+ hash: "826c7741ba0c51de407bb799e8f360b5"
+ }
+ Frame {
+ msec: 2576
+ hash: "3b95eb8cbfc831e1ebee2e456b026ab4"
+ }
+ Frame {
+ msec: 2592
+ hash: "95d776c84fe155617fc4ee51bdb45b7e"
+ }
+ Frame {
+ msec: 2608
+ hash: "a1bd4e995365e79389dba80f9e3b7af8"
+ }
+ Frame {
+ msec: 2624
+ hash: "44072400ca3f0237d1aebae28a94becc"
+ }
+ Frame {
+ msec: 2640
+ hash: "99de44f74f8e1f79652ab46afb4bb59e"
+ }
+ Frame {
+ msec: 2656
+ hash: "4f1eace868a6688e5b24ce48a1f0fd18"
+ }
+ Frame {
+ msec: 2672
+ hash: "84c94704c16e246df1048f958cc8cefb"
+ }
+ Frame {
+ msec: 2688
+ hash: "e880d93963c80e4fab5173554c9600fc"
+ }
+ Frame {
+ msec: 2704
+ hash: "e91bb914c1eb63cd4269b30a220a128a"
+ }
+ Frame {
+ msec: 2720
+ hash: "94084ca4998fcda408f6987f52c34185"
+ }
+ Frame {
+ msec: 2736
+ hash: "985868869ef2c332da379460a2f3a71b"
+ }
+ Frame {
+ msec: 2752
+ hash: "587cb6e05048579088e88e0180e3ad48"
+ }
+ Frame {
+ msec: 2768
+ hash: "97f7a2175dcf9ac2581a92d614d72f88"
+ }
+ Frame {
+ msec: 2784
+ hash: "93128906d054e44bfd126fc22bdc3102"
+ }
+ Frame {
+ msec: 2800
+ hash: "08f55088cdce741c67539f73291e53ab"
+ }
+ Frame {
+ msec: 2816
+ hash: "30f84a7f67b13a945ba6d5935ea92da5"
+ }
+ Frame {
+ msec: 2832
+ hash: "5359f5e45e5467c62c2d9521c8199c48"
+ }
+ Frame {
+ msec: 2848
+ hash: "7c22fc3e30377cc14326833bdd23ddd8"
+ }
+ Frame {
+ msec: 2864
+ hash: "80ebac4d923f67fb8dba3d133ce657ba"
+ }
+ Frame {
+ msec: 2880
+ image: "animated.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "81d2fc6727dc7449d1a87b4abea9b704"
+ }
+ Frame {
+ msec: 2912
+ hash: "68dae343cf324391ec6721cea14575f7"
+ }
+ Frame {
+ msec: 2928
+ hash: "ec0aea8dc8c269d1f0aee5817347ac55"
+ }
+ Frame {
+ msec: 2944
+ hash: "a4ddb4956d71fd642d54757938100cf3"
+ }
+ Frame {
+ msec: 2960
+ hash: "956429472da133324c970774f77784f5"
+ }
+ Frame {
+ msec: 2976
+ hash: "c763f56728e17fc119539a4d45dfccc3"
+ }
+ Frame {
+ msec: 2992
+ hash: "ae48da4a66f93c806725ce749700aac8"
+ }
+ Frame {
+ msec: 3008
+ hash: "bccb4b8a494bd45bd70c2524a02a9dc3"
+ }
+ Frame {
+ msec: 3024
+ hash: "bc747167dfb3388ac63e9e68a86b9a03"
+ }
+ Frame {
+ msec: 3040
+ hash: "86360bd58bba5fdd901c105ddb2e3ade"
+ }
+ Frame {
+ msec: 3056
+ hash: "7383209c80b403b93da3264eadbc047f"
+ }
+ Frame {
+ msec: 3072
+ hash: "280288a7988736e30a2a3e4289ac3b0c"
+ }
+ Frame {
+ msec: 3088
+ hash: "ff0928dfd16b2da9811a172c19817a97"
+ }
+ Frame {
+ msec: 3104
+ hash: "eac4600372f0fdfadee88896ac915a48"
+ }
+ Frame {
+ msec: 3120
+ hash: "f04e84ad3579d6334077abe73101d206"
+ }
+ Frame {
+ msec: 3136
+ hash: "8861bf848da5c96b35addff736b01520"
+ }
+ Frame {
+ msec: 3152
+ hash: "1ac8c393f084aa1894c26610b7f40ea6"
+ }
+ Frame {
+ msec: 3168
+ hash: "e8a61d3858244127cb2b2812f04f5ce9"
+ }
+ Frame {
+ msec: 3184
+ hash: "93cf31eabb454ec536c638a506be0648"
+ }
+ Frame {
+ msec: 3200
+ hash: "0cba07ca38c7f0483244832a42d9ac53"
+ }
+ Frame {
+ msec: 3216
+ hash: "c7eb7837dce71c914186326216214eeb"
+ }
+ Frame {
+ msec: 3232
+ hash: "593a8a45c3a0cd7ce1cb6bd1913136ba"
+ }
+ Frame {
+ msec: 3248
+ hash: "1ea07ee309ce2c52cbc36370b75a872f"
+ }
+ Frame {
+ msec: 3264
+ hash: "93d9f0a7c387cbe653a9a088f8f4ef2b"
+ }
+ Frame {
+ msec: 3280
+ hash: "a6f17da2dd581bdc249ff62f833dc025"
+ }
+ Frame {
+ msec: 3296
+ hash: "b74521d6ac531414aeeca0fb28379d11"
+ }
+ Frame {
+ msec: 3312
+ hash: "6a521f952e05d91b86ad78fd6f5de4f9"
+ }
+ Frame {
+ msec: 3328
+ hash: "4e60300cfab8634e04dcd1b556251d31"
+ }
+ Frame {
+ msec: 3344
+ hash: "60f158382f75103c78e2b9b408e0fe65"
+ }
+ Frame {
+ msec: 3360
+ hash: "153237f8cf37e29ad2f32f7a8a6aecdb"
+ }
+ Frame {
+ msec: 3376
+ hash: "554e1d360463871e7c05cfe6f8abe1dd"
+ }
+ Frame {
+ msec: 3392
+ hash: "e418b5f54705515dce5ce3b4cbc45d19"
+ }
+ Frame {
+ msec: 3408
+ hash: "19d05a96f3ae7388e854bbf1075b51c1"
+ }
+ Frame {
+ msec: 3424
+ hash: "4ae120bb6dc2bd5ff81cc99ae03c191e"
+ }
+ Frame {
+ msec: 3440
+ hash: "18c2f321a149e38b258ac264d40c2376"
+ }
+ Frame {
+ msec: 3456
+ hash: "a40014d842471784e1222eb205395f6f"
+ }
+ Frame {
+ msec: 3472
+ hash: "f1a7a4a67a21f5025294af4bea3f8998"
+ }
+ Frame {
+ msec: 3488
+ hash: "3152e5f29015ece423fbdd11a2b382b8"
+ }
+ Frame {
+ msec: 3504
+ hash: "2a7bed775824968e318c3d40fbc5b1c2"
+ }
+ Frame {
+ msec: 3520
+ hash: "dd4c9e63001bc6e0e63ea4db2d85301f"
+ }
+ Frame {
+ msec: 3536
+ hash: "ac8f096e8c7cc23bfb01de69cf3e266e"
+ }
+ Frame {
+ msec: 3552
+ hash: "6b48bfd0c7993f746d6301c2a0f61d23"
+ }
+ Frame {
+ msec: 3568
+ hash: "06d8d8a1a41893d4e27725948a75caf4"
+ }
+ Frame {
+ msec: 3584
+ hash: "3f62f032239d412d3637198f5e3e83d6"
+ }
+ Frame {
+ msec: 3600
+ hash: "01947e631c3db43f7c5b4427229bc0c8"
+ }
+ Frame {
+ msec: 3616
+ hash: "2266df495ab5265e7514a506d3bf5bc6"
+ }
+ Frame {
+ msec: 3632
+ hash: "8c66a33d26eec2a1133f4362710a5fab"
+ }
+ Frame {
+ msec: 3648
+ hash: "75c9bf83ca3fe24612c245698c089430"
+ }
+ Frame {
+ msec: 3664
+ hash: "c1936628aec13e08e9581dcd2c6d5717"
+ }
+ Frame {
+ msec: 3680
+ hash: "a85ee8be6a47bbd1b14137803ce606ec"
+ }
+ Frame {
+ msec: 3696
+ hash: "8419f1d75b14130730bcfec4e3a9b058"
+ }
+ Frame {
+ msec: 3712
+ hash: "482bb92d4f0ad5d7c7e379b9e1ad326e"
+ }
+ Frame {
+ msec: 3728
+ hash: "406224b535b4425d2708df0083acdc8e"
+ }
+ Frame {
+ msec: 3744
+ hash: "3dac1d9632378bd18c1c938a4868e3fb"
+ }
+ Frame {
+ msec: 3760
+ hash: "08b9be66e23c7b6f6f629c7470394601"
+ }
+ Frame {
+ msec: 3776
+ hash: "7b4d12e5a877507e7454aa1b8ed87c2d"
+ }
+ Frame {
+ msec: 3792
+ hash: "4d45d70f997c2c67166905c97a900d2e"
+ }
+ Frame {
+ msec: 3808
+ hash: "c5b3dede34b0d1d78135e39c41d117c6"
+ }
+ Frame {
+ msec: 3824
+ hash: "b63e4d1686057828fd8781f1c33585f5"
+ }
+ Frame {
+ msec: 3840
+ image: "animated.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "465ec993948f7b75aeb5759976f4620d"
+ }
+ Frame {
+ msec: 3872
+ hash: "228d5312c261d1a5455faf69ec2f2520"
+ }
+ Frame {
+ msec: 3888
+ hash: "aacf9ae3c23d174a1c1cda493600e355"
+ }
+ Frame {
+ msec: 3904
+ hash: "4c60d345821f515c7811f3b69eb94607"
+ }
+ Frame {
+ msec: 3920
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 3936
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 3952
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 3968
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 3984
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 4000
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 4016
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 4032
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 4048
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 4064
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 4080
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 4096
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 4112
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 4128
+ hash: "4c60d345821f515c7811f3b69eb94607"
+ }
+ Frame {
+ msec: 4144
+ hash: "aacf9ae3c23d174a1c1cda493600e355"
+ }
+ Frame {
+ msec: 4160
+ hash: "228d5312c261d1a5455faf69ec2f2520"
+ }
+ Frame {
+ msec: 4176
+ hash: "465ec993948f7b75aeb5759976f4620d"
+ }
+ Frame {
+ msec: 4192
+ hash: "755cfccc38bababc468fe6e1076804bb"
+ }
+ Frame {
+ msec: 4208
+ hash: "b63e4d1686057828fd8781f1c33585f5"
+ }
+ Frame {
+ msec: 4224
+ hash: "c5b3dede34b0d1d78135e39c41d117c6"
+ }
+ Frame {
+ msec: 4240
+ hash: "4d45d70f997c2c67166905c97a900d2e"
+ }
+ Frame {
+ msec: 4256
+ hash: "7b4d12e5a877507e7454aa1b8ed87c2d"
+ }
+ Frame {
+ msec: 4272
+ hash: "08b9be66e23c7b6f6f629c7470394601"
+ }
+ Frame {
+ msec: 4288
+ hash: "3dac1d9632378bd18c1c938a4868e3fb"
+ }
+ Frame {
+ msec: 4304
+ hash: "406224b535b4425d2708df0083acdc8e"
+ }
+ Frame {
+ msec: 4320
+ hash: "482bb92d4f0ad5d7c7e379b9e1ad326e"
+ }
+ Frame {
+ msec: 4336
+ hash: "8419f1d75b14130730bcfec4e3a9b058"
+ }
+ Frame {
+ msec: 4352
+ hash: "a85ee8be6a47bbd1b14137803ce606ec"
+ }
+ Frame {
+ msec: 4368
+ hash: "c1936628aec13e08e9581dcd2c6d5717"
+ }
+ Frame {
+ msec: 4384
+ hash: "75c9bf83ca3fe24612c245698c089430"
+ }
+ Frame {
+ msec: 4400
+ hash: "8c66a33d26eec2a1133f4362710a5fab"
+ }
+ Frame {
+ msec: 4416
+ hash: "2266df495ab5265e7514a506d3bf5bc6"
+ }
+ Frame {
+ msec: 4432
+ hash: "01947e631c3db43f7c5b4427229bc0c8"
+ }
+ Frame {
+ msec: 4448
+ hash: "3f62f032239d412d3637198f5e3e83d6"
+ }
+ Frame {
+ msec: 4464
+ hash: "06d8d8a1a41893d4e27725948a75caf4"
+ }
+ Frame {
+ msec: 4480
+ hash: "6b48bfd0c7993f746d6301c2a0f61d23"
+ }
+ Frame {
+ msec: 4496
+ hash: "ac8f096e8c7cc23bfb01de69cf3e266e"
+ }
+ Frame {
+ msec: 4512
+ hash: "dd4c9e63001bc6e0e63ea4db2d85301f"
+ }
+ Frame {
+ msec: 4528
+ hash: "2a7bed775824968e318c3d40fbc5b1c2"
+ }
+ Frame {
+ msec: 4544
+ hash: "3152e5f29015ece423fbdd11a2b382b8"
+ }
+ Frame {
+ msec: 4560
+ hash: "f1a7a4a67a21f5025294af4bea3f8998"
+ }
+ Frame {
+ msec: 4576
+ hash: "a40014d842471784e1222eb205395f6f"
+ }
+ Frame {
+ msec: 4592
+ hash: "18c2f321a149e38b258ac264d40c2376"
+ }
+ Frame {
+ msec: 4608
+ hash: "4ae120bb6dc2bd5ff81cc99ae03c191e"
+ }
+ Frame {
+ msec: 4624
+ hash: "19d05a96f3ae7388e854bbf1075b51c1"
+ }
+ Frame {
+ msec: 4640
+ hash: "e418b5f54705515dce5ce3b4cbc45d19"
+ }
+ Frame {
+ msec: 4656
+ hash: "554e1d360463871e7c05cfe6f8abe1dd"
+ }
+ Frame {
+ msec: 4672
+ hash: "153237f8cf37e29ad2f32f7a8a6aecdb"
+ }
+ Frame {
+ msec: 4688
+ hash: "60f158382f75103c78e2b9b408e0fe65"
+ }
+ Frame {
+ msec: 4704
+ hash: "4e60300cfab8634e04dcd1b556251d31"
+ }
+ Frame {
+ msec: 4720
+ hash: "6a521f952e05d91b86ad78fd6f5de4f9"
+ }
+ Frame {
+ msec: 4736
+ hash: "b74521d6ac531414aeeca0fb28379d11"
+ }
+ Frame {
+ msec: 4752
+ hash: "a6f17da2dd581bdc249ff62f833dc025"
+ }
+ Frame {
+ msec: 4768
+ hash: "93d9f0a7c387cbe653a9a088f8f4ef2b"
+ }
+ Frame {
+ msec: 4784
+ hash: "1ea07ee309ce2c52cbc36370b75a872f"
+ }
+ Frame {
+ msec: 4800
+ image: "animated.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "c7eb7837dce71c914186326216214eeb"
+ }
+ Frame {
+ msec: 4832
+ hash: "0cba07ca38c7f0483244832a42d9ac53"
+ }
+ Frame {
+ msec: 4848
+ hash: "93cf31eabb454ec536c638a506be0648"
+ }
+ Frame {
+ msec: 4864
+ hash: "e8a61d3858244127cb2b2812f04f5ce9"
+ }
+ Frame {
+ msec: 4880
+ hash: "1ac8c393f084aa1894c26610b7f40ea6"
+ }
+ Frame {
+ msec: 4896
+ hash: "8861bf848da5c96b35addff736b01520"
+ }
+ Frame {
+ msec: 4912
+ hash: "f04e84ad3579d6334077abe73101d206"
+ }
+ Frame {
+ msec: 4928
+ hash: "eac4600372f0fdfadee88896ac915a48"
+ }
+ Frame {
+ msec: 4944
+ hash: "ff0928dfd16b2da9811a172c19817a97"
+ }
+ Frame {
+ msec: 4960
+ hash: "280288a7988736e30a2a3e4289ac3b0c"
+ }
+ Frame {
+ msec: 4976
+ hash: "7383209c80b403b93da3264eadbc047f"
+ }
+ Frame {
+ msec: 4992
+ hash: "86360bd58bba5fdd901c105ddb2e3ade"
+ }
+ Frame {
+ msec: 5008
+ hash: "bc747167dfb3388ac63e9e68a86b9a03"
+ }
+ Frame {
+ msec: 5024
+ hash: "bccb4b8a494bd45bd70c2524a02a9dc3"
+ }
+ Frame {
+ msec: 5040
+ hash: "ae48da4a66f93c806725ce749700aac8"
+ }
+ Frame {
+ msec: 5056
+ hash: "c763f56728e17fc119539a4d45dfccc3"
+ }
+ Frame {
+ msec: 5072
+ hash: "956429472da133324c970774f77784f5"
+ }
+ Frame {
+ msec: 5088
+ hash: "a4ddb4956d71fd642d54757938100cf3"
+ }
+ Frame {
+ msec: 5104
+ hash: "ec0aea8dc8c269d1f0aee5817347ac55"
+ }
+ Frame {
+ msec: 5120
+ hash: "68dae343cf324391ec6721cea14575f7"
+ }
+ Frame {
+ msec: 5136
+ hash: "81d2fc6727dc7449d1a87b4abea9b704"
+ }
+ Frame {
+ msec: 5152
+ hash: "c3a1f12febc979150028737722d6d045"
+ }
+ Frame {
+ msec: 5168
+ hash: "80ebac4d923f67fb8dba3d133ce657ba"
+ }
+ Frame {
+ msec: 5184
+ hash: "7c22fc3e30377cc14326833bdd23ddd8"
+ }
+ Frame {
+ msec: 5200
+ hash: "5359f5e45e5467c62c2d9521c8199c48"
+ }
+ Frame {
+ msec: 5216
+ hash: "30f84a7f67b13a945ba6d5935ea92da5"
+ }
+ Frame {
+ msec: 5232
+ hash: "08f55088cdce741c67539f73291e53ab"
+ }
+ Frame {
+ msec: 5248
+ hash: "93128906d054e44bfd126fc22bdc3102"
+ }
+ Frame {
+ msec: 5264
+ hash: "97f7a2175dcf9ac2581a92d614d72f88"
+ }
+ Frame {
+ msec: 5280
+ hash: "587cb6e05048579088e88e0180e3ad48"
+ }
+ Frame {
+ msec: 5296
+ hash: "985868869ef2c332da379460a2f3a71b"
+ }
+ Frame {
+ msec: 5312
+ hash: "94084ca4998fcda408f6987f52c34185"
+ }
+ Frame {
+ msec: 5328
+ hash: "e91bb914c1eb63cd4269b30a220a128a"
+ }
+ Frame {
+ msec: 5344
+ hash: "e880d93963c80e4fab5173554c9600fc"
+ }
+ Frame {
+ msec: 5360
+ hash: "84c94704c16e246df1048f958cc8cefb"
+ }
+ Frame {
+ msec: 5376
+ hash: "4f1eace868a6688e5b24ce48a1f0fd18"
+ }
+ Frame {
+ msec: 5392
+ hash: "99de44f74f8e1f79652ab46afb4bb59e"
+ }
+ Frame {
+ msec: 5408
+ hash: "44072400ca3f0237d1aebae28a94becc"
+ }
+ Frame {
+ msec: 5424
+ hash: "a1bd4e995365e79389dba80f9e3b7af8"
+ }
+ Frame {
+ msec: 5440
+ hash: "95d776c84fe155617fc4ee51bdb45b7e"
+ }
+ Frame {
+ msec: 5456
+ hash: "3b95eb8cbfc831e1ebee2e456b026ab4"
+ }
+ Frame {
+ msec: 5472
+ hash: "826c7741ba0c51de407bb799e8f360b5"
+ }
+ Frame {
+ msec: 5488
+ hash: "11673a112566a64aca3c7010b9cc9c4d"
+ }
+ Frame {
+ msec: 5504
+ hash: "e1e6c7a7f51bcccd749710dbbf9e97f6"
+ }
+ Frame {
+ msec: 5520
+ hash: "5b027815ea3c1ea54e1a02c798c468db"
+ }
+ Frame {
+ msec: 5536
+ hash: "65c514c9e926affe1da0b4826d2754c7"
+ }
+ Frame {
+ msec: 5552
+ hash: "73c5f23f51797a33f4d2898738e6356e"
+ }
+ Frame {
+ msec: 5568
+ hash: "acd9a2e76b22ab0ff809fd3ec3a018ec"
+ }
+ Frame {
+ msec: 5584
+ hash: "fb17df681d99d5de05f6329bba697ea5"
+ }
+ Frame {
+ msec: 5600
+ hash: "1bf7a98884b506b38326f59f85a53f41"
+ }
+ Frame {
+ msec: 5616
+ hash: "0b1a741975e3d9ef8f5e78f371c89441"
+ }
+ Frame {
+ msec: 5632
+ hash: "a6937ee49648ed0cb409063bf1da3b87"
+ }
+ Frame {
+ msec: 5648
+ hash: "a790f0e884ab85f7802dd094e4ef550f"
+ }
+ Frame {
+ msec: 5664
+ hash: "3b644aac161f0a75bfb64f5075373190"
+ }
+ Frame {
+ msec: 5680
+ hash: "b12faa76c07adc21634cd8f8cb8436ae"
+ }
+ Frame {
+ msec: 5696
+ hash: "3fb20f9dbd40b4729235e13af9643afc"
+ }
+ Frame {
+ msec: 5712
+ hash: "f57727419bb51fb1e589b960ddeb20ae"
+ }
+ Frame {
+ msec: 5728
+ hash: "7b78cba247f2c209ed81e003ca25d0a5"
+ }
+ Frame {
+ msec: 5744
+ hash: "8172e076b05d95248d89e815fde820ef"
+ }
+ Frame {
+ msec: 5760
+ image: "animated.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "74c1e71378b502bc1b732a55806a10f1"
+ }
+ Frame {
+ msec: 5792
+ hash: "6eae517ad33f0609c31ef1f8f80ba899"
+ }
+ Frame {
+ msec: 5808
+ hash: "a67e9a0f55512fb1c55f13c6b483923b"
+ }
+ Frame {
+ msec: 5824
+ hash: "4887cd34d9926a361f3ca2e75be53ea6"
+ }
+ Frame {
+ msec: 5840
+ hash: "13ca95adab171d9fad9ee8b75d0226bc"
+ }
+ Frame {
+ msec: 5856
+ hash: "affab9fb48c889a2680eb81458d400f9"
+ }
+ Frame {
+ msec: 5872
+ hash: "7aa0cbf73f7999be7cde4ec739efbc33"
+ }
+ Frame {
+ msec: 5888
+ hash: "36c054064c9a76f4072492e55c70fb6c"
+ }
+ Frame {
+ msec: 5904
+ hash: "d1ed4916cb1ecff60277d74369ff311b"
+ }
+ Frame {
+ msec: 5920
+ hash: "63ebaa4869728f5e2891d068e4b0091c"
+ }
+ Frame {
+ msec: 5936
+ hash: "29245946cbd811fe6bf6b2b41cc13002"
+ }
+ Frame {
+ msec: 5952
+ hash: "8a9dd7a2d10771633e6896f3f4a722ae"
+ }
+ Frame {
+ msec: 5968
+ hash: "058c918e83bfdd665cd836566b53959b"
+ }
+ Frame {
+ msec: 5984
+ hash: "fdf3b7a0391119e2fe77be8d6a17481d"
+ }
+ Frame {
+ msec: 6000
+ hash: "ed5d80c33dbf72624385b1cf43784626"
+ }
+ Frame {
+ msec: 6016
+ hash: "911591db1519ba264847f09868e38e0e"
+ }
+ Frame {
+ msec: 6032
+ hash: "ed5d80c33dbf72624385b1cf43784626"
+ }
+ Frame {
+ msec: 6048
+ hash: "fdf3b7a0391119e2fe77be8d6a17481d"
+ }
+ Frame {
+ msec: 6064
+ hash: "058c918e83bfdd665cd836566b53959b"
+ }
+ Frame {
+ msec: 6080
+ hash: "8a9dd7a2d10771633e6896f3f4a722ae"
+ }
+ Frame {
+ msec: 6096
+ hash: "29245946cbd811fe6bf6b2b41cc13002"
+ }
+ Frame {
+ msec: 6112
+ hash: "63ebaa4869728f5e2891d068e4b0091c"
+ }
+ Frame {
+ msec: 6128
+ hash: "d1ed4916cb1ecff60277d74369ff311b"
+ }
+ Frame {
+ msec: 6144
+ hash: "36c054064c9a76f4072492e55c70fb6c"
+ }
+ Frame {
+ msec: 6160
+ hash: "7aa0cbf73f7999be7cde4ec739efbc33"
+ }
+ Frame {
+ msec: 6176
+ hash: "affab9fb48c889a2680eb81458d400f9"
+ }
+ Frame {
+ msec: 6192
+ hash: "13ca95adab171d9fad9ee8b75d0226bc"
+ }
+ Frame {
+ msec: 6208
+ hash: "4887cd34d9926a361f3ca2e75be53ea6"
+ }
+ Frame {
+ msec: 6224
+ hash: "a67e9a0f55512fb1c55f13c6b483923b"
+ }
+ Frame {
+ msec: 6240
+ hash: "6eae517ad33f0609c31ef1f8f80ba899"
+ }
+ Frame {
+ msec: 6256
+ hash: "74c1e71378b502bc1b732a55806a10f1"
+ }
+ Frame {
+ msec: 6272
+ hash: "a88d6fc324ef48aa52c642a1662ec679"
+ }
+ Frame {
+ msec: 6288
+ hash: "8172e076b05d95248d89e815fde820ef"
+ }
+ Frame {
+ msec: 6304
+ hash: "7b78cba247f2c209ed81e003ca25d0a5"
+ }
+ Frame {
+ msec: 6320
+ hash: "f57727419bb51fb1e589b960ddeb20ae"
+ }
+ Frame {
+ msec: 6336
+ hash: "3fb20f9dbd40b4729235e13af9643afc"
+ }
+ Frame {
+ msec: 6352
+ hash: "b12faa76c07adc21634cd8f8cb8436ae"
+ }
+ Frame {
+ msec: 6368
+ hash: "3b644aac161f0a75bfb64f5075373190"
+ }
+ Frame {
+ msec: 6384
+ hash: "a790f0e884ab85f7802dd094e4ef550f"
+ }
+ Frame {
+ msec: 6400
+ hash: "a6937ee49648ed0cb409063bf1da3b87"
+ }
+ Frame {
+ msec: 6416
+ hash: "0b1a741975e3d9ef8f5e78f371c89441"
+ }
+ Frame {
+ msec: 6432
+ hash: "1bf7a98884b506b38326f59f85a53f41"
+ }
+ Frame {
+ msec: 6448
+ hash: "fb17df681d99d5de05f6329bba697ea5"
+ }
+ Frame {
+ msec: 6464
+ hash: "acd9a2e76b22ab0ff809fd3ec3a018ec"
+ }
+ Frame {
+ msec: 6480
+ hash: "73c5f23f51797a33f4d2898738e6356e"
+ }
+ Frame {
+ msec: 6496
+ hash: "65c514c9e926affe1da0b4826d2754c7"
+ }
+ Frame {
+ msec: 6512
+ hash: "5b027815ea3c1ea54e1a02c798c468db"
+ }
+ Frame {
+ msec: 6528
+ hash: "e1e6c7a7f51bcccd749710dbbf9e97f6"
+ }
+ Frame {
+ msec: 6544
+ hash: "11673a112566a64aca3c7010b9cc9c4d"
+ }
+ Frame {
+ msec: 6560
+ hash: "826c7741ba0c51de407bb799e8f360b5"
+ }
+ Frame {
+ msec: 6576
+ hash: "3b95eb8cbfc831e1ebee2e456b026ab4"
+ }
+ Frame {
+ msec: 6592
+ hash: "95d776c84fe155617fc4ee51bdb45b7e"
+ }
+ Frame {
+ msec: 6608
+ hash: "a1bd4e995365e79389dba80f9e3b7af8"
+ }
+ Frame {
+ msec: 6624
+ hash: "44072400ca3f0237d1aebae28a94becc"
+ }
+ Frame {
+ msec: 6640
+ hash: "99de44f74f8e1f79652ab46afb4bb59e"
+ }
+ Frame {
+ msec: 6656
+ hash: "4f1eace868a6688e5b24ce48a1f0fd18"
+ }
+ Frame {
+ msec: 6672
+ hash: "84c94704c16e246df1048f958cc8cefb"
+ }
+ Frame {
+ msec: 6688
+ hash: "e880d93963c80e4fab5173554c9600fc"
+ }
+ Frame {
+ msec: 6704
+ hash: "e91bb914c1eb63cd4269b30a220a128a"
+ }
+ Frame {
+ msec: 6720
+ image: "animated.6.png"
+ }
+ Frame {
+ msec: 6736
+ hash: "985868869ef2c332da379460a2f3a71b"
+ }
+ Frame {
+ msec: 6752
+ hash: "587cb6e05048579088e88e0180e3ad48"
+ }
+ Frame {
+ msec: 6768
+ hash: "97f7a2175dcf9ac2581a92d614d72f88"
+ }
+ Frame {
+ msec: 6784
+ hash: "93128906d054e44bfd126fc22bdc3102"
+ }
+ Frame {
+ msec: 6800
+ hash: "08f55088cdce741c67539f73291e53ab"
+ }
+ Frame {
+ msec: 6816
+ hash: "30f84a7f67b13a945ba6d5935ea92da5"
+ }
+ Frame {
+ msec: 6832
+ hash: "5359f5e45e5467c62c2d9521c8199c48"
+ }
+ Frame {
+ msec: 6848
+ hash: "7c22fc3e30377cc14326833bdd23ddd8"
+ }
+ Frame {
+ msec: 6864
+ hash: "80ebac4d923f67fb8dba3d133ce657ba"
+ }
+ Frame {
+ msec: 6880
+ hash: "c3a1f12febc979150028737722d6d045"
+ }
+ Frame {
+ msec: 6896
+ hash: "81d2fc6727dc7449d1a87b4abea9b704"
+ }
+ Frame {
+ msec: 6912
+ hash: "68dae343cf324391ec6721cea14575f7"
+ }
+ Frame {
+ msec: 6928
+ hash: "ec0aea8dc8c269d1f0aee5817347ac55"
+ }
+ Frame {
+ msec: 6944
+ hash: "a4ddb4956d71fd642d54757938100cf3"
+ }
+ Frame {
+ msec: 6960
+ hash: "956429472da133324c970774f77784f5"
+ }
+ Frame {
+ msec: 6976
+ hash: "c763f56728e17fc119539a4d45dfccc3"
+ }
+ Frame {
+ msec: 6992
+ hash: "ae48da4a66f93c806725ce749700aac8"
+ }
+ Frame {
+ msec: 7008
+ hash: "bccb4b8a494bd45bd70c2524a02a9dc3"
+ }
+ Frame {
+ msec: 7024
+ hash: "bc747167dfb3388ac63e9e68a86b9a03"
+ }
+ Frame {
+ msec: 7040
+ hash: "86360bd58bba5fdd901c105ddb2e3ade"
+ }
+ Frame {
+ msec: 7056
+ hash: "7383209c80b403b93da3264eadbc047f"
+ }
+ Frame {
+ msec: 7072
+ hash: "280288a7988736e30a2a3e4289ac3b0c"
+ }
+ Frame {
+ msec: 7088
+ hash: "ff0928dfd16b2da9811a172c19817a97"
+ }
+ Frame {
+ msec: 7104
+ hash: "eac4600372f0fdfadee88896ac915a48"
+ }
+ Frame {
+ msec: 7120
+ hash: "f04e84ad3579d6334077abe73101d206"
+ }
+ Frame {
+ msec: 7136
+ hash: "8861bf848da5c96b35addff736b01520"
+ }
+ Frame {
+ msec: 7152
+ hash: "1ac8c393f084aa1894c26610b7f40ea6"
+ }
+ Frame {
+ msec: 7168
+ hash: "e8a61d3858244127cb2b2812f04f5ce9"
+ }
+ Frame {
+ msec: 7184
+ hash: "93cf31eabb454ec536c638a506be0648"
+ }
+ Frame {
+ msec: 7200
+ hash: "0cba07ca38c7f0483244832a42d9ac53"
+ }
+ Frame {
+ msec: 7216
+ hash: "c7eb7837dce71c914186326216214eeb"
+ }
+ Frame {
+ msec: 7232
+ hash: "593a8a45c3a0cd7ce1cb6bd1913136ba"
+ }
+ Frame {
+ msec: 7248
+ hash: "1ea07ee309ce2c52cbc36370b75a872f"
+ }
+ Frame {
+ msec: 7264
+ hash: "93d9f0a7c387cbe653a9a088f8f4ef2b"
+ }
+ Frame {
+ msec: 7280
+ hash: "a6f17da2dd581bdc249ff62f833dc025"
+ }
+ Frame {
+ msec: 7296
+ hash: "b74521d6ac531414aeeca0fb28379d11"
+ }
+ Frame {
+ msec: 7312
+ hash: "6a521f952e05d91b86ad78fd6f5de4f9"
+ }
+ Frame {
+ msec: 7328
+ hash: "4e60300cfab8634e04dcd1b556251d31"
+ }
+ Frame {
+ msec: 7344
+ hash: "60f158382f75103c78e2b9b408e0fe65"
+ }
+ Frame {
+ msec: 7360
+ hash: "153237f8cf37e29ad2f32f7a8a6aecdb"
+ }
+ Frame {
+ msec: 7376
+ hash: "554e1d360463871e7c05cfe6f8abe1dd"
+ }
+ Frame {
+ msec: 7392
+ hash: "e418b5f54705515dce5ce3b4cbc45d19"
+ }
+ Frame {
+ msec: 7408
+ hash: "19d05a96f3ae7388e854bbf1075b51c1"
+ }
+ Frame {
+ msec: 7424
+ hash: "4ae120bb6dc2bd5ff81cc99ae03c191e"
+ }
+ Frame {
+ msec: 7440
+ hash: "18c2f321a149e38b258ac264d40c2376"
+ }
+ Frame {
+ msec: 7456
+ hash: "a40014d842471784e1222eb205395f6f"
+ }
+ Frame {
+ msec: 7472
+ hash: "f1a7a4a67a21f5025294af4bea3f8998"
+ }
+ Frame {
+ msec: 7488
+ hash: "3152e5f29015ece423fbdd11a2b382b8"
+ }
+ Frame {
+ msec: 7504
+ hash: "2a7bed775824968e318c3d40fbc5b1c2"
+ }
+ Frame {
+ msec: 7520
+ hash: "dd4c9e63001bc6e0e63ea4db2d85301f"
+ }
+ Frame {
+ msec: 7536
+ hash: "ac8f096e8c7cc23bfb01de69cf3e266e"
+ }
+ Frame {
+ msec: 7552
+ hash: "6b48bfd0c7993f746d6301c2a0f61d23"
+ }
+ Frame {
+ msec: 7568
+ hash: "06d8d8a1a41893d4e27725948a75caf4"
+ }
+ Frame {
+ msec: 7584
+ hash: "3f62f032239d412d3637198f5e3e83d6"
+ }
+ Frame {
+ msec: 7600
+ hash: "01947e631c3db43f7c5b4427229bc0c8"
+ }
+ Frame {
+ msec: 7616
+ hash: "2266df495ab5265e7514a506d3bf5bc6"
+ }
+ Frame {
+ msec: 7632
+ hash: "8c66a33d26eec2a1133f4362710a5fab"
+ }
+ Frame {
+ msec: 7648
+ hash: "75c9bf83ca3fe24612c245698c089430"
+ }
+ Frame {
+ msec: 7664
+ hash: "c1936628aec13e08e9581dcd2c6d5717"
+ }
+ Frame {
+ msec: 7680
+ image: "animated.7.png"
+ }
+ Frame {
+ msec: 7696
+ hash: "8419f1d75b14130730bcfec4e3a9b058"
+ }
+ Frame {
+ msec: 7712
+ hash: "482bb92d4f0ad5d7c7e379b9e1ad326e"
+ }
+ Frame {
+ msec: 7728
+ hash: "406224b535b4425d2708df0083acdc8e"
+ }
+ Frame {
+ msec: 7744
+ hash: "3dac1d9632378bd18c1c938a4868e3fb"
+ }
+ Frame {
+ msec: 7760
+ hash: "08b9be66e23c7b6f6f629c7470394601"
+ }
+ Frame {
+ msec: 7776
+ hash: "7b4d12e5a877507e7454aa1b8ed87c2d"
+ }
+ Frame {
+ msec: 7792
+ hash: "4d45d70f997c2c67166905c97a900d2e"
+ }
+ Frame {
+ msec: 7808
+ hash: "c5b3dede34b0d1d78135e39c41d117c6"
+ }
+ Frame {
+ msec: 7824
+ hash: "b63e4d1686057828fd8781f1c33585f5"
+ }
+ Frame {
+ msec: 7840
+ hash: "755cfccc38bababc468fe6e1076804bb"
+ }
+ Frame {
+ msec: 7856
+ hash: "465ec993948f7b75aeb5759976f4620d"
+ }
+ Frame {
+ msec: 7872
+ hash: "228d5312c261d1a5455faf69ec2f2520"
+ }
+ Frame {
+ msec: 7888
+ hash: "aacf9ae3c23d174a1c1cda493600e355"
+ }
+ Frame {
+ msec: 7904
+ hash: "4c60d345821f515c7811f3b69eb94607"
+ }
+ Frame {
+ msec: 7920
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 7936
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 7952
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 7968
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 7984
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 8000
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 8016
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 8032
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 8048
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 8064
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 8080
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 8096
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 8112
+ hash: "aec13bcab337e55832b0a02fb5c6b526"
+ }
+ Frame {
+ msec: 8128
+ hash: "4c60d345821f515c7811f3b69eb94607"
+ }
+ Frame {
+ msec: 8144
+ hash: "aacf9ae3c23d174a1c1cda493600e355"
+ }
+ Frame {
+ msec: 8160
+ hash: "228d5312c261d1a5455faf69ec2f2520"
+ }
+ Frame {
+ msec: 8176
+ hash: "465ec993948f7b75aeb5759976f4620d"
+ }
+ Frame {
+ msec: 8192
+ hash: "755cfccc38bababc468fe6e1076804bb"
+ }
+ Frame {
+ msec: 8208
+ hash: "b63e4d1686057828fd8781f1c33585f5"
+ }
+ Frame {
+ msec: 8224
+ hash: "c5b3dede34b0d1d78135e39c41d117c6"
+ }
+ Frame {
+ msec: 8240
+ hash: "4d45d70f997c2c67166905c97a900d2e"
+ }
+ Frame {
+ msec: 8256
+ hash: "7b4d12e5a877507e7454aa1b8ed87c2d"
+ }
+ Frame {
+ msec: 8272
+ hash: "08b9be66e23c7b6f6f629c7470394601"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 8288
+ hash: "3dac1d9632378bd18c1c938a4868e3fb"
+ }
+ Frame {
+ msec: 8304
+ hash: "406224b535b4425d2708df0083acdc8e"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.0.png b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.0.png
new file mode 100644
index 0000000..80cbd26
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.1.png b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.1.png
new file mode 100644
index 0000000..80cbd26
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.2.png b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.2.png
new file mode 100644
index 0000000..80cbd26
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.3.png b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.3.png
new file mode 100644
index 0000000..80cbd26
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.4.png b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.4.png
new file mode 100644
index 0000000..80cbd26
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.qml b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.qml
new file mode 100644
index 0000000..16cd5e9
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsborderimage/data/borders.qml
@@ -0,0 +1,1359 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 32
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 48
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 64
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 80
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 96
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 112
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 128
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 144
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 160
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 176
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 192
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 208
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 224
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 240
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 256
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 272
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 288
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 304
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 320
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 336
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 352
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 368
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 384
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 400
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 416
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 432
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 448
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 464
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 480
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 496
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 512
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 528
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 544
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 560
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 576
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 592
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 608
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 624
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 640
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 656
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 672
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 688
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 704
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 720
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 736
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 752
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 768
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 784
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 800
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 816
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 832
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 848
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 864
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 880
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 896
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 912
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 928
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 944
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 960
+ image: "borders.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 992
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1008
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1024
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1040
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1056
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1072
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1088
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1104
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1120
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1136
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1152
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1168
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1184
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1200
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1216
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1232
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1248
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1264
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1280
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1296
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1312
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1328
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1344
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1360
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1376
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1392
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1408
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1424
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1440
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1456
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1472
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1488
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1504
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1520
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1536
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1552
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1568
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1584
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1600
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1616
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1632
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1648
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1664
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1680
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1696
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1712
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1728
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1744
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1760
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1776
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1792
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1808
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1824
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1840
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1856
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1872
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1888
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1904
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1920
+ image: "borders.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1952
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1968
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 1984
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2000
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2016
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2032
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2048
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2064
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2080
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2096
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2112
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2128
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2144
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2160
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2176
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2192
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2208
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2224
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2240
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2256
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2272
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2288
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2304
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2320
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2336
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2352
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2368
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2384
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2400
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2416
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2432
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2448
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2464
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2480
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2496
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2512
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2528
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2544
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2560
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2576
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2592
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2608
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2624
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2640
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2656
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2672
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2688
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2704
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2720
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2736
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2752
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2768
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2784
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2800
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2816
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2832
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2848
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2864
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2880
+ image: "borders.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2912
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2928
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2944
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2960
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2976
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 2992
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3008
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3024
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3040
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3056
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3072
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3088
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3104
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3120
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3136
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3152
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3168
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3184
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3200
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3216
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3232
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3248
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3264
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3280
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3296
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3312
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3328
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3344
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3360
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3376
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3392
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3408
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3424
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3440
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3456
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3472
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3488
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3504
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3520
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3536
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3552
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3568
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3584
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3600
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3616
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3632
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3648
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3664
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3680
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3696
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3712
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3728
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3744
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3760
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3776
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3792
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3808
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3824
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3840
+ image: "borders.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3872
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3888
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3904
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3920
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3936
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3952
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3968
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 3984
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4000
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4016
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4032
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4048
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4064
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4080
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4096
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4112
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4128
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4144
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4160
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4176
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4192
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4208
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4224
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4240
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4256
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4272
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4288
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4304
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4320
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4336
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4352
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4368
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4384
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4400
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4416
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4432
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4448
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4464
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4480
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4496
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4512
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4528
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4544
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4560
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4576
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4592
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4608
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4624
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4640
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4656
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4672
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4688
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4704
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4720
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4736
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4752
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4768
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4784
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4800
+ image: "borders.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4832
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4848
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4864
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4880
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4896
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4912
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4928
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4944
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4960
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4976
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 4992
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5008
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5024
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5040
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5056
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5072
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5088
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5104
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5120
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5136
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5152
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5168
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5184
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5200
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5216
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5232
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5248
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5264
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5280
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5296
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5312
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5328
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5344
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5360
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5376
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5392
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+ Frame {
+ msec: 5408
+ hash: "ab9753116e289c932064144bb0845857"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-horizontal.0.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-horizontal.0.png
new file mode 100644
index 0000000..016902b
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-horizontal.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-horizontal.1.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-horizontal.1.png
new file mode 100644
index 0000000..a654936
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-horizontal.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-horizontal.2.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-horizontal.2.png
new file mode 100644
index 0000000..cfd5517
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-horizontal.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-horizontal.3.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-horizontal.3.png
new file mode 100644
index 0000000..016902b
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-horizontal.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-horizontal.qml b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-horizontal.qml
new file mode 100644
index 0000000..46086f9
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-horizontal.qml
@@ -0,0 +1,1199 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 32
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 48
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 64
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 80
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 96
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 112
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 128
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 144
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 160
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 176
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 192
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 208
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 224
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 240
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 256
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 272
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 288
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 304
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 320
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 336
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 352
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 368
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 384
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 400
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 416
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 432
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 448
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 464
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 480
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 496
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 512
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 528
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 544
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 560
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 576
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 592
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 608
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 624
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 640
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 656
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 672
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 688
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 704
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 720
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 736
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 752
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 768
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 784
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 800
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 816
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 832
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 848
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 864
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 880
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 896
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 912
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 928
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 944
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 477; y: 171
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 960
+ image: "flickable-horizontal.0.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 473; y: 171
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 976
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 463; y: 171
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 992
+ hash: "c4d91a9e7f785ccd50db55f697d75cb9"
+ }
+ Frame {
+ msec: 1008
+ hash: "c4d91a9e7f785ccd50db55f697d75cb9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 449; y: 171
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1024
+ hash: "4f054038668f56cf3fc46dee08504b24"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 425; y: 172
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1040
+ hash: "e6ae6e2a8e5fb7204ae1f559b5dc4a63"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 393; y: 172
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 393; y: 172
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1056
+ hash: "3bfaaef12ca852421ad179d8598a306d"
+ }
+ Frame {
+ msec: 1072
+ hash: "e00ff5e13a9a97bc11e041f89e4782f5"
+ }
+ Frame {
+ msec: 1088
+ hash: "ae10ada837b21365936672e9a4b4b175"
+ }
+ Frame {
+ msec: 1104
+ hash: "63566d7f1707025c9ec37e398d0e69ef"
+ }
+ Frame {
+ msec: 1120
+ hash: "20e9d299cd867d680cf85f99e06cd200"
+ }
+ Frame {
+ msec: 1136
+ hash: "4d3a19b3c50a20ba1d93a8bcd178a424"
+ }
+ Frame {
+ msec: 1152
+ hash: "d373ab5240e438e8234ae05f935c1ef8"
+ }
+ Frame {
+ msec: 1168
+ hash: "2f9c00aa1f8a8cc5d10e6c6a0baee366"
+ }
+ Frame {
+ msec: 1184
+ hash: "0fd8203b0a33fd8243ecd878f04f9b42"
+ }
+ Frame {
+ msec: 1200
+ hash: "24a197df4209c7076d68031e5dd4fd9e"
+ }
+ Frame {
+ msec: 1216
+ hash: "9e4271eacdc875183e3c8e7a1eb098c2"
+ }
+ Frame {
+ msec: 1232
+ hash: "cdf7aac4ff7e5df806977eb38392f5bc"
+ }
+ Frame {
+ msec: 1248
+ hash: "1ace4a1312cad6f173a04c388624a97f"
+ }
+ Frame {
+ msec: 1264
+ hash: "193d6d6838ac1d5ddb941fbb340ec506"
+ }
+ Frame {
+ msec: 1280
+ hash: "ed82807a48f28610ba9bda0c7ab91ce4"
+ }
+ Frame {
+ msec: 1296
+ hash: "e1168bb9a88a972decb0c537d86d7758"
+ }
+ Frame {
+ msec: 1312
+ hash: "828ba428b04826687c6ef19b72318924"
+ }
+ Frame {
+ msec: 1328
+ hash: "7dae52c428253cf44045ffaabaadd2f4"
+ }
+ Frame {
+ msec: 1344
+ hash: "06e2a81e1a2421523642cfcf17ec22e4"
+ }
+ Frame {
+ msec: 1360
+ hash: "283997835a54e80c0ab8a0321bd03ce7"
+ }
+ Frame {
+ msec: 1376
+ hash: "6354f9379b7b25c8fabda4e5bc3cdf6a"
+ }
+ Frame {
+ msec: 1392
+ hash: "6bc87dfd21d59efd3397e3cfb0d00d25"
+ }
+ Frame {
+ msec: 1408
+ hash: "4f97fc9aa1f79a6b007a00459386b9ff"
+ }
+ Frame {
+ msec: 1424
+ hash: "2b5c711ede124c9e97d3ef83a3fdcc8b"
+ }
+ Frame {
+ msec: 1440
+ hash: "5a8cbd4ac3fcd920f2aea6e2cfa96467"
+ }
+ Frame {
+ msec: 1456
+ hash: "5b32961cb36e519f5b1d50386e796d3e"
+ }
+ Frame {
+ msec: 1472
+ hash: "c91f95cccd38cbd1a16ee65abffd40ab"
+ }
+ Frame {
+ msec: 1488
+ hash: "25108050298d3ffc850113971bcf54da"
+ }
+ Frame {
+ msec: 1504
+ hash: "6a236881f2a1cb487ee1945c279e020b"
+ }
+ Frame {
+ msec: 1520
+ hash: "2df1824df1cf20022595f64d26adb4ad"
+ }
+ Frame {
+ msec: 1536
+ hash: "4ca4a0a4b4fd9f9c4846adebcdc8fd67"
+ }
+ Frame {
+ msec: 1552
+ hash: "1696ef0862ff4772f960d203c43fbddf"
+ }
+ Frame {
+ msec: 1568
+ hash: "c5846835b8eb5d98c481ee5811344ea1"
+ }
+ Frame {
+ msec: 1584
+ hash: "fbcb044ee53302de573321b43f068e65"
+ }
+ Frame {
+ msec: 1600
+ hash: "d369e0a6c4a3e63102be29a7362ef9eb"
+ }
+ Frame {
+ msec: 1616
+ hash: "e93131b881805d4aa44949c69f486821"
+ }
+ Frame {
+ msec: 1632
+ hash: "b7aeee9e5065f1d4656e451b542ecf6a"
+ }
+ Frame {
+ msec: 1648
+ hash: "05521ca19960c070d5f3dd72c5ade0e4"
+ }
+ Frame {
+ msec: 1664
+ hash: "2c68cb3291cf1f892c8b8eb28b409e4d"
+ }
+ Frame {
+ msec: 1680
+ hash: "5a0908aea91df2b9e65d222829c2b0ba"
+ }
+ Frame {
+ msec: 1696
+ hash: "0d4ff147517eee8b3dbcd51a708b2aa7"
+ }
+ Frame {
+ msec: 1712
+ hash: "521e1075de1de89c6e25f469d2728ab7"
+ }
+ Frame {
+ msec: 1728
+ hash: "c543447f98ae608058c6c02c8c8665e6"
+ }
+ Frame {
+ msec: 1744
+ hash: "ac259db754b7dfb8cce8548527c72e4b"
+ }
+ Frame {
+ msec: 1760
+ hash: "bc5b68d5ecfb583ae41001e326b7aa9b"
+ }
+ Frame {
+ msec: 1776
+ hash: "e08051cb1ab2d8f979a52dc86411f78f"
+ }
+ Frame {
+ msec: 1792
+ hash: "b1746ad9563359f0d70a1aaee62e9bd8"
+ }
+ Frame {
+ msec: 1808
+ hash: "5d6bc33ff2857fb8db582362bf7c19c7"
+ }
+ Frame {
+ msec: 1824
+ hash: "83f2c3a7124f9be4dbe883a27ca7df8e"
+ }
+ Frame {
+ msec: 1840
+ hash: "189f7cfb5ede1f8380b1a05b7e3d942e"
+ }
+ Frame {
+ msec: 1856
+ hash: "07b1a4e5ca156e6aa1f3e76b825807ce"
+ }
+ Frame {
+ msec: 1872
+ hash: "48b25f0acfe6eb3bc2cb9eb16e6595d0"
+ }
+ Frame {
+ msec: 1888
+ hash: "15ae05f5ed098021073c4593587949ea"
+ }
+ Frame {
+ msec: 1904
+ hash: "b300f2c75f4aebcf84ed37ad424ca9fa"
+ }
+ Frame {
+ msec: 1920
+ image: "flickable-horizontal.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "7d8ea492fb1c664502e95e085896c569"
+ }
+ Frame {
+ msec: 1952
+ hash: "7513b077e073d78b387309b56e1fd44c"
+ }
+ Frame {
+ msec: 1968
+ hash: "ed1ac5cf6d4b081983a8e16258f431bf"
+ }
+ Frame {
+ msec: 1984
+ hash: "fbb31f23ba6e5d02011363abfb4b3f18"
+ }
+ Frame {
+ msec: 2000
+ hash: "6f01df424b38036b9921b4ee1491a1c1"
+ }
+ Frame {
+ msec: 2016
+ hash: "11f706dfacbec5c0be0c2f3c5442f717"
+ }
+ Frame {
+ msec: 2032
+ hash: "0a70348986f4987f43db3e55af63fca5"
+ }
+ Frame {
+ msec: 2048
+ hash: "6f8b7aaad846f83c6349836d7af34662"
+ }
+ Frame {
+ msec: 2064
+ hash: "44723b22aad6d2d814e074ff9324f3c4"
+ }
+ Frame {
+ msec: 2080
+ hash: "44723b22aad6d2d814e074ff9324f3c4"
+ }
+ Frame {
+ msec: 2096
+ hash: "44723b22aad6d2d814e074ff9324f3c4"
+ }
+ Frame {
+ msec: 2112
+ hash: "1c12d2c68223324f040b7a693cef2074"
+ }
+ Frame {
+ msec: 2128
+ hash: "0a70348986f4987f43db3e55af63fca5"
+ }
+ Frame {
+ msec: 2144
+ hash: "bf4de7baf2730cdaf83887d50d577986"
+ }
+ Frame {
+ msec: 2160
+ hash: "23ddb2c0793d7161a0d8c5b2a777dceb"
+ }
+ Frame {
+ msec: 2176
+ hash: "7513b077e073d78b387309b56e1fd44c"
+ }
+ Frame {
+ msec: 2192
+ hash: "83fa82362057466dff6a243a95d423db"
+ }
+ Frame {
+ msec: 2208
+ hash: "0e60b632ce511109cb01d2e5ff6945f8"
+ }
+ Frame {
+ msec: 2224
+ hash: "78c25194827c4243a16807491f798cdf"
+ }
+ Frame {
+ msec: 2240
+ hash: "4c9dc46794d4a32e654395bb9d78409e"
+ }
+ Frame {
+ msec: 2256
+ hash: "e996d4f3a0b3a4a4ed29ec23a1ad5615"
+ }
+ Frame {
+ msec: 2272
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2288
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2304
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2320
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2336
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2352
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2368
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2384
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2400
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2416
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2432
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2448
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2464
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2480
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2496
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2512
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2528
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2544
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2560
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2576
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2592
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2608
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2624
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2640
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2656
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2672
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2688
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2704
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2720
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2736
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2752
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2768
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 152; y: 189
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2784
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2800
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Frame {
+ msec: 2816
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 154; y: 190
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2832
+ hash: "cd6770afe63f28517a93f0961cf9c26e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 169; y: 191
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2848
+ hash: "edd015434d7ead96c03a51a2b1c9e527"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 202; y: 192
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2864
+ hash: "ea0eda505daea4171e27aac358aa6a4a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 256; y: 192
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2880
+ image: "flickable-horizontal.2.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 331; y: 192
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2896
+ hash: "34f70dfe1c226e63300112aa9a4a6968"
+ }
+ Frame {
+ msec: 2912
+ hash: "34f70dfe1c226e63300112aa9a4a6968"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 395; y: 194
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 395; y: 194
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2928
+ hash: "dd61e0ae58d7a344908a10bb97cfcb39"
+ }
+ Frame {
+ msec: 2944
+ hash: "14a384c4bdd3e89808761d1e86976170"
+ }
+ Frame {
+ msec: 2960
+ hash: "0e82a4920a53239f117448cd0e0b27f2"
+ }
+ Frame {
+ msec: 2976
+ hash: "711e29bf6fbbeb7882064adb0619f4ac"
+ }
+ Frame {
+ msec: 2992
+ hash: "43307cbfe1688daf300fafc8df0082b8"
+ }
+ Frame {
+ msec: 3008
+ hash: "46d788d926c03d85a68b66252e73ae90"
+ }
+ Frame {
+ msec: 3024
+ hash: "a0042935ad2d5557c906050d4a3581c9"
+ }
+ Frame {
+ msec: 3040
+ hash: "b618a40490ca0aea310f08b452fa8c68"
+ }
+ Frame {
+ msec: 3056
+ hash: "e2aaad7f160a6d77dd788c76bb8cb8a7"
+ }
+ Frame {
+ msec: 3072
+ hash: "ab5c27fa790c67a6678db0bbae1ae477"
+ }
+ Frame {
+ msec: 3088
+ hash: "b43ed7af838cd6edd32393fc56cf8fb1"
+ }
+ Frame {
+ msec: 3104
+ hash: "88ac50602c9f27fb5b882ad32d14ff46"
+ }
+ Frame {
+ msec: 3120
+ hash: "259af2e080ed93e16cb633fa940c7c08"
+ }
+ Frame {
+ msec: 3136
+ hash: "d05bec2351068d552b7bbbf47cf82fad"
+ }
+ Frame {
+ msec: 3152
+ hash: "5354b8e07f1ed22950687187ee7a0290"
+ }
+ Frame {
+ msec: 3168
+ hash: "3bfaaef12ca852421ad179d8598a306d"
+ }
+ Frame {
+ msec: 3184
+ hash: "40d3a77fce7a9a9ca7ae6023fc4cfc10"
+ }
+ Frame {
+ msec: 3200
+ hash: "5837c0122aa6b28518f1b7043ead99a9"
+ }
+ Frame {
+ msec: 3216
+ hash: "9514d8530275e4642810ac441e8de353"
+ }
+ Frame {
+ msec: 3232
+ hash: "3b720882f52340549d8e1b9659443461"
+ }
+ Frame {
+ msec: 3248
+ hash: "4de5b95c8f4949a4f1ee9a119940e80a"
+ }
+ Frame {
+ msec: 3264
+ hash: "a35097c00483e0b481222e4ad220c7a4"
+ }
+ Frame {
+ msec: 3280
+ hash: "82ac348a63a4e358a877a2e45d48e2b1"
+ }
+ Frame {
+ msec: 3296
+ hash: "1322108409d1fa87d128f0c44c81ab4b"
+ }
+ Frame {
+ msec: 3312
+ hash: "f6b030effcca891ab20073f106b22d73"
+ }
+ Frame {
+ msec: 3328
+ hash: "a7ccd998ac2ff2777d9423d704ddef48"
+ }
+ Frame {
+ msec: 3344
+ hash: "b6d971a4f3321b7f3632e778ce733589"
+ }
+ Frame {
+ msec: 3360
+ hash: "b6d971a4f3321b7f3632e778ce733589"
+ }
+ Frame {
+ msec: 3376
+ hash: "b6d971a4f3321b7f3632e778ce733589"
+ }
+ Frame {
+ msec: 3392
+ hash: "82ef6700a513e39508fb6de5ef07f1e7"
+ }
+ Frame {
+ msec: 3408
+ hash: "9e4c4d479bc0b1a61566eae12416bea6"
+ }
+ Frame {
+ msec: 3424
+ hash: "f6b030effcca891ab20073f106b22d73"
+ }
+ Frame {
+ msec: 3440
+ hash: "8968acd022a9ba6fcc3ea52bdd7268c4"
+ }
+ Frame {
+ msec: 3456
+ hash: "de8f1a1fd680af475173d5f81e85b26c"
+ }
+ Frame {
+ msec: 3472
+ hash: "82e8c0c7cb7c2b1e8d7a5fc019533e6b"
+ }
+ Frame {
+ msec: 3488
+ hash: "f820d250252cd910af97e5c9be181457"
+ }
+ Frame {
+ msec: 3504
+ hash: "a40558c1fbf328d3c891b473b2454020"
+ }
+ Frame {
+ msec: 3520
+ hash: "0ef9e64bad67670102e1e4d9ef0e96f3"
+ }
+ Frame {
+ msec: 3536
+ hash: "1d8013765ac2d3fe09ccaa6db098a208"
+ }
+ Frame {
+ msec: 3552
+ hash: "1d8013765ac2d3fe09ccaa6db098a208"
+ }
+ Frame {
+ msec: 3568
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3584
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3600
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3616
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3632
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3648
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3664
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3680
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3696
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3712
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3728
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3744
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3760
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3776
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3792
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3808
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3824
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3840
+ image: "flickable-horizontal.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3872
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3888
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3904
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3920
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3936
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3952
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3968
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 3984
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 4000
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 4016
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 4032
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 4048
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 4064
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 4080
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 4096
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 4112
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 4128
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 4144
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 4160
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4176
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 4192
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 4208
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 4224
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 4240
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+ Frame {
+ msec: 4256
+ hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.0.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.0.png
new file mode 100644
index 0000000..18fef53
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.1.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.1.png
new file mode 100644
index 0000000..18fef53
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.10.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.10.png
new file mode 100644
index 0000000..b352c68
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.10.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.11.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.11.png
new file mode 100644
index 0000000..ce7ee68
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.11.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.12.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.12.png
new file mode 100644
index 0000000..d8cdacf
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.12.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.13.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.13.png
new file mode 100644
index 0000000..0c2fa7b
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.13.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.14.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.14.png
new file mode 100644
index 0000000..e9b3028
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.14.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.15.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.15.png
new file mode 100644
index 0000000..2186a8b
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.15.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.16.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.16.png
new file mode 100644
index 0000000..b4590af
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.16.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.17.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.17.png
new file mode 100644
index 0000000..fe29f19
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.17.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.18.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.18.png
new file mode 100644
index 0000000..fe29f19
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.18.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.19.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.19.png
new file mode 100644
index 0000000..4f8587f
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.19.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.2.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.2.png
new file mode 100644
index 0000000..0a7cc03
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.20.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.20.png
new file mode 100644
index 0000000..4f8587f
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.20.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.21.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.21.png
new file mode 100644
index 0000000..c0b0bdf
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.21.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.22.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.22.png
new file mode 100644
index 0000000..4168c3b
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.22.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.23.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.23.png
new file mode 100644
index 0000000..18fef53
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.23.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.24.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.24.png
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.24.png
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.3.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.3.png
new file mode 100644
index 0000000..fc6669d
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.4.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.4.png
new file mode 100644
index 0000000..c0b0bdf
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.5.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.5.png
new file mode 100644
index 0000000..2ffa96e
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.6.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.6.png
new file mode 100644
index 0000000..f550b89
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.7.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.7.png
new file mode 100644
index 0000000..f550b89
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.7.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.8.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.8.png
new file mode 100644
index 0000000..f550b89
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.8.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.9.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.9.png
new file mode 100644
index 0000000..f550b89
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.9.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.qml b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.qml
new file mode 100644
index 0000000..c376e39
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.qml
@@ -0,0 +1,7037 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 32
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 48
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 64
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 80
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 96
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 112
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 128
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 144
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 160
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 176
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 192
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 208
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 224
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 240
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 256
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 272
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 288
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 304
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 320
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 336
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 352
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 368
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 384
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 400
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 416
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 432
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 448
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 464
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 480
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 496
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 512
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 528
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 544
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 560
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 576
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 592
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 608
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 624
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 640
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 656
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 672
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 688
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 704
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 720
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 736
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 752
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 768
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 784
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 800
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 816
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 832
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 848
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 864
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 880
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 896
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 912
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 928
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 944
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 960
+ image: "flickable-vertical.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 992
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1008
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1024
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1040
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1056
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1072
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1088
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1104
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1120
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1136
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1152
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1168
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1184
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1200
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1216
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1232
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1248
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1264
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1280
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1296
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1312
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1328
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1344
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1360
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1376
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1392
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1408
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1424
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1440
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1456
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1472
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1488
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1504
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1520
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1536
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1552
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1568
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1584
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1600
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1616
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1632
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1648
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1664
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1680
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1696
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1712
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1728
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1744
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1760
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1776
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1792
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1808
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1824
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1840
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1856
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1872
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1888
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1904
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1920
+ image: "flickable-vertical.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1952
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1968
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 1984
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2000
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2016
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2032
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2048
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2064
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2080
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2096
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2112
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2128
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2144
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2160
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2176
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2192
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2208
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2224
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2240
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2256
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2272
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2288
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2304
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2320
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2336
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2352
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 2368
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 143; y: 387
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2384
+ hash: "a21e65718bc7a0cdcbeb058d0cbd2977"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 144; y: 386
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2400
+ hash: "a21e65718bc7a0cdcbeb058d0cbd2977"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 145; y: 386
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 147; y: 380
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2416
+ hash: "a21e65718bc7a0cdcbeb058d0cbd2977"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 151; y: 372
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2432
+ hash: "90d9c65705a006741671657d00ab9dba"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 159; y: 346
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2448
+ hash: "8c6301fb7409a22fda85072d48e838c8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 161; y: 328
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 161; y: 304
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2464
+ hash: "f5121fd6b0f20844d13cd8625a1a5047"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 159; y: 276
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 159; y: 276
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2480
+ hash: "0d64b804b3b7e3ee052395f612d62bcf"
+ }
+ Frame {
+ msec: 2496
+ hash: "17b68429dfaf80bb3313e78bb01d6c4e"
+ }
+ Frame {
+ msec: 2512
+ hash: "e86ea3b103a7d9f95f7484f3579a95b5"
+ }
+ Frame {
+ msec: 2528
+ hash: "884d3842f4aa2a38ff73511b143789a0"
+ }
+ Frame {
+ msec: 2544
+ hash: "646d1dd3003ccac06b7251e8ce1beb2f"
+ }
+ Frame {
+ msec: 2560
+ hash: "ff66db77c56bf6830bc39211b3441e69"
+ }
+ Frame {
+ msec: 2576
+ hash: "8ff9c081cf823adaf6b17014fc582f12"
+ }
+ Frame {
+ msec: 2592
+ hash: "7b1563aed6f030003e04f19bb6e91a51"
+ }
+ Frame {
+ msec: 2608
+ hash: "3661b26f082e44cbc38e6033c28e99cb"
+ }
+ Frame {
+ msec: 2624
+ hash: "8e0f117dc1f2527d6b2b3f0c849fbda1"
+ }
+ Frame {
+ msec: 2640
+ hash: "5a13b0045bc132ec6c917a6d7ddf9c7a"
+ }
+ Frame {
+ msec: 2656
+ hash: "06f332d287ed14b29dd0a252d59565a2"
+ }
+ Frame {
+ msec: 2672
+ hash: "7b1512aabac1fb17ecc8e0c771e2477f"
+ }
+ Frame {
+ msec: 2688
+ hash: "22b62a7b42df6bbafad76d99001616c7"
+ }
+ Frame {
+ msec: 2704
+ hash: "0f6588fc79fa06097b2ba9bf6b1d6d14"
+ }
+ Frame {
+ msec: 2720
+ hash: "c7849941c7572b3581a7eb9423838d90"
+ }
+ Frame {
+ msec: 2736
+ hash: "8ddd8e9dc33698ecca6e19f2318e1c2e"
+ }
+ Frame {
+ msec: 2752
+ hash: "1606eb49c73e60445d9eca11e23a33f9"
+ }
+ Frame {
+ msec: 2768
+ hash: "6a7e58d27492742bf3d853ee37144dae"
+ }
+ Frame {
+ msec: 2784
+ hash: "a55ba5b7ccdabd39385c6cb32e8e1b26"
+ }
+ Frame {
+ msec: 2800
+ hash: "afe5705e8ebc240babee4a88a4321189"
+ }
+ Frame {
+ msec: 2816
+ hash: "807d92ab4b8d2295f3abfd3508258dd5"
+ }
+ Frame {
+ msec: 2832
+ hash: "ae95ed79eee246c74535d9ca97878ce6"
+ }
+ Frame {
+ msec: 2848
+ hash: "c8cf5d07a06646552d5595603532b786"
+ }
+ Frame {
+ msec: 2864
+ hash: "45971fd130662a263fcd86513aee222d"
+ }
+ Frame {
+ msec: 2880
+ image: "flickable-vertical.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "8e78a9098ebd02cc828b76609c58d6b9"
+ }
+ Frame {
+ msec: 2912
+ hash: "7f4d7a1c8e0a5494bf7f37a0a165d02b"
+ }
+ Frame {
+ msec: 2928
+ hash: "881ed825133259e731b71cf6251ed862"
+ }
+ Frame {
+ msec: 2944
+ hash: "8fb86c54b4e0280de18eb2d4f1c55e68"
+ }
+ Frame {
+ msec: 2960
+ hash: "58ad7494c0bddc0de86bfd041f45a5d3"
+ }
+ Frame {
+ msec: 2976
+ hash: "87489ba1390ee152a7de023e8ba25c72"
+ }
+ Frame {
+ msec: 2992
+ hash: "b1f06b26110799e88837781cdf4688a7"
+ }
+ Frame {
+ msec: 3008
+ hash: "d23e94ef53ce3b8143a716028ab729f9"
+ }
+ Frame {
+ msec: 3024
+ hash: "1c5fdf8d85537836b698a50fcab58a4e"
+ }
+ Frame {
+ msec: 3040
+ hash: "bd9c6ea06278efa4d491519734d0032f"
+ }
+ Frame {
+ msec: 3056
+ hash: "b533e6543ca4efb34e187d540e4ed7e0"
+ }
+ Frame {
+ msec: 3072
+ hash: "65f4ff7328ce366671436512da44a094"
+ }
+ Frame {
+ msec: 3088
+ hash: "e7afcc4c29cd1868bcf1ebea1d19fca1"
+ }
+ Frame {
+ msec: 3104
+ hash: "ddaf80f4b1d98b07fe4bf8282e13b2a8"
+ }
+ Frame {
+ msec: 3120
+ hash: "d4888df20b11e30a7d613a32e603cea5"
+ }
+ Frame {
+ msec: 3136
+ hash: "ac74be483173b08cb41b8d63e3e4d073"
+ }
+ Frame {
+ msec: 3152
+ hash: "35c65757fe27f68e35c438269c00ba53"
+ }
+ Frame {
+ msec: 3168
+ hash: "b8a28356b50362f2dabd0ab4a0d1d621"
+ }
+ Frame {
+ msec: 3184
+ hash: "71205ebfcce9e3a018fe2c30f7f3ee92"
+ }
+ Frame {
+ msec: 3200
+ hash: "0ef526ebcc23342ba4b8dfa8ed41e7de"
+ }
+ Frame {
+ msec: 3216
+ hash: "9caaec9ca80b5da75e5e1231635c2f37"
+ }
+ Frame {
+ msec: 3232
+ hash: "bb6b951e8c2252d873828e9ef1c9b625"
+ }
+ Frame {
+ msec: 3248
+ hash: "15faa58fbb91f80a8c1256e5627e7777"
+ }
+ Frame {
+ msec: 3264
+ hash: "bf2d0f512ade00ee44adb6624573daf9"
+ }
+ Frame {
+ msec: 3280
+ hash: "5af713203ef673d40c69b014dcaf242f"
+ }
+ Frame {
+ msec: 3296
+ hash: "970972470176fbd64208a3b25d4f5f65"
+ }
+ Frame {
+ msec: 3312
+ hash: "135a4356d91e594ee2b71132ecf9a606"
+ }
+ Frame {
+ msec: 3328
+ hash: "8a6364c0e033d517180ec287e61b3c9d"
+ }
+ Frame {
+ msec: 3344
+ hash: "71c7d7eddd49b77e8f96f3b7a6e8470f"
+ }
+ Frame {
+ msec: 3360
+ hash: "59667814b3e1a2d832b895235a9cdaf6"
+ }
+ Frame {
+ msec: 3376
+ hash: "a324de5e8d115862b9908aba881df913"
+ }
+ Frame {
+ msec: 3392
+ hash: "300902de67507207465a74bf6404c1c4"
+ }
+ Frame {
+ msec: 3408
+ hash: "63f40e307d9f0c14bab111e833047ee1"
+ }
+ Frame {
+ msec: 3424
+ hash: "53f54f5a4745043ef616ac21583416ef"
+ }
+ Frame {
+ msec: 3440
+ hash: "851e6eebe48034d3185674f6908932af"
+ }
+ Frame {
+ msec: 3456
+ hash: "06ef04a044394ab55fe2806a50db2abf"
+ }
+ Frame {
+ msec: 3472
+ hash: "88c82d8bb518b18a174f55c647395de1"
+ }
+ Frame {
+ msec: 3488
+ hash: "e62b84c87e1d73028305b9038915c53d"
+ }
+ Frame {
+ msec: 3504
+ hash: "fdb38aa631cd6967585dd23e20f866a9"
+ }
+ Frame {
+ msec: 3520
+ hash: "edabcd9bee25b1abcabced3b0b3dff1e"
+ }
+ Frame {
+ msec: 3536
+ hash: "6f0a2dc3151c018846b13fd2e11d0fab"
+ }
+ Frame {
+ msec: 3552
+ hash: "5101944e7867260ffdd3134436c6373a"
+ }
+ Frame {
+ msec: 3568
+ hash: "a04f231f840571734f8dab609b2f82fd"
+ }
+ Frame {
+ msec: 3584
+ hash: "87c22f82c659b405fd4e81640ce0b166"
+ }
+ Frame {
+ msec: 3600
+ hash: "2273564228baea48cac343a4f30d6a59"
+ }
+ Frame {
+ msec: 3616
+ hash: "8a4d1fc12743e6153c0f47e1fce9d55f"
+ }
+ Frame {
+ msec: 3632
+ hash: "944cd812097868935a686211551ccd35"
+ }
+ Frame {
+ msec: 3648
+ hash: "a2f1a14510a1cfe3c2c45fa10b0442b4"
+ }
+ Frame {
+ msec: 3664
+ hash: "d754cc64c12ef8cc2db0ddf99381e88c"
+ }
+ Frame {
+ msec: 3680
+ hash: "168487c8ca6f3463b3aa4433cfc99792"
+ }
+ Frame {
+ msec: 3696
+ hash: "67a82c1516b0d8d953c7055f07a9fdc7"
+ }
+ Frame {
+ msec: 3712
+ hash: "0df1592631b8cc1986f905a049b40bf0"
+ }
+ Frame {
+ msec: 3728
+ hash: "8677472d35e17d7bd5fe40f7841bb01d"
+ }
+ Frame {
+ msec: 3744
+ hash: "4472a8412e41377e0795d51706fb9180"
+ }
+ Frame {
+ msec: 3760
+ hash: "84533717ec1419617895f2ec646fb1c0"
+ }
+ Frame {
+ msec: 3776
+ hash: "ad50bd7708be94c6b8e63077e589ae48"
+ }
+ Frame {
+ msec: 3792
+ hash: "a37fb5d7cec3fbff8e12157c88e08833"
+ }
+ Frame {
+ msec: 3808
+ hash: "df1ca02b5bb76338ff24a561876f89f2"
+ }
+ Frame {
+ msec: 3824
+ hash: "df1ca02b5bb76338ff24a561876f89f2"
+ }
+ Frame {
+ msec: 3840
+ image: "flickable-vertical.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "a37fb5d7cec3fbff8e12157c88e08833"
+ }
+ Frame {
+ msec: 3872
+ hash: "3c8a94d2e139a9e84eaa6bf522250756"
+ }
+ Frame {
+ msec: 3888
+ hash: "23647f577ee83bc500ca1078eea2be90"
+ }
+ Frame {
+ msec: 3904
+ hash: "c1a52221113c162e963a2a165b8d08a5"
+ }
+ Frame {
+ msec: 3920
+ hash: "993c57d4ed9026f8615c68ef5d8c5c16"
+ }
+ Frame {
+ msec: 3936
+ hash: "3d843eac108e047b6fe9ac21d8866fdd"
+ }
+ Frame {
+ msec: 3952
+ hash: "5be1fa7cb99fda017cd5cdcf91a18525"
+ }
+ Frame {
+ msec: 3968
+ hash: "c68ef5177f4568eb77c0f4135ba65e44"
+ }
+ Frame {
+ msec: 3984
+ hash: "f047939a56a0ecee5deefcd3d2bf1710"
+ }
+ Frame {
+ msec: 4000
+ hash: "4af748f59c6a62156a228ae635ec2d9c"
+ }
+ Frame {
+ msec: 4016
+ hash: "b69b045557a8eada80a24eb4caa7ea4e"
+ }
+ Frame {
+ msec: 4032
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4048
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4064
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4080
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4096
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4112
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4128
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4144
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4160
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4176
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4192
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4208
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4224
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4240
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4256
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4272
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4288
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4304
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4320
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4336
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4352
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4368
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4384
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4400
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4416
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4432
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4448
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4464
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4480
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4496
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4512
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4528
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4544
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4560
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4576
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4592
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4608
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4624
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4640
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4656
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4672
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4688
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4704
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4720
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4736
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4752
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4768
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4784
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4800
+ image: "flickable-vertical.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4832
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4848
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4864
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4880
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4896
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4912
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4928
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4944
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4960
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4976
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 4992
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 5008
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 5024
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 5040
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 5056
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 5072
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 5088
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 5104
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 5120
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 5136
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 5152
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 5168
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 5184
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 5200
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 5216
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 5232
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 5248
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 5264
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 5280
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 173; y: 85
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5296
+ hash: "06472b42bc00fcaf7f84cd4ac613bbd2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 173; y: 86
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5312
+ hash: "06472b42bc00fcaf7f84cd4ac613bbd2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 173; y: 89
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 173; y: 101
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5328
+ hash: "0031f6edee383e97a3a31fe4268ff778"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 175; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 179; y: 137
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5344
+ hash: "e594c62fe10165ae08e3dd8b33b9f584"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 183; y: 159
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 185; y: 183
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5360
+ hash: "dd61c97aafee69eb7c54a47dceea5810"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 185; y: 207
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5376
+ hash: "29d06473d4aac07c89041b4413ce421f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 185; y: 227
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 185; y: 243
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5392
+ hash: "7843b1bdb9efdbee0e6dd39ef8f1078a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 185; y: 253
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 185; y: 253
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5408
+ hash: "f609350d3c3041998340c9a6ded9baec"
+ }
+ Frame {
+ msec: 5424
+ hash: "53b559ea9764ad466a0ffc1c55a596c2"
+ }
+ Frame {
+ msec: 5440
+ hash: "8ac64c07cb29adff5d8510f956f3c35d"
+ }
+ Frame {
+ msec: 5456
+ hash: "cb7ab2e7af067f1493197731515462fa"
+ }
+ Frame {
+ msec: 5472
+ hash: "a0509acbb96bb3ced08a7c968836bd69"
+ }
+ Frame {
+ msec: 5488
+ hash: "e4c5e681a275b4eff49eed39a6b544d6"
+ }
+ Frame {
+ msec: 5504
+ hash: "4403e91762ff703eb12dee1b47f4072c"
+ }
+ Frame {
+ msec: 5520
+ hash: "9f548a31dea71208c9f465e37bafc589"
+ }
+ Frame {
+ msec: 5536
+ hash: "c86dd18e63508adfdbd5b3b891fd0d99"
+ }
+ Frame {
+ msec: 5552
+ hash: "b182070ff0c1b579a9fd16d39f950079"
+ }
+ Frame {
+ msec: 5568
+ hash: "4308c4d6346e20ed89026c0ec216ae89"
+ }
+ Frame {
+ msec: 5584
+ hash: "2da84d83767e5ac1f7ce361bdcebe9c8"
+ }
+ Frame {
+ msec: 5600
+ hash: "a3ce932ebf10147f79a183e44a6f6eb7"
+ }
+ Frame {
+ msec: 5616
+ hash: "f5907789e23150c8dd0858d7c5098907"
+ }
+ Frame {
+ msec: 5632
+ hash: "98b76cfad574957f5b7633390c6788c8"
+ }
+ Frame {
+ msec: 5648
+ hash: "8c58d6511a7077cc386216a6227e8b52"
+ }
+ Frame {
+ msec: 5664
+ hash: "2ca5e16bfd83f933f32367aa49db0e1d"
+ }
+ Frame {
+ msec: 5680
+ hash: "ba387d0ab480eb9eaf6993c2ad168350"
+ }
+ Frame {
+ msec: 5696
+ hash: "ae9f3b3245ccf921967a178712566b55"
+ }
+ Frame {
+ msec: 5712
+ hash: "32cf742724558260447f61da03d5f321"
+ }
+ Frame {
+ msec: 5728
+ hash: "ad21273f37c1abac0719f532dd5530ac"
+ }
+ Frame {
+ msec: 5744
+ hash: "50e43629e0b8d0d651b9670241354cb1"
+ }
+ Frame {
+ msec: 5760
+ image: "flickable-vertical.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "e4f0192406831c8e0abe1b561120b9c0"
+ }
+ Frame {
+ msec: 5792
+ hash: "4c98e619b487d67d114ed0d7800f157e"
+ }
+ Frame {
+ msec: 5808
+ hash: "11ed6dc9464396eb790db236f3713164"
+ }
+ Frame {
+ msec: 5824
+ hash: "908febb1e344d6972d6df611e82792bd"
+ }
+ Frame {
+ msec: 5840
+ hash: "03536bb4d6ff84bf75d9ec3574bb7361"
+ }
+ Frame {
+ msec: 5856
+ hash: "f9946a44c2d4e91a947e6bda7415cf9b"
+ }
+ Frame {
+ msec: 5872
+ hash: "0e63e4b9dd6bc7d7b684cb461c6257bf"
+ }
+ Frame {
+ msec: 5888
+ hash: "1ffe88b771bed2aa27aafe6853b67c7a"
+ }
+ Frame {
+ msec: 5904
+ hash: "ff1b78113a710481273ecf01cc978a46"
+ }
+ Frame {
+ msec: 5920
+ hash: "e381553fa74436ca4b0d166bdca78cf7"
+ }
+ Frame {
+ msec: 5936
+ hash: "d9a6f9bfc011edb7da23091fe24e2717"
+ }
+ Frame {
+ msec: 5952
+ hash: "bd137e8b15f5c485d10b83461dedc67f"
+ }
+ Frame {
+ msec: 5968
+ hash: "8f5b5e19845aa537790b683ef37c8626"
+ }
+ Frame {
+ msec: 5984
+ hash: "5abbf0dccef8a3bb7b090a24d715a25f"
+ }
+ Frame {
+ msec: 6000
+ hash: "bf924dd11e226022c9c812b5c7e8229e"
+ }
+ Frame {
+ msec: 6016
+ hash: "c47b59ff7f3c4acfb296959f6eb14801"
+ }
+ Frame {
+ msec: 6032
+ hash: "b5c0ac4514d44a651a4ab817646f1d88"
+ }
+ Frame {
+ msec: 6048
+ hash: "86a9fba0e2ca761a4fb71e5edbf34cab"
+ }
+ Frame {
+ msec: 6064
+ hash: "5bf43304399bdc979afd2580b922fd30"
+ }
+ Frame {
+ msec: 6080
+ hash: "3696756d6250f23b1122d314df08b936"
+ }
+ Frame {
+ msec: 6096
+ hash: "49c7b24b1655a1b5a9b4cc2187f7cc58"
+ }
+ Frame {
+ msec: 6112
+ hash: "a387dce727804fb4ca1c3378ba130d08"
+ }
+ Frame {
+ msec: 6128
+ hash: "505150386afee9c5d89566c90778cf58"
+ }
+ Frame {
+ msec: 6144
+ hash: "a00ecae0150a069d306127ed54c4921f"
+ }
+ Frame {
+ msec: 6160
+ hash: "e556bfca052e4d8922a4b85d6e94a22a"
+ }
+ Frame {
+ msec: 6176
+ hash: "ac710b4796de4d0b7d275c5fffcefe1f"
+ }
+ Frame {
+ msec: 6192
+ hash: "2f0475e842083c93b0fa0b8a8a33117a"
+ }
+ Frame {
+ msec: 6208
+ hash: "6de0e820748df06e702a82f127d9f635"
+ }
+ Frame {
+ msec: 6224
+ hash: "b3748d7a26ea8289e2faa9dd624b23a3"
+ }
+ Frame {
+ msec: 6240
+ hash: "52be51e9a5bf6e6d0c2e64e584a4bf11"
+ }
+ Frame {
+ msec: 6256
+ hash: "9c4a08a51556d56f2809d27a1de0aae3"
+ }
+ Frame {
+ msec: 6272
+ hash: "4a151e94a39b68a47374cc45cb8969df"
+ }
+ Frame {
+ msec: 6288
+ hash: "a2c2926224103d6e0a679b891451f791"
+ }
+ Frame {
+ msec: 6304
+ hash: "c192adca5c3cf3741f6e7b33d53a722a"
+ }
+ Frame {
+ msec: 6320
+ hash: "8fa9d85c213243e0709e3e32f03cebd9"
+ }
+ Frame {
+ msec: 6336
+ hash: "20f516aa2c4ebc239a283176d83ade6f"
+ }
+ Frame {
+ msec: 6352
+ hash: "ac8ace61348c5500dd6e2d1f3b4b174b"
+ }
+ Frame {
+ msec: 6368
+ hash: "39cc6b136e17283ddc65425150cec7be"
+ }
+ Frame {
+ msec: 6384
+ hash: "b250cb3fd5a7ab5c76ae15d5a500a894"
+ }
+ Frame {
+ msec: 6400
+ hash: "f07e4f8b61c0ce514364e062867687a2"
+ }
+ Frame {
+ msec: 6416
+ hash: "caed510a4edc2830f885f9a8ff98c072"
+ }
+ Frame {
+ msec: 6432
+ hash: "2cfba2b8cd1cbc260edf390e17532afa"
+ }
+ Frame {
+ msec: 6448
+ hash: "f1d705e01521261f22b89aeefb146c7a"
+ }
+ Frame {
+ msec: 6464
+ hash: "9508799a0e28e60a65925b7c10fa2874"
+ }
+ Frame {
+ msec: 6480
+ hash: "accdad5176a0cdce92ed07a7ae818a13"
+ }
+ Frame {
+ msec: 6496
+ hash: "2748258d00cf2f0e5f94c94f97ed95ae"
+ }
+ Frame {
+ msec: 6512
+ hash: "994897c0842947675e2e2df4021c1b5e"
+ }
+ Frame {
+ msec: 6528
+ hash: "22936773b2fc5c555f14a8375da2a7a4"
+ }
+ Frame {
+ msec: 6544
+ hash: "22936773b2fc5c555f14a8375da2a7a4"
+ }
+ Frame {
+ msec: 6560
+ hash: "b58badc862e394bf5374554e019f90c0"
+ }
+ Frame {
+ msec: 6576
+ hash: "b58badc862e394bf5374554e019f90c0"
+ }
+ Frame {
+ msec: 6592
+ hash: "b58badc862e394bf5374554e019f90c0"
+ }
+ Frame {
+ msec: 6608
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 6624
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 6640
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 6656
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 6672
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 6688
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 6704
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 6720
+ image: "flickable-vertical.6.png"
+ }
+ Frame {
+ msec: 6736
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 6752
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 6768
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 31; y: 575
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6784
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 6800
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 6816
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 6832
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 6848
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 6864
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 31; y: 575
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6880
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 6896
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 6912
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 6928
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 6944
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 6960
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 6976
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 6992
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7008
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7024
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7040
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7056
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7072
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7088
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7104
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7120
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7136
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7152
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7168
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7184
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7200
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7216
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7232
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7248
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7264
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7280
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 156; y: 403
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7296
+ hash: "843453070c3ac1bf26cfd84d3ab151eb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 156; y: 402
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 158; y: 396
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7312
+ hash: "843453070c3ac1bf26cfd84d3ab151eb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 158; y: 386
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7328
+ hash: "843453070c3ac1bf26cfd84d3ab151eb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 158; y: 376
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 158; y: 360
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7344
+ hash: "843453070c3ac1bf26cfd84d3ab151eb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 158; y: 344
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 160; y: 322
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7360
+ hash: "843453070c3ac1bf26cfd84d3ab151eb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 164; y: 298
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 168; y: 278
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 168; y: 278
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7376
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7392
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7408
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7424
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7440
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7456
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7472
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7488
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7504
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7520
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7536
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7552
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7568
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7584
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7600
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7616
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7632
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7648
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7664
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7680
+ image: "flickable-vertical.7.png"
+ }
+ Frame {
+ msec: 7696
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7712
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7728
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7744
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7760
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7776
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7792
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7808
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 154; y: 161
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7824
+ hash: "16eef219cc7d4e7589ea59ebc349973c"
+ }
+ Frame {
+ msec: 7840
+ hash: "16eef219cc7d4e7589ea59ebc349973c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 154; y: 162
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7856
+ hash: "16eef219cc7d4e7589ea59ebc349973c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 154; y: 164
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 154; y: 167
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7872
+ hash: "16eef219cc7d4e7589ea59ebc349973c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 154; y: 177
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7888
+ hash: "16eef219cc7d4e7589ea59ebc349973c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 150; y: 189
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 146; y: 207
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7904
+ hash: "16eef219cc7d4e7589ea59ebc349973c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 144; y: 229
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 140; y: 255
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7920
+ hash: "16eef219cc7d4e7589ea59ebc349973c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 134; y: 281
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 132; y: 313
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7936
+ hash: "16eef219cc7d4e7589ea59ebc349973c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 128; y: 343
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7952
+ hash: "16eef219cc7d4e7589ea59ebc349973c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 126; y: 373
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 126; y: 397
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 126; y: 397
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7968
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 7984
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8000
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8016
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8032
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8048
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8064
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8080
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8096
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8112
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8128
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8144
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8160
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8176
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8192
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8208
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8224
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8240
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8256
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8272
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8288
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8304
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8320
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8336
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8352
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8368
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8384
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8400
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8416
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8432
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8448
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8464
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8480
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8496
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8512
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8528
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8544
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8560
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8576
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8592
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8608
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8624
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8640
+ image: "flickable-vertical.8.png"
+ }
+ Frame {
+ msec: 8656
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8672
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8688
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8704
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8720
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8736
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8752
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8768
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8784
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8800
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8816
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8832
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8848
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8864
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8880
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8896
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8912
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8928
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8944
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8960
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8976
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 8992
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9008
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9024
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9040
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9056
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9072
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9088
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9104
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 44; y: 574
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9120
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9136
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9152
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 44; y: 574
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9168
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9184
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9200
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9216
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9232
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9248
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9264
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9280
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9296
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9312
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9328
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9344
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9360
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9376
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9392
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9408
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9424
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9440
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9456
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9472
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9488
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9504
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9520
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9536
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9552
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9568
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9584
+ hash: "679369b924d719ae309a45034bdba40d"
+ }
+ Frame {
+ msec: 9600
+ image: "flickable-vertical.9.png"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 152; y: 444
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9616
+ hash: "843453070c3ac1bf26cfd84d3ab151eb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 152; y: 442
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9632
+ hash: "843453070c3ac1bf26cfd84d3ab151eb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 152; y: 440
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 152; y: 438
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9648
+ hash: "843453070c3ac1bf26cfd84d3ab151eb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 154; y: 429
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9664
+ hash: "3b0e0ed925b1c197cd94afd3d1a6d572"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 156; y: 421
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 158; y: 413
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9680
+ hash: "d7b3838ee1219816b76224c29c7ba2e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 160; y: 403
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9696
+ hash: "9835b420f0c40a03f8f9fafe39e209f1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 162; y: 393
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 162; y: 393
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9712
+ hash: "46fb2005a813fc2c278f1bfe83801c0e"
+ }
+ Frame {
+ msec: 9728
+ hash: "81dd9308e475548db21474c37cb9a5b0"
+ }
+ Frame {
+ msec: 9744
+ hash: "10043d74eef240abd2360d45845dd51e"
+ }
+ Frame {
+ msec: 9760
+ hash: "0f83b8f23ba42b22c10a2b68227db64e"
+ }
+ Frame {
+ msec: 9776
+ hash: "7a296e3702c9fef25cb53ac04053853b"
+ }
+ Frame {
+ msec: 9792
+ hash: "ae439daa32f76a368ab314c86c55a378"
+ }
+ Frame {
+ msec: 9808
+ hash: "42ac3503dfa462bf0b5d8c15f6f3b143"
+ }
+ Frame {
+ msec: 9824
+ hash: "b8bb92eb2de7ca0f5924b09f380f47db"
+ }
+ Frame {
+ msec: 9840
+ hash: "994e314d2d38005b6006e81468f10efa"
+ }
+ Frame {
+ msec: 9856
+ hash: "be6a32f3c82aeccebc7778ff5646637f"
+ }
+ Frame {
+ msec: 9872
+ hash: "2fb196f53d5e785e04a14d98d9dab8a1"
+ }
+ Frame {
+ msec: 9888
+ hash: "0926f8209f4f35f6e6fa92935d7408e4"
+ }
+ Frame {
+ msec: 9904
+ hash: "780450301d37ea2b94eb9386e7e5294c"
+ }
+ Frame {
+ msec: 9920
+ hash: "cd4e9629c767813c9a2a2fa30dc5114b"
+ }
+ Frame {
+ msec: 9936
+ hash: "409630d7b9c3c4231bccf74f7453f0af"
+ }
+ Frame {
+ msec: 9952
+ hash: "4c98e619b487d67d114ed0d7800f157e"
+ }
+ Frame {
+ msec: 9968
+ hash: "0a8157dc45764ab8e0e0b89e5c73a76b"
+ }
+ Frame {
+ msec: 9984
+ hash: "ecfc611b58e000df9f608c8889a2a84f"
+ }
+ Frame {
+ msec: 10000
+ hash: "5c6bc246446c75d57bcd40e86041892b"
+ }
+ Frame {
+ msec: 10016
+ hash: "fe1a3e688da126861b29a94b676b68f7"
+ }
+ Frame {
+ msec: 10032
+ hash: "f5feef892bf013916bacb63ff6460cb7"
+ }
+ Frame {
+ msec: 10048
+ hash: "665018efd991cab3acb4b80005fc2bd3"
+ }
+ Frame {
+ msec: 10064
+ hash: "bc7614e4a0e0724a9cb0981f09f8a7f6"
+ }
+ Frame {
+ msec: 10080
+ hash: "463a6da452a5a6267240992ad5284e89"
+ }
+ Frame {
+ msec: 10096
+ hash: "eca3f146e0143856f58b4f7aee42e6f8"
+ }
+ Frame {
+ msec: 10112
+ hash: "dec9b9845509c4d28d7faae043b292d1"
+ }
+ Frame {
+ msec: 10128
+ hash: "49452842cb2429cd465e40478638e0e3"
+ }
+ Frame {
+ msec: 10144
+ hash: "a7029d0090d3620ee21b9e3d55eefe78"
+ }
+ Frame {
+ msec: 10160
+ hash: "1041b18d422acba0b9a45ca89856e493"
+ }
+ Frame {
+ msec: 10176
+ hash: "d53038b688b920715b196dd4cc2b2587"
+ }
+ Frame {
+ msec: 10192
+ hash: "da59ffebb491ab5fa98429117c3bb8ac"
+ }
+ Frame {
+ msec: 10208
+ hash: "602269f78eaf0df36c66de72e005989a"
+ }
+ Frame {
+ msec: 10224
+ hash: "a311b6b35feb4096b0d01753a6695210"
+ }
+ Frame {
+ msec: 10240
+ hash: "cd303e8850c6aac58fcf2a98db418f1b"
+ }
+ Frame {
+ msec: 10256
+ hash: "6e9132dd840a136cc688676bce7640de"
+ }
+ Frame {
+ msec: 10272
+ hash: "a3818492bb4ebd91ce86675d34731c58"
+ }
+ Frame {
+ msec: 10288
+ hash: "b85a127895713234028641787312b717"
+ }
+ Frame {
+ msec: 10304
+ hash: "a030dc1543e84d8a0ec9f77fd6325060"
+ }
+ Frame {
+ msec: 10320
+ hash: "669cd28abe17d419e9cabe4d796a38c3"
+ }
+ Frame {
+ msec: 10336
+ hash: "bfdd15cf058050203561b5f935106263"
+ }
+ Frame {
+ msec: 10352
+ hash: "a39abc94fee93175a6a37b402750e4f7"
+ }
+ Frame {
+ msec: 10368
+ hash: "0c65e19e12d95ec8ee253219b0c3e472"
+ }
+ Frame {
+ msec: 10384
+ hash: "15debc234e70765a4510bfbda886a2c9"
+ }
+ Frame {
+ msec: 10400
+ hash: "9566a87437cb6e9025f9a3881a620823"
+ }
+ Frame {
+ msec: 10416
+ hash: "b66d89244cba537a21901dcb11387bf7"
+ }
+ Frame {
+ msec: 10432
+ hash: "03347ce314393bd84873026cd01c562f"
+ }
+ Frame {
+ msec: 10448
+ hash: "458fab2449dba089ae6f1e78a230564b"
+ }
+ Frame {
+ msec: 10464
+ hash: "7115f27574bfc68ff58a2e4fb65107dd"
+ }
+ Frame {
+ msec: 10480
+ hash: "66260c030dddda4b086bc98982a11934"
+ }
+ Frame {
+ msec: 10496
+ hash: "d5790ee5eb8ecf249cb1dcf58aefa4ee"
+ }
+ Frame {
+ msec: 10512
+ hash: "6bec07ba1e2ac637aab7a9038cbacc93"
+ }
+ Frame {
+ msec: 10528
+ hash: "a72f36cc18c8620a2bd85bac49f6771a"
+ }
+ Frame {
+ msec: 10544
+ hash: "65b178ae559ab0ba9c568718f287ff68"
+ }
+ Frame {
+ msec: 10560
+ image: "flickable-vertical.10.png"
+ }
+ Frame {
+ msec: 10576
+ hash: "b35a8e33f876921d477809b5adb7a201"
+ }
+ Frame {
+ msec: 10592
+ hash: "057b69ef8137f38c596432da547f1ead"
+ }
+ Frame {
+ msec: 10608
+ hash: "62f76f46857106010c2e862ed19baeea"
+ }
+ Frame {
+ msec: 10624
+ hash: "fbfc73e1b20b79d71953c298ca095047"
+ }
+ Frame {
+ msec: 10640
+ hash: "aea78988f875083660dd46d6afc71683"
+ }
+ Frame {
+ msec: 10656
+ hash: "60d8decd7ded420433256a94f1bf954f"
+ }
+ Frame {
+ msec: 10672
+ hash: "221f72cdf18e0b33e7f6a65356fcc61b"
+ }
+ Frame {
+ msec: 10688
+ hash: "221f72cdf18e0b33e7f6a65356fcc61b"
+ }
+ Frame {
+ msec: 10704
+ hash: "c2eac9c0d84c6b2f133d8751ac5f265f"
+ }
+ Frame {
+ msec: 10720
+ hash: "c2eac9c0d84c6b2f133d8751ac5f265f"
+ }
+ Frame {
+ msec: 10736
+ hash: "c2eac9c0d84c6b2f133d8751ac5f265f"
+ }
+ Frame {
+ msec: 10752
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 10768
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 10784
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 10800
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 10816
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 10832
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 10848
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 10864
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 10880
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 98; y: 573
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10896
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 10912
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 10928
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 10944
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 10960
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 98; y: 573
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10976
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 10992
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11008
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11024
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11040
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11056
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11072
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11088
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11104
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11120
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11136
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11152
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11168
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11184
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11200
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11216
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11232
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11248
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11264
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11280
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11296
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11312
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11328
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11344
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11360
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11376
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11392
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11408
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11424
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11440
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11456
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11472
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11488
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11504
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11520
+ image: "flickable-vertical.11.png"
+ }
+ Frame {
+ msec: 11536
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11552
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11568
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11584
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11600
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11616
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11632
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11648
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11664
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11680
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11696
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11712
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11728
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 170; y: 335
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11744
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Frame {
+ msec: 11760
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 170; y: 336
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 170; y: 338
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11776
+ hash: "28a06534a2e35250c67112dfb6c05095"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 170; y: 346
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11792
+ hash: "12040d4dd56848fc93d6390005045188"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 170; y: 359
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11808
+ hash: "caa70db5f31eb607c2de39734a42796c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 168; y: 367
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 166; y: 379
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11824
+ hash: "ca45ab832b5a8b041ba8bea1185a2b38"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 166; y: 393
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 164; y: 407
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11840
+ hash: "188042b1a045dc96a65a7fc0e90568c3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 164; y: 419
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11856
+ hash: "714a3cf591beeeddbdc2df94f5cedef1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 164; y: 443
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11872
+ hash: "e9978c24eef649d01cb2245f783cb562"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 164; y: 461
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11888
+ hash: "bc8f32062afdfe33da7c99ee867bc2a3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 166; y: 467
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11904
+ hash: "d788c09f4acba8197b2d8fef2e8ece51"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 168; y: 470
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11920
+ hash: "b0a383eb416727c22451a30a997f48f1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 169; y: 472
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11936
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 11952
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 11968
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 11984
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12000
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12016
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12032
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12048
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12064
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 169; y: 472
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12080
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12096
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12112
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12128
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12144
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12160
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12176
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12192
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12208
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12224
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12240
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12256
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12272
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12288
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12304
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12320
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12336
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12352
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12368
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12384
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12400
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12416
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Frame {
+ msec: 12432
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 171; y: 452
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12448
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 172; y: 450
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 173; y: 448
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12464
+ hash: "6b81b365eb057ffa32d89e564bc92949"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 175; y: 434
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12480
+ image: "flickable-vertical.12.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 175; y: 431
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 177; y: 423
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12496
+ hash: "7e760a017ab10fe920074405248d1473"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 177; y: 415
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12512
+ hash: "eab43f1c2b6fb79aad578a164b8b7b28"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 181; y: 395
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 183; y: 383
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12528
+ hash: "a5446ca4c6650ffc9812845bdb8db088"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 185; y: 371
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12544
+ hash: "71cb7dc7f9dbb9e17d7f44885ec71bdb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 187; y: 357
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12560
+ hash: "ccf0908d968f658311a9787182de498a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 187; y: 329
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12576
+ hash: "26b9c6379590bbda24d129bd4f19f7d3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 187; y: 303
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 187; y: 293
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12592
+ hash: "6c88a02ffdffee6d615ddc6a11c1b698"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 187; y: 283
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12608
+ hash: "38175cb09b6e63353b478635b22dbb5b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 187; y: 280
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 187; y: 277
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12624
+ hash: "5084910bf204e8b688de31d4f9018a57"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 187; y: 275
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 187; y: 273
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12640
+ hash: "e984565312571ec144a1cd4cc11253e8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 187; y: 272
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 187; y: 271
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12656
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 12672
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 12688
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 12704
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 12720
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 12736
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 12752
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 12768
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 187; y: 271
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12784
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 12800
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 12816
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 12832
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 12848
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 12864
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 12880
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 12896
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 12912
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 12928
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 12944
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 12960
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 12976
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 12992
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 13008
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13024
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13040
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13056
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13072
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13088
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13104
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13120
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13136
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13152
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13168
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13184
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13200
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13216
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13232
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13248
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13264
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13280
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13296
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13312
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13328
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13344
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 181; y: 242
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 13360
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13376
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13392
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13408
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13424
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 181; y: 242
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 13440
+ image: "flickable-vertical.13.png"
+ }
+ Frame {
+ msec: 13456
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13472
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13488
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13504
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13520
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13536
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13552
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13568
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13584
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13600
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13616
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13632
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13648
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13664
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13680
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13696
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13712
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13728
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13744
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13760
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13776
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13792
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13808
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13824
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13840
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13856
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13872
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13888
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13904
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13920
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13936
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 181; y: 242
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 13952
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13968
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 13984
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 14000
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 14016
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 14032
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 14048
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 14064
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 14080
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 14096
+ hash: "4b86de37ae9bc630a2f3440811087617"
+ }
+ Frame {
+ msec: 14112
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 14128
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 14144
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 14160
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 14176
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 14192
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 14208
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 14224
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 14240
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 14256
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 14272
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 14288
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 14304
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 14320
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 14336
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 14352
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 14368
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 14384
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 14400
+ image: "flickable-vertical.14.png"
+ }
+ Frame {
+ msec: 14416
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 14432
+ hash: "d96fb1b387b34f41f80e98c1feb05303"
+ }
+ Frame {
+ msec: 14448
+ hash: "ecd5db8e582e6d2e15943ffd9fcb32a7"
+ }
+ Frame {
+ msec: 14464
+ hash: "ecd5db8e582e6d2e15943ffd9fcb32a7"
+ }
+ Frame {
+ msec: 14480
+ hash: "ecd5db8e582e6d2e15943ffd9fcb32a7"
+ }
+ Frame {
+ msec: 14496
+ hash: "ecd5db8e582e6d2e15943ffd9fcb32a7"
+ }
+ Frame {
+ msec: 14512
+ hash: "ecd5db8e582e6d2e15943ffd9fcb32a7"
+ }
+ Frame {
+ msec: 14528
+ hash: "ecd5db8e582e6d2e15943ffd9fcb32a7"
+ }
+ Frame {
+ msec: 14544
+ hash: "ecd5db8e582e6d2e15943ffd9fcb32a7"
+ }
+ Frame {
+ msec: 14560
+ hash: "ecd5db8e582e6d2e15943ffd9fcb32a7"
+ }
+ Frame {
+ msec: 14576
+ hash: "ecd5db8e582e6d2e15943ffd9fcb32a7"
+ }
+ Frame {
+ msec: 14592
+ hash: "ecd5db8e582e6d2e15943ffd9fcb32a7"
+ }
+ Frame {
+ msec: 14608
+ hash: "ecd5db8e582e6d2e15943ffd9fcb32a7"
+ }
+ Frame {
+ msec: 14624
+ hash: "ecd5db8e582e6d2e15943ffd9fcb32a7"
+ }
+ Frame {
+ msec: 14640
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 14656
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 14672
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 14688
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 14704
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 14720
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 14736
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 14752
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 14768
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 14784
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 14800
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 14816
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 14832
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 14848
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 14864
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 14880
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 14896
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 14912
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 14928
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 14944
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 14960
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 14976
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 14992
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 15008
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 15024
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 15040
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 181; y: 242
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 15056
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15072
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15088
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15104
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15120
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15136
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15152
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15168
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15184
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15200
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15216
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15232
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15248
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15264
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15280
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15296
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15312
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15328
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15344
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15360
+ image: "flickable-vertical.15.png"
+ }
+ Frame {
+ msec: 15376
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15392
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15408
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15424
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15440
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15456
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15472
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15488
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15504
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15520
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15536
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15552
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15568
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15584
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15600
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15616
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15632
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15648
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15664
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15680
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15696
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15712
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 192; y: 218
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 15728
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15744
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15760
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15776
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15792
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15808
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15824
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15840
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15856
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15872
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15888
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15904
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15920
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15936
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15952
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15968
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 15984
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 16000
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 16016
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 16032
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 16048
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 16064
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 16080
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 16096
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 16112
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 16128
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 16144
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 16160
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 16176
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 16192
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 16208
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 16224
+ hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ }
+ Frame {
+ msec: 16240
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16256
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16272
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16288
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16304
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16320
+ image: "flickable-vertical.16.png"
+ }
+ Frame {
+ msec: 16336
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16352
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16368
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16384
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16400
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16416
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16432
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16448
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16464
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16480
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16496
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16512
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16528
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16544
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16560
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16576
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16592
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16608
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16624
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16640
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Frame {
+ msec: 16656
+ hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 198; y: 222
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 198; y: 224
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 16672
+ hash: "c30bea2a73a8b5af4565ef3996f29416"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 198; y: 228
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 198; y: 230
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 16688
+ hash: "9612c176ec3ecf76a367728f451522a4"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 198; y: 233
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 16704
+ hash: "24f6feeeb1ff82c8d4262f74e4656602"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 198; y: 238
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 16720
+ hash: "5823b56f1e362fdfc216a82e2dcdec61"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 198; y: 241
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 16736
+ hash: "4ee243b91e847dabaceb21b5540c2a6d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 198; y: 245
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 16752
+ hash: "87f1dc2238577fc5be6b1bd941226f3e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 198; y: 251
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 16768
+ hash: "480c6fcf1b3862a41a7225c35d8080c3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 198; y: 256
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 16784
+ hash: "0ac819bd8e6ce19553bd954e466e7ac0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 199; y: 258
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 16800
+ hash: "0636dd7c4eb0b56697fb59fb46f47f9c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 201; y: 267
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 16816
+ hash: "62f76f46857106010c2e862ed19baeea"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 276
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 16832
+ hash: "26b9c6379590bbda24d129bd4f19f7d3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 279
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 280
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 16848
+ hash: "21baf0596553627c8e683a31c2e6d04f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 281
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 282
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 16864
+ hash: "036679da5def5e696361f2373172a3f4"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 283
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 16880
+ hash: "e3fc6101bc6cccf309b3df6b194820ea"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 285
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 16896
+ hash: "d9ee6d0a7455cfd724c1856549100756"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 286
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 16912
+ hash: "caa70db5f31eb607c2de39734a42796c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 287
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 16928
+ hash: "e2dc88b454e69cf92d6887a2f0629a94"
+ }
+ Frame {
+ msec: 16944
+ hash: "e2dc88b454e69cf92d6887a2f0629a94"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 288
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 16960
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 16976
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 16992
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17008
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17024
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17040
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17056
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17072
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17088
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 203; y: 288
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 17104
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17120
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17136
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17152
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17168
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17184
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17200
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17216
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17232
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17248
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17264
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17280
+ image: "flickable-vertical.17.png"
+ }
+ Frame {
+ msec: 17296
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17312
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17328
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17344
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17360
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17376
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17392
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17408
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17424
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17440
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17456
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17472
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17488
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17504
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17520
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17536
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17552
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17568
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17584
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17600
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17616
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17632
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17648
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17664
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17680
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17696
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17712
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17728
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17744
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17760
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17776
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17792
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17808
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17824
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17840
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17856
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17872
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17888
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17904
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17920
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17936
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17952
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17968
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 17984
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18000
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18016
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18032
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18048
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18064
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18080
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18096
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18112
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18128
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18144
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18160
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18176
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18192
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18208
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18224
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18240
+ image: "flickable-vertical.18.png"
+ }
+ Frame {
+ msec: 18256
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18272
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18288
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18304
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18320
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18336
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18352
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18368
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18384
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18400
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18416
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18432
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18448
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 102; y: 575
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 18464
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18480
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18496
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 102; y: 575
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 18512
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18528
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18544
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18560
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18576
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18592
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18608
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18624
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18640
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18656
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18672
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18688
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18704
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18720
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18736
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18752
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18768
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18784
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18800
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18816
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18832
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18848
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18864
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18880
+ hash: "fac8455a2707b04aabff25723375a78b"
+ }
+ Frame {
+ msec: 18896
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 18912
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 18928
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 18944
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 18960
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 18976
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 18992
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19008
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19024
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19040
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19056
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19072
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19088
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19104
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19120
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19136
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19152
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19168
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19184
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19200
+ image: "flickable-vertical.19.png"
+ }
+ Frame {
+ msec: 19216
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19232
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19248
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19264
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 164; y: 571
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 19280
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19296
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19312
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19328
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 164; y: 571
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 19344
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19360
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19376
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19392
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19408
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19424
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19440
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19456
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19472
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19488
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19504
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19520
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19536
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19552
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19568
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19584
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19600
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19616
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19632
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19648
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19664
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19680
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19696
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19712
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19728
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19744
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19760
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19776
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19792
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19808
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19824
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19840
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19856
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19872
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19888
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19904
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19920
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19936
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19952
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19968
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 19984
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 20000
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 20016
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 20032
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 20048
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 20064
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 20080
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 20096
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 20112
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 20128
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 20144
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 20160
+ image: "flickable-vertical.20.png"
+ }
+ Frame {
+ msec: 20176
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 20192
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 20208
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Frame {
+ msec: 20224
+ hash: "cce4177eb20b7aa43a7383a16c43f473"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 170; y: 450
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 20240
+ hash: "b8e7a053fc023be42ab5136f6e7305fd"
+ }
+ Frame {
+ msec: 20256
+ hash: "b8e7a053fc023be42ab5136f6e7305fd"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 170; y: 448
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 20272
+ hash: "b8e7a053fc023be42ab5136f6e7305fd"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 172; y: 438
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 20288
+ hash: "40cf6e4567c796d6ad83778fb1959d8a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 176; y: 410
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 20304
+ hash: "9914584daf02407c1edc3b6a38b8302d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 176; y: 388
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 176; y: 366
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 20320
+ hash: "5aff2316a5e34f5e15b7cb36257a3d72"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 176; y: 342
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 176; y: 342
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 20336
+ hash: "de1f9ff1abfa8cdc760bc84129fab40d"
+ }
+ Frame {
+ msec: 20352
+ hash: "032c4fd62a0a611207262d317d4ea103"
+ }
+ Frame {
+ msec: 20368
+ hash: "1db8a7b3899f5efea25ccf93285ee6bd"
+ }
+ Frame {
+ msec: 20384
+ hash: "3c106f68b755862346cddd21d75c0caf"
+ }
+ Frame {
+ msec: 20400
+ hash: "41d025dfe037b9cebe84e4c7200e9d15"
+ }
+ Frame {
+ msec: 20416
+ hash: "f347687313c88150a6f977ae8b1620fc"
+ }
+ Frame {
+ msec: 20432
+ hash: "4bb30faaec54e2a47dfd2b2988a6c231"
+ }
+ Frame {
+ msec: 20448
+ hash: "fede02600e790d4b6eb1f85563b37cbc"
+ }
+ Frame {
+ msec: 20464
+ hash: "0a949f7150b3709b9eda62c98f98fc62"
+ }
+ Frame {
+ msec: 20480
+ hash: "214e571c2346b0d6b5d1220e856a8e67"
+ }
+ Frame {
+ msec: 20496
+ hash: "f84207d20cfff984d1c79654a1074d02"
+ }
+ Frame {
+ msec: 20512
+ hash: "7dc3592294dcd88fbfff2f984fd2d4c3"
+ }
+ Frame {
+ msec: 20528
+ hash: "42829e78f62e692a093df267d2b673e2"
+ }
+ Frame {
+ msec: 20544
+ hash: "d264570c78e7d1ea283c72191953a2ce"
+ }
+ Frame {
+ msec: 20560
+ hash: "b69b045557a8eada80a24eb4caa7ea4e"
+ }
+ Frame {
+ msec: 20576
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20592
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20608
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20624
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20640
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20656
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20672
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20688
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20704
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20720
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20736
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20752
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20768
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20784
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20800
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20816
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20832
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20848
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20864
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20880
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20896
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20912
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20928
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20944
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20960
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20976
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 20992
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21008
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21024
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21040
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21056
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21072
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21088
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21104
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21120
+ image: "flickable-vertical.21.png"
+ }
+ Frame {
+ msec: 21136
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21152
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21168
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21184
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21200
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21216
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21232
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21248
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21264
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21280
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21296
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21312
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21328
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21344
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21360
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21376
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21392
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21408
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21424
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21440
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21456
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21472
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21488
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21504
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21520
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21536
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21552
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21568
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Frame {
+ msec: 21584
+ hash: "a76f069dfcb1af0794999c34507e190e"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 197; y: 124
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 197; y: 132
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 21600
+ hash: "06472b42bc00fcaf7f84cd4ac613bbd2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 197; y: 146
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 197; y: 164
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 21616
+ hash: "463fce69afc3dec181425c9adaa3e77c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 197; y: 190
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 195; y: 218
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 21632
+ hash: "9af34ff618e277eafad32e0377ecc94b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 187; y: 250
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 21648
+ hash: "db4b2333630ccc4a7982361609a12837"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 183; y: 284
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 183; y: 284
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 21664
+ hash: "50335b19a1e210f87924d01bb343a0e0"
+ }
+ Frame {
+ msec: 21680
+ hash: "59b4f80a7cd6b732eb26f3b4147efe7e"
+ }
+ Frame {
+ msec: 21696
+ hash: "b99cc1f07bcb0480801d4d5403372525"
+ }
+ Frame {
+ msec: 21712
+ hash: "871040b0f921646609b79828bab38949"
+ }
+ Frame {
+ msec: 21728
+ hash: "2acb3d19eed000313872d5cd66765b53"
+ }
+ Frame {
+ msec: 21744
+ hash: "b5431a2d2e856a726ceac2066b128f8f"
+ }
+ Frame {
+ msec: 21760
+ hash: "04047c917a95a2a3df30c14bb20601dd"
+ }
+ Frame {
+ msec: 21776
+ hash: "fea7ac3d26975f438129e394c667e628"
+ }
+ Frame {
+ msec: 21792
+ hash: "4db41ff05865cabc4ef288478254e633"
+ }
+ Frame {
+ msec: 21808
+ hash: "e0d3737effd817a8f603eb393677b8b6"
+ }
+ Frame {
+ msec: 21824
+ hash: "d4f06941d213544ddcae714ddc0b47e9"
+ }
+ Frame {
+ msec: 21840
+ hash: "dbb21caf4a4c9b88563f1d0aad35f3d3"
+ }
+ Frame {
+ msec: 21856
+ hash: "eb9a052219c3f955f2c036834990089b"
+ }
+ Frame {
+ msec: 21872
+ hash: "40090a35caf674ed9c4bf1d10f9209ea"
+ }
+ Frame {
+ msec: 21888
+ hash: "064de0abec66d1ddcf0f6073ce7d91ef"
+ }
+ Frame {
+ msec: 21904
+ hash: "f407334d0b63a34657dc1306fd67aeb7"
+ }
+ Frame {
+ msec: 21920
+ hash: "1c0744be97c65c68ca92bd86d42c7b0e"
+ }
+ Frame {
+ msec: 21936
+ hash: "7469d4a06c5df073e22db3c905baefc1"
+ }
+ Frame {
+ msec: 21952
+ hash: "35912a7e2ecc0c387fc9fb9da7201bfd"
+ }
+ Frame {
+ msec: 21968
+ hash: "9f835091374f0d0d9a6996e6dad10e19"
+ }
+ Frame {
+ msec: 21984
+ hash: "afade1ecbaf5f920880eaff3b3de606e"
+ }
+ Frame {
+ msec: 22000
+ hash: "9c70e8a020c8c1101b9884529cb4527f"
+ }
+ Frame {
+ msec: 22016
+ hash: "3e7d4dc75f85dfeb065da18ef1c102c1"
+ }
+ Frame {
+ msec: 22032
+ hash: "16852d62a77eefccea9497ae1b09842d"
+ }
+ Frame {
+ msec: 22048
+ hash: "ea8afda6d837a98f408a7aa133494575"
+ }
+ Frame {
+ msec: 22064
+ hash: "666435dccf30c53eb09ea7ad8b5264a1"
+ }
+ Frame {
+ msec: 22080
+ image: "flickable-vertical.22.png"
+ }
+ Frame {
+ msec: 22096
+ hash: "2e959bf0470bac84e2220d9e8a8bbb97"
+ }
+ Frame {
+ msec: 22112
+ hash: "595b6cfd559f8362b010616de4947ec6"
+ }
+ Frame {
+ msec: 22128
+ hash: "976dd345cc7cb4e3c09a288530d3c8af"
+ }
+ Frame {
+ msec: 22144
+ hash: "9493e425d5cd3f9eef904a1be63f45f1"
+ }
+ Frame {
+ msec: 22160
+ hash: "0a2013afebb5e09d82633c8d8a393f01"
+ }
+ Frame {
+ msec: 22176
+ hash: "d8377c464bc59d95e0670d697888d804"
+ }
+ Frame {
+ msec: 22192
+ hash: "52f9416973da953bd6fe55b2fe22786a"
+ }
+ Frame {
+ msec: 22208
+ hash: "23b9af0f371b7817e9ceaa1a83995d35"
+ }
+ Frame {
+ msec: 22224
+ hash: "34b0e0333c91bc4533e0c01eaeb3d3f9"
+ }
+ Frame {
+ msec: 22240
+ hash: "1597b86afe2841c3bb77bb5dd6aa6803"
+ }
+ Frame {
+ msec: 22256
+ hash: "d74111814ff259fea47e1eb3b36e174b"
+ }
+ Frame {
+ msec: 22272
+ hash: "c64c46fe9cd75afbf2385241ea8e55d4"
+ }
+ Frame {
+ msec: 22288
+ hash: "1e8740a104643fe30b0e874bbbed44ab"
+ }
+ Frame {
+ msec: 22304
+ hash: "ef669a8d142947463084383a6c7c7f85"
+ }
+ Frame {
+ msec: 22320
+ hash: "2314c42b5994bdbfd73eb2c3ea54626b"
+ }
+ Frame {
+ msec: 22336
+ hash: "53a0694d8eee91b968bd43efe43f2c9e"
+ }
+ Frame {
+ msec: 22352
+ hash: "be4772528f30c18193e49ae04a290af8"
+ }
+ Frame {
+ msec: 22368
+ hash: "a0b0877ab92a0323e35fdb7beb602dee"
+ }
+ Frame {
+ msec: 22384
+ hash: "a0e299fb4ba811a0b22fb62c222cb86c"
+ }
+ Frame {
+ msec: 22400
+ hash: "2562bc9c9aa60a48b6ca00333f60d163"
+ }
+ Frame {
+ msec: 22416
+ hash: "486b45c385d88d6f054fa6308b55f2ac"
+ }
+ Frame {
+ msec: 22432
+ hash: "86502af668ed6336dce8fe329e3408a6"
+ }
+ Frame {
+ msec: 22448
+ hash: "2a79a6530a07f00810310117d00d28ed"
+ }
+ Frame {
+ msec: 22464
+ hash: "94a5fce3e0c3b219e0d807bfcade11e8"
+ }
+ Frame {
+ msec: 22480
+ hash: "94a5fce3e0c3b219e0d807bfcade11e8"
+ }
+ Frame {
+ msec: 22496
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22512
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22528
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22544
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22560
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22576
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22592
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22608
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22624
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22640
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22656
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22672
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22688
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22704
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22720
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22736
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22752
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22768
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22784
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22800
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22816
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22832
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22848
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22864
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22880
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22896
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22912
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22928
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22944
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22960
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22976
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 22992
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 23008
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 23024
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 23040
+ image: "flickable-vertical.23.png"
+ }
+ Frame {
+ msec: 23056
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 23072
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 23088
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 23104
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 23120
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 23136
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 23152
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 23168
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 23184
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 23200
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 23216
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 23232
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 23248
+ hash: "8443c45791c906a9fe23831844f48a1c"
+ }
+ Frame {
+ msec: 23264
+ hash: "8443c45791c906a9fe23831844f48a1c \ No newline at end of file
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/flickable-horizontal.qml b/tests/auto/declarative/visual/qmlgraphicsflickable/flickable-horizontal.qml
new file mode 100644
index 0000000..1a7366d
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/flickable-horizontal.qml
@@ -0,0 +1,37 @@
+import Qt 4.6
+
+Rectangle {
+ color: "lightSteelBlue"
+ width: 600; height: 300
+
+ ListModel {
+ id: list
+ ListElement { dayColor: "steelblue" }
+ ListElement { dayColor: "blue" }
+ ListElement { dayColor: "yellow" }
+ ListElement { dayColor: "purple" }
+ ListElement { dayColor: "red" }
+ ListElement { dayColor: "green" }
+ ListElement { dayColor: "orange" }
+ }
+
+ Flickable {
+ id: flickable
+ anchors.fill: parent; viewportWidth: row.width
+
+ Row {
+ id: row
+ Repeater {
+ model: list
+ Rectangle { width: 200; height: 300; color: dayColor }
+ }
+ }
+ }
+ Rectangle {
+ radius: 3
+ y: flickable.height-8
+ height: 8
+ x: flickable.visibleArea.xPosition * flickable.width
+ width: flickable.visibleArea.widthRatio * flickable.width
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/flickable-vertical.qml b/tests/auto/declarative/visual/qmlgraphicsflickable/flickable-vertical.qml
new file mode 100644
index 0000000..cc15755
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflickable/flickable-vertical.qml
@@ -0,0 +1,91 @@
+import Qt 4.6
+
+Rectangle {
+ color: "lightSteelBlue"
+ width: 300; height: 600
+
+ ListModel {
+ id: list
+ ListElement { dayColor: "steelblue" }
+ ListElement { dayColor: "blue" }
+ ListElement { dayColor: "yellow" }
+ ListElement { dayColor: "purple" }
+ ListElement { dayColor: "red" }
+ ListElement { dayColor: "green" }
+ ListElement { dayColor: "orange" }
+ }
+
+ flickable {
+ id: flick
+ height: parent.height-50
+ width: parent.width; viewportHeight: column.height
+
+ Column {
+ id: column
+ Repeater {
+ model: list
+ Rectangle { width: 300; height: 200; color: mr.pressed ? "black" : dayColor
+ MouseRegion {
+ id: mr
+ anchors.fill: parent
+ }
+ }
+ }
+ }
+ clip: true
+ reportedVelocitySmoothing: 1000
+ }
+ Rectangle {
+ radius: 3
+ x: flick.width-8
+ width: 8
+ y: flick.visibleArea.yPosition * flick.height
+ height: flick.visibleArea.heightRatio * flick.height
+ }
+
+ // click to toggle interactive flag
+ Rectangle {
+ width: 64
+ height: 48
+ y: parent.height - 50
+ color: "red"
+ MouseRegion {
+ anchors.fill: parent
+ onClicked: flick.interactive = flick.interactive ? false : true
+ }
+ }
+
+ // click to toggle click delay
+ Rectangle {
+ width: 64
+ height: 48
+ x: 66
+ y: parent.height - 50
+ color: "green"
+ MouseRegion {
+ anchors.fill: parent
+ onClicked: flick.pressDelay = flick.pressDelay > 0 ? 0 : 500
+ }
+ }
+
+ // click to toggle overshoot
+ Rectangle {
+ width: 64
+ height: 48
+ x: 130
+ y: parent.height - 50
+ color: "yellow"
+ MouseRegion {
+ anchors.fill: parent
+ onClicked: flick.overShoot = flick.overShoot > 0 ? 0 : 30
+ }
+ }
+
+ Rectangle {
+ width: Math.abs(flick.verticalVelocity)/100
+ height: 50
+ x: 200
+ y: parent.height - 50
+ color: blue
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.0.png b/tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.0.png
new file mode 100644
index 0000000..53a8b42
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.1.png b/tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.1.png
new file mode 100644
index 0000000..b7efe8c
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.2.png b/tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.2.png
new file mode 100644
index 0000000..aa6d147
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.3.png b/tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.3.png
new file mode 100644
index 0000000..9d39713
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.4.png b/tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.4.png
new file mode 100644
index 0000000..98e8817
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.5.png b/tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.5.png
new file mode 100644
index 0000000..a3f9d8f
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.qml b/tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.qml
new file mode 100644
index 0000000..520d9a2
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflipable/data/test-flipable.qml
@@ -0,0 +1,1623 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "7e16e6360fc2e9db67dbf11d58042745"
+ }
+ Frame {
+ msec: 32
+ hash: "7e16e6360fc2e9db67dbf11d58042745"
+ }
+ Frame {
+ msec: 48
+ hash: "7e16e6360fc2e9db67dbf11d58042745"
+ }
+ Frame {
+ msec: 64
+ hash: "06d7f0befa7e06972983ffe87c162750"
+ }
+ Frame {
+ msec: 80
+ hash: "51dff66a7767e3464fda60f2cf906700"
+ }
+ Frame {
+ msec: 96
+ hash: "f8038dc4b67b92ef776a97589240e8c5"
+ }
+ Frame {
+ msec: 112
+ hash: "692931f1db6ddf0b37eb64026ca830f8"
+ }
+ Frame {
+ msec: 128
+ hash: "f01b7368e42381dda5eadf56482ea993"
+ }
+ Frame {
+ msec: 144
+ hash: "9811f823e057882d384f36d7227fa12e"
+ }
+ Frame {
+ msec: 160
+ hash: "9b40b6c75af876567ff49688bc710f2a"
+ }
+ Frame {
+ msec: 176
+ hash: "e97a5d968da37789c28816608fa262a1"
+ }
+ Frame {
+ msec: 192
+ hash: "2cd0627fdc63bb91f8dcac789d7a93b2"
+ }
+ Frame {
+ msec: 208
+ hash: "ae2407f8da9a047d2725bcdcf8e568b2"
+ }
+ Frame {
+ msec: 224
+ hash: "da2a1e5e988c27577ceb453cb0383703"
+ }
+ Frame {
+ msec: 240
+ hash: "90fb4e4ba04ac32b52c10b3258431c04"
+ }
+ Frame {
+ msec: 256
+ hash: "90fb4e4ba04ac32b52c10b3258431c04"
+ }
+ Frame {
+ msec: 272
+ hash: "90fb4e4ba04ac32b52c10b3258431c04"
+ }
+ Frame {
+ msec: 288
+ hash: "73c06997014af4e008b546b53fe349fb"
+ }
+ Frame {
+ msec: 304
+ hash: "262404c6e55b93c4ab940582a49f7e18"
+ }
+ Frame {
+ msec: 320
+ hash: "451a9408b04826ab35749d9120efd6bb"
+ }
+ Frame {
+ msec: 336
+ hash: "451a9408b04826ab35749d9120efd6bb"
+ }
+ Frame {
+ msec: 352
+ hash: "2d112d040fd425c59b511066737e494d"
+ }
+ Frame {
+ msec: 368
+ hash: "769d2724656dbf0e793ecd8e42db3de2"
+ }
+ Frame {
+ msec: 384
+ hash: "9e375cb3815723a2c5dda39c79325e96"
+ }
+ Frame {
+ msec: 400
+ hash: "b21e92871bf63873b8ae48a2aff47be5"
+ }
+ Frame {
+ msec: 416
+ hash: "00d08f4257f35c6236cde0597b0005e4"
+ }
+ Frame {
+ msec: 432
+ hash: "8048f84221a02e7102cf3272445862a1"
+ }
+ Frame {
+ msec: 448
+ hash: "f0d7b45f0b01319494616c1893aa940e"
+ }
+ Frame {
+ msec: 464
+ hash: "457fad89140a1dda9e70549d451482e9"
+ }
+ Frame {
+ msec: 480
+ hash: "ee0feb79e843cdb2adea72fa37ecab67"
+ }
+ Frame {
+ msec: 496
+ hash: "ece02d3590147884e697dd5228dee8c4"
+ }
+ Frame {
+ msec: 512
+ hash: "91c4ec19716a0883c8f5c25b9a0d1f42"
+ }
+ Frame {
+ msec: 528
+ hash: "a7c9860dd4962b11b92c54370ba156ee"
+ }
+ Frame {
+ msec: 544
+ hash: "a28f2590be1e8cde4cde5219367015ac"
+ }
+ Frame {
+ msec: 560
+ hash: "3b641ba58f5e1f0e1f2f528acf38cb28"
+ }
+ Frame {
+ msec: 576
+ hash: "d0b0969ad165d4784f763683de42278e"
+ }
+ Frame {
+ msec: 592
+ hash: "93968dffda327a101e2bd07b80fff842"
+ }
+ Frame {
+ msec: 608
+ hash: "08f5db4cd7f27178c67e6d973e4bb023"
+ }
+ Frame {
+ msec: 624
+ hash: "0967cad0a3ae82307a049944e1bcdc3e"
+ }
+ Frame {
+ msec: 640
+ hash: "d70ffd02b434e607bc11a95ca536c19a"
+ }
+ Frame {
+ msec: 656
+ hash: "cd561b4d5e707bb6b9f6d493f9b99512"
+ }
+ Frame {
+ msec: 672
+ hash: "58355ca37c6e4e54061664180faa11fb"
+ }
+ Frame {
+ msec: 688
+ hash: "bd873f48c79286c50333c838e57d8ec7"
+ }
+ Frame {
+ msec: 704
+ hash: "db89bc0e04ebefe5440748fe85e0bdf7"
+ }
+ Frame {
+ msec: 720
+ hash: "c400bc1e6c02c792cc515a6dd8bbaa9b"
+ }
+ Frame {
+ msec: 736
+ hash: "accf3567a161239cd8c18dd9d4527aaf"
+ }
+ Frame {
+ msec: 752
+ hash: "2e3bcdf70f160bf8e3f1b77ee472b782"
+ }
+ Frame {
+ msec: 768
+ hash: "929da0d629253478c322360c9a8dfc9e"
+ }
+ Frame {
+ msec: 784
+ hash: "d5d4b7c52ba14e84bc9c34a8b55f84b7"
+ }
+ Frame {
+ msec: 800
+ hash: "063ce927e9e7c5afb9131302ea5a968c"
+ }
+ Frame {
+ msec: 816
+ hash: "b94b6fff850aacccdaf0f74d4e36ba67"
+ }
+ Frame {
+ msec: 832
+ hash: "bac2b9b9be4b71fafe59868506aa8ab9"
+ }
+ Frame {
+ msec: 848
+ hash: "a91fed41a5a07e84424e45477f463aa1"
+ }
+ Frame {
+ msec: 864
+ hash: "370eefd369ef366f1d5930b261340d0b"
+ }
+ Frame {
+ msec: 880
+ hash: "b04a87997d0eeb6ff2f91fc2f0d016f6"
+ }
+ Frame {
+ msec: 896
+ hash: "09c3602a08d6d3e2afb654c328606871"
+ }
+ Frame {
+ msec: 912
+ hash: "101e66b9d13b1b0872cfcc497c9d6ae3"
+ }
+ Frame {
+ msec: 928
+ hash: "b5eaf952e40cf90ef32e8cb64ccce7d3"
+ }
+ Frame {
+ msec: 944
+ hash: "b43b02133ebe5db93e5236c0307939c3"
+ }
+ Frame {
+ msec: 960
+ image: "test-flipable.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "7d1a0ff0eceb80ff64d828c34792a2d5"
+ }
+ Frame {
+ msec: 992
+ hash: "a7492d8ab6fddb5c1d7af2621078230b"
+ }
+ Frame {
+ msec: 1008
+ hash: "2ed3dc7f10cc8279a6fd926914cdb234"
+ }
+ Frame {
+ msec: 1024
+ hash: "e9f76e419f6f682bcc9052183bb50607"
+ }
+ Frame {
+ msec: 1040
+ hash: "fdee6990e101d4a628272e7b09a217a3"
+ }
+ Frame {
+ msec: 1056
+ hash: "05e028b2f37a433343d373bc05f73756"
+ }
+ Frame {
+ msec: 1072
+ hash: "a9ece04666d17979408dcd8690cd697c"
+ }
+ Frame {
+ msec: 1088
+ hash: "a5d8c9bee6ac10fb45cedf3bc4325539"
+ }
+ Frame {
+ msec: 1104
+ hash: "08f1ff1e515ec78f75efa13a39b21f56"
+ }
+ Frame {
+ msec: 1120
+ hash: "f0bc6c649a195e2c433cf84c1b4f5bcb"
+ }
+ Frame {
+ msec: 1136
+ hash: "2a548614a9b38867cd0fe44985ca443f"
+ }
+ Frame {
+ msec: 1152
+ hash: "8c8272fc028ce5b403e636b4061351d3"
+ }
+ Frame {
+ msec: 1168
+ hash: "df11678b255cc3f624fed24d7e6a24af"
+ }
+ Frame {
+ msec: 1184
+ hash: "7dd5ce1cce200d7eede0f248f150873c"
+ }
+ Frame {
+ msec: 1200
+ hash: "e5cb8e0e588854dce5e7572fd1e3a445"
+ }
+ Frame {
+ msec: 1216
+ hash: "71937cd7d319174232797d05fe28bda5"
+ }
+ Frame {
+ msec: 1232
+ hash: "021c3a598b008991114b25b26191e8ef"
+ }
+ Frame {
+ msec: 1248
+ hash: "b372131d6fc29e7dbffc2c5f4e269ad7"
+ }
+ Frame {
+ msec: 1264
+ hash: "2120fc188aed6888eba85e9d49139000"
+ }
+ Frame {
+ msec: 1280
+ hash: "0523499bb4f4c6d0c3d2cd28fbac7056"
+ }
+ Frame {
+ msec: 1296
+ hash: "19d1fc79802728d6b0af222050b59463"
+ }
+ Frame {
+ msec: 1312
+ hash: "f48686053780376c7ab2e6481e3fd0ad"
+ }
+ Frame {
+ msec: 1328
+ hash: "0f7c5ca70fec90e7e8b2fd50b791fd2e"
+ }
+ Frame {
+ msec: 1344
+ hash: "93cd129be7cfebaa2ea8a074a77aaa7c"
+ }
+ Frame {
+ msec: 1360
+ hash: "e6b149da031b1c0b842b1b7872bd2d91"
+ }
+ Frame {
+ msec: 1376
+ hash: "5481248e889fb4fe9f4cf54f69d9f614"
+ }
+ Frame {
+ msec: 1392
+ hash: "23bb444b6248901da3eb6a2e805438cb"
+ }
+ Frame {
+ msec: 1408
+ hash: "1c9feb1c3ae76d4015c99d005ecfed60"
+ }
+ Frame {
+ msec: 1424
+ hash: "41e5345dc90fd48476f35ceeab281948"
+ }
+ Frame {
+ msec: 1440
+ hash: "89682a955a00e68031571ac765f9f5e3"
+ }
+ Frame {
+ msec: 1456
+ hash: "8ff7cee41c6f19eeda417052c1b071d6"
+ }
+ Frame {
+ msec: 1472
+ hash: "67a73129d828e8a05b1efc768cf40146"
+ }
+ Frame {
+ msec: 1488
+ hash: "0800a78c97c92c697e44ded54fdcf934"
+ }
+ Frame {
+ msec: 1504
+ hash: "d5d51263367f0c53b8d94a03d83338d9"
+ }
+ Frame {
+ msec: 1520
+ hash: "ab749885f356683e17ca52f904ae582d"
+ }
+ Frame {
+ msec: 1536
+ hash: "7f5a56f30222a9886d1e9d014b4f5cab"
+ }
+ Frame {
+ msec: 1552
+ hash: "10c5e64eff104dce59f54f70c5564959"
+ }
+ Frame {
+ msec: 1568
+ hash: "38b00c7544648ef06705acc2e9eca1f5"
+ }
+ Frame {
+ msec: 1584
+ hash: "56bdfcb8fbb776b3799676ba7934a354"
+ }
+ Frame {
+ msec: 1600
+ hash: "ea5349d337e397b3ee5e0db0c296f5e5"
+ }
+ Frame {
+ msec: 1616
+ hash: "6bd784ca760edba5a6f0b4212237e1e8"
+ }
+ Frame {
+ msec: 1632
+ hash: "77e7888a37a7724bded817903cbe777e"
+ }
+ Frame {
+ msec: 1648
+ hash: "55213bdb2f1f2d25b5680db95e79bbac"
+ }
+ Frame {
+ msec: 1664
+ hash: "6d62c7f7f76cc1d4e33c152234000da0"
+ }
+ Frame {
+ msec: 1680
+ hash: "0f6aa29c172054887e4ddb6512ae43b1"
+ }
+ Frame {
+ msec: 1696
+ hash: "75fd94508b77bbdde34a61b74ff49e12"
+ }
+ Frame {
+ msec: 1712
+ hash: "0dfdd9a1d83a706a09318c83fd08b6fe"
+ }
+ Frame {
+ msec: 1728
+ hash: "4f895ee983424c164be3e2db488a4e51"
+ }
+ Frame {
+ msec: 1744
+ hash: "974fd5f390d33afb779ac754f0e30b2a"
+ }
+ Frame {
+ msec: 1760
+ hash: "fd40e22c7d3cfceeee7dc668d1cf0a12"
+ }
+ Frame {
+ msec: 1776
+ hash: "4e3c04b35bcc43a4295582da1674da2e"
+ }
+ Frame {
+ msec: 1792
+ hash: "629888aae80ea85db07a383df352214a"
+ }
+ Frame {
+ msec: 1808
+ hash: "9a92c68cfad54c313d24e38240ea072f"
+ }
+ Frame {
+ msec: 1824
+ hash: "3e27569d19670ec99f11bfa46099456a"
+ }
+ Frame {
+ msec: 1840
+ hash: "5d4be9ed8c4ba7faefde5427cdbffc73"
+ }
+ Frame {
+ msec: 1856
+ hash: "232d4e03a57edf0386b06884482f9730"
+ }
+ Frame {
+ msec: 1872
+ hash: "c45f959fd81ac08add219326cb6a8bfc"
+ }
+ Frame {
+ msec: 1888
+ hash: "349111e36190f77afd53c50ee2e9ba94"
+ }
+ Frame {
+ msec: 1904
+ hash: "ea5ed48b2bcdfd2a711a3a71a4ae37c3"
+ }
+ Frame {
+ msec: 1920
+ image: "test-flipable.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "ae4e35413e462221b8cb48dd0350f873"
+ }
+ Frame {
+ msec: 1952
+ hash: "63cc3851236d5de613c85a2971ef7145"
+ }
+ Frame {
+ msec: 1968
+ hash: "45d5fdb92107a7074d56d97bda34756f"
+ }
+ Frame {
+ msec: 1984
+ hash: "f74d9a3b53a629f7fccfdd255fdbba62"
+ }
+ Frame {
+ msec: 2000
+ hash: "60c6a30e15ed4ad61c14f15f9f1f3790"
+ }
+ Frame {
+ msec: 2016
+ hash: "b5f7c630f6e61c7ddac8493e17a1f53e"
+ }
+ Frame {
+ msec: 2032
+ hash: "98558c7135fa84fa08d457c6064b8653"
+ }
+ Frame {
+ msec: 2048
+ hash: "2858e39a9b39739bb5c0c1ce23e83b20"
+ }
+ Frame {
+ msec: 2064
+ hash: "0b174f04215131cfa32b5d1a32170ac3"
+ }
+ Frame {
+ msec: 2080
+ hash: "67e3618bab95519a034ed6c8c1543212"
+ }
+ Frame {
+ msec: 2096
+ hash: "2012c5310f198022a3878c9ded08523d"
+ }
+ Frame {
+ msec: 2112
+ hash: "1cb6a1f6d873d2bfde457828c17b4886"
+ }
+ Frame {
+ msec: 2128
+ hash: "be3f28bd56d9d985408e32cc0aab0623"
+ }
+ Frame {
+ msec: 2144
+ hash: "4aa07c4887f873f0f034930bd681f9dc"
+ }
+ Frame {
+ msec: 2160
+ hash: "adeae071187b590aa0a142c27098d2f4"
+ }
+ Frame {
+ msec: 2176
+ hash: "d777aaccd6143c2c1000bbfabdbefeb2"
+ }
+ Frame {
+ msec: 2192
+ hash: "7b4785b9e6610f02c52b4c824bea8ecd"
+ }
+ Frame {
+ msec: 2208
+ hash: "c539b3638272e46120edbe4a58e1d894"
+ }
+ Frame {
+ msec: 2224
+ hash: "ae466024a1dd731b6730dda255e68eb8"
+ }
+ Frame {
+ msec: 2240
+ hash: "f844a288b009cc4c6c28eb30d799c397"
+ }
+ Frame {
+ msec: 2256
+ hash: "4fc8ca1992802f97dd431783db89c725"
+ }
+ Frame {
+ msec: 2272
+ hash: "79b899461efae97b65b8c24c8820f348"
+ }
+ Frame {
+ msec: 2288
+ hash: "cb1ce87ddc372e24e37b60c013310549"
+ }
+ Frame {
+ msec: 2304
+ hash: "c8937aea34fd299c151706598828be6f"
+ }
+ Frame {
+ msec: 2320
+ hash: "ed5c3a904dc3b72937c6eea475514b2d"
+ }
+ Frame {
+ msec: 2336
+ hash: "09043e74a3ac60d05122675a1b253320"
+ }
+ Frame {
+ msec: 2352
+ hash: "57677a33d8c60a45c64aea10a695e8d0"
+ }
+ Frame {
+ msec: 2368
+ hash: "496fe0b0e420356e4205537fdf3adc2f"
+ }
+ Frame {
+ msec: 2384
+ hash: "f4146ce8db5cf2c3da15715820c9f62f"
+ }
+ Frame {
+ msec: 2400
+ hash: "b80bc46468695b874d401c4c9bd68932"
+ }
+ Frame {
+ msec: 2416
+ hash: "b0cf0021232ab917301206614f61f0bf"
+ }
+ Frame {
+ msec: 2432
+ hash: "b0abdf5b86e3fcb22a9254ac5b522380"
+ }
+ Frame {
+ msec: 2448
+ hash: "c1624cb7e90ea26ab0c37cfe9919ca36"
+ }
+ Frame {
+ msec: 2464
+ hash: "0ffd6a3b3e5f6db5a3a8df756caf713e"
+ }
+ Frame {
+ msec: 2480
+ hash: "1604ad8e7a4aa4fa8dff1f37fc8c51d7"
+ }
+ Frame {
+ msec: 2496
+ hash: "5bbca0b79c42e263162926e5c2fd3d82"
+ }
+ Frame {
+ msec: 2512
+ hash: "9436b4f2ab902673ed067de55da5003e"
+ }
+ Frame {
+ msec: 2528
+ hash: "3c7b5fa0970242a2ad308c72d761713b"
+ }
+ Frame {
+ msec: 2544
+ hash: "15e451c53e8f5c70614f87f33fe0a2e6"
+ }
+ Frame {
+ msec: 2560
+ hash: "7e8cbe203306d2f267a42fed1e4790ed"
+ }
+ Frame {
+ msec: 2576
+ hash: "db21ae28564614b58a7dd5ccd97082e6"
+ }
+ Frame {
+ msec: 2592
+ hash: "ff52e198874de749c46f9b34cfe40cfc"
+ }
+ Frame {
+ msec: 2608
+ hash: "916d92d24a81ced07a54d68c46299d4c"
+ }
+ Frame {
+ msec: 2624
+ hash: "2f6cf122e5f15fc5f5d3c92d92ca1384"
+ }
+ Frame {
+ msec: 2640
+ hash: "6f328038e5d505c402651423c44986a5"
+ }
+ Frame {
+ msec: 2656
+ hash: "6f328038e5d505c402651423c44986a5"
+ }
+ Frame {
+ msec: 2672
+ hash: "78e0dca60c04d3defbd90457685dbab3"
+ }
+ Frame {
+ msec: 2688
+ hash: "b915de1be0c1779e06fb9eea8237f91d"
+ }
+ Frame {
+ msec: 2704
+ hash: "0ff9fd6b09fc14abacb794353b9500f6"
+ }
+ Frame {
+ msec: 2720
+ hash: "5a1c9cd9da5492a61a3a1bc6ad37ef17"
+ }
+ Frame {
+ msec: 2736
+ hash: "4c4a72eb4105903802de56a4a62d86cc"
+ }
+ Frame {
+ msec: 2752
+ hash: "6d813ee777a5900c65aca5939c004d0c"
+ }
+ Frame {
+ msec: 2768
+ hash: "6d813ee777a5900c65aca5939c004d0c"
+ }
+ Frame {
+ msec: 2784
+ hash: "0acaa3ece071ad4461cf4a79d65a0f03"
+ }
+ Frame {
+ msec: 2800
+ hash: "0acaa3ece071ad4461cf4a79d65a0f03"
+ }
+ Frame {
+ msec: 2816
+ hash: "f5cf7e68edc5fcd9dd91882d3f9ba380"
+ }
+ Frame {
+ msec: 2832
+ hash: "51f8508eddffbac2fad22bd3e8040c69"
+ }
+ Frame {
+ msec: 2848
+ hash: "a09746c72df5330f6ca2a93d9b8e79f6"
+ }
+ Frame {
+ msec: 2864
+ hash: "b2ef52b66896649413b3852bcf642e1c"
+ }
+ Frame {
+ msec: 2880
+ image: "test-flipable.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "ae76d183491834e2b1d0371420d51ce5"
+ }
+ Frame {
+ msec: 2912
+ hash: "b19d89aa671cc3a773f64a7bae21adb6"
+ }
+ Frame {
+ msec: 2928
+ hash: "08eb7bd2e49fe600e922e49a3aa56e93"
+ }
+ Frame {
+ msec: 2944
+ hash: "1e3a7bdd0bd9d5b84c2cb5b646d7fb45"
+ }
+ Frame {
+ msec: 2960
+ hash: "be9f5091197899c0b89823e4403358f3"
+ }
+ Frame {
+ msec: 2976
+ hash: "1daeebce8e7eef80b135d2e4f83f780b"
+ }
+ Frame {
+ msec: 2992
+ hash: "1daeebce8e7eef80b135d2e4f83f780b"
+ }
+ Frame {
+ msec: 3008
+ hash: "1daeebce8e7eef80b135d2e4f83f780b"
+ }
+ Frame {
+ msec: 3024
+ hash: "1daeebce8e7eef80b135d2e4f83f780b"
+ }
+ Frame {
+ msec: 3040
+ hash: "1daeebce8e7eef80b135d2e4f83f780b"
+ }
+ Frame {
+ msec: 3056
+ hash: "1daeebce8e7eef80b135d2e4f83f780b"
+ }
+ Frame {
+ msec: 3072
+ hash: "be9f5091197899c0b89823e4403358f3"
+ }
+ Frame {
+ msec: 3088
+ hash: "be9f5091197899c0b89823e4403358f3"
+ }
+ Frame {
+ msec: 3104
+ hash: "1e3a7bdd0bd9d5b84c2cb5b646d7fb45"
+ }
+ Frame {
+ msec: 3120
+ hash: "b19d89aa671cc3a773f64a7bae21adb6"
+ }
+ Frame {
+ msec: 3136
+ hash: "e7ed4449b5ea3288d5e8fecb33a4a422"
+ }
+ Frame {
+ msec: 3152
+ hash: "186a2c1af03e7fa590ff3cd7422285e3"
+ }
+ Frame {
+ msec: 3168
+ hash: "373141f99bc88c40ead161502c9750e9"
+ }
+ Frame {
+ msec: 3184
+ hash: "0221e2ef4cf809ebfeba466206a77cce"
+ }
+ Frame {
+ msec: 3200
+ hash: "51f8508eddffbac2fad22bd3e8040c69"
+ }
+ Frame {
+ msec: 3216
+ hash: "f5cf7e68edc5fcd9dd91882d3f9ba380"
+ }
+ Frame {
+ msec: 3232
+ hash: "0acaa3ece071ad4461cf4a79d65a0f03"
+ }
+ Frame {
+ msec: 3248
+ hash: "0acaa3ece071ad4461cf4a79d65a0f03"
+ }
+ Frame {
+ msec: 3264
+ hash: "6d813ee777a5900c65aca5939c004d0c"
+ }
+ Frame {
+ msec: 3280
+ hash: "6d813ee777a5900c65aca5939c004d0c"
+ }
+ Frame {
+ msec: 3296
+ hash: "6d813ee777a5900c65aca5939c004d0c"
+ }
+ Frame {
+ msec: 3312
+ hash: "5a1c9cd9da5492a61a3a1bc6ad37ef17"
+ }
+ Frame {
+ msec: 3328
+ hash: "0ff9fd6b09fc14abacb794353b9500f6"
+ }
+ Frame {
+ msec: 3344
+ hash: "0ff9fd6b09fc14abacb794353b9500f6"
+ }
+ Frame {
+ msec: 3360
+ hash: "6f328038e5d505c402651423c44986a5"
+ }
+ Frame {
+ msec: 3376
+ hash: "6f328038e5d505c402651423c44986a5"
+ }
+ Frame {
+ msec: 3392
+ hash: "dd04a76df90f27358f4162fd85cfa4cd"
+ }
+ Frame {
+ msec: 3408
+ hash: "12df495b5e8bfd2c9dd13fbeccc69e08"
+ }
+ Frame {
+ msec: 3424
+ hash: "4b6f9dcde7d5d88b9c3eff3187378036"
+ }
+ Frame {
+ msec: 3440
+ hash: "712f3850c0efe45c60a3761f1354b90b"
+ }
+ Frame {
+ msec: 3456
+ hash: "22215981f00790d7a409230eb730abca"
+ }
+ Frame {
+ msec: 3472
+ hash: "a4a26f9736282ceb307f0f97735002eb"
+ }
+ Frame {
+ msec: 3488
+ hash: "b41d7a18d84a8b220e99464cab86882d"
+ }
+ Frame {
+ msec: 3504
+ hash: "c7c1961120f128cd0fcd6a7b61c98197"
+ }
+ Frame {
+ msec: 3520
+ hash: "e56e7ba603d2620afb0fab6b19aff33e"
+ }
+ Frame {
+ msec: 3536
+ hash: "1a258bed9a7a38452a746d7641016e73"
+ }
+ Frame {
+ msec: 3552
+ hash: "a237b9c187bbbcb79f624d74def15db2"
+ }
+ Frame {
+ msec: 3568
+ hash: "34a7afdebb7352ca65e0eaec61632d12"
+ }
+ Frame {
+ msec: 3584
+ hash: "a5a98e932a30418bae62bb006afc1048"
+ }
+ Frame {
+ msec: 3600
+ hash: "2ee25374cb9fef01e78d02c4131010b7"
+ }
+ Frame {
+ msec: 3616
+ hash: "7956b07b848ba89905e5c609657503e2"
+ }
+ Frame {
+ msec: 3632
+ hash: "0949a2b13f6475b3f11be04321c953a1"
+ }
+ Frame {
+ msec: 3648
+ hash: "5a1ff901ecc7c3cd7f39cd07e0273dd4"
+ }
+ Frame {
+ msec: 3664
+ hash: "44fcd7209b9f5b1c28c21e9aae408097"
+ }
+ Frame {
+ msec: 3680
+ hash: "bee94f395239aebb0bacca3dbbee95e5"
+ }
+ Frame {
+ msec: 3696
+ hash: "bd26b7e2b07bbcee3819fdacc35eea8d"
+ }
+ Frame {
+ msec: 3712
+ hash: "d3707b90c5cd0d1061db4b97b6fcb96a"
+ }
+ Frame {
+ msec: 3728
+ hash: "6f6ed6c7553b3f909d53e2146b3831d5"
+ }
+ Frame {
+ msec: 3744
+ hash: "a3a1a03617d1cb5660c51bf2f18088bc"
+ }
+ Frame {
+ msec: 3760
+ hash: "6d4646f0a53800ad60d173ab9cb9010a"
+ }
+ Frame {
+ msec: 3776
+ hash: "126cae232e2fe49e3188393c2798065b"
+ }
+ Frame {
+ msec: 3792
+ hash: "e1fa758d333ffe5208365c0babff33a0"
+ }
+ Frame {
+ msec: 3808
+ hash: "f2a6156f7d6013bd4234b35c21adb074"
+ }
+ Frame {
+ msec: 3824
+ hash: "0271f66eb6d9b91a3ab8da2d728b9581"
+ }
+ Frame {
+ msec: 3840
+ image: "test-flipable.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "e18635d7c6c5de361e7406c2db357aca"
+ }
+ Frame {
+ msec: 3872
+ hash: "56100e9ca8d1eb7e6334e5a05ef2b94d"
+ }
+ Frame {
+ msec: 3888
+ hash: "3d15b8d662d3df82dd78590c43794337"
+ }
+ Frame {
+ msec: 3904
+ hash: "9729b36fe9dbabf0c46e78b723885530"
+ }
+ Frame {
+ msec: 3920
+ hash: "ccb8b51084cc1ef3d201887b824fb1ac"
+ }
+ Frame {
+ msec: 3936
+ hash: "d9dc9d240a6f89603a54bccd66361530"
+ }
+ Frame {
+ msec: 3952
+ hash: "0e52d92455c263493d32ffe93f242739"
+ }
+ Frame {
+ msec: 3968
+ hash: "695ab932722844b975097779e26df55c"
+ }
+ Frame {
+ msec: 3984
+ hash: "da285cba2e11db1e87d1d180e376ff8e"
+ }
+ Frame {
+ msec: 4000
+ hash: "54bd12888fc4526d310fa0a66b5ba3be"
+ }
+ Frame {
+ msec: 4016
+ hash: "c3e3db473bdb96fd619b078f0f6b3ceb"
+ }
+ Frame {
+ msec: 4032
+ hash: "acfd8aaf0bb52ad3ef3116bb99f3656a"
+ }
+ Frame {
+ msec: 4048
+ hash: "c5a0877ce86c26b30b642818e83d6118"
+ }
+ Frame {
+ msec: 4064
+ hash: "b187fde9af2bad37f84f6324afcbb303"
+ }
+ Frame {
+ msec: 4080
+ hash: "0dfe035424d7f31dda88be3b4bb30c8a"
+ }
+ Frame {
+ msec: 4096
+ hash: "893bddc95fbf6e452ba61b06eab1a8c5"
+ }
+ Frame {
+ msec: 4112
+ hash: "35fb89ea579819f4b3416ff1c1b1cc9d"
+ }
+ Frame {
+ msec: 4128
+ hash: "316371649f9a1e12e336c5823408eaf9"
+ }
+ Frame {
+ msec: 4144
+ hash: "ade751c6e497c73a920baf18f0752908"
+ }
+ Frame {
+ msec: 4160
+ hash: "86720fa1eeae374c6cc67e107d27e23a"
+ }
+ Frame {
+ msec: 4176
+ hash: "1a6f080227f1ccd03b6c4093b9fdadb3"
+ }
+ Frame {
+ msec: 4192
+ hash: "f7d7398edba69716ec8c0699d5472dca"
+ }
+ Frame {
+ msec: 4208
+ hash: "9e62c9dd25abb203f5c06c7bff0d8363"
+ }
+ Frame {
+ msec: 4224
+ hash: "fd90404238b458fc86a4a17e6a976f9b"
+ }
+ Frame {
+ msec: 4240
+ hash: "e39668dc347318fc61a365f9006aab3c"
+ }
+ Frame {
+ msec: 4256
+ hash: "c40f41f635f10f5f9b04b42ba2dc5bb1"
+ }
+ Frame {
+ msec: 4272
+ hash: "c0f971c75b7237de7e9b2f25cc3f34b2"
+ }
+ Frame {
+ msec: 4288
+ hash: "a1c79481fd1632cfdc396aefb3592534"
+ }
+ Frame {
+ msec: 4304
+ hash: "6eee76f40fc7ec1a1e3d77c849321740"
+ }
+ Frame {
+ msec: 4320
+ hash: "0a36746ab17caef5946731c31af3823f"
+ }
+ Frame {
+ msec: 4336
+ hash: "863dedd22df4e1d14e73eaeb851e9b66"
+ }
+ Frame {
+ msec: 4352
+ hash: "318e8751f7056bb6a004c8a7ce7be870"
+ }
+ Frame {
+ msec: 4368
+ hash: "8fb2809a366f42c86fad7aa5db3ff22c"
+ }
+ Frame {
+ msec: 4384
+ hash: "8aaea666640cb3b27e3374f756fe411b"
+ }
+ Frame {
+ msec: 4400
+ hash: "1f552095d26a8d145584e36237630916"
+ }
+ Frame {
+ msec: 4416
+ hash: "cd5aa55715786cac0f7efc90c7c4b9d6"
+ }
+ Frame {
+ msec: 4432
+ hash: "7a3153d9309ec338dce3437ecf667646"
+ }
+ Frame {
+ msec: 4448
+ hash: "c7fa40e69148f1c5ec494ad159b6ce6c"
+ }
+ Frame {
+ msec: 4464
+ hash: "e131bc8ca25ddc4b7dd6582ff034fe14"
+ }
+ Frame {
+ msec: 4480
+ hash: "3174c672e62dae0341d5849e23031280"
+ }
+ Frame {
+ msec: 4496
+ hash: "0b25fb7d33708a3292ede7c66e25a3d7"
+ }
+ Frame {
+ msec: 4512
+ hash: "84b3cf92b3abc2f5acf07cfccf3c0202"
+ }
+ Frame {
+ msec: 4528
+ hash: "fafbd14d296e4954bce7816d811ddd89"
+ }
+ Frame {
+ msec: 4544
+ hash: "865018d8408863b741a7082a962236dc"
+ }
+ Frame {
+ msec: 4560
+ hash: "f626082691429565b55ce9e04b14a665"
+ }
+ Frame {
+ msec: 4576
+ hash: "8a02f7d3d53e98384d1f05dc7fc5fd37"
+ }
+ Frame {
+ msec: 4592
+ hash: "6af3a8305b25a9a769b8cf00479c6ab3"
+ }
+ Frame {
+ msec: 4608
+ hash: "b31470b0ac4a593317abc365acb2b281"
+ }
+ Frame {
+ msec: 4624
+ hash: "efd00c43b1b8bbc4bc5496dcfa58c6b0"
+ }
+ Frame {
+ msec: 4640
+ hash: "498cf6c20aeca609e9d9cea78f0cc6a3"
+ }
+ Frame {
+ msec: 4656
+ hash: "b55661b5d9632bc0d7fc7ff3a421a2e7"
+ }
+ Frame {
+ msec: 4672
+ hash: "2f1e402c5e4a0615528f91dd2e183ddd"
+ }
+ Frame {
+ msec: 4688
+ hash: "d1c166cc7932e72ba22a73637cad65d6"
+ }
+ Frame {
+ msec: 4704
+ hash: "374b703e0059fc80b67480113d584754"
+ }
+ Frame {
+ msec: 4720
+ hash: "e8de71d4a2a253e366b2edf5d475824d"
+ }
+ Frame {
+ msec: 4736
+ hash: "6a9d033b332f0c0285284fdaddf3bbdb"
+ }
+ Frame {
+ msec: 4752
+ hash: "640c227fb62e40c666035e7465ac5c4e"
+ }
+ Frame {
+ msec: 4768
+ hash: "9cf7dc6507befd6ae54f380a7d87a207"
+ }
+ Frame {
+ msec: 4784
+ hash: "d1c7b2160c08e03e7a98d7d2db0116f7"
+ }
+ Frame {
+ msec: 4800
+ image: "test-flipable.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "6e48e605ea1aed4028e02476328f182b"
+ }
+ Frame {
+ msec: 4832
+ hash: "2dfa5fdfd07e7000caee6abf5fe84378"
+ }
+ Frame {
+ msec: 4848
+ hash: "2b0c2f019b07f1f8b4e5af9a520ab061"
+ }
+ Frame {
+ msec: 4864
+ hash: "33cb1aaeb7dafc2475e4337be7cc7892"
+ }
+ Frame {
+ msec: 4880
+ hash: "91290d1435bedb5010ba135a7f99c0a2"
+ }
+ Frame {
+ msec: 4896
+ hash: "df7434eb6c6e5d45935d6c6fd03f06d1"
+ }
+ Frame {
+ msec: 4912
+ hash: "48dfe78dcdd65242132071454fb9ea33"
+ }
+ Frame {
+ msec: 4928
+ hash: "1b288012e123cb6051bfa180ea2a2bc0"
+ }
+ Frame {
+ msec: 4944
+ hash: "84b23d92987f59df336d9b269e3b7bbc"
+ }
+ Frame {
+ msec: 4960
+ hash: "c413ca53240df702c3ba0c7f4dacca3b"
+ }
+ Frame {
+ msec: 4976
+ hash: "339c06a2e1fc05ebfd3732097b9c5242"
+ }
+ Frame {
+ msec: 4992
+ hash: "f1e647e274ac8c8458d2c1e576623688"
+ }
+ Frame {
+ msec: 5008
+ hash: "a70dc2f51ecfc164595cfef61c1da245"
+ }
+ Frame {
+ msec: 5024
+ hash: "b69f034a71b53c885cd177da422d5fc7"
+ }
+ Frame {
+ msec: 5040
+ hash: "26c25a031944c677b30f69c8498ac6ce"
+ }
+ Frame {
+ msec: 5056
+ hash: "ebc2328766e8736eac989e309968d8f9"
+ }
+ Frame {
+ msec: 5072
+ hash: "41d55f53bfc74e614c906d3f6b813704"
+ }
+ Frame {
+ msec: 5088
+ hash: "135e97adb3f19aa19d746ece1b2b3d02"
+ }
+ Frame {
+ msec: 5104
+ hash: "85c4454dbe9a39b3005f32fd7a06b1b2"
+ }
+ Frame {
+ msec: 5120
+ hash: "7561e0dd6970f7c81bcb53c9371d4405"
+ }
+ Frame {
+ msec: 5136
+ hash: "c9961d5abf700a06ed294ce7aecb6147"
+ }
+ Frame {
+ msec: 5152
+ hash: "29acf87effa3c21322334080776c566e"
+ }
+ Frame {
+ msec: 5168
+ hash: "04990a79d5ff5cb41dcd48d3e3bf5b11"
+ }
+ Frame {
+ msec: 5184
+ hash: "f40c78c37a26249ecb161af778631f7b"
+ }
+ Frame {
+ msec: 5200
+ hash: "eddacaeae7c47d063db737f678896da1"
+ }
+ Frame {
+ msec: 5216
+ hash: "5ae523dc1115fd0904875718e05aa2a5"
+ }
+ Frame {
+ msec: 5232
+ hash: "f09c299412a9e2fd353c4937ad959f25"
+ }
+ Frame {
+ msec: 5248
+ hash: "9caeae0abd3bc665bd307997baea6a48"
+ }
+ Frame {
+ msec: 5264
+ hash: "e9d222c9d23773488b64b0a6323c1095"
+ }
+ Frame {
+ msec: 5280
+ hash: "ad34c46ab3d418a2af7bffc59e720868"
+ }
+ Frame {
+ msec: 5296
+ hash: "ff0d8cfd272fca5be34b663a7e52f283"
+ }
+ Frame {
+ msec: 5312
+ hash: "55f95277276217de16b6b43090bbb807"
+ }
+ Frame {
+ msec: 5328
+ hash: "387fadf4140d335c0b05cfee0c37a413"
+ }
+ Frame {
+ msec: 5344
+ hash: "10a1a5a91c11aa8279ae4e57e4d3946b"
+ }
+ Frame {
+ msec: 5360
+ hash: "414f7bf3a3ec05a9840cd104a13d5504"
+ }
+ Frame {
+ msec: 5376
+ hash: "e027716402ead36450732c8350e614b5"
+ }
+ Frame {
+ msec: 5392
+ hash: "0190f59275f01429ee6761b39ce99fc1"
+ }
+ Frame {
+ msec: 5408
+ hash: "7f99dd337561f006a7c56babe3c10c38"
+ }
+ Frame {
+ msec: 5424
+ hash: "4bbb76393e56b5da723c1f33a7694013"
+ }
+ Frame {
+ msec: 5440
+ hash: "00eedf86916629fe90f3c2f36e0c689e"
+ }
+ Frame {
+ msec: 5456
+ hash: "84d1f5a6604b75371f2fa7b60a59299b"
+ }
+ Frame {
+ msec: 5472
+ hash: "00488220a460746be6d7d1b66d15c392"
+ }
+ Frame {
+ msec: 5488
+ hash: "cae5a6d45425d641228210a47c5ee5f6"
+ }
+ Frame {
+ msec: 5504
+ hash: "670a2132e65564ca2cfd58ec9842ba93"
+ }
+ Frame {
+ msec: 5520
+ hash: "212b6cc9fa130bec9579cf218e1f7eeb"
+ }
+ Frame {
+ msec: 5536
+ hash: "b159e67541b5b1b5071f6cd041c62293"
+ }
+ Frame {
+ msec: 5552
+ hash: "8c4e62d26e19c32200772edefd329db3"
+ }
+ Frame {
+ msec: 5568
+ hash: "1ff120d0444e398cc79190012b548b4b"
+ }
+ Frame {
+ msec: 5584
+ hash: "1c75bccd5e19ee9a2644585b726db048"
+ }
+ Frame {
+ msec: 5600
+ hash: "bc16aff96b1f9cfe3807e95e371a8f26"
+ }
+ Frame {
+ msec: 5616
+ hash: "35a5fdb20bdbaf0122cac4cad60e7bb8"
+ }
+ Frame {
+ msec: 5632
+ hash: "ea7ac72c81abff8af260be508b6cf117"
+ }
+ Frame {
+ msec: 5648
+ hash: "2d112d040fd425c59b511066737e494d"
+ }
+ Frame {
+ msec: 5664
+ hash: "769d2724656dbf0e793ecd8e42db3de2"
+ }
+ Frame {
+ msec: 5680
+ hash: "1c25b3d65e8590f8c213afa76b722e97"
+ }
+ Frame {
+ msec: 5696
+ hash: "760a103d4524f8b665c6ff42185a8ce7"
+ }
+ Frame {
+ msec: 5712
+ hash: "451a9408b04826ab35749d9120efd6bb"
+ }
+ Frame {
+ msec: 5728
+ hash: "3fad6b23b0b78f844e02fe307e20d376"
+ }
+ Frame {
+ msec: 5744
+ hash: "451a9408b04826ab35749d9120efd6bb"
+ }
+ Frame {
+ msec: 5760
+ image: "test-flipable.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "90fb4e4ba04ac32b52c10b3258431c04"
+ }
+ Frame {
+ msec: 5792
+ hash: "90fb4e4ba04ac32b52c10b3258431c04"
+ }
+ Frame {
+ msec: 5808
+ hash: "da2a1e5e988c27577ceb453cb0383703"
+ }
+ Frame {
+ msec: 5824
+ hash: "ae2407f8da9a047d2725bcdcf8e568b2"
+ }
+ Frame {
+ msec: 5840
+ hash: "ae2407f8da9a047d2725bcdcf8e568b2"
+ }
+ Frame {
+ msec: 5856
+ hash: "e97a5d968da37789c28816608fa262a1"
+ }
+ Frame {
+ msec: 5872
+ hash: "9becb90d9f8a61f5afacdc53d137ebcb"
+ }
+ Frame {
+ msec: 5888
+ hash: "9811f823e057882d384f36d7227fa12e"
+ }
+ Frame {
+ msec: 5904
+ hash: "1e7a308d18851db0a430542178944c67"
+ }
+ Frame {
+ msec: 5920
+ hash: "692931f1db6ddf0b37eb64026ca830f8"
+ }
+ Frame {
+ msec: 5936
+ hash: "2117c775960234c297187ea2e9d51e73"
+ }
+ Frame {
+ msec: 5952
+ hash: "f8038dc4b67b92ef776a97589240e8c5"
+ }
+ Frame {
+ msec: 5968
+ hash: "51dff66a7767e3464fda60f2cf906700"
+ }
+ Frame {
+ msec: 5984
+ hash: "7e16e6360fc2e9db67dbf11d58042745"
+ }
+ Frame {
+ msec: 6000
+ hash: "7e16e6360fc2e9db67dbf11d58042745"
+ }
+ Frame {
+ msec: 6016
+ hash: "7e16e6360fc2e9db67dbf11d58042745"
+ }
+ Frame {
+ msec: 6032
+ hash: "7e16e6360fc2e9db67dbf11d58042745"
+ }
+ Frame {
+ msec: 6048
+ hash: "7e16e6360fc2e9db67dbf11d58042745"
+ }
+ Frame {
+ msec: 6064
+ hash: "51dff66a7767e3464fda60f2cf906700"
+ }
+ Frame {
+ msec: 6080
+ hash: "f8038dc4b67b92ef776a97589240e8c5"
+ }
+ Frame {
+ msec: 6096
+ hash: "2117c775960234c297187ea2e9d51e73"
+ }
+ Frame {
+ msec: 6112
+ hash: "692931f1db6ddf0b37eb64026ca830f8"
+ }
+ Frame {
+ msec: 6128
+ hash: "f01b7368e42381dda5eadf56482ea993"
+ }
+ Frame {
+ msec: 6144
+ hash: "9811f823e057882d384f36d7227fa12e"
+ }
+ Frame {
+ msec: 6160
+ hash: "9b40b6c75af876567ff49688bc710f2a"
+ }
+ Frame {
+ msec: 6176
+ hash: "e97a5d968da37789c28816608fa262a1"
+ }
+ Frame {
+ msec: 6192
+ hash: "2cd0627fdc63bb91f8dcac789d7a93b2"
+ }
+ Frame {
+ msec: 6208
+ hash: "ae2407f8da9a047d2725bcdcf8e568b2"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 6224
+ hash: "90fb4e4ba04ac32b52c10b3258431c04"
+ }
+ Frame {
+ msec: 6240
+ hash: "90fb4e4ba04ac32b52c10b3258431c04"
+ }
+ Frame {
+ msec: 6256
+ hash: "90fb4e4ba04ac32b52c10b3258431c04"
+ }
+ Frame {
+ msec: 6272
+ hash: "90fb4e4ba04ac32b52c10b3258431c04"
+ }
+ Frame {
+ msec: 6288
+ hash: "73c06997014af4e008b546b53fe349fb"
+ }
+ Frame {
+ msec: 6304
+ hash: "451a9408b04826ab35749d9120efd6bb"
+ }
+ Frame {
+ msec: 6320
+ hash: "451a9408b04826ab35749d9120efd6bb"
+ }
+ Frame {
+ msec: 6336
+ hash: "3fad6b23b0b78f844e02fe307e20d376"
+ }
+ Frame {
+ msec: 6352
+ hash: "1c25b3d65e8590f8c213afa76b722e97"
+ }
+ Frame {
+ msec: 6368
+ hash: "769d2724656dbf0e793ecd8e42db3de2"
+ }
+ Frame {
+ msec: 6384
+ hash: "9e375cb3815723a2c5dda39c79325e96"
+ }
+ Frame {
+ msec: 6400
+ hash: "77a245991ed8e40163bd0224eb15f20e"
+ }
+ Frame {
+ msec: 6416
+ hash: "e6936f1122c8c0a76b0eb61ad086a9f1"
+ }
+ Frame {
+ msec: 6432
+ hash: "8048f84221a02e7102cf3272445862a1"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicsflipable/test-flipable.qml b/tests/auto/declarative/visual/qmlgraphicsflipable/test-flipable.qml
new file mode 100644
index 0000000..64adb61
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsflipable/test-flipable.qml
@@ -0,0 +1,79 @@
+import Qt 4.6
+
+Rectangle {
+ width: 400; height: 240
+ color: "white"
+
+ Timer {
+ interval: 3000; running: true; repeat: true; triggeredOnStart: true
+ onTriggered: {
+ if (flipable.state == '') flipable.state = 'back'; else flipable.state = ''
+ if (flipable2.state == '') flipable2.state = 'back'; else flipable2.state = ''
+ }
+ }
+
+ Flipable {
+ id: flipable
+ width: 200; height: 200
+
+ transform: Rotation {
+ id: rotation; angle: 0
+ origin.x: 100; origin.y: 100
+ axis.x: 0; axis.y: 1; axis.z: 0
+ }
+
+ front: Rectangle {
+ color: "steelblue"; width: 200; height: 200
+ }
+
+ back: Rectangle {
+ color: "deeppink"; width: 200; height: 200
+ }
+
+ states: State {
+ name: "back"
+ PropertyChanges { target: rotation; angle: 180 }
+ }
+
+ transitions: Transition {
+ NumberAnimation { easing: "easeInOutQuad"; matchProperties: "angle"; duration: 3000 }
+ }
+ }
+
+ Flipable {
+ id: flipable2
+ x: 200; width: 200; height: 200
+
+ transform: Rotation {
+ id: rotation2; angle: 0
+ origin.x: 100; origin.y: 100
+ axis.x: 1; axis.z: 0
+ }
+
+ front: Rectangle {
+ color: "deeppink"; width: 200; height: 200
+ }
+
+ back: Rectangle {
+ color: "steelblue"; width: 200; height: 200
+ }
+
+ states: State {
+ name: "back"
+ PropertyChanges { target: rotation2; angle: 180 }
+ }
+
+ transitions: Transition {
+ NumberAnimation { easing: "easeInOutQuad"; matchProperties: "angle"; duration: 3000 }
+ }
+ }
+
+ Rectangle {
+ x: 25; width: 150; y: 210; height: 20; color: "black"
+ visible: flipable.side == Flipable.Front
+ }
+ Rectangle {
+ x: 225; width: 150; y: 210; height: 20; color: "black"
+ visible: flipable2.side == Flipable.Back
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.0.png b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.0.png
new file mode 100644
index 0000000..6c82777
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.1.png b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.1.png
new file mode 100644
index 0000000..07b1f7c
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.2.png b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.2.png
new file mode 100644
index 0000000..f2f08c0
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.3.png b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.3.png
new file mode 100644
index 0000000..08649f9
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.4.png b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.4.png
new file mode 100644
index 0000000..f9c2f17
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.5.png b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.5.png
new file mode 100644
index 0000000..52ec0bd
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.6.png b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.6.png
new file mode 100644
index 0000000..3fe25be
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.7.png b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.7.png
new file mode 100644
index 0000000..4cc12a6
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.7.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.8.png b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.8.png
new file mode 100644
index 0000000..2267f23
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.8.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.9.png b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.9.png
new file mode 100644
index 0000000..6c82777
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.9.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.qml b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.qml
new file mode 100644
index 0000000..c7ac52d
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview.qml
@@ -0,0 +1,2859 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 32
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 48
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 64
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 80
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 96
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 112
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 128
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 144
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 160
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 176
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 192
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 208
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 224
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 240
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 256
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 272
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 288
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 304
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 320
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 336
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 352
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 368
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 384
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 400
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 416
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Frame {
+ msec: 432
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 448
+ hash: "96ad89eafa7f99269518a192573af91b"
+ }
+ Frame {
+ msec: 464
+ hash: "735b00b968d0e2ea1f34cc0bdc028a8e"
+ }
+ Frame {
+ msec: 480
+ hash: "ce37c8e15fbb1aea72aff9629683fa96"
+ }
+ Frame {
+ msec: 496
+ hash: "a3f2471ef4ceac77a1c20ac327550d8d"
+ }
+ Frame {
+ msec: 512
+ hash: "28f120bd3bda9552dbc8cc908409c67d"
+ }
+ Frame {
+ msec: 528
+ hash: "f21cf0ed746fa48e67dc90c70c5bbae8"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 544
+ hash: "485d55730366b68e01582879f6970fa1"
+ }
+ Frame {
+ msec: 560
+ hash: "700e53c78b28993dce5dafb4035f4760"
+ }
+ Frame {
+ msec: 576
+ hash: "1e538e175a5e402e2334cf354392e8a7"
+ }
+ Frame {
+ msec: 592
+ hash: "0fbfba93eebaf05ae60067b365b6b4bc"
+ }
+ Frame {
+ msec: 608
+ hash: "7b1893397b76b0c95094eeca1dd21446"
+ }
+ Frame {
+ msec: 624
+ hash: "7b1893397b76b0c95094eeca1dd21446"
+ }
+ Frame {
+ msec: 640
+ hash: "7b1893397b76b0c95094eeca1dd21446"
+ }
+ Frame {
+ msec: 656
+ hash: "7b1893397b76b0c95094eeca1dd21446"
+ }
+ Frame {
+ msec: 672
+ hash: "7b1893397b76b0c95094eeca1dd21446"
+ }
+ Frame {
+ msec: 688
+ hash: "7b1893397b76b0c95094eeca1dd21446"
+ }
+ Frame {
+ msec: 704
+ hash: "7b1893397b76b0c95094eeca1dd21446"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 720
+ hash: "25e48099a8194ed2674651818d854c61"
+ }
+ Frame {
+ msec: 736
+ hash: "b75d02dfc238ba2292306ca1421279c3"
+ }
+ Frame {
+ msec: 752
+ hash: "7e48b7d9c1291b4e438c81f44228d8ad"
+ }
+ Frame {
+ msec: 768
+ hash: "fe4b009abe081a6eaeab6ef9e996f3fd"
+ }
+ Frame {
+ msec: 784
+ hash: "edea8c305fe88708dbafc03e427caa09"
+ }
+ Frame {
+ msec: 800
+ hash: "7b58803f12d0ab893acf539799d79e31"
+ }
+ Frame {
+ msec: 816
+ hash: "9b56c3d1d140114dcc57d0a8568e9b95"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 832
+ hash: "35e38e273dbc8e565917b21d00fc1530"
+ }
+ Frame {
+ msec: 848
+ hash: "116e294391333e8780daeca54c3d51ea"
+ }
+ Frame {
+ msec: 864
+ hash: "6219676215f82540d7a53b2a8aa60279"
+ }
+ Frame {
+ msec: 880
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 896
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 912
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 928
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 944
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 960
+ image: "gridview.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 992
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 1008
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 1024
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 1040
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 1056
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 1072
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 1088
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 1104
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 1120
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 1136
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 1152
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1168
+ hash: "2667c2596de97dc15353158eba03495f"
+ }
+ Frame {
+ msec: 1184
+ hash: "6a7b64e1427dcb7e438aa09a739cbc7b"
+ }
+ Frame {
+ msec: 1200
+ hash: "5bad6dc745958f5827403ea593c78752"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1216
+ hash: "b393401219ada7d094a451dba8af3f1a"
+ }
+ Frame {
+ msec: 1232
+ hash: "ba656452f8adf3d1ca7db9286274c37f"
+ }
+ Frame {
+ msec: 1248
+ hash: "1e9725c8c364a491f34035fad1f77c63"
+ }
+ Frame {
+ msec: 1264
+ hash: "a0aef0b65446dec0673b5cec3a260390"
+ }
+ Frame {
+ msec: 1280
+ hash: "d60c11a5d376af0831d6f05f2a839a92"
+ }
+ Frame {
+ msec: 1296
+ hash: "1dd2c456c6ee9cc8f9be0e9f3617d44b"
+ }
+ Frame {
+ msec: 1312
+ hash: "56208e6551e2f4202bab2d62a1cf46a2"
+ }
+ Frame {
+ msec: 1328
+ hash: "caa3c1a106d549e6bb94a1746bd7a53c"
+ }
+ Frame {
+ msec: 1344
+ hash: "caa3c1a106d549e6bb94a1746bd7a53c"
+ }
+ Frame {
+ msec: 1360
+ hash: "caa3c1a106d549e6bb94a1746bd7a53c"
+ }
+ Frame {
+ msec: 1376
+ hash: "caa3c1a106d549e6bb94a1746bd7a53c"
+ }
+ Frame {
+ msec: 1392
+ hash: "caa3c1a106d549e6bb94a1746bd7a53c"
+ }
+ Frame {
+ msec: 1408
+ hash: "caa3c1a106d549e6bb94a1746bd7a53c"
+ }
+ Frame {
+ msec: 1424
+ hash: "caa3c1a106d549e6bb94a1746bd7a53c"
+ }
+ Frame {
+ msec: 1440
+ hash: "caa3c1a106d549e6bb94a1746bd7a53c"
+ }
+ Frame {
+ msec: 1456
+ hash: "caa3c1a106d549e6bb94a1746bd7a53c"
+ }
+ Frame {
+ msec: 1472
+ hash: "caa3c1a106d549e6bb94a1746bd7a53c"
+ }
+ Frame {
+ msec: 1488
+ hash: "caa3c1a106d549e6bb94a1746bd7a53c"
+ }
+ Frame {
+ msec: 1504
+ hash: "caa3c1a106d549e6bb94a1746bd7a53c"
+ }
+ Frame {
+ msec: 1520
+ hash: "caa3c1a106d549e6bb94a1746bd7a53c"
+ }
+ Frame {
+ msec: 1536
+ hash: "caa3c1a106d549e6bb94a1746bd7a53c"
+ }
+ Frame {
+ msec: 1552
+ hash: "caa3c1a106d549e6bb94a1746bd7a53c"
+ }
+ Frame {
+ msec: 1568
+ hash: "caa3c1a106d549e6bb94a1746bd7a53c"
+ }
+ Frame {
+ msec: 1584
+ hash: "caa3c1a106d549e6bb94a1746bd7a53c"
+ }
+ Frame {
+ msec: 1600
+ hash: "caa3c1a106d549e6bb94a1746bd7a53c"
+ }
+ Frame {
+ msec: 1616
+ hash: "caa3c1a106d549e6bb94a1746bd7a53c"
+ }
+ Frame {
+ msec: 1632
+ hash: "caa3c1a106d549e6bb94a1746bd7a53c"
+ }
+ Frame {
+ msec: 1648
+ hash: "caa3c1a106d549e6bb94a1746bd7a53c"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1664
+ hash: "f0f00d22d15ed9828db7b5f3a3669fe9"
+ }
+ Frame {
+ msec: 1680
+ hash: "153e7984089530bbd052c9e4f62eb14c"
+ }
+ Frame {
+ msec: 1696
+ hash: "0525d40cc58d054a3abd7ee2486576f8"
+ }
+ Frame {
+ msec: 1712
+ hash: "8c23d5245774ab5252c98c19c33f8171"
+ }
+ Frame {
+ msec: 1728
+ hash: "5ca243794d1350f04cf973d4bfc8ab89"
+ }
+ Frame {
+ msec: 1744
+ hash: "d19b7f4c0897aba498e122d83b4cbbf1"
+ }
+ Frame {
+ msec: 1760
+ hash: "99e41460dd8efc6e5c3faf54b14c3d43"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1776
+ hash: "703469f8b133156ed3aabe02762d66c3"
+ }
+ Frame {
+ msec: 1792
+ hash: "1cc2c383e988048db76a80d8d7f5a0e2"
+ }
+ Frame {
+ msec: 1808
+ hash: "8e87117c19eb9d6e600c44e0f3869ae1"
+ }
+ Frame {
+ msec: 1824
+ hash: "8304d2432168a2ea8a887d9a135b40b4"
+ }
+ Frame {
+ msec: 1840
+ hash: "8304d2432168a2ea8a887d9a135b40b4"
+ }
+ Frame {
+ msec: 1856
+ hash: "8304d2432168a2ea8a887d9a135b40b4"
+ }
+ Frame {
+ msec: 1872
+ hash: "8304d2432168a2ea8a887d9a135b40b4"
+ }
+ Frame {
+ msec: 1888
+ hash: "8304d2432168a2ea8a887d9a135b40b4"
+ }
+ Frame {
+ msec: 1904
+ hash: "8304d2432168a2ea8a887d9a135b40b4"
+ }
+ Frame {
+ msec: 1920
+ image: "gridview.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "8304d2432168a2ea8a887d9a135b40b4"
+ }
+ Frame {
+ msec: 1952
+ hash: "8304d2432168a2ea8a887d9a135b40b4"
+ }
+ Frame {
+ msec: 1968
+ hash: "8304d2432168a2ea8a887d9a135b40b4"
+ }
+ Frame {
+ msec: 1984
+ hash: "8304d2432168a2ea8a887d9a135b40b4"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2000
+ hash: "4924037ce643d0748b8b2c666e61fd62"
+ }
+ Frame {
+ msec: 2016
+ hash: "ef9750584e669a8b2d415d13854e12a6"
+ }
+ Frame {
+ msec: 2032
+ hash: "69937eacef6e6b11ad1d5741c69a1faa"
+ }
+ Frame {
+ msec: 2048
+ hash: "a1bd870fffd95a0604dd8e170e571632"
+ }
+ Frame {
+ msec: 2064
+ hash: "a3a72386594aacc88977cdaa6441df48"
+ }
+ Frame {
+ msec: 2080
+ hash: "6d8e89de38d52f0f0f871dfa18361cb5"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2096
+ hash: "96cfb1eb6893fac86c9434d1ffb82fcb"
+ }
+ Frame {
+ msec: 2112
+ hash: "5e11df1660634ff317be474118174ec5"
+ }
+ Frame {
+ msec: 2128
+ hash: "2eb75858b50c3a9a80673ab89014ed63"
+ }
+ Frame {
+ msec: 2144
+ hash: "3ff5d66f7902af92d49ebebf04d16c26"
+ }
+ Frame {
+ msec: 2160
+ hash: "570da61e2d48acd11474fe005110ab4b"
+ }
+ Frame {
+ msec: 2176
+ hash: "570da61e2d48acd11474fe005110ab4b"
+ }
+ Frame {
+ msec: 2192
+ hash: "570da61e2d48acd11474fe005110ab4b"
+ }
+ Frame {
+ msec: 2208
+ hash: "570da61e2d48acd11474fe005110ab4b"
+ }
+ Frame {
+ msec: 2224
+ hash: "570da61e2d48acd11474fe005110ab4b"
+ }
+ Frame {
+ msec: 2240
+ hash: "570da61e2d48acd11474fe005110ab4b"
+ }
+ Frame {
+ msec: 2256
+ hash: "570da61e2d48acd11474fe005110ab4b"
+ }
+ Frame {
+ msec: 2272
+ hash: "570da61e2d48acd11474fe005110ab4b"
+ }
+ Frame {
+ msec: 2288
+ hash: "570da61e2d48acd11474fe005110ab4b"
+ }
+ Frame {
+ msec: 2304
+ hash: "570da61e2d48acd11474fe005110ab4b"
+ }
+ Frame {
+ msec: 2320
+ hash: "570da61e2d48acd11474fe005110ab4b"
+ }
+ Frame {
+ msec: 2336
+ hash: "570da61e2d48acd11474fe005110ab4b"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2352
+ hash: "efeda5b2d97e1b7c22e2308250501cb7"
+ }
+ Frame {
+ msec: 2368
+ hash: "d6158379b699279f66b94a8418e53af1"
+ }
+ Frame {
+ msec: 2384
+ hash: "ab960b0669fa594e0552df623a9136ea"
+ }
+ Frame {
+ msec: 2400
+ hash: "0ebf6be1305ee1eb8740f4d0365ef4c5"
+ }
+ Frame {
+ msec: 2416
+ hash: "46cde47dffc6f2687c8c643eca09b95d"
+ }
+ Frame {
+ msec: 2432
+ hash: "2b8698ce02a6964115d960ae19f40c37"
+ }
+ Frame {
+ msec: 2448
+ hash: "ff1e7d800bb27b41710c50554adc1091"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2464
+ hash: "5837b3aca09038cae23dcb149acc8b0b"
+ }
+ Frame {
+ msec: 2480
+ hash: "dbe7c571cdbdb9de4fd01faa6d5374cf"
+ }
+ Frame {
+ msec: 2496
+ hash: "f431abcaf05f49ead909296d7649f8a9"
+ }
+ Frame {
+ msec: 2512
+ hash: "043583b19c921740dbc990afd4f508ed"
+ }
+ Frame {
+ msec: 2528
+ hash: "043583b19c921740dbc990afd4f508ed"
+ }
+ Frame {
+ msec: 2544
+ hash: "043583b19c921740dbc990afd4f508ed"
+ }
+ Frame {
+ msec: 2560
+ hash: "043583b19c921740dbc990afd4f508ed"
+ }
+ Frame {
+ msec: 2576
+ hash: "043583b19c921740dbc990afd4f508ed"
+ }
+ Frame {
+ msec: 2592
+ hash: "043583b19c921740dbc990afd4f508ed"
+ }
+ Frame {
+ msec: 2608
+ hash: "043583b19c921740dbc990afd4f508ed"
+ }
+ Frame {
+ msec: 2624
+ hash: "043583b19c921740dbc990afd4f508ed"
+ }
+ Frame {
+ msec: 2640
+ hash: "043583b19c921740dbc990afd4f508ed"
+ }
+ Frame {
+ msec: 2656
+ hash: "043583b19c921740dbc990afd4f508ed"
+ }
+ Frame {
+ msec: 2672
+ hash: "043583b19c921740dbc990afd4f508ed"
+ }
+ Frame {
+ msec: 2688
+ hash: "043583b19c921740dbc990afd4f508ed"
+ }
+ Frame {
+ msec: 2704
+ hash: "043583b19c921740dbc990afd4f508ed"
+ }
+ Frame {
+ msec: 2720
+ hash: "043583b19c921740dbc990afd4f508ed"
+ }
+ Frame {
+ msec: 2736
+ hash: "043583b19c921740dbc990afd4f508ed"
+ }
+ Frame {
+ msec: 2752
+ hash: "043583b19c921740dbc990afd4f508ed"
+ }
+ Frame {
+ msec: 2768
+ hash: "043583b19c921740dbc990afd4f508ed"
+ }
+ Frame {
+ msec: 2784
+ hash: "043583b19c921740dbc990afd4f508ed"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2800
+ hash: "4f2fafdb59db544352e3067d67c0a714"
+ }
+ Frame {
+ msec: 2816
+ hash: "4dcd4cdf6f4e305732185ec52cd2f2f6"
+ }
+ Frame {
+ msec: 2832
+ hash: "dfd3c29b0520edbbee57dfacfa7e2b30"
+ }
+ Frame {
+ msec: 2848
+ hash: "257d3d8bcf78671d35a898befec091cb"
+ }
+ Frame {
+ msec: 2864
+ hash: "20e89c544284603943396694abe86756"
+ }
+ Frame {
+ msec: 2880
+ image: "gridview.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "b88c6af89423b32b3a4413035711df03"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2912
+ hash: "e34de13af44c449c9ecc86e06ce01ed2"
+ }
+ Frame {
+ msec: 2928
+ hash: "98ffe81129aa7cc7325764221f1dae59"
+ }
+ Frame {
+ msec: 2944
+ hash: "db2d545de9879362738e71a02a3d1d26"
+ }
+ Frame {
+ msec: 2960
+ hash: "e67ae32a47213b360c1a445bf645dde2"
+ }
+ Frame {
+ msec: 2976
+ hash: "e67ae32a47213b360c1a445bf645dde2"
+ }
+ Frame {
+ msec: 2992
+ hash: "e67ae32a47213b360c1a445bf645dde2"
+ }
+ Frame {
+ msec: 3008
+ hash: "e67ae32a47213b360c1a445bf645dde2"
+ }
+ Frame {
+ msec: 3024
+ hash: "e67ae32a47213b360c1a445bf645dde2"
+ }
+ Frame {
+ msec: 3040
+ hash: "e67ae32a47213b360c1a445bf645dde2"
+ }
+ Frame {
+ msec: 3056
+ hash: "e67ae32a47213b360c1a445bf645dde2"
+ }
+ Frame {
+ msec: 3072
+ hash: "e67ae32a47213b360c1a445bf645dde2"
+ }
+ Frame {
+ msec: 3088
+ hash: "e67ae32a47213b360c1a445bf645dde2"
+ }
+ Frame {
+ msec: 3104
+ hash: "e67ae32a47213b360c1a445bf645dde2"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3120
+ hash: "02d8c90faf56c65252e4f938944bda7b"
+ }
+ Frame {
+ msec: 3136
+ hash: "a32994e2320e357241f63b956b6db236"
+ }
+ Frame {
+ msec: 3152
+ hash: "9ada466c26c217adbcd7a93df264ed75"
+ }
+ Frame {
+ msec: 3168
+ hash: "79d1a3489be95d113e8c611a2ba63456"
+ }
+ Frame {
+ msec: 3184
+ hash: "d3aa82455c4ae3ac25097354e132a30f"
+ }
+ Frame {
+ msec: 3200
+ hash: "62d12e5933ed4ed048ccafd229f4b2b7"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3216
+ hash: "5bc4ac94ae20e425084d0811dee1ba08"
+ }
+ Frame {
+ msec: 3232
+ hash: "6d5113e3732dc7a9172eea3667a01f7b"
+ }
+ Frame {
+ msec: 3248
+ hash: "e435a2588b25d3336f290331931f5981"
+ }
+ Frame {
+ msec: 3264
+ hash: "bce201adbeb319b181cce139f179d7f0"
+ }
+ Frame {
+ msec: 3280
+ hash: "5fa3ec31176bed2de8cb076b87e0be74"
+ }
+ Frame {
+ msec: 3296
+ hash: "5fa3ec31176bed2de8cb076b87e0be74"
+ }
+ Frame {
+ msec: 3312
+ hash: "5fa3ec31176bed2de8cb076b87e0be74"
+ }
+ Frame {
+ msec: 3328
+ hash: "5fa3ec31176bed2de8cb076b87e0be74"
+ }
+ Frame {
+ msec: 3344
+ hash: "5fa3ec31176bed2de8cb076b87e0be74"
+ }
+ Frame {
+ msec: 3360
+ hash: "5fa3ec31176bed2de8cb076b87e0be74"
+ }
+ Frame {
+ msec: 3376
+ hash: "5fa3ec31176bed2de8cb076b87e0be74"
+ }
+ Frame {
+ msec: 3392
+ hash: "5fa3ec31176bed2de8cb076b87e0be74"
+ }
+ Frame {
+ msec: 3408
+ hash: "5fa3ec31176bed2de8cb076b87e0be74"
+ }
+ Frame {
+ msec: 3424
+ hash: "5fa3ec31176bed2de8cb076b87e0be74"
+ }
+ Frame {
+ msec: 3440
+ hash: "5fa3ec31176bed2de8cb076b87e0be74"
+ }
+ Frame {
+ msec: 3456
+ hash: "5fa3ec31176bed2de8cb076b87e0be74"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3472
+ hash: "8f0f3cd35ae92047f23084f447046eb8"
+ }
+ Frame {
+ msec: 3488
+ hash: "ceb12e6c5e9f0566039040d9f3ff587f"
+ }
+ Frame {
+ msec: 3504
+ hash: "dfd0c89c3ea73aceefcdafa71609c720"
+ }
+ Frame {
+ msec: 3520
+ hash: "8d8ed1a9dc6a9f74dfc81b79f02af4c5"
+ }
+ Frame {
+ msec: 3536
+ hash: "d450bd62e03e1e4c7cb66e98ece05f97"
+ }
+ Frame {
+ msec: 3552
+ hash: "d1ece2210cd24eedd5361e5c3a162236"
+ }
+ Frame {
+ msec: 3568
+ hash: "77589e48b9db95e702055753046319e5"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3584
+ hash: "7793263ecb831a1e63fbd76c8addde03"
+ }
+ Frame {
+ msec: 3600
+ hash: "bfa9675f981c37fed27dea100226f61a"
+ }
+ Frame {
+ msec: 3616
+ hash: "9780849fe8abd22c32ccafcdd46b0d65"
+ }
+ Frame {
+ msec: 3632
+ hash: "e63d987ba303a42046827f14941b444a"
+ }
+ Frame {
+ msec: 3648
+ hash: "e63d987ba303a42046827f14941b444a"
+ }
+ Frame {
+ msec: 3664
+ hash: "e63d987ba303a42046827f14941b444a"
+ }
+ Frame {
+ msec: 3680
+ hash: "e63d987ba303a42046827f14941b444a"
+ }
+ Frame {
+ msec: 3696
+ hash: "e63d987ba303a42046827f14941b444a"
+ }
+ Frame {
+ msec: 3712
+ hash: "e63d987ba303a42046827f14941b444a"
+ }
+ Frame {
+ msec: 3728
+ hash: "e63d987ba303a42046827f14941b444a"
+ }
+ Frame {
+ msec: 3744
+ hash: "e63d987ba303a42046827f14941b444a"
+ }
+ Frame {
+ msec: 3760
+ hash: "e63d987ba303a42046827f14941b444a"
+ }
+ Frame {
+ msec: 3776
+ hash: "e63d987ba303a42046827f14941b444a"
+ }
+ Frame {
+ msec: 3792
+ hash: "e63d987ba303a42046827f14941b444a"
+ }
+ Frame {
+ msec: 3808
+ hash: "e63d987ba303a42046827f14941b444a"
+ }
+ Frame {
+ msec: 3824
+ hash: "e63d987ba303a42046827f14941b444a"
+ }
+ Frame {
+ msec: 3840
+ image: "gridview.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "e63d987ba303a42046827f14941b444a"
+ }
+ Frame {
+ msec: 3872
+ hash: "e63d987ba303a42046827f14941b444a"
+ }
+ Frame {
+ msec: 3888
+ hash: "e63d987ba303a42046827f14941b444a"
+ }
+ Frame {
+ msec: 3904
+ hash: "e63d987ba303a42046827f14941b444a"
+ }
+ Frame {
+ msec: 3920
+ hash: "e63d987ba303a42046827f14941b444a"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3936
+ hash: "a61dbcb7d914afe34009085bf37fb8e2"
+ }
+ Frame {
+ msec: 3952
+ hash: "89175b83b4f7ee4b5d99219cdc97aa59"
+ }
+ Frame {
+ msec: 3968
+ hash: "f524421286503f6175e4ad71dd89145f"
+ }
+ Frame {
+ msec: 3984
+ hash: "ca5af7d98a008eccba1e21be0da61f3c"
+ }
+ Frame {
+ msec: 4000
+ hash: "77c19e7e17e00787ff0d7a4e7bad7bc8"
+ }
+ Frame {
+ msec: 4016
+ hash: "04c8db761e324101ad92e0ac9ceed7d4"
+ }
+ Frame {
+ msec: 4032
+ hash: "97a3dcb81349efab6b44d458e83ce5c4"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4048
+ hash: "e86ebc276b88705c97cc9efb66ccc6b2"
+ }
+ Frame {
+ msec: 4064
+ hash: "a134bbfd14879f13b288a04d23382348"
+ }
+ Frame {
+ msec: 4080
+ hash: "9530ad3f58ad1c66401572869f7d91bc"
+ }
+ Frame {
+ msec: 4096
+ hash: "db3d030de94b19ea1db5c60be7c7ca5c"
+ }
+ Frame {
+ msec: 4112
+ hash: "db3d030de94b19ea1db5c60be7c7ca5c"
+ }
+ Frame {
+ msec: 4128
+ hash: "db3d030de94b19ea1db5c60be7c7ca5c"
+ }
+ Frame {
+ msec: 4144
+ hash: "db3d030de94b19ea1db5c60be7c7ca5c"
+ }
+ Frame {
+ msec: 4160
+ hash: "db3d030de94b19ea1db5c60be7c7ca5c"
+ }
+ Frame {
+ msec: 4176
+ hash: "db3d030de94b19ea1db5c60be7c7ca5c"
+ }
+ Frame {
+ msec: 4192
+ hash: "db3d030de94b19ea1db5c60be7c7ca5c"
+ }
+ Frame {
+ msec: 4208
+ hash: "db3d030de94b19ea1db5c60be7c7ca5c"
+ }
+ Frame {
+ msec: 4224
+ hash: "db3d030de94b19ea1db5c60be7c7ca5c"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4240
+ hash: "980e0fa84fd3bab496623936f5f220a2"
+ }
+ Frame {
+ msec: 4256
+ hash: "ed3268911723d664699bbc31317befc1"
+ }
+ Frame {
+ msec: 4272
+ hash: "3bfda4b3b0b2d2a97ec1c0b5b3f4da63"
+ }
+ Frame {
+ msec: 4288
+ hash: "1616c6def28659d51905564ff83cc112"
+ }
+ Frame {
+ msec: 4304
+ hash: "68342f34c18956d3a093f8eeeae6977e"
+ }
+ Frame {
+ msec: 4320
+ hash: "ac1b12959e9055a28fe2bda0a12b75bc"
+ }
+ Frame {
+ msec: 4336
+ hash: "009b85ff6b86e418c78ed33a5e88d3f1"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4352
+ hash: "59753bc7dc69767fe2109fdc41f20dae"
+ }
+ Frame {
+ msec: 4368
+ hash: "1c87d3d8c8d564d4d95a26f57fd28f38"
+ }
+ Frame {
+ msec: 4384
+ hash: "4e43b7b6787002c9013010dd74c83f49"
+ }
+ Frame {
+ msec: 4400
+ hash: "2476aa1a7191b485a76c76e98c9be2b0"
+ }
+ Frame {
+ msec: 4416
+ hash: "2476aa1a7191b485a76c76e98c9be2b0"
+ }
+ Frame {
+ msec: 4432
+ hash: "2476aa1a7191b485a76c76e98c9be2b0"
+ }
+ Frame {
+ msec: 4448
+ hash: "2476aa1a7191b485a76c76e98c9be2b0"
+ }
+ Frame {
+ msec: 4464
+ hash: "2476aa1a7191b485a76c76e98c9be2b0"
+ }
+ Frame {
+ msec: 4480
+ hash: "2476aa1a7191b485a76c76e98c9be2b0"
+ }
+ Frame {
+ msec: 4496
+ hash: "2476aa1a7191b485a76c76e98c9be2b0"
+ }
+ Frame {
+ msec: 4512
+ hash: "2476aa1a7191b485a76c76e98c9be2b0"
+ }
+ Frame {
+ msec: 4528
+ hash: "2476aa1a7191b485a76c76e98c9be2b0"
+ }
+ Frame {
+ msec: 4544
+ hash: "2476aa1a7191b485a76c76e98c9be2b0"
+ }
+ Frame {
+ msec: 4560
+ hash: "2476aa1a7191b485a76c76e98c9be2b0"
+ }
+ Frame {
+ msec: 4576
+ hash: "2476aa1a7191b485a76c76e98c9be2b0"
+ }
+ Frame {
+ msec: 4592
+ hash: "2476aa1a7191b485a76c76e98c9be2b0"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4608
+ hash: "84de5b5e8b0fba190a783c72967661c7"
+ }
+ Frame {
+ msec: 4624
+ hash: "60b696f4913379d28f300fd1b531c6cb"
+ }
+ Frame {
+ msec: 4640
+ hash: "d01e651d9094332fd82ad1cea3e93e9d"
+ }
+ Frame {
+ msec: 4656
+ hash: "87be4cd7c894b03b2b64c996e915d71f"
+ }
+ Frame {
+ msec: 4672
+ hash: "b07fccb0c5565d2feed5a9fcdf8acead"
+ }
+ Frame {
+ msec: 4688
+ hash: "3dca3165fd34be549d21fb6c414c67d8"
+ }
+ Frame {
+ msec: 4704
+ hash: "5f69f3298f8ca73fa9b3b6e630c60186"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4720
+ hash: "d7f41e9a29d550a7d9a41bb947569abe"
+ }
+ Frame {
+ msec: 4736
+ hash: "4ede2e90ad216a2d44580c50a25dea23"
+ }
+ Frame {
+ msec: 4752
+ hash: "9b339845ee588b789dc9095c272e0bdf"
+ }
+ Frame {
+ msec: 4768
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 4784
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 4800
+ image: "gridview.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 4832
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 4848
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 4864
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 4880
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 4896
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 4912
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 4928
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 4944
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 4960
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 4976
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 4992
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 5008
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 5024
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 5040
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 5056
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 5072
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 5088
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 5104
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 5120
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 5136
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Frame {
+ msec: 5152
+ hash: "9cdea4790972efaecabd52b435107e69"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5168
+ hash: "d6f0a6d7604bad811eeba13fd7c45368"
+ }
+ Frame {
+ msec: 5184
+ hash: "5f92e1531a3f6c21ec82e3c908167fc7"
+ }
+ Frame {
+ msec: 5200
+ hash: "5214e99ff052dcdc8f85bad29de92e03"
+ }
+ Frame {
+ msec: 5216
+ hash: "d4abed9f0f1115c9a45b0b9b4f54754e"
+ }
+ Frame {
+ msec: 5232
+ hash: "cfae8a0281e704b0e62f6bf31b32800f"
+ }
+ Frame {
+ msec: 5248
+ hash: "c203f0674596ae690bf19f2d49be62ac"
+ }
+ Frame {
+ msec: 5264
+ hash: "2e2c7e05aade104bdc4f6c489b6f0601"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5280
+ hash: "b4b2148b0557dcab3a441165e5e4de5f"
+ }
+ Frame {
+ msec: 5296
+ hash: "c5e791d27a42a63d25cdbd492b4af29a"
+ }
+ Frame {
+ msec: 5312
+ hash: "0f94ebcb407f8e6ae263bd954f2c8177"
+ }
+ Frame {
+ msec: 5328
+ hash: "d9b56b817a411812789881697a28fe4c"
+ }
+ Frame {
+ msec: 5344
+ hash: "d9b56b817a411812789881697a28fe4c"
+ }
+ Frame {
+ msec: 5360
+ hash: "d9b56b817a411812789881697a28fe4c"
+ }
+ Frame {
+ msec: 5376
+ hash: "d9b56b817a411812789881697a28fe4c"
+ }
+ Frame {
+ msec: 5392
+ hash: "d9b56b817a411812789881697a28fe4c"
+ }
+ Frame {
+ msec: 5408
+ hash: "d9b56b817a411812789881697a28fe4c"
+ }
+ Frame {
+ msec: 5424
+ hash: "d9b56b817a411812789881697a28fe4c"
+ }
+ Frame {
+ msec: 5440
+ hash: "d9b56b817a411812789881697a28fe4c"
+ }
+ Frame {
+ msec: 5456
+ hash: "d9b56b817a411812789881697a28fe4c"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5472
+ hash: "6fdfe69e377da72e04dc130f5677ed2c"
+ }
+ Frame {
+ msec: 5488
+ hash: "c041d26d43766fa1735f2ada2a43225b"
+ }
+ Frame {
+ msec: 5504
+ hash: "aa62dbd6c6256665ee1b4ef468607978"
+ }
+ Frame {
+ msec: 5520
+ hash: "987fcdf6483a83b1242053f4e7fb7a26"
+ }
+ Frame {
+ msec: 5536
+ hash: "fbde70c34709b68eb22f5460a8815fba"
+ }
+ Frame {
+ msec: 5552
+ hash: "911ddc838ebaf5ade1bb026dff2741ba"
+ }
+ Frame {
+ msec: 5568
+ hash: "120bbf35b2a3b756bdeaea0df43e49b2"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5584
+ hash: "ea93e33c079d6dc5fb18c69fb4fed441"
+ }
+ Frame {
+ msec: 5600
+ hash: "b9ac8ab01cb59b1fee11967bdb6d2dd6"
+ }
+ Frame {
+ msec: 5616
+ hash: "3ff266bf29cbcaa30bc1e7af5dd9866b"
+ }
+ Frame {
+ msec: 5632
+ hash: "edd6c3a9493a63674e2d7af5f3e8467e"
+ }
+ Frame {
+ msec: 5648
+ hash: "edd6c3a9493a63674e2d7af5f3e8467e"
+ }
+ Frame {
+ msec: 5664
+ hash: "edd6c3a9493a63674e2d7af5f3e8467e"
+ }
+ Frame {
+ msec: 5680
+ hash: "edd6c3a9493a63674e2d7af5f3e8467e"
+ }
+ Frame {
+ msec: 5696
+ hash: "edd6c3a9493a63674e2d7af5f3e8467e"
+ }
+ Frame {
+ msec: 5712
+ hash: "edd6c3a9493a63674e2d7af5f3e8467e"
+ }
+ Frame {
+ msec: 5728
+ hash: "edd6c3a9493a63674e2d7af5f3e8467e"
+ }
+ Frame {
+ msec: 5744
+ hash: "edd6c3a9493a63674e2d7af5f3e8467e"
+ }
+ Frame {
+ msec: 5760
+ image: "gridview.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "edd6c3a9493a63674e2d7af5f3e8467e"
+ }
+ Frame {
+ msec: 5792
+ hash: "edd6c3a9493a63674e2d7af5f3e8467e"
+ }
+ Frame {
+ msec: 5808
+ hash: "edd6c3a9493a63674e2d7af5f3e8467e"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5824
+ hash: "de1f83d25751639dff42f1755a6534c3"
+ }
+ Frame {
+ msec: 5840
+ hash: "edefdea8b2461d03fb97cf5ed66e9b6d"
+ }
+ Frame {
+ msec: 5856
+ hash: "cef1886397e3932a511f37571b5011f4"
+ }
+ Frame {
+ msec: 5872
+ hash: "05589ad354314d9e04ef90c1addd99f5"
+ }
+ Frame {
+ msec: 5888
+ hash: "ff88b52e3755b9b4785d2719ddd4f090"
+ }
+ Frame {
+ msec: 5904
+ hash: "f59edc3016b177a2e8faa6612d718b17"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5920
+ hash: "dc673a7cdd927f70b28ebcfe51cd3d89"
+ }
+ Frame {
+ msec: 5936
+ hash: "3abec0da85fb663e63ab22188e092827"
+ }
+ Frame {
+ msec: 5952
+ hash: "50c2c8ac68cafad7c47b576cd8f4a037"
+ }
+ Frame {
+ msec: 5968
+ hash: "06c31b861e2b96e6595b2244d7b3f4d5"
+ }
+ Frame {
+ msec: 5984
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6000
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6016
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6032
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6048
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6064
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6080
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6096
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6112
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6128
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6144
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6160
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6176
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6192
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6208
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6224
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6240
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6256
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6272
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6288
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6304
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6320
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6336
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6352
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6368
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6384
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6400
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Frame {
+ msec: 6416
+ hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 6432
+ hash: "7f52a770775c19e10784b4c5f7874210"
+ }
+ Frame {
+ msec: 6448
+ hash: "827cfb74286a2a80aca8b6c5277d6cfd"
+ }
+ Frame {
+ msec: 6464
+ hash: "8399231eda9b66821d43a3d8c4c7d645"
+ }
+ Frame {
+ msec: 6480
+ hash: "fc163583671f3c4023361460b436c895"
+ }
+ Frame {
+ msec: 6496
+ hash: "893dea6496c95c32095ad1d673e500c2"
+ }
+ Frame {
+ msec: 6512
+ hash: "808c7403b2cdcc882059da56a2f806fe"
+ }
+ Frame {
+ msec: 6528
+ hash: "7466b2e5b86ba8ad46be75818659786c"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 6544
+ hash: "dd2561cd780e24401130305d47757a53"
+ }
+ Frame {
+ msec: 6560
+ hash: "bee89299532d43fc3e6c3e69c343b381"
+ }
+ Frame {
+ msec: 6576
+ hash: "94f8474aedee94098592c05d8fc7d868"
+ }
+ Frame {
+ msec: 6592
+ hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8"
+ }
+ Frame {
+ msec: 6608
+ hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8"
+ }
+ Frame {
+ msec: 6624
+ hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8"
+ }
+ Frame {
+ msec: 6640
+ hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8"
+ }
+ Frame {
+ msec: 6656
+ hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8"
+ }
+ Frame {
+ msec: 6672
+ hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8"
+ }
+ Frame {
+ msec: 6688
+ hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8"
+ }
+ Frame {
+ msec: 6704
+ hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 6720
+ image: "gridview.6.png"
+ }
+ Frame {
+ msec: 6736
+ hash: "ccd58be20d47422121d6ef799b927a7a"
+ }
+ Frame {
+ msec: 6752
+ hash: "e090c7f39649786a1796870e25bd0f0d"
+ }
+ Frame {
+ msec: 6768
+ hash: "acf3dcd9f4a869169dbc1ae7fe60e9d0"
+ }
+ Frame {
+ msec: 6784
+ hash: "51795e9a720845e8305d23507785e1ca"
+ }
+ Frame {
+ msec: 6800
+ hash: "0d34a43e177e6b73e2ff9155747d0385"
+ }
+ Frame {
+ msec: 6816
+ hash: "1876c3cdffc1af01da1aaa0ac636d0a8"
+ }
+ Frame {
+ msec: 6832
+ hash: "3131296b6edf4190520e2cdb3f8b936e"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 6848
+ hash: "ee92f0a764e5081b130e205a5c362b07"
+ }
+ Frame {
+ msec: 6864
+ hash: "8737ea2c60aeb215228c00a7fddd1baa"
+ }
+ Frame {
+ msec: 6880
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 6896
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 6912
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 6928
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 6944
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 6960
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 6976
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 6992
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7008
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7024
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 7040
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7056
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7072
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7088
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7104
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7120
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7136
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7152
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 7168
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7184
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7200
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7216
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7232
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7248
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7264
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7280
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7296
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7312
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7328
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7344
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7360
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7376
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7392
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7408
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7424
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7440
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7456
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7472
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7488
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7504
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7520
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7536
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7552
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7568
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7584
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Key {
+ type: 6
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 7600
+ hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ }
+ Frame {
+ msec: 7616
+ hash: "eb0d1be15f63af6eaf6634b02e5f240a"
+ }
+ Frame {
+ msec: 7632
+ hash: "2423c305bebb3449e87c78e8fb447c88"
+ }
+ Frame {
+ msec: 7648
+ hash: "f0ede6ea85647728db80878b3e525edc"
+ }
+ Frame {
+ msec: 7664
+ hash: "387d127b2b000dc344ee4768cf2d29b2"
+ }
+ Frame {
+ msec: 7680
+ image: "gridview.7.png"
+ }
+ Frame {
+ msec: 7696
+ hash: "1d0d8100e994c16d7973ad9a97b0068f"
+ }
+ Key {
+ type: 7
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 7712
+ hash: "95fb4a6d0331ffc4773e39ec8c3e6511"
+ }
+ Frame {
+ msec: 7728
+ hash: "34738f16150228d971972833d4bd5c8f"
+ }
+ Frame {
+ msec: 7744
+ hash: "9b71c8dacc530f32d7c6f409928caf5c"
+ }
+ Frame {
+ msec: 7760
+ hash: "831efd0970c5c29fbe10b3be7707f915"
+ }
+ Frame {
+ msec: 7776
+ hash: "831efd0970c5c29fbe10b3be7707f915"
+ }
+ Frame {
+ msec: 7792
+ hash: "831efd0970c5c29fbe10b3be7707f915"
+ }
+ Frame {
+ msec: 7808
+ hash: "831efd0970c5c29fbe10b3be7707f915"
+ }
+ Frame {
+ msec: 7824
+ hash: "831efd0970c5c29fbe10b3be7707f915"
+ }
+ Frame {
+ msec: 7840
+ hash: "831efd0970c5c29fbe10b3be7707f915"
+ }
+ Frame {
+ msec: 7856
+ hash: "831efd0970c5c29fbe10b3be7707f915"
+ }
+ Frame {
+ msec: 7872
+ hash: "831efd0970c5c29fbe10b3be7707f915"
+ }
+ Frame {
+ msec: 7888
+ hash: "831efd0970c5c29fbe10b3be7707f915"
+ }
+ Frame {
+ msec: 7904
+ hash: "831efd0970c5c29fbe10b3be7707f915"
+ }
+ Frame {
+ msec: 7920
+ hash: "831efd0970c5c29fbe10b3be7707f915"
+ }
+ Frame {
+ msec: 7936
+ hash: "831efd0970c5c29fbe10b3be7707f915"
+ }
+ Frame {
+ msec: 7952
+ hash: "831efd0970c5c29fbe10b3be7707f915"
+ }
+ Frame {
+ msec: 7968
+ hash: "831efd0970c5c29fbe10b3be7707f915"
+ }
+ Key {
+ type: 6
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 7984
+ hash: "831efd0970c5c29fbe10b3be7707f915"
+ }
+ Frame {
+ msec: 8000
+ hash: "0587fc809c38c3bbe1fbac2960596974"
+ }
+ Frame {
+ msec: 8016
+ hash: "d20eba806cf4730a850db4c095fa36f9"
+ }
+ Key {
+ type: 7
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 8032
+ hash: "c1663e75ba05b341e1e970a451958ea0"
+ }
+ Frame {
+ msec: 8048
+ hash: "ea40cc33b689d6b42fc5a69fa30178e4"
+ }
+ Frame {
+ msec: 8064
+ hash: "a07a1c61de1813158ff743cd326ee427"
+ }
+ Frame {
+ msec: 8080
+ hash: "6dfddaa340df8999ca77f6a6e4c6c3ce"
+ }
+ Frame {
+ msec: 8096
+ hash: "76ca40bb169c1ddc291847d4be2d38d7"
+ }
+ Frame {
+ msec: 8112
+ hash: "e44778541b76208981a3944a64235cac"
+ }
+ Frame {
+ msec: 8128
+ hash: "fdf45ea650d31957cc675c3bec8bf53e"
+ }
+ Frame {
+ msec: 8144
+ hash: "b78cdb727535ab7e567af08abf25e64c"
+ }
+ Frame {
+ msec: 8160
+ hash: "b78cdb727535ab7e567af08abf25e64c"
+ }
+ Frame {
+ msec: 8176
+ hash: "b78cdb727535ab7e567af08abf25e64c"
+ }
+ Frame {
+ msec: 8192
+ hash: "b78cdb727535ab7e567af08abf25e64c"
+ }
+ Frame {
+ msec: 8208
+ hash: "b78cdb727535ab7e567af08abf25e64c"
+ }
+ Frame {
+ msec: 8224
+ hash: "b78cdb727535ab7e567af08abf25e64c"
+ }
+ Frame {
+ msec: 8240
+ hash: "b78cdb727535ab7e567af08abf25e64c"
+ }
+ Key {
+ type: 6
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 8256
+ hash: "b78cdb727535ab7e567af08abf25e64c"
+ }
+ Frame {
+ msec: 8272
+ hash: "338481e6390f2a61e975084c16427584"
+ }
+ Frame {
+ msec: 8288
+ hash: "8923c45c23b1f4250b7d1e483b07a4da"
+ }
+ Frame {
+ msec: 8304
+ hash: "b21de834906d0eecea985561e2e41e4f"
+ }
+ Frame {
+ msec: 8320
+ hash: "a8c9761cfb20631520ed890cd2648c4b"
+ }
+ Frame {
+ msec: 8336
+ hash: "abf96a042ef12190bc48ff49732ef55a"
+ }
+ Key {
+ type: 7
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 8352
+ hash: "5b9506dfb038cd26dfc81ecd2406ada9"
+ }
+ Frame {
+ msec: 8368
+ hash: "be75b8d39f81b2fdaff01469bfc67d4a"
+ }
+ Frame {
+ msec: 8384
+ hash: "488aa2977f349df82b5f6ae5e3619d35"
+ }
+ Frame {
+ msec: 8400
+ hash: "d69f17f0ce8537511353d20b59d20de0"
+ }
+ Frame {
+ msec: 8416
+ hash: "7647efcc0152cc3d6544106f969ace26"
+ }
+ Frame {
+ msec: 8432
+ hash: "7647efcc0152cc3d6544106f969ace26"
+ }
+ Frame {
+ msec: 8448
+ hash: "7647efcc0152cc3d6544106f969ace26"
+ }
+ Frame {
+ msec: 8464
+ hash: "7647efcc0152cc3d6544106f969ace26"
+ }
+ Frame {
+ msec: 8480
+ hash: "7647efcc0152cc3d6544106f969ace26"
+ }
+ Frame {
+ msec: 8496
+ hash: "7647efcc0152cc3d6544106f969ace26"
+ }
+ Frame {
+ msec: 8512
+ hash: "7647efcc0152cc3d6544106f969ace26"
+ }
+ Frame {
+ msec: 8528
+ hash: "7647efcc0152cc3d6544106f969ace26"
+ }
+ Frame {
+ msec: 8544
+ hash: "7647efcc0152cc3d6544106f969ace26"
+ }
+ Key {
+ type: 6
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 8560
+ hash: "7647efcc0152cc3d6544106f969ace26"
+ }
+ Frame {
+ msec: 8576
+ hash: "8f74d33bf95cbf37fdb4521c69373a64"
+ }
+ Frame {
+ msec: 8592
+ hash: "e33bb4cd12790c9d9992efdd3e23bee9"
+ }
+ Frame {
+ msec: 8608
+ hash: "36f32e34b4093091c4707f26c52896ad"
+ }
+ Frame {
+ msec: 8624
+ hash: "5ab5e142f8dc883287c116cedbacfd55"
+ }
+ Frame {
+ msec: 8640
+ image: "gridview.8.png"
+ }
+ Key {
+ type: 7
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 8656
+ hash: "c74212e45a6c4b6a18caeb6a22350609"
+ }
+ Frame {
+ msec: 8672
+ hash: "8919643a7d13677dd902941860093209"
+ }
+ Frame {
+ msec: 8688
+ hash: "6f2ab4400fadf51b994351f0975e31fc"
+ }
+ Frame {
+ msec: 8704
+ hash: "4798559ce6f9bd7455ed5385d0030763"
+ }
+ Frame {
+ msec: 8720
+ hash: "72759bd1e2618c61c42bbe4de3ad3a96"
+ }
+ Frame {
+ msec: 8736
+ hash: "72759bd1e2618c61c42bbe4de3ad3a96"
+ }
+ Frame {
+ msec: 8752
+ hash: "72759bd1e2618c61c42bbe4de3ad3a96"
+ }
+ Frame {
+ msec: 8768
+ hash: "72759bd1e2618c61c42bbe4de3ad3a96"
+ }
+ Frame {
+ msec: 8784
+ hash: "72759bd1e2618c61c42bbe4de3ad3a96"
+ }
+ Frame {
+ msec: 8800
+ hash: "72759bd1e2618c61c42bbe4de3ad3a96"
+ }
+ Frame {
+ msec: 8816
+ hash: "72759bd1e2618c61c42bbe4de3ad3a96"
+ }
+ Frame {
+ msec: 8832
+ hash: "72759bd1e2618c61c42bbe4de3ad3a96"
+ }
+ Frame {
+ msec: 8848
+ hash: "72759bd1e2618c61c42bbe4de3ad3a96"
+ }
+ Frame {
+ msec: 8864
+ hash: "72759bd1e2618c61c42bbe4de3ad3a96"
+ }
+ Key {
+ type: 6
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 8880
+ hash: "72759bd1e2618c61c42bbe4de3ad3a96"
+ }
+ Frame {
+ msec: 8896
+ hash: "fac81cf6f45cb47abc1fa36d23e39d34"
+ }
+ Frame {
+ msec: 8912
+ hash: "862f4deee01183fd38b094da59048b23"
+ }
+ Frame {
+ msec: 8928
+ hash: "2f3b147221da30d8857d25fc788b3eac"
+ }
+ Frame {
+ msec: 8944
+ hash: "5b295b187c6cfc6aefa51e5efc2c27e3"
+ }
+ Frame {
+ msec: 8960
+ hash: "fe3139ddc8fdbc1b0c25bd641f83e833"
+ }
+ Key {
+ type: 7
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 8976
+ hash: "8f2a9585dc6248a403aafd0f151d6ba0"
+ }
+ Frame {
+ msec: 8992
+ hash: "39eca8cc6bb8ea30cc452dc24f8e46dc"
+ }
+ Frame {
+ msec: 9008
+ hash: "8dbbc6026942cb6e572f1cb7e2675713"
+ }
+ Frame {
+ msec: 9024
+ hash: "62dfa07b96dd18c6be89822654bf09f3"
+ }
+ Frame {
+ msec: 9040
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9056
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9072
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9088
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9104
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9120
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9136
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9152
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9168
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9184
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9200
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9216
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9232
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9248
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9264
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Key {
+ type: 6
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 9280
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9296
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9312
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9328
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9344
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9360
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9376
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Key {
+ type: 7
+ key: 16777235
+ modifiers: 536870912
+ text: "1e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 9392
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9408
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9424
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9440
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9456
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9472
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9488
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9504
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9520
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9536
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9552
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9568
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9584
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9600
+ image: "gridview.9.png"
+ }
+ Frame {
+ msec: 9616
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9632
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9648
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9664
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9680
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9696
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9712
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9728
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9744
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9760
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 9776
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9792
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9808
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9824
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+ Frame {
+ msec: 9840
+ hash: "02c632713d0dc64bff9d8e58f745df95"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.0.png b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.0.png
new file mode 100644
index 0000000..3021d58
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.1.png b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.1.png
new file mode 100644
index 0000000..baeb1a6
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.10.png b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.10.png
new file mode 100644
index 0000000..b0486e5
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.10.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.2.png b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.2.png
new file mode 100644
index 0000000..2d0c731
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.3.png b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.3.png
new file mode 100644
index 0000000..af9ed05
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.4.png b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.4.png
new file mode 100644
index 0000000..0b0945d
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.5.png b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.5.png
new file mode 100644
index 0000000..618ae0c
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.6.png b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.6.png
new file mode 100644
index 0000000..fc31262
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.7.png b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.7.png
new file mode 100644
index 0000000..22291ac
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.7.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.8.png b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.8.png
new file mode 100644
index 0000000..3021d58
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.8.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.9.png b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.9.png
new file mode 100644
index 0000000..2f2f5b9
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.9.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.qml b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.qml
new file mode 100644
index 0000000..fb5f1fb
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/data/gridview2.qml
@@ -0,0 +1,2479 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "dba2f6f1c773bd4cd9523108fca861c4"
+ }
+ Frame {
+ msec: 32
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 48
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 64
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 80
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 96
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 112
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 128
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 144
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 160
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 176
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 192
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 208
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 224
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 240
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 256
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 272
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 288
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 304
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 320
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 336
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 352
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 368
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 384
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 400
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 416
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 432
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 448
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 464
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 480
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 496
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 512
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 528
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 544
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 560
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 576
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 592
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 608
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 624
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 640
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 656
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 672
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 688
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 704
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 720
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 736
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 752
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 768
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 784
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 800
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 816
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 832
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 848
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 864
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 880
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 896
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 912
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 928
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 944
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 960
+ image: "gridview2.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 992
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 1008
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 1024
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 1040
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 1056
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 1072
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 1088
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 1104
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 1120
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 1136
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 1152
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 1168
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 1184
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 1200
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 1216
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 1232
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 1248
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1264
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 1280
+ hash: "aaec7184a27e6700d96ffff376b8fa53"
+ }
+ Frame {
+ msec: 1296
+ hash: "3fa3a890a4ff4a59336a9a2d478d0dde"
+ }
+ Frame {
+ msec: 1312
+ hash: "3711c6c2f4f9aba7f2c72bd1f1d85016"
+ }
+ Frame {
+ msec: 1328
+ hash: "23da2f9a800b805ce7b77ff08218907d"
+ }
+ Frame {
+ msec: 1344
+ hash: "12e4bc953b06cdaad0720f87fb96a37e"
+ }
+ Frame {
+ msec: 1360
+ hash: "46e69658bda69bab202a2790a76ba1cd"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1376
+ hash: "44608e67c69b92ccbb45e119e1158fe3"
+ }
+ Frame {
+ msec: 1392
+ hash: "97a309b47017d38294644a486a7ce68e"
+ }
+ Frame {
+ msec: 1408
+ hash: "41f42b50b22e0496c8aca5019b24b9cb"
+ }
+ Frame {
+ msec: 1424
+ hash: "8603ea1cb60c804563f50bc41c0180fe"
+ }
+ Frame {
+ msec: 1440
+ hash: "e29777fa70daafe9640c6e9bb7bd63d6"
+ }
+ Frame {
+ msec: 1456
+ hash: "2c4c360320f527e99fee799e68c2c0aa"
+ }
+ Frame {
+ msec: 1472
+ hash: "0d30916c7e05ff8609af5894f47a89bb"
+ }
+ Frame {
+ msec: 1488
+ hash: "0d30916c7e05ff8609af5894f47a89bb"
+ }
+ Frame {
+ msec: 1504
+ hash: "0d30916c7e05ff8609af5894f47a89bb"
+ }
+ Frame {
+ msec: 1520
+ hash: "0d30916c7e05ff8609af5894f47a89bb"
+ }
+ Frame {
+ msec: 1536
+ hash: "0d30916c7e05ff8609af5894f47a89bb"
+ }
+ Frame {
+ msec: 1552
+ hash: "0d30916c7e05ff8609af5894f47a89bb"
+ }
+ Frame {
+ msec: 1568
+ hash: "0d30916c7e05ff8609af5894f47a89bb"
+ }
+ Frame {
+ msec: 1584
+ hash: "0d30916c7e05ff8609af5894f47a89bb"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1600
+ hash: "0d30916c7e05ff8609af5894f47a89bb"
+ }
+ Frame {
+ msec: 1616
+ hash: "17027b7c099b11cb5382f30dbbd1e647"
+ }
+ Frame {
+ msec: 1632
+ hash: "0e17461a4ca843f9903b7f03e99a0b00"
+ }
+ Frame {
+ msec: 1648
+ hash: "a5e61901920553e59892fa405beea15a"
+ }
+ Frame {
+ msec: 1664
+ hash: "310eaf71fe8d3807606e58a666c65ccd"
+ }
+ Frame {
+ msec: 1680
+ hash: "76f556d05fb77082f33eb1836c10587a"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1696
+ hash: "4e7e4b7790a96396e7ea3533b5c32ed9"
+ }
+ Frame {
+ msec: 1712
+ hash: "b065287b6490f58ca6f0e9eb2027cf20"
+ }
+ Frame {
+ msec: 1728
+ hash: "907cd9dbdffa1d395caaabd466dc8e86"
+ }
+ Frame {
+ msec: 1744
+ hash: "3b144e5b4867328beafa3020ce931480"
+ }
+ Frame {
+ msec: 1760
+ hash: "b59b2b60b7d55424b61b1b0ed3e227b8"
+ }
+ Frame {
+ msec: 1776
+ hash: "4032e934871b315b68c7c2abea42efee"
+ }
+ Frame {
+ msec: 1792
+ hash: "8f80127b2f8d6fc10aa84062544cc381"
+ }
+ Frame {
+ msec: 1808
+ hash: "77d5193bc5f53fe5cb98a236c55f841e"
+ }
+ Frame {
+ msec: 1824
+ hash: "77d5193bc5f53fe5cb98a236c55f841e"
+ }
+ Frame {
+ msec: 1840
+ hash: "77d5193bc5f53fe5cb98a236c55f841e"
+ }
+ Frame {
+ msec: 1856
+ hash: "77d5193bc5f53fe5cb98a236c55f841e"
+ }
+ Frame {
+ msec: 1872
+ hash: "77d5193bc5f53fe5cb98a236c55f841e"
+ }
+ Frame {
+ msec: 1888
+ hash: "77d5193bc5f53fe5cb98a236c55f841e"
+ }
+ Frame {
+ msec: 1904
+ hash: "77d5193bc5f53fe5cb98a236c55f841e"
+ }
+ Frame {
+ msec: 1920
+ image: "gridview2.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "77d5193bc5f53fe5cb98a236c55f841e"
+ }
+ Frame {
+ msec: 1952
+ hash: "77d5193bc5f53fe5cb98a236c55f841e"
+ }
+ Frame {
+ msec: 1968
+ hash: "77d5193bc5f53fe5cb98a236c55f841e"
+ }
+ Frame {
+ msec: 1984
+ hash: "77d5193bc5f53fe5cb98a236c55f841e"
+ }
+ Frame {
+ msec: 2000
+ hash: "77d5193bc5f53fe5cb98a236c55f841e"
+ }
+ Frame {
+ msec: 2016
+ hash: "77d5193bc5f53fe5cb98a236c55f841e"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2032
+ hash: "77d5193bc5f53fe5cb98a236c55f841e"
+ }
+ Frame {
+ msec: 2048
+ hash: "a45d2630872a14541f39b862e15ff461"
+ }
+ Frame {
+ msec: 2064
+ hash: "714711d7382ef8bba5fb39e2e44bd59c"
+ }
+ Frame {
+ msec: 2080
+ hash: "63deed0356e761f94f88be18a7d10053"
+ }
+ Frame {
+ msec: 2096
+ hash: "d5b4fc1b568a4a1b63a91b422272c704"
+ }
+ Frame {
+ msec: 2112
+ hash: "b6d2c80925cc6b4b7b297bd6ee903c7c"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2128
+ hash: "38117482196360353586cb7ace593894"
+ }
+ Frame {
+ msec: 2144
+ hash: "2301f3a148bf4e311cc8ce011ddf65f8"
+ }
+ Frame {
+ msec: 2160
+ hash: "2a4982a0961f89a15618f8d4c2081f5a"
+ }
+ Frame {
+ msec: 2176
+ hash: "acf8666d6a8a29925f3895aa8e93f713"
+ }
+ Frame {
+ msec: 2192
+ hash: "967ed026bc92a6d2747c5227105543a6"
+ }
+ Frame {
+ msec: 2208
+ hash: "ff72f3fb95f25990c99c1c14cfef57da"
+ }
+ Frame {
+ msec: 2224
+ hash: "0874a4f863596c3860dcf5b1f7f6ceb2"
+ }
+ Frame {
+ msec: 2240
+ hash: "520445d8619ad9bdde0db0e61f17567c"
+ }
+ Frame {
+ msec: 2256
+ hash: "520445d8619ad9bdde0db0e61f17567c"
+ }
+ Frame {
+ msec: 2272
+ hash: "520445d8619ad9bdde0db0e61f17567c"
+ }
+ Frame {
+ msec: 2288
+ hash: "520445d8619ad9bdde0db0e61f17567c"
+ }
+ Frame {
+ msec: 2304
+ hash: "520445d8619ad9bdde0db0e61f17567c"
+ }
+ Frame {
+ msec: 2320
+ hash: "520445d8619ad9bdde0db0e61f17567c"
+ }
+ Frame {
+ msec: 2336
+ hash: "520445d8619ad9bdde0db0e61f17567c"
+ }
+ Frame {
+ msec: 2352
+ hash: "520445d8619ad9bdde0db0e61f17567c"
+ }
+ Frame {
+ msec: 2368
+ hash: "520445d8619ad9bdde0db0e61f17567c"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2384
+ hash: "520445d8619ad9bdde0db0e61f17567c"
+ }
+ Frame {
+ msec: 2400
+ hash: "7c4bbf0423d63d7642d218cac56a6215"
+ }
+ Frame {
+ msec: 2416
+ hash: "e8c77dbc89721b51549f8d46453fe09d"
+ }
+ Frame {
+ msec: 2432
+ hash: "7953503590b639872ac12215695e8cea"
+ }
+ Frame {
+ msec: 2448
+ hash: "edaee946a2e25fed6de9acfda0d44a14"
+ }
+ Frame {
+ msec: 2464
+ hash: "4996ef39bb0122c10d65f8dd8674b386"
+ }
+ Frame {
+ msec: 2480
+ hash: "ede7c6ca9d6deb7819c3715e98755d6e"
+ }
+ Frame {
+ msec: 2496
+ hash: "e703fad2fcf9244ec9865200c7d17ce3"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2512
+ hash: "e2bfc16fd893bb3eb0e5df89a0169af3"
+ }
+ Frame {
+ msec: 2528
+ hash: "cfd0eb2bc378bd46644f3f7820150685"
+ }
+ Frame {
+ msec: 2544
+ hash: "442b05b04762c2bcda291aaa0341398e"
+ }
+ Frame {
+ msec: 2560
+ hash: "55842a6503057eea98e2075ef160873e"
+ }
+ Frame {
+ msec: 2576
+ hash: "730f80233dacf1119660a76d2a34c5fc"
+ }
+ Frame {
+ msec: 2592
+ hash: "d4a48ee79a18cc5c0bc123fbb40c3efd"
+ }
+ Frame {
+ msec: 2608
+ hash: "d4a48ee79a18cc5c0bc123fbb40c3efd"
+ }
+ Frame {
+ msec: 2624
+ hash: "d4a48ee79a18cc5c0bc123fbb40c3efd"
+ }
+ Frame {
+ msec: 2640
+ hash: "d4a48ee79a18cc5c0bc123fbb40c3efd"
+ }
+ Frame {
+ msec: 2656
+ hash: "d4a48ee79a18cc5c0bc123fbb40c3efd"
+ }
+ Frame {
+ msec: 2672
+ hash: "d4a48ee79a18cc5c0bc123fbb40c3efd"
+ }
+ Frame {
+ msec: 2688
+ hash: "d4a48ee79a18cc5c0bc123fbb40c3efd"
+ }
+ Frame {
+ msec: 2704
+ hash: "d4a48ee79a18cc5c0bc123fbb40c3efd"
+ }
+ Frame {
+ msec: 2720
+ hash: "d4a48ee79a18cc5c0bc123fbb40c3efd"
+ }
+ Frame {
+ msec: 2736
+ hash: "d4a48ee79a18cc5c0bc123fbb40c3efd"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2752
+ hash: "d4a48ee79a18cc5c0bc123fbb40c3efd"
+ }
+ Frame {
+ msec: 2768
+ hash: "4d04c12bc7fab0b22df3135bf3a87a22"
+ }
+ Frame {
+ msec: 2784
+ hash: "fdca5a3f8312452feba7f37b1caa6419"
+ }
+ Frame {
+ msec: 2800
+ hash: "97b955e0f8cde30299b238d9ac0eb308"
+ }
+ Frame {
+ msec: 2816
+ hash: "19664de1a738458810896959ba4087ad"
+ }
+ Frame {
+ msec: 2832
+ hash: "4f9a4b6de6a2969e4639076a8f7c258e"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 536870912
+ text: "1c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2848
+ hash: "a10f18aa686be2681a48082ec9f01df7"
+ }
+ Frame {
+ msec: 2864
+ hash: "b8f39a6cca377dd573429d879286dd63"
+ }
+ Frame {
+ msec: 2880
+ image: "gridview2.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "3301e52a46efbc49882401c77853ffde"
+ }
+ Frame {
+ msec: 2912
+ hash: "0c614597f17496ebc701efe7b0c1fbb6"
+ }
+ Frame {
+ msec: 2928
+ hash: "6dda2d6b034c932e279cf216c9b3e6ad"
+ }
+ Frame {
+ msec: 2944
+ hash: "7bf08cd5fe3ad3f83bbef28f452e0545"
+ }
+ Frame {
+ msec: 2960
+ hash: "1b7ebcf0e3d68e429cb04966120985e5"
+ }
+ Frame {
+ msec: 2976
+ hash: "1b7ebcf0e3d68e429cb04966120985e5"
+ }
+ Frame {
+ msec: 2992
+ hash: "1b7ebcf0e3d68e429cb04966120985e5"
+ }
+ Frame {
+ msec: 3008
+ hash: "1b7ebcf0e3d68e429cb04966120985e5"
+ }
+ Frame {
+ msec: 3024
+ hash: "1b7ebcf0e3d68e429cb04966120985e5"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3040
+ hash: "1b7ebcf0e3d68e429cb04966120985e5"
+ }
+ Frame {
+ msec: 3056
+ hash: "0fe7d46e7c18ce7bb5a098c5c662d557"
+ }
+ Frame {
+ msec: 3072
+ hash: "cd5df541cc1ed545bc27da9e4a937261"
+ }
+ Frame {
+ msec: 3088
+ hash: "35762467b83fee1870cff9b0436994d3"
+ }
+ Frame {
+ msec: 3104
+ hash: "75a620b42caabf5b1576041dbd4c2808"
+ }
+ Frame {
+ msec: 3120
+ hash: "f1b06290a6cbd48b8d3d4ce1e42ed754"
+ }
+ Frame {
+ msec: 3136
+ hash: "8e1a50dc082828587a4656117760a852"
+ }
+ Frame {
+ msec: 3152
+ hash: "aae8e5f166e736040138d8e222a844dd"
+ }
+ Frame {
+ msec: 3168
+ hash: "f69e5cf2bcb26fe49126776695b0b7e0"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3184
+ hash: "7b482fece0255ea07496ef0545b008a2"
+ }
+ Frame {
+ msec: 3200
+ hash: "3f96eaebfebe8d4eeb347b201b59ab11"
+ }
+ Frame {
+ msec: 3216
+ hash: "9943626d2226c3be711c8213906133f0"
+ }
+ Frame {
+ msec: 3232
+ hash: "fd5fd8177b3957c27f1de0d95621351a"
+ }
+ Frame {
+ msec: 3248
+ hash: "506283ccfe9670633ce0bf60b437b37b"
+ }
+ Frame {
+ msec: 3264
+ hash: "506283ccfe9670633ce0bf60b437b37b"
+ }
+ Frame {
+ msec: 3280
+ hash: "506283ccfe9670633ce0bf60b437b37b"
+ }
+ Frame {
+ msec: 3296
+ hash: "506283ccfe9670633ce0bf60b437b37b"
+ }
+ Frame {
+ msec: 3312
+ hash: "506283ccfe9670633ce0bf60b437b37b"
+ }
+ Frame {
+ msec: 3328
+ hash: "506283ccfe9670633ce0bf60b437b37b"
+ }
+ Frame {
+ msec: 3344
+ hash: "506283ccfe9670633ce0bf60b437b37b"
+ }
+ Frame {
+ msec: 3360
+ hash: "506283ccfe9670633ce0bf60b437b37b"
+ }
+ Frame {
+ msec: 3376
+ hash: "506283ccfe9670633ce0bf60b437b37b"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3392
+ hash: "506283ccfe9670633ce0bf60b437b37b"
+ }
+ Frame {
+ msec: 3408
+ hash: "fb437f6c23561092a124e498f1604ff2"
+ }
+ Frame {
+ msec: 3424
+ hash: "402ba144bbb7260eec4553e68eb35cda"
+ }
+ Frame {
+ msec: 3440
+ hash: "76a983de9e85e0c81dfb8908252bd6c9"
+ }
+ Frame {
+ msec: 3456
+ hash: "09219f55fae47a0afed887ebf68a36bc"
+ }
+ Frame {
+ msec: 3472
+ hash: "344e81cc262093facef2f6a235a734dc"
+ }
+ Frame {
+ msec: 3488
+ hash: "8f1c5544eb537555b1c59a377b15e31d"
+ }
+ Frame {
+ msec: 3504
+ hash: "606b9bb549fe2e4bbd09d67b7dea0d1a"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3520
+ hash: "63e239c97bd01a61cb31ef2869e7f47c"
+ }
+ Frame {
+ msec: 3536
+ hash: "f7c176550c39f8a1ad64590cf33a60a4"
+ }
+ Frame {
+ msec: 3552
+ hash: "8581cb14ed81efdf9abb638b5e542cc3"
+ }
+ Frame {
+ msec: 3568
+ hash: "7a1e9354ecc49d8bc27d303c7bdc81f9"
+ }
+ Frame {
+ msec: 3584
+ hash: "610288b97276ee03702ed8a814ef333d"
+ }
+ Frame {
+ msec: 3600
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
+ }
+ Frame {
+ msec: 3616
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
+ }
+ Frame {
+ msec: 3632
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
+ }
+ Frame {
+ msec: 3648
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
+ }
+ Frame {
+ msec: 3664
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
+ }
+ Frame {
+ msec: 3680
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
+ }
+ Frame {
+ msec: 3696
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
+ }
+ Frame {
+ msec: 3712
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
+ }
+ Frame {
+ msec: 3728
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
+ }
+ Frame {
+ msec: 3744
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
+ }
+ Frame {
+ msec: 3760
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
+ }
+ Frame {
+ msec: 3776
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3792
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
+ }
+ Frame {
+ msec: 3808
+ hash: "9713c6b9aff051dd0cc45c545d34b688"
+ }
+ Frame {
+ msec: 3824
+ hash: "1f8fd4d759e343720a8681b6ad126b72"
+ }
+ Frame {
+ msec: 3840
+ image: "gridview2.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "8550d916d91a40b0c3a886b962e07ffc"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3872
+ hash: "df0c2e474139e79429bfc19c79a65ef8"
+ }
+ Frame {
+ msec: 3888
+ hash: "acfb99d081d754276e5ed59bd590aeab"
+ }
+ Frame {
+ msec: 3904
+ hash: "2b34cd101b442f7a3de2893fd5514c16"
+ }
+ Frame {
+ msec: 3920
+ hash: "df92ced66faa1d59354d8010278438ec"
+ }
+ Frame {
+ msec: 3936
+ hash: "dd39a8e6fa3784453461193a6da416cd"
+ }
+ Frame {
+ msec: 3952
+ hash: "5670e8f91ea2df451f0974a51cd77d7d"
+ }
+ Frame {
+ msec: 3968
+ hash: "74b97a09bfe7400872a2c6214e04a5ac"
+ }
+ Frame {
+ msec: 3984
+ hash: "cfd55b963506ab54cf09a7311e84bcc9"
+ }
+ Frame {
+ msec: 4000
+ hash: "59657ee9293c03f064d62de826931435"
+ }
+ Frame {
+ msec: 4016
+ hash: "31f6a4adf31be5ed0af0ea4097e3acee"
+ }
+ Frame {
+ msec: 4032
+ hash: "8f5bfc40c8cdb2f8ce69adb72e7efe76"
+ }
+ Frame {
+ msec: 4048
+ hash: "9dc38985113124130e2ca7950e0bd144"
+ }
+ Frame {
+ msec: 4064
+ hash: "786e6e8b9e74876a6f393d61a78b8fc7"
+ }
+ Frame {
+ msec: 4080
+ hash: "1f4d59a4e4684aab309363a711b30006"
+ }
+ Frame {
+ msec: 4096
+ hash: "a11e332de151b43051796e16dbcf75c3"
+ }
+ Frame {
+ msec: 4112
+ hash: "1a0e82029ae107cb2a018786752433ff"
+ }
+ Frame {
+ msec: 4128
+ hash: "b14c51977c7fbf51f9cf6fec309bff6a"
+ }
+ Frame {
+ msec: 4144
+ hash: "2b418f811992399c3f87c268db745632"
+ }
+ Frame {
+ msec: 4160
+ hash: "0e9a056207053ca98c4e9f42de244c62"
+ }
+ Frame {
+ msec: 4176
+ hash: "1945c3f9e3a1337e7d111e15adea345f"
+ }
+ Frame {
+ msec: 4192
+ hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ }
+ Frame {
+ msec: 4208
+ hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ }
+ Frame {
+ msec: 4224
+ hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ }
+ Frame {
+ msec: 4240
+ hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ }
+ Frame {
+ msec: 4256
+ hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ }
+ Frame {
+ msec: 4272
+ hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ }
+ Frame {
+ msec: 4288
+ hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ }
+ Frame {
+ msec: 4304
+ hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ }
+ Frame {
+ msec: 4320
+ hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ }
+ Frame {
+ msec: 4336
+ hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ }
+ Frame {
+ msec: 4352
+ hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ }
+ Frame {
+ msec: 4368
+ hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ }
+ Frame {
+ msec: 4384
+ hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ }
+ Frame {
+ msec: 4400
+ hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ }
+ Frame {
+ msec: 4416
+ hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4432
+ hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ }
+ Frame {
+ msec: 4448
+ hash: "1945c3f9e3a1337e7d111e15adea345f"
+ }
+ Frame {
+ msec: 4464
+ hash: "0e9a056207053ca98c4e9f42de244c62"
+ }
+ Frame {
+ msec: 4480
+ hash: "2b418f811992399c3f87c268db745632"
+ }
+ Frame {
+ msec: 4496
+ hash: "b14c51977c7fbf51f9cf6fec309bff6a"
+ }
+ Frame {
+ msec: 4512
+ hash: "1a0e82029ae107cb2a018786752433ff"
+ }
+ Frame {
+ msec: 4528
+ hash: "a11e332de151b43051796e16dbcf75c3"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4544
+ hash: "1f4d59a4e4684aab309363a711b30006"
+ }
+ Frame {
+ msec: 4560
+ hash: "786e6e8b9e74876a6f393d61a78b8fc7"
+ }
+ Frame {
+ msec: 4576
+ hash: "9dc38985113124130e2ca7950e0bd144"
+ }
+ Frame {
+ msec: 4592
+ hash: "8f5bfc40c8cdb2f8ce69adb72e7efe76"
+ }
+ Frame {
+ msec: 4608
+ hash: "31f6a4adf31be5ed0af0ea4097e3acee"
+ }
+ Frame {
+ msec: 4624
+ hash: "59657ee9293c03f064d62de826931435"
+ }
+ Frame {
+ msec: 4640
+ hash: "23aa652a0de7fced4a780d72f0940a1b"
+ }
+ Frame {
+ msec: 4656
+ hash: "23aa652a0de7fced4a780d72f0940a1b"
+ }
+ Frame {
+ msec: 4672
+ hash: "23aa652a0de7fced4a780d72f0940a1b"
+ }
+ Frame {
+ msec: 4688
+ hash: "23aa652a0de7fced4a780d72f0940a1b"
+ }
+ Frame {
+ msec: 4704
+ hash: "23aa652a0de7fced4a780d72f0940a1b"
+ }
+ Frame {
+ msec: 4720
+ hash: "23aa652a0de7fced4a780d72f0940a1b"
+ }
+ Frame {
+ msec: 4736
+ hash: "23aa652a0de7fced4a780d72f0940a1b"
+ }
+ Frame {
+ msec: 4752
+ hash: "23aa652a0de7fced4a780d72f0940a1b"
+ }
+ Frame {
+ msec: 4768
+ hash: "23aa652a0de7fced4a780d72f0940a1b"
+ }
+ Frame {
+ msec: 4784
+ hash: "23aa652a0de7fced4a780d72f0940a1b"
+ }
+ Frame {
+ msec: 4800
+ image: "gridview2.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "23aa652a0de7fced4a780d72f0940a1b"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4832
+ hash: "23aa652a0de7fced4a780d72f0940a1b"
+ }
+ Frame {
+ msec: 4848
+ hash: "d46eea049d6156a5e85d9c6811d9d367"
+ }
+ Frame {
+ msec: 4864
+ hash: "d5796ae85247cb8502f92f0d044e4e1f"
+ }
+ Frame {
+ msec: 4880
+ hash: "90987ac49c1a4e6b668436e3ff631e6c"
+ }
+ Frame {
+ msec: 4896
+ hash: "c38d69759ad80242b1fe83ba191cd421"
+ }
+ Frame {
+ msec: 4912
+ hash: "09d08aed76a04e492d8a39cc4dd2b8f5"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 536870912
+ text: "1d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4928
+ hash: "9671d2ff9a2ef46ce3c750a1965404a4"
+ }
+ Frame {
+ msec: 4944
+ hash: "f55857816d666ece4a7987a70883b3d1"
+ }
+ Frame {
+ msec: 4960
+ hash: "a2d80527b30316d9120b057bbfcfa666"
+ }
+ Frame {
+ msec: 4976
+ hash: "87ca69287c1469cbc7e65d1673016de7"
+ }
+ Frame {
+ msec: 4992
+ hash: "51588c7ebbe2dcd87a3c9bebf028aee3"
+ }
+ Frame {
+ msec: 5008
+ hash: "917a9a171273fe9fd4c450eeed6f58ed"
+ }
+ Frame {
+ msec: 5024
+ hash: "6e7ade250a9a9692caee2a220dd2ac53"
+ }
+ Frame {
+ msec: 5040
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5056
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5072
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5088
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5104
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5120
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5136
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5152
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5168
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5184
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5200
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5216
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5232
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5248
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5264
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5280
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5296
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5312
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5328
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5344
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5360
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5376
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5392
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5408
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5424
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5440
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5456
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5472
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5488
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5504
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5520
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5536
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5552
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5568
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5584
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5600
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5616
+ hash: "ca2dcb16d553889a3a57b48700c2a595"
+ }
+ Frame {
+ msec: 5632
+ hash: "c5c9aab9bea757f1c451e89df72bd836"
+ }
+ Frame {
+ msec: 5648
+ hash: "a8cf3085f8c3b743f3f15db1ad7b8801"
+ }
+ Frame {
+ msec: 5664
+ hash: "c25a92050eced1c304506572723273a3"
+ }
+ Frame {
+ msec: 5680
+ hash: "cff981039c1a3eb6c3c1a20f142fbae2"
+ }
+ Frame {
+ msec: 5696
+ hash: "930765587fe3355873bbdff66b812b74"
+ }
+ Frame {
+ msec: 5712
+ hash: "6a60f97c7b39add465e1bd366e9c644b"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 5728
+ hash: "7a1fd3c488d1064a75dc598c9a773291"
+ }
+ Frame {
+ msec: 5744
+ hash: "e2ecd7e68e27eb3d2dcb5e368d3ee5a0"
+ }
+ Frame {
+ msec: 5760
+ image: "gridview2.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "20f3aaca2efc3066076e73d1d95e5363"
+ }
+ Frame {
+ msec: 5792
+ hash: "b18d476cadc36e22dddc3185f595c123"
+ }
+ Frame {
+ msec: 5808
+ hash: "8cbc47555178c8ee355774eab17b4b19"
+ }
+ Frame {
+ msec: 5824
+ hash: "e488fb76fb550fba51b95bee3fee80d5"
+ }
+ Frame {
+ msec: 5840
+ hash: "e488fb76fb550fba51b95bee3fee80d5"
+ }
+ Frame {
+ msec: 5856
+ hash: "e488fb76fb550fba51b95bee3fee80d5"
+ }
+ Frame {
+ msec: 5872
+ hash: "e488fb76fb550fba51b95bee3fee80d5"
+ }
+ Frame {
+ msec: 5888
+ hash: "e488fb76fb550fba51b95bee3fee80d5"
+ }
+ Frame {
+ msec: 5904
+ hash: "e488fb76fb550fba51b95bee3fee80d5"
+ }
+ Frame {
+ msec: 5920
+ hash: "e488fb76fb550fba51b95bee3fee80d5"
+ }
+ Frame {
+ msec: 5936
+ hash: "e488fb76fb550fba51b95bee3fee80d5"
+ }
+ Frame {
+ msec: 5952
+ hash: "e488fb76fb550fba51b95bee3fee80d5"
+ }
+ Frame {
+ msec: 5968
+ hash: "e488fb76fb550fba51b95bee3fee80d5"
+ }
+ Frame {
+ msec: 5984
+ hash: "e488fb76fb550fba51b95bee3fee80d5"
+ }
+ Frame {
+ msec: 6000
+ hash: "e488fb76fb550fba51b95bee3fee80d5"
+ }
+ Frame {
+ msec: 6016
+ hash: "e488fb76fb550fba51b95bee3fee80d5"
+ }
+ Frame {
+ msec: 6032
+ hash: "e488fb76fb550fba51b95bee3fee80d5"
+ }
+ Frame {
+ msec: 6048
+ hash: "e488fb76fb550fba51b95bee3fee80d5"
+ }
+ Frame {
+ msec: 6064
+ hash: "e488fb76fb550fba51b95bee3fee80d5"
+ }
+ Frame {
+ msec: 6080
+ hash: "e488fb76fb550fba51b95bee3fee80d5"
+ }
+ Frame {
+ msec: 6096
+ hash: "e488fb76fb550fba51b95bee3fee80d5"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 6112
+ hash: "e488fb76fb550fba51b95bee3fee80d5"
+ }
+ Frame {
+ msec: 6128
+ hash: "8c2fab0c73d1cfbeeb0ec937085d6b3b"
+ }
+ Frame {
+ msec: 6144
+ hash: "5d9353517177ef7c6314d8a65cb009ec"
+ }
+ Frame {
+ msec: 6160
+ hash: "ed8de504f7e2028cd369c1555314fd81"
+ }
+ Frame {
+ msec: 6176
+ hash: "8fe84d8badbe5bd08d097ba6bda10611"
+ }
+ Frame {
+ msec: 6192
+ hash: "d77419a55a3cf933505e793bb258e6af"
+ }
+ Frame {
+ msec: 6208
+ hash: "457ac82be02e2f5e08e51ccc78c94781"
+ }
+ Frame {
+ msec: 6224
+ hash: "e57e2852f065afff9c24c5bc9f29edee"
+ }
+ Frame {
+ msec: 6240
+ hash: "f72cd6ad3324936c3a18c264e23e05a9"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 6256
+ hash: "a4bf7eae6fc7a05239d09421ae95304a"
+ }
+ Frame {
+ msec: 6272
+ hash: "423f3bd07df8bee25818644c07201a3c"
+ }
+ Frame {
+ msec: 6288
+ hash: "225e9c698424f287b9458b7839b4479b"
+ }
+ Frame {
+ msec: 6304
+ hash: "0f463db7e4acc184a4efb7b5e5c0d397"
+ }
+ Frame {
+ msec: 6320
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6336
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6352
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6368
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6384
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6400
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6416
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6432
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6448
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6464
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6480
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6496
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6512
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6528
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6544
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6560
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6576
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6592
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6608
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6624
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6640
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6656
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6672
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6688
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6704
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6720
+ image: "gridview2.6.png"
+ }
+ Frame {
+ msec: 6736
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 6752
+ hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ }
+ Frame {
+ msec: 6768
+ hash: "738f6bcc043d221488285c7e529b1d1c"
+ }
+ Frame {
+ msec: 6784
+ hash: "cb0a4e8e79372dd67e8ecfea2143a47c"
+ }
+ Frame {
+ msec: 6800
+ hash: "544d1825b36f4e7950c1a62b26c1fd9b"
+ }
+ Frame {
+ msec: 6816
+ hash: "df99396622342b4f092b0db34a224c3d"
+ }
+ Frame {
+ msec: 6832
+ hash: "47391f51e5df2249a6ca1f1f6e8e80e0"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 536870912
+ text: "1f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 6848
+ hash: "d8079a874ca18d00aeeb611effcbeb8b"
+ }
+ Frame {
+ msec: 6864
+ hash: "4cfd9264af6935aca425da75ebb2d7cc"
+ }
+ Frame {
+ msec: 6880
+ hash: "aee6547cb653cd2d56d07285d836149d"
+ }
+ Frame {
+ msec: 6896
+ hash: "969720f17eae51258e2e143e14bfa737"
+ }
+ Frame {
+ msec: 6912
+ hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad"
+ }
+ Frame {
+ msec: 6928
+ hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad"
+ }
+ Frame {
+ msec: 6944
+ hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad"
+ }
+ Frame {
+ msec: 6960
+ hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad"
+ }
+ Frame {
+ msec: 6976
+ hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad"
+ }
+ Frame {
+ msec: 6992
+ hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad"
+ }
+ Frame {
+ msec: 7008
+ hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad"
+ }
+ Frame {
+ msec: 7024
+ hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad"
+ }
+ Frame {
+ msec: 7040
+ hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad"
+ }
+ Frame {
+ msec: 7056
+ hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad"
+ }
+ Frame {
+ msec: 7072
+ hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad"
+ }
+ Frame {
+ msec: 7088
+ hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad"
+ }
+ Frame {
+ msec: 7104
+ hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad"
+ }
+ Frame {
+ msec: 7120
+ hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad"
+ }
+ Frame {
+ msec: 7136
+ hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad"
+ }
+ Frame {
+ msec: 7152
+ hash: "beeaec4b983c970ae448e33047dfdfea"
+ }
+ Frame {
+ msec: 7168
+ hash: "7c415ab1b7d8e25b71af75d3eec8ee4a"
+ }
+ Frame {
+ msec: 7184
+ hash: "8913037e57b9a6a58b68f2d6e69b1bd1"
+ }
+ Frame {
+ msec: 7200
+ hash: "19e59e9409fdaf90ccf75606b58688b7"
+ }
+ Frame {
+ msec: 7216
+ hash: "1ae71ef5b1006f637bd8df0769af65a6"
+ }
+ Frame {
+ msec: 7232
+ hash: "1f0aa8b368b2dbccafd54b923d8cce95"
+ }
+ Frame {
+ msec: 7248
+ hash: "c5079fb25a8c80a995d7aa5fbbd91428"
+ }
+ Frame {
+ msec: 7264
+ hash: "59f41220fa5d23db298c9e94f115c17b"
+ }
+ Frame {
+ msec: 7280
+ hash: "48259dfe8b266d9e7f50b187be98c3cb"
+ }
+ Frame {
+ msec: 7296
+ hash: "f7554552598351c3b8dfcbe3ebc32b3b"
+ }
+ Frame {
+ msec: 7312
+ hash: "219e9cd84d7e5c5c0e6cb80100aa3ab5"
+ }
+ Frame {
+ msec: 7328
+ hash: "5578e870ee8ce00bce5a59bb25e3d0a9"
+ }
+ Frame {
+ msec: 7344
+ hash: "4d9cebbf750c03380694245e0e22ab94"
+ }
+ Frame {
+ msec: 7360
+ hash: "a60a8032e97ed0a3caa05012c1283de5"
+ }
+ Frame {
+ msec: 7376
+ hash: "3bee20b349a7e9d67f7770ede6da8673"
+ }
+ Frame {
+ msec: 7392
+ hash: "d8c34576c25fb8b5e4fa12680ac32e99"
+ }
+ Frame {
+ msec: 7408
+ hash: "cd1360aa7db7c3b2f2012dfc44de2198"
+ }
+ Frame {
+ msec: 7424
+ hash: "cd82782f63c9a7d21d51b3440c2f038b"
+ }
+ Frame {
+ msec: 7440
+ hash: "e59061967a841aa45607c0828b687527"
+ }
+ Frame {
+ msec: 7456
+ hash: "01962406c9aaf1aa8bf3ab49e30ddf5f"
+ }
+ Frame {
+ msec: 7472
+ hash: "5a5732a568189e598c7985ee806bc67e"
+ }
+ Frame {
+ msec: 7488
+ hash: "54775aed3a6283c1fa330d65de5bc70c"
+ }
+ Frame {
+ msec: 7504
+ hash: "66640b4a5c1e68924b25de24e3c3f008"
+ }
+ Frame {
+ msec: 7520
+ hash: "76999d3125f20ba47dbdff38ee722a8a"
+ }
+ Frame {
+ msec: 7536
+ hash: "5159c81533bee8825cff11910bcb90dc"
+ }
+ Frame {
+ msec: 7552
+ hash: "ac0295495345987d1e000f6bb2436927"
+ }
+ Frame {
+ msec: 7568
+ hash: "d56b4a04f1d2835a0852ea20e8e2f451"
+ }
+ Frame {
+ msec: 7584
+ hash: "ae41fe23e2ab508d7642973c0d9d35b0"
+ }
+ Frame {
+ msec: 7600
+ hash: "730ca01fbee6ec4928715ec52773c06c"
+ }
+ Frame {
+ msec: 7616
+ hash: "ad1fa52c617a2b119d61eb9fb7d58a82"
+ }
+ Frame {
+ msec: 7632
+ hash: "c74321a822b515a393e8e218bd45e8e3"
+ }
+ Frame {
+ msec: 7648
+ hash: "a9e2f3bee1d47166204c74bdf90cd8c8"
+ }
+ Frame {
+ msec: 7664
+ hash: "e10d4bf08980ea7d079a2f359ee62b95"
+ }
+ Frame {
+ msec: 7680
+ image: "gridview2.7.png"
+ }
+ Frame {
+ msec: 7696
+ hash: "9f0ba6051e684e54ff4e36d980a7e600"
+ }
+ Frame {
+ msec: 7712
+ hash: "aa6268d8d7fb3d2b91db3e225e8c818a"
+ }
+ Frame {
+ msec: 7728
+ hash: "8e547e55279b1929f42bf51e753f142e"
+ }
+ Frame {
+ msec: 7744
+ hash: "5386c71f8d6701379e177f161d714da2"
+ }
+ Frame {
+ msec: 7760
+ hash: "a184e9e6012c72fc1aeaed9f98b0fb1e"
+ }
+ Frame {
+ msec: 7776
+ hash: "777a6b70ca77c45e2e5e3914cc328dcb"
+ }
+ Frame {
+ msec: 7792
+ hash: "424f73f25a1e91126f951838d45adc3b"
+ }
+ Frame {
+ msec: 7808
+ hash: "3f7f2eb6b9a5d19fbfcd700baf566dfb"
+ }
+ Frame {
+ msec: 7824
+ hash: "c3c4c72b25c2295b82a5fd7454942f77"
+ }
+ Frame {
+ msec: 7840
+ hash: "3b35e93d3eb9d28c5c03d6d353f805d2"
+ }
+ Frame {
+ msec: 7856
+ hash: "5dcad019a1c0eaaab381a7602e1914ff"
+ }
+ Frame {
+ msec: 7872
+ hash: "602a5c569555767413bf445af44c744f"
+ }
+ Frame {
+ msec: 7888
+ hash: "3e9facab95dae772f695b6f7c5175063"
+ }
+ Frame {
+ msec: 7904
+ hash: "0921220ec36ca7b25eaae699872a2006"
+ }
+ Frame {
+ msec: 7920
+ hash: "1d5fa7fd630af62bcc805bdc6686df37"
+ }
+ Frame {
+ msec: 7936
+ hash: "165c02de63604aa118d9f8995e6b45af"
+ }
+ Frame {
+ msec: 7952
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 7968
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 7984
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8000
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8016
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8032
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8048
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8064
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8080
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8096
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8112
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8128
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8144
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8160
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8176
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8192
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8208
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8224
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8240
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8256
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8272
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8288
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8304
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8320
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8336
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8352
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8368
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8384
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8400
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8416
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8432
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8448
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8464
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8480
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8496
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8512
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8528
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8544
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8560
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8576
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8592
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8608
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8624
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8640
+ image: "gridview2.8.png"
+ }
+ Frame {
+ msec: 8656
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8672
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8688
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8704
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 8720
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8736
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8752
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8768
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8784
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8800
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8816
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8832
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8848
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8864
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8880
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8896
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8912
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8928
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8944
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8960
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8976
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 8992
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 9008
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+ Frame {
+ msec: 9024
+ hash: "33d81c39d16c6a326012499796e50e03"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/gridview.qml b/tests/auto/declarative/visual/qmlgraphicsgridview/gridview.qml
new file mode 100644
index 0000000..f8782a5
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/gridview.qml
@@ -0,0 +1,51 @@
+import Qt 4.6
+
+Rectangle {
+ width: 300; height: 400; color: "black"
+
+ ListModel {
+ id: appModel
+ ListElement { lColor: "red" }
+ ListElement { lColor: "yellow" }
+ ListElement { lColor: "green" }
+ ListElement { lColor: "blue" }
+ ListElement { lColor: "purple" }
+ ListElement { lColor: "orange" }
+ ListElement { lColor: "pink" }
+ ListElement { lColor: "brown" }
+ ListElement { lColor: "gray" }
+ ListElement { lColor: "red" }
+ ListElement { lColor: "yellow" }
+ ListElement { lColor: "green" }
+ ListElement { lColor: "blue" }
+ ListElement { lColor: "purple" }
+ ListElement { lColor: "orange" }
+ ListElement { lColor: "pink" }
+ ListElement { lColor: "brown" }
+ ListElement { lColor: "gray" }
+ }
+
+ Component {
+ id: appDelegate
+ Item {
+ width: 100; height: 100
+ Rectangle {
+ color: lColor; x: 4; y: 4
+ width: 92; height: 92
+ }
+ }
+ }
+
+ Component {
+ id: appHighlight
+ Rectangle { width: 100; height: 100; color: "white"; z: 3000 }
+ }
+
+ GridView {
+ anchors.fill: parent
+ cellWidth: 100; cellHeight: 100; cacheBuffer: 200
+ model: appModel; delegate: appDelegate
+ highlight: appHighlight
+ focus: true
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicsgridview/gridview2.qml b/tests/auto/declarative/visual/qmlgraphicsgridview/gridview2.qml
new file mode 100644
index 0000000..81d06cf
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsgridview/gridview2.qml
@@ -0,0 +1,58 @@
+import Qt 4.6
+
+Rectangle {
+ width: 300; height: 400; color: "black"
+
+ ListModel {
+ id: appModel
+ ListElement { lColor: "red" }
+ ListElement { lColor: "yellow" }
+ ListElement { lColor: "green" }
+ ListElement { lColor: "blue" }
+ ListElement { lColor: "purple" }
+ ListElement { lColor: "orange" }
+ ListElement { lColor: "pink" }
+ ListElement { lColor: "brown" }
+ ListElement { lColor: "gray" }
+ ListElement { lColor: "red" }
+ ListElement { lColor: "yellow" }
+ ListElement { lColor: "green" }
+ ListElement { lColor: "blue" }
+ ListElement { lColor: "purple" }
+ ListElement { lColor: "orange" }
+ ListElement { lColor: "pink" }
+ ListElement { lColor: "brown" }
+ ListElement { lColor: "gray" }
+ ListElement { lColor: "red" }
+ ListElement { lColor: "yellow" }
+ ListElement { lColor: "green" }
+ }
+
+ Component {
+ id: appDelegate
+ Item {
+ width: 100; height: 100
+ Rectangle {
+ color: lColor; x: 4; y: 4
+ width: 92; height: 92
+ }
+ }
+ }
+
+ GridView {
+ id: gridView; anchors.fill: parent
+ cellWidth: 100; cellHeight: 100; cacheBuffer: 200
+ model: appModel; delegate: appDelegate; focus: true
+ keyNavigationWraps: true
+
+ flickableData: [
+ Rectangle {
+ color: "transparent"; border.color: "white"; border.width: 8; z: 3000
+ height: 100; width: 100; x: 4; y: 4
+ x: EaseFollow { source: gridView.currentItem.x; velocity: 500 }
+ y: EaseFollow { source: gridView.currentItem.y; velocity: 500 }
+ }
+ ]
+ }
+
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicsparticles/data/particles.0.png b/tests/auto/declarative/visual/qmlgraphicsparticles/data/particles.0.png
new file mode 100644
index 0000000..7321d95
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsparticles/data/particles.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsparticles/data/particles.1.png b/tests/auto/declarative/visual/qmlgraphicsparticles/data/particles.1.png
new file mode 100644
index 0000000..49d2a5a
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsparticles/data/particles.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsparticles/data/particles.2.png b/tests/auto/declarative/visual/qmlgraphicsparticles/data/particles.2.png
new file mode 100644
index 0000000..6fe14b7
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsparticles/data/particles.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicsparticles/data/particles.qml b/tests/auto/declarative/visual/qmlgraphicsparticles/data/particles.qml
new file mode 100644
index 0000000..d766dc6
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsparticles/data/particles.qml
@@ -0,0 +1,775 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "b4df49cbd7cf972af9879399808f6c53"
+ }
+ Frame {
+ msec: 32
+ hash: "43c0ad5826e8058260951f063f0851ab"
+ }
+ Frame {
+ msec: 48
+ hash: "55eb2c9939514338e7ef58c9276fc223"
+ }
+ Frame {
+ msec: 64
+ hash: "6a1bbb91bf450547d6100b6e61a98f6d"
+ }
+ Frame {
+ msec: 80
+ hash: "bdb9b8cab70c72d99aba830eb8e8913b"
+ }
+ Frame {
+ msec: 96
+ hash: "71a0e046bc68183b830df9dafd8fa147"
+ }
+ Frame {
+ msec: 112
+ hash: "e7228e0ed77e05c661282c2d2fe88b3e"
+ }
+ Frame {
+ msec: 128
+ hash: "93a4c3e501b05844f687a2dd1754aad2"
+ }
+ Frame {
+ msec: 144
+ hash: "1856ac86313c16bf4874130d9a48ff45"
+ }
+ Frame {
+ msec: 160
+ hash: "3637d8dad4f44c938f91b0800bd9fb2f"
+ }
+ Frame {
+ msec: 176
+ hash: "c5ace4ede38d29363d69c6b4b2f9349f"
+ }
+ Frame {
+ msec: 192
+ hash: "a5d832d02f4a635052817654df90caba"
+ }
+ Frame {
+ msec: 208
+ hash: "9ebf8bea8abe7ac209d47214a87f8fc0"
+ }
+ Frame {
+ msec: 224
+ hash: "35b8f5cb18284867be8d27d601394a2b"
+ }
+ Frame {
+ msec: 240
+ hash: "a2c4a6063f219af6f2b29b2d21a4265d"
+ }
+ Frame {
+ msec: 256
+ hash: "27f25ace7b8e93c55638ed99f49b821c"
+ }
+ Frame {
+ msec: 272
+ hash: "4f6511bfbbd8113195a7597eb6dfb219"
+ }
+ Frame {
+ msec: 288
+ hash: "6a696159cdbb51a67064c600124535d1"
+ }
+ Frame {
+ msec: 304
+ hash: "6cd667eb352256dbb728532634e7ffd0"
+ }
+ Frame {
+ msec: 320
+ hash: "28fa16c8936bf86a8426ded306aa2b8c"
+ }
+ Frame {
+ msec: 336
+ hash: "061fecdb88733e3e51c5823571bc4d19"
+ }
+ Frame {
+ msec: 352
+ hash: "f64530f638b3d18d56593e0b7c884f5d"
+ }
+ Frame {
+ msec: 368
+ hash: "8530cf40739890dc7401fad65a6325bf"
+ }
+ Frame {
+ msec: 384
+ hash: "0abc555552e7256dbc424b2eac5c95f2"
+ }
+ Frame {
+ msec: 400
+ hash: "64aeae59a8c958dfc62d92636b2f5217"
+ }
+ Frame {
+ msec: 416
+ hash: "3e0f50f5bee017220b129d06b2acde2c"
+ }
+ Frame {
+ msec: 432
+ hash: "e676c01ff2e35bdfe674be67d49945b1"
+ }
+ Frame {
+ msec: 448
+ hash: "bc060b480aab94fd440fd27f5beb7383"
+ }
+ Frame {
+ msec: 464
+ hash: "79c79f723de72315e63da8a7cbe1b425"
+ }
+ Frame {
+ msec: 480
+ hash: "7bf93c2697af75d0f862a47d57cd6a7f"
+ }
+ Frame {
+ msec: 496
+ hash: "7641b9e233f4aabd99bcd985ce1d51ae"
+ }
+ Frame {
+ msec: 512
+ hash: "b596a28cb67617d37408bd25d947d088"
+ }
+ Frame {
+ msec: 528
+ hash: "f2c5cdf15c27b05c0ea97675ddc41757"
+ }
+ Frame {
+ msec: 544
+ hash: "eae5eb8c41a1d6d75446618518490f20"
+ }
+ Frame {
+ msec: 560
+ hash: "0be5e9a6d857fe1a262524801c69490d"
+ }
+ Frame {
+ msec: 576
+ hash: "65478b8c4d932c10924f70462a662254"
+ }
+ Frame {
+ msec: 592
+ hash: "7b034f3c98e8eb38eec11cf3c2aa0804"
+ }
+ Frame {
+ msec: 608
+ hash: "5bbc8eed41500ccbc820cfb38794232f"
+ }
+ Frame {
+ msec: 624
+ hash: "1b39d555ca8932b40efd769c4ba74d3f"
+ }
+ Frame {
+ msec: 640
+ hash: "f9a38e12becbce400191e22f1d22427c"
+ }
+ Frame {
+ msec: 656
+ hash: "cbc27c72517d76edfc2d3692cd83f151"
+ }
+ Frame {
+ msec: 672
+ hash: "4a883a5aed05f0bbcefcefea6ef56df6"
+ }
+ Frame {
+ msec: 688
+ hash: "7a30ea30c0619c87c96bcaba916c64df"
+ }
+ Frame {
+ msec: 704
+ hash: "33cd0797b6d229592ed53117fcaaa898"
+ }
+ Frame {
+ msec: 720
+ hash: "21178ef9366c8a65ecb9e21d584573b0"
+ }
+ Frame {
+ msec: 736
+ hash: "fe75beac8681fdac8a2b79c9c7267128"
+ }
+ Frame {
+ msec: 752
+ hash: "df26a23d394e053417de86309683c5e0"
+ }
+ Frame {
+ msec: 768
+ hash: "411594a1ed7c351cb872e0a6f3081b1b"
+ }
+ Frame {
+ msec: 784
+ hash: "b4b639f204cfed9e1fec872e4de115c2"
+ }
+ Frame {
+ msec: 800
+ hash: "4d801e2f4848399c011d60264720b912"
+ }
+ Frame {
+ msec: 816
+ hash: "4f28c7b154853ff78cdefb5a5ac9d2b7"
+ }
+ Frame {
+ msec: 832
+ hash: "cc6d4283b0d7bf9f579637575d5e1fef"
+ }
+ Frame {
+ msec: 848
+ hash: "8edc371d23d01be547990074b5e640af"
+ }
+ Frame {
+ msec: 864
+ hash: "874845d7178e6cd8369f21379060f561"
+ }
+ Frame {
+ msec: 880
+ hash: "98fb6d79990775385603fb1a50ab5186"
+ }
+ Frame {
+ msec: 896
+ hash: "d15539efc27baabb5a74f464b152d266"
+ }
+ Frame {
+ msec: 912
+ hash: "fc44d091d6689e8870162a6d29b6d287"
+ }
+ Frame {
+ msec: 928
+ hash: "a3c964f4bf524e22092b1650df43375a"
+ }
+ Frame {
+ msec: 944
+ hash: "ca203fd630ec1eadea37cf36bd30ba40"
+ }
+ Frame {
+ msec: 960
+ image: "particles.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "2e0630818c04fc6c259eec8561c645cd"
+ }
+ Frame {
+ msec: 992
+ hash: "a7b1f6305ddcf4a338e1a96ea31a5341"
+ }
+ Frame {
+ msec: 1008
+ hash: "23a5013a8f9407d06ac6fd0c1e961743"
+ }
+ Frame {
+ msec: 1024
+ hash: "9de73decddaab4269bd33efdb21278a3"
+ }
+ Frame {
+ msec: 1040
+ hash: "7582c26b45dd11c262f51b387af89cb2"
+ }
+ Frame {
+ msec: 1056
+ hash: "650e0d395f1d1f2ddda8711089d85511"
+ }
+ Frame {
+ msec: 1072
+ hash: "9ff84e81219aa6bb7ab534b2a47a3930"
+ }
+ Frame {
+ msec: 1088
+ hash: "11e255273e8ca4716047fb52636f0c3e"
+ }
+ Frame {
+ msec: 1104
+ hash: "b2fcbefd13db3c765183b1eefc2ca0bc"
+ }
+ Frame {
+ msec: 1120
+ hash: "7150aff523c0d480702f6a326699cb65"
+ }
+ Frame {
+ msec: 1136
+ hash: "63886c15107a2a7d639069cd81c3cd07"
+ }
+ Frame {
+ msec: 1152
+ hash: "1ec1fc30bbb5f43a1d6d36bce345f569"
+ }
+ Frame {
+ msec: 1168
+ hash: "34060cbc31ce1fbf406cbb595312c609"
+ }
+ Frame {
+ msec: 1184
+ hash: "6f3a04c7f411785956e640aa630f7ac4"
+ }
+ Frame {
+ msec: 1200
+ hash: "d7bdb7e170b6f193eaf4b07c01b4dc6b"
+ }
+ Frame {
+ msec: 1216
+ hash: "6ca02c0d9cfeb4b1932f7ad1feac9850"
+ }
+ Frame {
+ msec: 1232
+ hash: "d446c7b185361de5c615a17ac1fee607"
+ }
+ Frame {
+ msec: 1248
+ hash: "bc2faf5b7b2972f155954e4e685e80ae"
+ }
+ Frame {
+ msec: 1264
+ hash: "2bf26cedc76aea4a6d9744b7dd935db8"
+ }
+ Frame {
+ msec: 1280
+ hash: "accbee9d0f8cf73ef72aa7bfb49b3fa5"
+ }
+ Frame {
+ msec: 1296
+ hash: "933eb2e46f42e212bdfc515d30f663d3"
+ }
+ Frame {
+ msec: 1312
+ hash: "7495318c893dbb22771b53e93c7614e8"
+ }
+ Frame {
+ msec: 1328
+ hash: "894fe23c1b3543451293c047b640c4bb"
+ }
+ Frame {
+ msec: 1344
+ hash: "9b7179ef059ee82ca4a383f536f47a42"
+ }
+ Frame {
+ msec: 1360
+ hash: "5ec1a5bfac2473efdcad7dba0da4015c"
+ }
+ Frame {
+ msec: 1376
+ hash: "2bd64528e83260a80e7f2843e2c34a19"
+ }
+ Frame {
+ msec: 1392
+ hash: "16bf64a9bf6b4bc09b108c65d074b5f2"
+ }
+ Frame {
+ msec: 1408
+ hash: "c33eaa717ba63655f375499058b1be55"
+ }
+ Frame {
+ msec: 1424
+ hash: "d080f4591f9fd59745bf850525590849"
+ }
+ Frame {
+ msec: 1440
+ hash: "921585c88ec133c83c07650745bb4441"
+ }
+ Frame {
+ msec: 1456
+ hash: "f037b28137b22a0c91fc71fc6626475a"
+ }
+ Frame {
+ msec: 1472
+ hash: "e10b3c432a230d5509c2fa7df48b56c9"
+ }
+ Frame {
+ msec: 1488
+ hash: "ac02c7b7e68ee8cfad1fe556020e93d8"
+ }
+ Frame {
+ msec: 1504
+ hash: "12d59e70dedfa0c741afed9b98cb9a3a"
+ }
+ Frame {
+ msec: 1520
+ hash: "a9aa635ccde26829d7e1cdc29fcce8d1"
+ }
+ Frame {
+ msec: 1536
+ hash: "f571b3da827b884ad036dade8ad2fe37"
+ }
+ Frame {
+ msec: 1552
+ hash: "1ffa8d7512e9001cbc78b28451133b44"
+ }
+ Frame {
+ msec: 1568
+ hash: "2ef4b10f2eafd71dfde15f7f00e923c6"
+ }
+ Frame {
+ msec: 1584
+ hash: "09b3bc232a134eae5ae14c0336f508ba"
+ }
+ Frame {
+ msec: 1600
+ hash: "ebadb5c6b4986c865f7f8ef232680b7e"
+ }
+ Frame {
+ msec: 1616
+ hash: "26621991073510e9a95e3b208e3ee56e"
+ }
+ Frame {
+ msec: 1632
+ hash: "f18e97f13c06f3c5368edf851f19f401"
+ }
+ Frame {
+ msec: 1648
+ hash: "3c322dbbf5ecfe1de56595dcb7d949e1"
+ }
+ Frame {
+ msec: 1664
+ hash: "50058d1bb992a6d0601c9d5490149936"
+ }
+ Frame {
+ msec: 1680
+ hash: "4cc78f56f13478ec21a4a0d6b22f956b"
+ }
+ Frame {
+ msec: 1696
+ hash: "d765cd86560dff3faa5a3c902512c74c"
+ }
+ Frame {
+ msec: 1712
+ hash: "ad983068c2149b0c06da3b89a5d94d24"
+ }
+ Frame {
+ msec: 1728
+ hash: "e6da7260001771fc00c472bccae641fe"
+ }
+ Frame {
+ msec: 1744
+ hash: "71778ad8a61ecb0f78f7234ecf0d1d97"
+ }
+ Frame {
+ msec: 1760
+ hash: "6b2209ea5f7f17c2cd868986f0c907d9"
+ }
+ Frame {
+ msec: 1776
+ hash: "6513c82829ef7e7c9461dcf5b50f675f"
+ }
+ Frame {
+ msec: 1792
+ hash: "0172c5bdf96c8bceab25a6c82bdbe527"
+ }
+ Frame {
+ msec: 1808
+ hash: "64b53bf1c1988d3a799b564089f8e63f"
+ }
+ Frame {
+ msec: 1824
+ hash: "a1bdea4771ec9719cfe88f4e827bd005"
+ }
+ Frame {
+ msec: 1840
+ hash: "263de376cee2ba7701a7ca116bc1be81"
+ }
+ Frame {
+ msec: 1856
+ hash: "9795dada7f09d7d4d40df858dea8bc70"
+ }
+ Frame {
+ msec: 1872
+ hash: "85ea4c63fc31f79423cb509f6c6d4faa"
+ }
+ Frame {
+ msec: 1888
+ hash: "c86d8c4460d1e3c2f26b723dc628fe84"
+ }
+ Frame {
+ msec: 1904
+ hash: "6bf6ef1fd377bfcf0b93baa7f28e1d3d"
+ }
+ Frame {
+ msec: 1920
+ image: "particles.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "57b8a48bed9375b74391950c28e611da"
+ }
+ Frame {
+ msec: 1952
+ hash: "70203655bc832998529071d7f665ecbe"
+ }
+ Frame {
+ msec: 1968
+ hash: "9ab9808d495f907a255d85fbd82491e2"
+ }
+ Frame {
+ msec: 1984
+ hash: "297570136b058ba43e883b0aef20d82f"
+ }
+ Frame {
+ msec: 2000
+ hash: "0c2f15ce83e2d961ec36299b13890709"
+ }
+ Frame {
+ msec: 2016
+ hash: "6d57b6dcb1dbfa35245d79ef36ca49b2"
+ }
+ Frame {
+ msec: 2032
+ hash: "12a71804fd71991706d8a39b676d1628"
+ }
+ Frame {
+ msec: 2048
+ hash: "f6a9e1b0b498fc576f3eadeb86c08fe9"
+ }
+ Frame {
+ msec: 2064
+ hash: "051c2ed34cbef82d44aec4841a33f086"
+ }
+ Frame {
+ msec: 2080
+ hash: "12b89590b20fff8d6c94dde40a5d6185"
+ }
+ Frame {
+ msec: 2096
+ hash: "7a29cd11ddb042203465a9522ff951ce"
+ }
+ Frame {
+ msec: 2112
+ hash: "4853f364261ab8e1c9d35cfe42efb385"
+ }
+ Frame {
+ msec: 2128
+ hash: "7149ab3ed649cac9cf662be7c434056f"
+ }
+ Frame {
+ msec: 2144
+ hash: "bbe199700474dda156355d31ac09be39"
+ }
+ Frame {
+ msec: 2160
+ hash: "a3f3fbbe844b8c6fb8cb8bbcc17120e3"
+ }
+ Frame {
+ msec: 2176
+ hash: "e9a04cfe9e8c50f74978fbd4ecce536a"
+ }
+ Frame {
+ msec: 2192
+ hash: "0df1d4211f770cdd7b8a98ea476c6f42"
+ }
+ Frame {
+ msec: 2208
+ hash: "a6837afb43663b9473db2378b1a9f989"
+ }
+ Frame {
+ msec: 2224
+ hash: "691ea67f3b84b8dda449c2a8e86b1087"
+ }
+ Frame {
+ msec: 2240
+ hash: "16d18947637c63662b9a502c493f06ec"
+ }
+ Frame {
+ msec: 2256
+ hash: "8f9207d404da08706e150f3b64d0088d"
+ }
+ Frame {
+ msec: 2272
+ hash: "48ad430e38cdc34845a834cfb9ea70ef"
+ }
+ Frame {
+ msec: 2288
+ hash: "1252cfb294ae99c40b03dd021160553f"
+ }
+ Frame {
+ msec: 2304
+ hash: "b1d5e752fbe03c95ee0dc7bbdf6fb9f6"
+ }
+ Frame {
+ msec: 2320
+ hash: "2282cb42ef0c812ba27e33ed0f962a84"
+ }
+ Frame {
+ msec: 2336
+ hash: "42fc82c8d40d383b3cf31a741a4358c5"
+ }
+ Frame {
+ msec: 2352
+ hash: "368c1ffa2deb1911929f1769e31c8017"
+ }
+ Frame {
+ msec: 2368
+ hash: "8693bdbde404e36970943ac6b650ca00"
+ }
+ Frame {
+ msec: 2384
+ hash: "57609613c336029b60da428d48842a4e"
+ }
+ Frame {
+ msec: 2400
+ hash: "b61dafe9e87421d3fcf8cb9ff0e7a41b"
+ }
+ Frame {
+ msec: 2416
+ hash: "c8c34d1d82bef418ef97f52cb9773cf4"
+ }
+ Frame {
+ msec: 2432
+ hash: "aa756c09717dc02e81e76511b4c58f60"
+ }
+ Frame {
+ msec: 2448
+ hash: "96e75c5ce1b5393f6cc46fbbe0a67689"
+ }
+ Frame {
+ msec: 2464
+ hash: "fb5febae411f43a6cd218b03b36f5018"
+ }
+ Frame {
+ msec: 2480
+ hash: "889870fa67784261e7b73b7d0a53324e"
+ }
+ Frame {
+ msec: 2496
+ hash: "fb124d4ebee6457f2137f07954619912"
+ }
+ Frame {
+ msec: 2512
+ hash: "258ae87f78805c555e0ed802c5123eeb"
+ }
+ Frame {
+ msec: 2528
+ hash: "2e730872c37f118a03864d23ebf7bab3"
+ }
+ Frame {
+ msec: 2544
+ hash: "381386302f210932bc7d44247a48f13c"
+ }
+ Frame {
+ msec: 2560
+ hash: "306f8e6d183eb080da3375d65f2491f0"
+ }
+ Frame {
+ msec: 2576
+ hash: "39862f236aabf362d0a07ba64eb212e1"
+ }
+ Frame {
+ msec: 2592
+ hash: "57452ecfea80ebd4d9fd23f8efbb34f2"
+ }
+ Frame {
+ msec: 2608
+ hash: "64bd12d4f6e32f19abef79289673c2fe"
+ }
+ Frame {
+ msec: 2624
+ hash: "56340d636f4df7e5f68e84c1d8388429"
+ }
+ Frame {
+ msec: 2640
+ hash: "795cd97d4be294fa6157f23793861ec3"
+ }
+ Frame {
+ msec: 2656
+ hash: "4be9fd5314ad6721a0ddf5a5dc51ccee"
+ }
+ Frame {
+ msec: 2672
+ hash: "3349b775c329db022bf0414b9ed57466"
+ }
+ Frame {
+ msec: 2688
+ hash: "587b7070836063f9d138c4a4ee8da8bb"
+ }
+ Frame {
+ msec: 2704
+ hash: "5bb078819bef7695c9af1bd4b544a26a"
+ }
+ Frame {
+ msec: 2720
+ hash: "799c05999713e8b29f7d2917f515d2c2"
+ }
+ Frame {
+ msec: 2736
+ hash: "41bb926661acd8e21300f4933734748a"
+ }
+ Frame {
+ msec: 2752
+ hash: "2ead23d38a2f1834c7688a9657d9d7cc"
+ }
+ Frame {
+ msec: 2768
+ hash: "196309eac81adea21630dda19947ef5e"
+ }
+ Frame {
+ msec: 2784
+ hash: "cf414b2004712581f11f27890745c761"
+ }
+ Frame {
+ msec: 2800
+ hash: "6b2a6837da878fa8f3811b2045e098b1"
+ }
+ Frame {
+ msec: 2816
+ hash: "7390cfdef1d4bc194b86854b1947f15d"
+ }
+ Frame {
+ msec: 2832
+ hash: "9e4543fcf65a56edfbcaf46805343071"
+ }
+ Frame {
+ msec: 2848
+ hash: "3a886e2ed813eb7d44d0cd67eb5dee31"
+ }
+ Frame {
+ msec: 2864
+ hash: "625baed6cbf3a58b32060810be53d0b6"
+ }
+ Frame {
+ msec: 2880
+ image: "particles.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "484666ad104cee644c6a7e8ec0c4b10e"
+ }
+ Frame {
+ msec: 2912
+ hash: "41abe2e2d92b293407141d0333d7d04a"
+ }
+ Frame {
+ msec: 2928
+ hash: "953c03834bd3b50798b77c0c6bb0f4a8"
+ }
+ Frame {
+ msec: 2944
+ hash: "a076463868003c62df3ee5147ffd4660"
+ }
+ Frame {
+ msec: 2960
+ hash: "b389b5c9ed31816dd562a8f1332d28c9"
+ }
+ Frame {
+ msec: 2976
+ hash: "246706829939a2619d64fad63e424fdb"
+ }
+ Frame {
+ msec: 2992
+ hash: "d5e644f16bde52c566191a054a1279e5"
+ }
+ Frame {
+ msec: 3008
+ hash: "10b2e99d2e08939b75c24a6bbf481858"
+ }
+ Frame {
+ msec: 3024
+ hash: "732a7bb0009f394f0039e09594362c75"
+ }
+ Frame {
+ msec: 3040
+ hash: "261f38ce42a8a8c86daadd497ecfad07"
+ }
+ Frame {
+ msec: 3056
+ hash: "8b66ae6261db386d6c4e88d0146db090"
+ }
+ Frame {
+ msec: 3072
+ hash: "dc8dba79e4466059c29725084cf801bb"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicsparticles/particles.qml b/tests/auto/declarative/visual/qmlgraphicsparticles/particles.qml
new file mode 100644
index 0000000..2d481c9
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsparticles/particles.qml
@@ -0,0 +1,54 @@
+import Qt 4.6
+
+Rectangle {
+ width: 640; height: 480; color: "black"
+
+ Particles { id:particlesAnotEmitting
+ y:60; width: 260; height:30; source: "star.png";
+ lifeSpan:1000; count: 50; angle:70; angleDeviation:36;
+ velocity:30; velocityDeviation:10; emissionRate: 0
+ ParticleMotionWander { yvariance:5; xvariance:30; pace:100 }
+ }
+ Particles { id:particlesA
+ y:0; width: 260; height:30; source: "star.png";
+ lifeSpan:1000; count: 50; angle:70; angleDeviation:36;
+ velocity:30; velocityDeviation:10; emissionRate: 10
+ ParticleMotionWander { yvariance:5; xvariance:30; pace:100 }
+ }
+
+ Particles { id:particlesB
+ y:280; x:180; width:1; height:1; lifeSpan:1000; source: "star.png"
+ count: 100; angle:270; angleDeviation:45; velocity:50; velocityDeviation:30;
+ emissionRate: 0
+ ParticleMotionGravity { yattractor: 1000; xattractor:0; acceleration:25 }
+ }
+
+ Timer { running: true; interval: 1000; repeat: true; onTriggered: particlesB.burst(200, 2000); }
+
+ Column{
+ x: 340;
+ Repeater{
+ model: 5
+ delegate: Component{
+ Item{
+ width: 100; height: 100
+ Rectangle{
+ color: "blue"
+ width: 2; height: 2;
+ x: 49; y:49;
+ }
+ Particles{
+ x: 50; y:50; width: 0; height: 0;
+ fadeInDuration: 0; fadeOutDuration: 0
+ lifeSpan: 1000; lifeSpanDeviation:0;
+ source: "star.png"
+ count: -1; emissionRate: 120;
+ emissionVariance: index/2;
+ velocity: 250; velocityDeviation: 0;
+ angle: 0; angleDeviation: 0;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicsparticles/star.png b/tests/auto/declarative/visual/qmlgraphicsparticles/star.png
new file mode 100644
index 0000000..defbde5
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicsparticles/star.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.0.png b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.0.png
new file mode 100644
index 0000000..18c8a9e
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.1.png b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.1.png
new file mode 100644
index 0000000..e86acb4
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.2.png b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.2.png
new file mode 100644
index 0000000..17990b7
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.3.png b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.3.png
new file mode 100644
index 0000000..18c8a9e
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.4.png b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.4.png
new file mode 100644
index 0000000..18c8a9e
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.5.png b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.5.png
new file mode 100644
index 0000000..8636f8f
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.6.png b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.6.png
new file mode 100644
index 0000000..fa7c4b6
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.qml b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.qml
new file mode 100644
index 0000000..b8ff925
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview-2.qml
@@ -0,0 +1,2303 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 32
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 48
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 64
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 80
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 96
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 112
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 128
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 144
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 160
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 176
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 192
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 208
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 224
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 240
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 256
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 272
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 288
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 304
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 320
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 336
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 352
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 368
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 384
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 400
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 416
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 432
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 448
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 464
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 480
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 496
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 512
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 528
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 544
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 560
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 576
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 592
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 608
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 624
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 640
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 656
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 672
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 688
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 704
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 720
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 736
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 752
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 768
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 784
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 800
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 816
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 832
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 848
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 864
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 880
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 896
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 912
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 928
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 944
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 960
+ image: "test-pathview-2.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 992
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 1008
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 1024
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 1040
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 562; y: 250
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1056
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 557; y: 251
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1072
+ hash: "1ed6fa56736cf7cb2f99b5d362974463"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 544; y: 254
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1088
+ hash: "24f3dd6c49dd8b19cd0c387409405e18"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 534; y: 258
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1104
+ hash: "08c828e7fdfba4252fa7a9fb06eb728e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 511; y: 267
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1120
+ hash: "b76110faf8520f52128b5e1af8f2b838"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 499; y: 272
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1136
+ hash: "5f56acb5f39ac291cc8e73c0268df214"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 473; y: 281
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1152
+ hash: "840ee0c0d8ea94e22e783a15687f979d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 459; y: 285
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1168
+ hash: "69827007bbdf5a360ccc34a016315113"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 446; y: 288
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1184
+ hash: "2437beb8f9cb39b125611fb186bad820"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 433; y: 290
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 433; y: 290
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1200
+ hash: "df07c389b26fc191234c70b97bfaa432"
+ }
+ Frame {
+ msec: 1216
+ hash: "8d4e23f4e91d0e0df9d87c3171d5971f"
+ }
+ Frame {
+ msec: 1232
+ hash: "dd79837aefeabffa7184be07f2a98969"
+ }
+ Frame {
+ msec: 1248
+ hash: "2d9bb2aaf4b882902f090ff0c89053c8"
+ }
+ Frame {
+ msec: 1264
+ hash: "b1ec9adbb026d8002a7f16fe9a8d56d2"
+ }
+ Frame {
+ msec: 1280
+ hash: "43b23d6e1aeeb36350c3530650e9156f"
+ }
+ Frame {
+ msec: 1296
+ hash: "03f231597c4d5010ee71c74217f2483d"
+ }
+ Frame {
+ msec: 1312
+ hash: "8607c7412a5a1b4ea1522f28c465a83e"
+ }
+ Frame {
+ msec: 1328
+ hash: "671e80e290bec997eb36320ff76fdccf"
+ }
+ Frame {
+ msec: 1344
+ hash: "5f6717112bd45e5ebe194e0f87d12be6"
+ }
+ Frame {
+ msec: 1360
+ hash: "ca8e33c7a5428d70ae13cb64e5098a48"
+ }
+ Frame {
+ msec: 1376
+ hash: "86e60eb395f66bbaa1ec07b3e07013c0"
+ }
+ Frame {
+ msec: 1392
+ hash: "342fa6ddc02d0a793e97a79ba8882415"
+ }
+ Frame {
+ msec: 1408
+ hash: "a907fbcc47807d4eb6d66e070ea7f2de"
+ }
+ Frame {
+ msec: 1424
+ hash: "04838f8b495bed6d050cbe54d00aad31"
+ }
+ Frame {
+ msec: 1440
+ hash: "d485534916473ea6c4612230c5a95421"
+ }
+ Frame {
+ msec: 1456
+ hash: "1d3da7cc5b9120724645558584f2f0f3"
+ }
+ Frame {
+ msec: 1472
+ hash: "c271f057d5f1745e910b2b407c52a4f3"
+ }
+ Frame {
+ msec: 1488
+ hash: "050d1814a9ced514db6cfd2732eb76be"
+ }
+ Frame {
+ msec: 1504
+ hash: "cfcd21aadfe3fd611caad83920fb2432"
+ }
+ Frame {
+ msec: 1520
+ hash: "472f900ef8eef74522da3338ce7fa93e"
+ }
+ Frame {
+ msec: 1536
+ hash: "f9d892a81c6ba3b9fc4c6e76082d4fa7"
+ }
+ Frame {
+ msec: 1552
+ hash: "a3febe1c3c4585e25a410a91cc34c1fa"
+ }
+ Frame {
+ msec: 1568
+ hash: "74cd765c9d9a6fb243070b4a56a07e87"
+ }
+ Frame {
+ msec: 1584
+ hash: "469d324abbef017a99bc587bfae622b3"
+ }
+ Frame {
+ msec: 1600
+ hash: "6054ff6e658f0a5f5e313f0a724d9610"
+ }
+ Frame {
+ msec: 1616
+ hash: "67cee7ebe428c9d35f1f28274f3049d5"
+ }
+ Frame {
+ msec: 1632
+ hash: "ce6c3a1dd726eacbba6306e56121beef"
+ }
+ Frame {
+ msec: 1648
+ hash: "a7d5f703c98c0c8cd32b189a79e1fd05"
+ }
+ Frame {
+ msec: 1664
+ hash: "41cfd9982767ba904843fb73a5a0ed71"
+ }
+ Frame {
+ msec: 1680
+ hash: "388dcde17a820800237d1185372d889f"
+ }
+ Frame {
+ msec: 1696
+ hash: "3bd72585388f04d55900ccd345cd576e"
+ }
+ Frame {
+ msec: 1712
+ hash: "0e5c63b066f2b70000eca7f3aaa3a195"
+ }
+ Frame {
+ msec: 1728
+ hash: "15199f3e9f00afc76279b5bbffb78d92"
+ }
+ Frame {
+ msec: 1744
+ hash: "596ad681a3b96afbc284e3af5fd173cb"
+ }
+ Frame {
+ msec: 1760
+ hash: "e5ae2d0245fc5d74c6ea3f7dddd1ca2a"
+ }
+ Frame {
+ msec: 1776
+ hash: "0d152716f9ebe5f0fae3f5cabb20630f"
+ }
+ Frame {
+ msec: 1792
+ hash: "74afbfa464b0d19b53432fa4d5ea2804"
+ }
+ Frame {
+ msec: 1808
+ hash: "c8aa3f4738a8c07cdf2450a24c885ce6"
+ }
+ Frame {
+ msec: 1824
+ hash: "2e4e0003f1b1cb10593075862b972643"
+ }
+ Frame {
+ msec: 1840
+ hash: "acea518c7da7330ae78daf5fbfd1a423"
+ }
+ Frame {
+ msec: 1856
+ hash: "0b8d4ea6947b522c6aa9a32d9f16723e"
+ }
+ Frame {
+ msec: 1872
+ hash: "19f2aef82586817ef574a70865060997"
+ }
+ Frame {
+ msec: 1888
+ hash: "115565eb0ba3024dbf15d00ed242c389"
+ }
+ Frame {
+ msec: 1904
+ hash: "7e59425c85acf93f5bf55e139c148737"
+ }
+ Frame {
+ msec: 1920
+ image: "test-pathview-2.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "ce96601476cf55f665bef09bb1b038e2"
+ }
+ Frame {
+ msec: 1952
+ hash: "dc6eaacefe37fc709ac0bef99110f796"
+ }
+ Frame {
+ msec: 1968
+ hash: "82ad9b84425bd8e385524cb052a8fdd4"
+ }
+ Frame {
+ msec: 1984
+ hash: "608000b44ade998e225010d5ea562316"
+ }
+ Frame {
+ msec: 2000
+ hash: "ec6b4d519b7bafcf5293c2b5e6585007"
+ }
+ Frame {
+ msec: 2016
+ hash: "9895792ffa929ba6fc600949f11766b6"
+ }
+ Frame {
+ msec: 2032
+ hash: "0d2b27c9ca22520b269f93c90de08df4"
+ }
+ Frame {
+ msec: 2048
+ hash: "78a61e4565db709215b419aa56f6efab"
+ }
+ Frame {
+ msec: 2064
+ hash: "d6f2aebed062d093c00b27a52f0b14b8"
+ }
+ Frame {
+ msec: 2080
+ hash: "21b7a438ad1e835b84e5576e52abbe84"
+ }
+ Frame {
+ msec: 2096
+ hash: "703e32f43e9a71b8677d6839a0eafe06"
+ }
+ Frame {
+ msec: 2112
+ hash: "b04bea8af558de4120723fc5abd0f36c"
+ }
+ Frame {
+ msec: 2128
+ hash: "ac8e91c3b55e058ce8ff08ad6e3af9b6"
+ }
+ Frame {
+ msec: 2144
+ hash: "54846c8c70b232d05ff5eaf144f6f7d3"
+ }
+ Frame {
+ msec: 2160
+ hash: "52281806f5c80512b4bcab7f61139f74"
+ }
+ Frame {
+ msec: 2176
+ hash: "a352657ff34ef8962162c00647df343a"
+ }
+ Frame {
+ msec: 2192
+ hash: "3a0b12d1f8bf5cae8ac06289dd30d52a"
+ }
+ Frame {
+ msec: 2208
+ hash: "2c6bbcd05719f69b9a67be18de2084a6"
+ }
+ Frame {
+ msec: 2224
+ hash: "ab091484522587412b0e8aceeb8987ce"
+ }
+ Frame {
+ msec: 2240
+ hash: "13682b0d45bcbad0f011d08899085b1d"
+ }
+ Frame {
+ msec: 2256
+ hash: "3c5d6f82eafd1b04edfbcbffbdbe2177"
+ }
+ Frame {
+ msec: 2272
+ hash: "151803d70b7c3327df32c8602fcd677a"
+ }
+ Frame {
+ msec: 2288
+ hash: "78613cec5364fe3f0df84188793d8eac"
+ }
+ Frame {
+ msec: 2304
+ hash: "fc05a3cad43af35230c5ba89f6fd13c5"
+ }
+ Frame {
+ msec: 2320
+ hash: "9f826733b300c89eeb80452129505e8b"
+ }
+ Frame {
+ msec: 2336
+ hash: "8565efc5c1fb1bdf5629e3bd495bb611"
+ }
+ Frame {
+ msec: 2352
+ hash: "3b8f6e8c526ab8cce170277c378a5a69"
+ }
+ Frame {
+ msec: 2368
+ hash: "07db3bc0ab19e0ca829e89558bacf1a1"
+ }
+ Frame {
+ msec: 2384
+ hash: "ed8843024c6ac28a8c782839b362149c"
+ }
+ Frame {
+ msec: 2400
+ hash: "381a9f6564c090613aa2cd0476b95210"
+ }
+ Frame {
+ msec: 2416
+ hash: "c3fabd891fa8e27fd71df175db383667"
+ }
+ Frame {
+ msec: 2432
+ hash: "9b441792fdaa9ba9d340fc0c6a9c11bd"
+ }
+ Frame {
+ msec: 2448
+ hash: "3209c9ba69fa016370e3d56e7e1e37a4"
+ }
+ Frame {
+ msec: 2464
+ hash: "34da0a01453fbb2571b370257fd35f8e"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 591; y: 245
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 588; y: 245
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2480
+ hash: "32e6204a07c493d0a0f9f50773fe8f32"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 585; y: 245
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2496
+ hash: "2a1814768ae500ba9c24bc2e3e4de1d5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 582; y: 245
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2512
+ hash: "7cf6e3c52d12d590beafd061979a49cb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 574; y: 245
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 565; y: 246
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2528
+ hash: "c66c36642ab7f6c32b45e27de38d23b6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 553; y: 246
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2544
+ hash: "6e003380cc6fd303ae3b499863225ba5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 538; y: 246
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2560
+ hash: "a790259cea2c247493be58c6018435b9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 523; y: 247
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 523; y: 247
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2576
+ hash: "e6cce7468a27b5063821df8dbaa15c18"
+ }
+ Frame {
+ msec: 2592
+ hash: "ff8386cbe89aeac184f4a75237ef4a14"
+ }
+ Frame {
+ msec: 2608
+ hash: "1a11a90853b025837b991be40efb78f8"
+ }
+ Frame {
+ msec: 2624
+ hash: "17da10de7e2d2fcf125207e2873bdee8"
+ }
+ Frame {
+ msec: 2640
+ hash: "dfbda435d05903cc3a31f4f8f31e8985"
+ }
+ Frame {
+ msec: 2656
+ hash: "1f3753e809099f20c6289f150a096935"
+ }
+ Frame {
+ msec: 2672
+ hash: "9454afc9d70103e1f1c00eb0ad2ca534"
+ }
+ Frame {
+ msec: 2688
+ hash: "860ab90e2421a0c8faab304915b5e6f2"
+ }
+ Frame {
+ msec: 2704
+ hash: "600258507426a8c3c89e3591ee9328f1"
+ }
+ Frame {
+ msec: 2720
+ hash: "0795a607b893da2bdc0970195f3039fd"
+ }
+ Frame {
+ msec: 2736
+ hash: "e300b9109e242d85537fc3f4461eaf8e"
+ }
+ Frame {
+ msec: 2752
+ hash: "dbb84b38e2bda694f210f133dc133180"
+ }
+ Frame {
+ msec: 2768
+ hash: "2455e9de47da4db88eef35fea1dc2abe"
+ }
+ Frame {
+ msec: 2784
+ hash: "5f0c3d7e089c921a68813a48f0fd8844"
+ }
+ Frame {
+ msec: 2800
+ hash: "e6d9e7d0fdc724a6a1804bc94629cab4"
+ }
+ Frame {
+ msec: 2816
+ hash: "d177183bcbaa27ad061fd88bd037277d"
+ }
+ Frame {
+ msec: 2832
+ hash: "78dd13fa6367abd14374462d89a3d066"
+ }
+ Frame {
+ msec: 2848
+ hash: "41d12e4c362ccc99a1a04b3a09f0e68c"
+ }
+ Frame {
+ msec: 2864
+ hash: "5112700bf72aacb176e63ef054fce244"
+ }
+ Frame {
+ msec: 2880
+ image: "test-pathview-2.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "0257e67512c62ffc42a272fd304e4ed3"
+ }
+ Frame {
+ msec: 2912
+ hash: "42cd0a98aa0f3768cf77aac284072fa9"
+ }
+ Frame {
+ msec: 2928
+ hash: "811d27f89b0c434fc49e4280f85c2f27"
+ }
+ Frame {
+ msec: 2944
+ hash: "887406c50c666d08e4d98c040efae9a5"
+ }
+ Frame {
+ msec: 2960
+ hash: "27e10fa9d82920c7f761465501d44564"
+ }
+ Frame {
+ msec: 2976
+ hash: "ba67dbe0010ba2aae3ca100886b11553"
+ }
+ Frame {
+ msec: 2992
+ hash: "8064db575e2c74c0faf7782adc527a08"
+ }
+ Frame {
+ msec: 3008
+ hash: "b7fd5446ad957610ab853e0c597b9a36"
+ }
+ Frame {
+ msec: 3024
+ hash: "092b53eb50e91d74db7899328899cfd3"
+ }
+ Frame {
+ msec: 3040
+ hash: "0346065ad603b41db9365987ebe81586"
+ }
+ Frame {
+ msec: 3056
+ hash: "705083f27a338fea544c9806f0d8fcb3"
+ }
+ Frame {
+ msec: 3072
+ hash: "fc29b4888e26deec4c983e487b9bd058"
+ }
+ Frame {
+ msec: 3088
+ hash: "0ff734e0509908eba292c1814f677e5b"
+ }
+ Frame {
+ msec: 3104
+ hash: "7181d9011ddd3ad49ee95fac2e146b12"
+ }
+ Frame {
+ msec: 3120
+ hash: "4478b07b0331bb30e60f23ee74475f73"
+ }
+ Frame {
+ msec: 3136
+ hash: "514aa7a4b1230ae1701004f479eeb5f2"
+ }
+ Frame {
+ msec: 3152
+ hash: "56e51f8f36e0f1a5a4b6b21c41151375"
+ }
+ Frame {
+ msec: 3168
+ hash: "f58216f12e507a91482ded5372f960c7"
+ }
+ Frame {
+ msec: 3184
+ hash: "18e8675ca5ea7ade7e32b29f1632e1ff"
+ }
+ Frame {
+ msec: 3200
+ hash: "13ec0166cc7dd82042e596739c598a1e"
+ }
+ Frame {
+ msec: 3216
+ hash: "5cebf9afa912b17ac3161619d238e5da"
+ }
+ Frame {
+ msec: 3232
+ hash: "f096b191e347b7e2eab51b6adc1a5aac"
+ }
+ Frame {
+ msec: 3248
+ hash: "81cffc13a615ab673172912760863c08"
+ }
+ Frame {
+ msec: 3264
+ hash: "e89c7acfc07bc0eb6e9740d545400064"
+ }
+ Frame {
+ msec: 3280
+ hash: "e681f06f57d43a38acb29a3cb45e4384"
+ }
+ Frame {
+ msec: 3296
+ hash: "945bfe7808fb620dc3f7ad887183244c"
+ }
+ Frame {
+ msec: 3312
+ hash: "4d1fc53701adce4e4af87c32e6c5a8de"
+ }
+ Frame {
+ msec: 3328
+ hash: "c42bbf27e800558fab33bc6e9a0f36b9"
+ }
+ Frame {
+ msec: 3344
+ hash: "5f48f59812b17a9be466f0601f0ed0df"
+ }
+ Frame {
+ msec: 3360
+ hash: "f3a3f645115077b7aeb66465280b7a16"
+ }
+ Frame {
+ msec: 3376
+ hash: "d1c295b2157001ff1020515f4b2aceaa"
+ }
+ Frame {
+ msec: 3392
+ hash: "e5f364e0e4bd75dd04280f6b6f48b8ba"
+ }
+ Frame {
+ msec: 3408
+ hash: "f439df4b5907ba0201c0dad934115721"
+ }
+ Frame {
+ msec: 3424
+ hash: "2e7eb0e999792f3aa87c63865f68d26b"
+ }
+ Frame {
+ msec: 3440
+ hash: "45d3ccb3b03adc8323445207d2dca502"
+ }
+ Frame {
+ msec: 3456
+ hash: "c345f92a25406e33256bfe47dc7f72f3"
+ }
+ Frame {
+ msec: 3472
+ hash: "dcb2663d27d644c0b50aa7386aa9d488"
+ }
+ Frame {
+ msec: 3488
+ hash: "ebe4b9eaf39676bcdd968f8517efa222"
+ }
+ Frame {
+ msec: 3504
+ hash: "deb3e3e6fdf8fe18de907f88822538e8"
+ }
+ Frame {
+ msec: 3520
+ hash: "30e8ab0e6cf32a45190c4b29e458d858"
+ }
+ Frame {
+ msec: 3536
+ hash: "059e6f57c2c78a25ab8b515c878231f9"
+ }
+ Frame {
+ msec: 3552
+ hash: "fa7621f338ae187edac5cb69b22e64b3"
+ }
+ Frame {
+ msec: 3568
+ hash: "bf287cbb0963fc8e575cd95808e1983d"
+ }
+ Frame {
+ msec: 3584
+ hash: "741dc09e0ae13d6afbdaae701cb699ef"
+ }
+ Frame {
+ msec: 3600
+ hash: "8dd52007df5585aed4b9737a8314a74d"
+ }
+ Frame {
+ msec: 3616
+ hash: "ddcd945a3a4467d8dd0b7a4197aafed5"
+ }
+ Frame {
+ msec: 3632
+ hash: "015deb5f228fa2f77978315ccca4f4c8"
+ }
+ Frame {
+ msec: 3648
+ hash: "e1c960e966873e694837fd98f231cfcb"
+ }
+ Frame {
+ msec: 3664
+ hash: "17a177d37b427d9488e36d19b345a397"
+ }
+ Frame {
+ msec: 3680
+ hash: "d4aded08d04f79d50536ecf539c0583d"
+ }
+ Frame {
+ msec: 3696
+ hash: "72890e9b84acf9df6083e23ab9270da1"
+ }
+ Frame {
+ msec: 3712
+ hash: "313859115de570f8d41f67c4db7cf49e"
+ }
+ Frame {
+ msec: 3728
+ hash: "98918d73b6d6b375db53470dd72c7b35"
+ }
+ Frame {
+ msec: 3744
+ hash: "ff706517a4d257747893c11a3b059926"
+ }
+ Frame {
+ msec: 3760
+ hash: "73e62664a31232c1a349568c8da6ce64"
+ }
+ Frame {
+ msec: 3776
+ hash: "bed046c6eae90d267e859cd76d3eacfb"
+ }
+ Frame {
+ msec: 3792
+ hash: "4643348fc1b47f0d3244e7e717247953"
+ }
+ Frame {
+ msec: 3808
+ hash: "0305bfc35b5618da19e9eabb3c1b5d2b"
+ }
+ Frame {
+ msec: 3824
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 3840
+ image: "test-pathview-2.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 3872
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 3888
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 3904
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 3920
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 3936
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 3952
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 3968
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 3984
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4000
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4016
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 305; y: 280
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4032
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 305; y: 281
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4048
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 306; y: 281
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4064
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 308; y: 281
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4080
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 310; y: 282
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4096
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 313; y: 283
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 317; y: 283
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4112
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 321; y: 283
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4128
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 328; y: 283
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4144
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 341; y: 283
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 347; y: 282
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4160
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 360; y: 281
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4176
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 385; y: 282
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4192
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 433; y: 292
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 486; y: 307
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4208
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 538; y: 322
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4224
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 588; y: 336
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4240
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 620; y: 343
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 677; y: 354
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4256
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 733; y: 362
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4272
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 785; y: 365
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4288
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 830; y: 365
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 861; y: 357
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4304
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 879; y: 346
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4320
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 888; y: 335
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4336
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 893; y: 326
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 893; y: 326
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4352
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4368
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4384
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4400
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4416
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4432
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4448
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4464
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4480
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4496
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4512
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4528
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4544
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4560
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4576
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4592
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4608
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4624
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4640
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4656
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4672
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4688
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4704
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4720
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4736
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4752
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4768
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4784
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4800
+ image: "test-pathview-2.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4832
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4848
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4864
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4880
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4896
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4912
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4928
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4944
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4960
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4976
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 4992
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5008
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5024
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5040
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5056
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5072
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5088
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5104
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5120
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5136
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5152
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5168
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5184
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5200
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5216
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5232
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5248
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5264
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5280
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5296
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5312
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5328
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5344
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5360
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Frame {
+ msec: 5376
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 242; y: 280
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5392
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 244; y: 280
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 246; y: 281
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5408
+ hash: "754f9689239e6154a762a6a1e9e0131b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 251; y: 282
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5424
+ hash: "ba4e61f8de7f078cfc1e5fc8dd3c65f3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 261; y: 282
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5440
+ hash: "00389598468dbd1a90cada9543715770"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 300; y: 279
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5456
+ hash: "ab020b76bc23554e176bd3a59712c3bc"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 350; y: 282
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5472
+ hash: "96483c5c51cc851c55166b13617b12ea"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 417; y: 290
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5488
+ hash: "1ad679d1400a0f185a380a75840c6a50"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 500; y: 300
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 585; y: 309
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5504
+ hash: "b5ed338d402d16a831c0595311350789"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 669; y: 315
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 669; y: 315
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5520
+ hash: "bf51ff7b6f264170d9c5700559e03262"
+ }
+ Frame {
+ msec: 5536
+ hash: "0d62681e661aad7b67b880e13afeb4de"
+ }
+ Frame {
+ msec: 5552
+ hash: "3371739270c458d4ce8a08f2e12d4ba5"
+ }
+ Frame {
+ msec: 5568
+ hash: "db271b0ebfa0172d8386ac9afde9f296"
+ }
+ Frame {
+ msec: 5584
+ hash: "d64c064ab483c9636b2736c67b2b1a48"
+ }
+ Frame {
+ msec: 5600
+ hash: "20a8ccb0ff1c0d5ff606b343f1a32bff"
+ }
+ Frame {
+ msec: 5616
+ hash: "5547bb0a4d6b51733829597b9d8d141a"
+ }
+ Frame {
+ msec: 5632
+ hash: "1135177a5cb24aa11372653985599775"
+ }
+ Frame {
+ msec: 5648
+ hash: "5031ea6ca8ec59155edb7c1f10f77925"
+ }
+ Frame {
+ msec: 5664
+ hash: "7c5c1015af23f32c002a24a880201883"
+ }
+ Frame {
+ msec: 5680
+ hash: "c1dd3ad07775d74d2e81b830d07543e0"
+ }
+ Frame {
+ msec: 5696
+ hash: "ad6651f644be3c6f1ebf340809fe516f"
+ }
+ Frame {
+ msec: 5712
+ hash: "1eb69541ae67d9d9193b86a6592de4c2"
+ }
+ Frame {
+ msec: 5728
+ hash: "c9c40ec693a421243804efb8f99707f4"
+ }
+ Frame {
+ msec: 5744
+ hash: "832884a5102069ca085001156a04e74e"
+ }
+ Frame {
+ msec: 5760
+ image: "test-pathview-2.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "df0c7d73069e1087d34c7a703197cb2a"
+ }
+ Frame {
+ msec: 5792
+ hash: "4a8e1f548e48b86140aa1a5fa8b17bd3"
+ }
+ Frame {
+ msec: 5808
+ hash: "f79f47e3a0c16a1361fa287a594c4673"
+ }
+ Frame {
+ msec: 5824
+ hash: "c26da5ed2e4055f5c172b48163560143"
+ }
+ Frame {
+ msec: 5840
+ hash: "0e971cd0c2e25d52b689d4b22509a7d9"
+ }
+ Frame {
+ msec: 5856
+ hash: "40bae0ef35772c476cddccc034b7c872"
+ }
+ Frame {
+ msec: 5872
+ hash: "ce1fc0faae5e313bc21e024dac3097da"
+ }
+ Frame {
+ msec: 5888
+ hash: "ba614972cec0e9fa47cb09f1ba77eefb"
+ }
+ Frame {
+ msec: 5904
+ hash: "2266ae29490ae01ff8a2329956c124a7"
+ }
+ Frame {
+ msec: 5920
+ hash: "debae0194926cb5af0a8f7fdfb7f08b8"
+ }
+ Frame {
+ msec: 5936
+ hash: "10a7111367cfcbe24063b9ee6975e4fc"
+ }
+ Frame {
+ msec: 5952
+ hash: "3c0f9e0603e33506f31ff6569d007b97"
+ }
+ Frame {
+ msec: 5968
+ hash: "69d92abce3f093cc7610bd715a7396fa"
+ }
+ Frame {
+ msec: 5984
+ hash: "befad9882a6af920684d94c74d8d7f78"
+ }
+ Frame {
+ msec: 6000
+ hash: "10632052ac53504bd36687ba7aa7ebc1"
+ }
+ Frame {
+ msec: 6016
+ hash: "af4053320c12cbcc6f0e7e321dba1c83"
+ }
+ Frame {
+ msec: 6032
+ hash: "4560c5fcef9d630d744e80dc46947b9d"
+ }
+ Frame {
+ msec: 6048
+ hash: "012ee780ed98131321aaa241a2599c5f"
+ }
+ Frame {
+ msec: 6064
+ hash: "25d3fb9d44bc2be3b86a5451d8ffaec2"
+ }
+ Frame {
+ msec: 6080
+ hash: "09c5cbff81a5c9fae40ec29b936ee52b"
+ }
+ Frame {
+ msec: 6096
+ hash: "27a0b1d2ea2fc8729e5542c6462c1815"
+ }
+ Frame {
+ msec: 6112
+ hash: "c6f347c942aed190ebee077b5bd0888c"
+ }
+ Frame {
+ msec: 6128
+ hash: "029d78844bd72acb310bd2887489bdf0"
+ }
+ Frame {
+ msec: 6144
+ hash: "3af16ab398f1515e90e81460ac061a74"
+ }
+ Frame {
+ msec: 6160
+ hash: "0151ca050722645e2899919f79f6aa0b"
+ }
+ Frame {
+ msec: 6176
+ hash: "eead61dfc1851bc9fba3b4bca510af6a"
+ }
+ Frame {
+ msec: 6192
+ hash: "da822098c606556ad8683316f5a821ab"
+ }
+ Frame {
+ msec: 6208
+ hash: "ee47fc2bcf2264f5799a76308fbf2b65"
+ }
+ Frame {
+ msec: 6224
+ hash: "81b208b84ca887d35cda79b5c0e4cd4e"
+ }
+ Frame {
+ msec: 6240
+ hash: "fd52ccaddcb79a2dfa12bb57640a3610"
+ }
+ Frame {
+ msec: 6256
+ hash: "b187e8fcd0a777657a733c260aaaf557"
+ }
+ Frame {
+ msec: 6272
+ hash: "2cfe47a86bf9df3704002288b6249ed9"
+ }
+ Frame {
+ msec: 6288
+ hash: "b79b81706f62789a15557ac1a017addf"
+ }
+ Frame {
+ msec: 6304
+ hash: "77a84eb447fe7034783678f6903ff76d"
+ }
+ Frame {
+ msec: 6320
+ hash: "82529385d3072812fa737193914ece1c"
+ }
+ Frame {
+ msec: 6336
+ hash: "a7ccfa6c8aebf2016f2f12045d2f1abe"
+ }
+ Frame {
+ msec: 6352
+ hash: "486d38e7ea6a5cf13f2ecd1c6919ece7"
+ }
+ Frame {
+ msec: 6368
+ hash: "6c5bd377d2289ec88f969e961f1dcf65"
+ }
+ Frame {
+ msec: 6384
+ hash: "92e20565fbcf8c7c9a67726f3a0dd41f"
+ }
+ Frame {
+ msec: 6400
+ hash: "0fcd995a26262b875440d0d9f03d16c4"
+ }
+ Frame {
+ msec: 6416
+ hash: "f679759eddca739764bd2816ee53ef31"
+ }
+ Frame {
+ msec: 6432
+ hash: "adffd1da9b750df3d9f48820a2235c0b"
+ }
+ Frame {
+ msec: 6448
+ hash: "e0f8730acf7a6802ade228f95d700c08"
+ }
+ Frame {
+ msec: 6464
+ hash: "2c5209c3715bb9f39ac23a8b32a17ef9"
+ }
+ Frame {
+ msec: 6480
+ hash: "741694ef4cbd3477a8e13ba89fc9d607"
+ }
+ Frame {
+ msec: 6496
+ hash: "e88d6a61acb3fde6b441c2e718a0c2fb"
+ }
+ Frame {
+ msec: 6512
+ hash: "b91863800e6ab967616d68def388d5d5"
+ }
+ Frame {
+ msec: 6528
+ hash: "4c28a99236c351a2e3e3301c0b5bbba8"
+ }
+ Frame {
+ msec: 6544
+ hash: "6affb524d7f63fef94d29629a148be04"
+ }
+ Frame {
+ msec: 6560
+ hash: "f7823d25adf673117f010738d977b787"
+ }
+ Frame {
+ msec: 6576
+ hash: "dfb930f3db30ec53c8e9a1aa5d9056e4"
+ }
+ Frame {
+ msec: 6592
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6608
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6624
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6640
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6656
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6672
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6688
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6704
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6720
+ image: "test-pathview-2.6.png"
+ }
+ Frame {
+ msec: 6736
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6752
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6768
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6784
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6800
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6816
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6832
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6848
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6864
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6880
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6896
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6912
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6928
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6944
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6960
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6976
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 6992
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 7008
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 7024
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 7040
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 7056
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 7072
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 7088
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 7104
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 7120
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 7136
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 7152
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 7168
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 7184
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 7200
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 7216
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 7232
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 7248
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+ Frame {
+ msec: 7264
+ hash: "57269234dc01b66f6aeb841c328c06b5"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.0.png b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.0.png
new file mode 100644
index 0000000..442ba9f
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.1.png b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.1.png
new file mode 100644
index 0000000..a9ff20f
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.2.png b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.2.png
new file mode 100644
index 0000000..157bb99
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.3.png b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.3.png
new file mode 100644
index 0000000..8c49acb
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.4.png b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.4.png
new file mode 100644
index 0000000..eb2bf54
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.qml b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.qml
new file mode 100644
index 0000000..8cff5c6
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspathview/data/test-pathview.qml
@@ -0,0 +1,1495 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 32
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 48
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 64
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 80
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 96
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 112
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 128
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 144
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 160
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 176
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 192
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 208
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 224
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 240
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 256
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 272
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 288
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 304
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 320
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 336
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 352
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 368
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 384
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 400
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 416
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 432
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 448
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 464
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 480
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 496
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 512
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 528
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 544
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 560
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 576
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 592
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 608
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 624
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 640
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 656
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 672
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 688
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 704
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 720
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 736
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 752
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 768
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 784
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 800
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 816
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 832
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 848
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 864
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 880
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 896
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 912
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 928
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 944
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 960
+ image: "test-pathview.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 992
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 1008
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 1024
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 1040
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 1056
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 1072
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 1088
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 1104
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 1120
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 1136
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 734; y: 177
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1152
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Frame {
+ msec: 1168
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 732; y: 177
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1184
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 726; y: 179
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1200
+ hash: "89bb697bb7b7fab38d3ff56e23e43959"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 716; y: 183
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1216
+ hash: "42c141399fda1cbb2ae117788d87092a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 700; y: 190
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1232
+ hash: "4d44343eb91838e3eb73e2e5326b5ac2"
+ }
+ Frame {
+ msec: 1248
+ hash: "4d44343eb91838e3eb73e2e5326b5ac2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 677; y: 200
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1264
+ hash: "15aaccb4f7961a4e3e6fe57260779d00"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 651; y: 209
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1280
+ hash: "5628fa3ac9893f5c9690013aad4b881a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 619; y: 219
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1296
+ hash: "384db58b6de773ac39ae81e6af4d547d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 579; y: 229
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1312
+ hash: "2a15a27a138b9d3d646b827d026e8843"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 535; y: 237
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 535; y: 237
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1328
+ hash: "098176f48a148eb2bc5ef67c307baa1c"
+ }
+ Frame {
+ msec: 1344
+ hash: "f838ab4301bf9d3106cec529f855cecd"
+ }
+ Frame {
+ msec: 1360
+ hash: "9725322067a04f83717b059d4970d610"
+ }
+ Frame {
+ msec: 1376
+ hash: "3605cfbebc3a9eb4460efb2d4b9b6da2"
+ }
+ Frame {
+ msec: 1392
+ hash: "4503a368d8db25d112503dbc3934541d"
+ }
+ Frame {
+ msec: 1408
+ hash: "80894cc06c82264bf527398ea235da12"
+ }
+ Frame {
+ msec: 1424
+ hash: "d4f9b90f886fc667309b33c9a296410c"
+ }
+ Frame {
+ msec: 1440
+ hash: "889d01025cff679b61bff182a1ac9cbc"
+ }
+ Frame {
+ msec: 1456
+ hash: "6147bc4455e7cb5ae55cd47be8dc4ad6"
+ }
+ Frame {
+ msec: 1472
+ hash: "ddd10a294eb6b19698c4e9fe4f1508fe"
+ }
+ Frame {
+ msec: 1488
+ hash: "748e8d9c1971f6258acee5133b7f114b"
+ }
+ Frame {
+ msec: 1504
+ hash: "1ef3f32ec9ef950588266bacbe3554a0"
+ }
+ Frame {
+ msec: 1520
+ hash: "57853ff47b65aba9e76f90b2efec4f8f"
+ }
+ Frame {
+ msec: 1536
+ hash: "3985fea21d89d223c1461d5e96364c76"
+ }
+ Frame {
+ msec: 1552
+ hash: "cb5f6a3caeeaed12e91efe43867f2c1f"
+ }
+ Frame {
+ msec: 1568
+ hash: "cdd4176776d5969373e0fc9a117e3c87"
+ }
+ Frame {
+ msec: 1584
+ hash: "3bac2e7506472db2ae11734240f1c3f4"
+ }
+ Frame {
+ msec: 1600
+ hash: "bb572659d79ebda7134c039e40cf2633"
+ }
+ Frame {
+ msec: 1616
+ hash: "e610181bfa17a85281f9c7417088f04f"
+ }
+ Frame {
+ msec: 1632
+ hash: "eb23ff021909589b6d8ce47ebff2c3ed"
+ }
+ Frame {
+ msec: 1648
+ hash: "c321dda3878c4b97cc63246c47368224"
+ }
+ Frame {
+ msec: 1664
+ hash: "6a65cdfd50e1455356040d4cbc09905e"
+ }
+ Frame {
+ msec: 1680
+ hash: "f2a44b12e4e5bae8283c4d227949e4e8"
+ }
+ Frame {
+ msec: 1696
+ hash: "55418d661f3257b5b79a7dbb172b5b70"
+ }
+ Frame {
+ msec: 1712
+ hash: "483d7111c86951918746d6ebe0dd9655"
+ }
+ Frame {
+ msec: 1728
+ hash: "85c83ac3a294a9320bb04a6721ecf7d5"
+ }
+ Frame {
+ msec: 1744
+ hash: "0d658b897b8e03397ddd8ffe475c2fc0"
+ }
+ Frame {
+ msec: 1760
+ hash: "6ed9d7ea344b3c1b1d9196ee36b2f89a"
+ }
+ Frame {
+ msec: 1776
+ hash: "6a1e7f6c03769c2c88e6343fb6c1a2a4"
+ }
+ Frame {
+ msec: 1792
+ hash: "9dc51f46e072eac4494d7318f2ecb39b"
+ }
+ Frame {
+ msec: 1808
+ hash: "59e833981c3fcd8a71f4a16d1c454b3a"
+ }
+ Frame {
+ msec: 1824
+ hash: "29b953efdda00548d8cf6fb49fa60d13"
+ }
+ Frame {
+ msec: 1840
+ hash: "fd4611f703f94ebefcc64781993ca85c"
+ }
+ Frame {
+ msec: 1856
+ hash: "aa4789ede618963157b40f099ce84987"
+ }
+ Frame {
+ msec: 1872
+ hash: "8a326b46ec536a67626ee2d2bc06aa9f"
+ }
+ Frame {
+ msec: 1888
+ hash: "011ff557672d47591e4f0f5c5ee418f1"
+ }
+ Frame {
+ msec: 1904
+ hash: "d72fba857bdc128ddcb5971b86aadcb2"
+ }
+ Frame {
+ msec: 1920
+ image: "test-pathview.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "49182b7ae9ef5fb4b9234969abd05960"
+ }
+ Frame {
+ msec: 1952
+ hash: "53de60f682574b7a9e6ffaee175fc9ff"
+ }
+ Frame {
+ msec: 1968
+ hash: "2de74fe5b8848c5c781b796146871f45"
+ }
+ Frame {
+ msec: 1984
+ hash: "33c87146d8c24dd9c2271d16a8ff5b53"
+ }
+ Frame {
+ msec: 2000
+ hash: "fdb29214e20d744d9776907061f50358"
+ }
+ Frame {
+ msec: 2016
+ hash: "8c7c920416c9b775e790e6da24c32927"
+ }
+ Frame {
+ msec: 2032
+ hash: "86b456059e4701379447fffaf9e072f0"
+ }
+ Frame {
+ msec: 2048
+ hash: "f92cc485ee03ef5bce3c4cdc35e00318"
+ }
+ Frame {
+ msec: 2064
+ hash: "2fad58883cb20273cfd79ebca345a66d"
+ }
+ Frame {
+ msec: 2080
+ hash: "84505ebbc6e12817f11f64aa6f61a0bf"
+ }
+ Frame {
+ msec: 2096
+ hash: "ded83cacb89838cc0f3ba14bcc69b66b"
+ }
+ Frame {
+ msec: 2112
+ hash: "5bb37e75bb45eaa6067c604b83ae13d7"
+ }
+ Frame {
+ msec: 2128
+ hash: "4ee9e4c90c40dbc25a0ce884d9c2c37f"
+ }
+ Frame {
+ msec: 2144
+ hash: "cb7148ff6f611038c29af36c8552b8c2"
+ }
+ Frame {
+ msec: 2160
+ hash: "a591d8cb42570272dd264d5f1ce595ab"
+ }
+ Frame {
+ msec: 2176
+ hash: "4e61657405d32dbcd39d3637f8af0958"
+ }
+ Frame {
+ msec: 2192
+ hash: "9c7c1411dd5d3c1c8fb78e63e14061fe"
+ }
+ Frame {
+ msec: 2208
+ hash: "ae83a37e99b578fa0872ed6bc2776bc0"
+ }
+ Frame {
+ msec: 2224
+ hash: "e8cb5a8a40c1e78c87c616f77d8de270"
+ }
+ Frame {
+ msec: 2240
+ hash: "9df093e4bcfa32be5924a0ca70bdaa3b"
+ }
+ Frame {
+ msec: 2256
+ hash: "40c358066d508143bee1446d12fe7b89"
+ }
+ Frame {
+ msec: 2272
+ hash: "a929ed6efc7fc68b38635f3c74242f52"
+ }
+ Frame {
+ msec: 2288
+ hash: "86ff721a3178b689ea47b6bc274a2b41"
+ }
+ Frame {
+ msec: 2304
+ hash: "ed1f680f6d05f54ceb75c9bae3a0716a"
+ }
+ Frame {
+ msec: 2320
+ hash: "3f09a565df2beb51f366a1b3fb6adfe9"
+ }
+ Frame {
+ msec: 2336
+ hash: "13468347bd26bab60f1db826fb17631c"
+ }
+ Frame {
+ msec: 2352
+ hash: "9f7d085fea5788a457098973f17c36cb"
+ }
+ Frame {
+ msec: 2368
+ hash: "4114b93246155b3434200831b2995330"
+ }
+ Frame {
+ msec: 2384
+ hash: "487171bd1430f74e3d51b5e215c34b5c"
+ }
+ Frame {
+ msec: 2400
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2416
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2432
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2448
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2464
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2480
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2496
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2512
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2528
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2544
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2560
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2576
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2592
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2608
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2624
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2640
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2656
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2672
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2688
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2704
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2720
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2736
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2752
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2768
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2784
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2800
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2816
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2832
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2848
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2864
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2880
+ image: "test-pathview.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2912
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2928
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2944
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2960
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2976
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 2992
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 3008
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 3024
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 3040
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 3056
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 3072
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 3088
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 728; y: 181
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3104
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 3120
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Frame {
+ msec: 3136
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 727; y: 181
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3152
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 723; y: 181
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3168
+ hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 717; y: 184
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3184
+ hash: "6dcec6cdaa35eba74607ba64d6ea2ec0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 705; y: 188
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3200
+ hash: "16b7b4847fe86b25d8d6136106a4c400"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 686; y: 197
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3216
+ hash: "d946d55b19c99fa25bf1c04f2b71026a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 661; y: 207
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3232
+ hash: "96f40f5071365cde769c733fd1ef5a24"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 626; y: 221
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3248
+ hash: "7004058b95b7eab3ebba5c80c0923982"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 582; y: 235
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3264
+ hash: "2c78880237c414182f97f1709f1eef0f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 532; y: 246
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3280
+ hash: "c90a15ec9f88008ca8b0ec0185444d71"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 532; y: 246
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3296
+ hash: "c90a15ec9f88008ca8b0ec0185444d71"
+ }
+ Frame {
+ msec: 3312
+ hash: "36461e2a4cd860cac32223b8ee73c657"
+ }
+ Frame {
+ msec: 3328
+ hash: "5f9b3ad9202fb02a4c6fea28c248ad22"
+ }
+ Frame {
+ msec: 3344
+ hash: "d0d23c4e1ddb2d9ffa0ecc38030ae15c"
+ }
+ Frame {
+ msec: 3360
+ hash: "8e2e2d3eaf557c453f34016b6614e495"
+ }
+ Frame {
+ msec: 3376
+ hash: "7402c747fa7276293a0a72d48d342782"
+ }
+ Frame {
+ msec: 3392
+ hash: "6090c30e4d722a32c083a25171fb11ff"
+ }
+ Frame {
+ msec: 3408
+ hash: "f770d940cf287fec4b0803f7310292a8"
+ }
+ Frame {
+ msec: 3424
+ hash: "558e4ce32df69357b70a8285b00fe347"
+ }
+ Frame {
+ msec: 3440
+ hash: "8814168503c9a72ea8d3fa1e503f33d9"
+ }
+ Frame {
+ msec: 3456
+ hash: "6f5513d22e545096fadc6f5c4112902e"
+ }
+ Frame {
+ msec: 3472
+ hash: "43f11d8ac16fd3e8199e555528817e14"
+ }
+ Frame {
+ msec: 3488
+ hash: "d64bafdbd26878a323dae918d5e0a36d"
+ }
+ Frame {
+ msec: 3504
+ hash: "1c70bdddfc3751ae3864f008170f8b06"
+ }
+ Frame {
+ msec: 3520
+ hash: "bb7a18691fcd371e9d382b5bba4a0573"
+ }
+ Frame {
+ msec: 3536
+ hash: "547e15f5dea2d9aa3ed44640b25028b9"
+ }
+ Frame {
+ msec: 3552
+ hash: "c11b86a256fac6be10b9a54564903d6f"
+ }
+ Frame {
+ msec: 3568
+ hash: "0ada2dc586894d5e37de2632d2b37b15"
+ }
+ Frame {
+ msec: 3584
+ hash: "0ae1a39ea196a0e734d80dbdea67b285"
+ }
+ Frame {
+ msec: 3600
+ hash: "3cb70e64f9ab8aad841326dc2d2f1615"
+ }
+ Frame {
+ msec: 3616
+ hash: "a8f8b5ff19df9163ea628b589b675a5e"
+ }
+ Frame {
+ msec: 3632
+ hash: "26fcc73f477db0ea731bc18b00b4c791"
+ }
+ Frame {
+ msec: 3648
+ hash: "8702e49f3f26e1e21970e78c8aa4040a"
+ }
+ Frame {
+ msec: 3664
+ hash: "1a482a39d02779d8733e348b713f2312"
+ }
+ Frame {
+ msec: 3680
+ hash: "c728cc4a8e4d0a8d983514f86a92eae0"
+ }
+ Frame {
+ msec: 3696
+ hash: "82360ab373b08bf6a5d9e9ea9d0d18aa"
+ }
+ Frame {
+ msec: 3712
+ hash: "6231a4bce6cfc1e26a9606cc041acdbc"
+ }
+ Frame {
+ msec: 3728
+ hash: "6e3b48862fc749f15aa2dec1c17d1de0"
+ }
+ Frame {
+ msec: 3744
+ hash: "6c9e79a5692a3810b2a9058790f54cd7"
+ }
+ Frame {
+ msec: 3760
+ hash: "0652c67fedda0d5e55858ddefff2da9e"
+ }
+ Frame {
+ msec: 3776
+ hash: "3b058c0efeb3a9da54a1de72a1792a83"
+ }
+ Frame {
+ msec: 3792
+ hash: "96e6fb39c8dbfe4a00bf116bf80aac4d"
+ }
+ Frame {
+ msec: 3808
+ hash: "979c0c78c41e0f337cfe1b384fbbe51a"
+ }
+ Frame {
+ msec: 3824
+ hash: "8be0d6987a6d12864f30336b249e4b16"
+ }
+ Frame {
+ msec: 3840
+ image: "test-pathview.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "31e665f804a52a4dc88eab5dba78ae5a"
+ }
+ Frame {
+ msec: 3872
+ hash: "b7d4cf5a6a3ac79da3be101b50b38bc2"
+ }
+ Frame {
+ msec: 3888
+ hash: "559b1b8467b611cdeb7f2ae660e3bf51"
+ }
+ Frame {
+ msec: 3904
+ hash: "66abb5af85e793569382efb04744d0de"
+ }
+ Frame {
+ msec: 3920
+ hash: "b64eff8bbea5a953d146333363825724"
+ }
+ Frame {
+ msec: 3936
+ hash: "47b794c971c4d47baf15e1d63d65ac03"
+ }
+ Frame {
+ msec: 3952
+ hash: "b3882fa14f3cb7428c660737656d7ea2"
+ }
+ Frame {
+ msec: 3968
+ hash: "a6bd71c7d3a0f3f53674ea8e1334e560"
+ }
+ Frame {
+ msec: 3984
+ hash: "0926d3cd53aabb789686e34d91ef23dc"
+ }
+ Frame {
+ msec: 4000
+ hash: "914c4fa7264111b4a42c82a60701d652"
+ }
+ Frame {
+ msec: 4016
+ hash: "84c1fa22440a61126b79c38605b6f9ca"
+ }
+ Frame {
+ msec: 4032
+ hash: "b684fcf9f4725cfc02af0187454dfaf8"
+ }
+ Frame {
+ msec: 4048
+ hash: "2e94c1ca74af4eb836a0c505d131f263"
+ }
+ Frame {
+ msec: 4064
+ hash: "5f04912674e1bcdb16176976d10ce995"
+ }
+ Frame {
+ msec: 4080
+ hash: "aaf0bcef4a15aa1c699eaa1ce817c8ed"
+ }
+ Frame {
+ msec: 4096
+ hash: "97fd5bdcfa367191fbd3689658ab3273"
+ }
+ Frame {
+ msec: 4112
+ hash: "d76d6c59411636a0e9ac2e0c847b3fe3"
+ }
+ Frame {
+ msec: 4128
+ hash: "9cb88a76c962623b1a9cf4e7093d6e54"
+ }
+ Frame {
+ msec: 4144
+ hash: "ec3d7075680296905b1bdd6fdd9fcc40"
+ }
+ Frame {
+ msec: 4160
+ hash: "43c70dabc45ed059e8b876eb2ba5c66e"
+ }
+ Frame {
+ msec: 4176
+ hash: "8f97ca5c3092a20009c5d00139105a22"
+ }
+ Frame {
+ msec: 4192
+ hash: "d0f225d4b03495218f7916698e254338"
+ }
+ Frame {
+ msec: 4208
+ hash: "f8725467353a8f27bc5570af157c93c7"
+ }
+ Frame {
+ msec: 4224
+ hash: "749c8ca5c0a7774c81805b792e6b70e3"
+ }
+ Frame {
+ msec: 4240
+ hash: "d353c4a8a5eecb1dce30f4a5b85b1ef4"
+ }
+ Frame {
+ msec: 4256
+ hash: "a7105f3f1ddace730d0b4a12a3560208"
+ }
+ Frame {
+ msec: 4272
+ hash: "918f480af8a35f6074ff1e202dae2660"
+ }
+ Frame {
+ msec: 4288
+ hash: "ed98d08eb30db1b41aaf2a58f3b59398"
+ }
+ Frame {
+ msec: 4304
+ hash: "c362cf053b3749a44d1fc33483f9952b"
+ }
+ Frame {
+ msec: 4320
+ hash: "9b01b2c771ef86ff4a8ee3f6a4676e3c"
+ }
+ Frame {
+ msec: 4336
+ hash: "70ccec3c9db95206b5589d43dcd52b13"
+ }
+ Frame {
+ msec: 4352
+ hash: "57e7397c6aadd0d4d5c9d9d5fcdd8fde"
+ }
+ Frame {
+ msec: 4368
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4384
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4400
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4416
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4432
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4448
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4464
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4480
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4496
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4512
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4528
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4544
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4560
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4576
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4592
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4608
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4624
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4640
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4656
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4672
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4688
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4704
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4720
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4736
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4752
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4768
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4784
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4800
+ image: "test-pathview.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4832
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4848
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4864
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4880
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4896
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4912
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4928
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4944
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4960
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4976
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 4992
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 5008
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 5024
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 5040
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 5056
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 5072
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 5088
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 5104
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 5120
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 5136
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 5152
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 5168
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 5184
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 5200
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+ Frame {
+ msec: 5216
+ hash: "299b24eae7720e1711744b23335bca8c"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicspathview/test-pathview-2.qml b/tests/auto/declarative/visual/qmlgraphicspathview/test-pathview-2.qml
new file mode 100644
index 0000000..c6d71d5
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspathview/test-pathview-2.qml
@@ -0,0 +1,62 @@
+import Qt 4.6
+
+Rectangle {
+ width: 800; height: 450
+ //Same as test-pathview, but with pathItemCount < model.count
+
+ ListModel {
+ id: rssModel
+ ListElement { lColor: "red" }
+ ListElement { lColor: "green" }
+ ListElement { lColor: "yellow" }
+ ListElement { lColor: "blue" }
+ ListElement { lColor: "purple" }
+ ListElement { lColor: "gray" }
+ ListElement { lColor: "brown" }
+ ListElement { lColor: "thistle" }
+ }
+
+ Component {
+ id: photoDelegate
+ Rectangle {
+ id: wrapper
+ width: 85; height: 85; color: lColor
+ scale: wrapper.PathView.scale
+
+ transform: Rotation {
+ id: itemRotation; origin.x: wrapper.width/2; origin.y: wrapper.height/2
+ axis.y: 1; axis.z: 0; angle: wrapper.PathView.angle
+ }
+ }
+ }
+
+ PathView {
+ id: pathView; model: rssModel; delegate: photoDelegate
+ y: 100; width: 800; height: 330; pathItemCount: 6; z: 1
+ focus: true
+ path: Path {
+ startX: -50; startY: 40;
+
+ PathAttribute { name: "scale"; value: 0.5 }
+ PathAttribute { name: "angle"; value: -45 }
+
+ PathCubic {
+ x: 400; y: 220
+ control1X: 140; control1Y: 40
+ control2X: 210; control2Y: 220
+ }
+
+ PathAttribute { name: "scale"; value: 1.2 }
+ PathAttribute { name: "angle"; value: 0 }
+
+ PathCubic {
+ x: 850; y: 40
+ control2X: 660; control2Y: 40
+ control1X: 590; control1Y: 220
+ }
+
+ PathAttribute { name: "scale"; value: 0.5 }
+ PathAttribute { name: "angle"; value: 45 }
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicspathview/test-pathview.qml b/tests/auto/declarative/visual/qmlgraphicspathview/test-pathview.qml
new file mode 100644
index 0000000..70018b6
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspathview/test-pathview.qml
@@ -0,0 +1,62 @@
+import Qt 4.6
+
+Rectangle {
+ width: 800; height: 450
+
+ ListModel {
+ id: rssModel
+ ListElement { lColor: "red" }
+ ListElement { lColor: "green" }
+ ListElement { lColor: "yellow" }
+ ListElement { lColor: "blue" }
+ ListElement { lColor: "purple" }
+ ListElement { lColor: "gray" }
+ ListElement { lColor: "brown" }
+ ListElement { lColor: "thistle" }
+ }
+
+ Component {
+ id: photoDelegate
+ Rectangle {
+ id: wrapper
+ width: 85; height: 85; color: lColor
+ scale: wrapper.PathView.scale
+
+ MouseRegion { anchors.fill: parent }
+
+ transform: Rotation {
+ id: itemRotation; origin.x: wrapper.width/2; origin.y: wrapper.height/2
+ axis.y: 1; axis.z: 0; angle: wrapper.PathView.angle
+ }
+ }
+ }
+
+ PathView {
+ id: photoPathView; model: rssModel; delegate: photoDelegate
+ y: 100; width: 800; height: 330; pathItemCount: 10; z: 1
+ path: Path {
+ startX: -50; startY: 40;
+
+ PathAttribute { name: "scale"; value: 0.5 }
+ PathAttribute { name: "angle"; value: -45 }
+
+ PathCubic {
+ x: 400; y: 220
+ control1X: 140; control1Y: 40
+ control2X: 210; control2Y: 220
+ }
+
+ PathAttribute { name: "scale"; value: 1.2 }
+ PathAttribute { name: "angle"; value: 0 }
+
+ PathCubic {
+ x: 850; y: 40
+ control2X: 660; control2Y: 40
+ control1X: 590; control1Y: 220
+ }
+
+ PathAttribute { name: "scale"; value: 0.5 }
+ PathAttribute { name: "angle"; value: 45 }
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.0.png b/tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.0.png
new file mode 100644
index 0000000..f474afe
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.1.png b/tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.1.png
new file mode 100644
index 0000000..8b7ae74
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.2.png b/tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.2.png
new file mode 100644
index 0000000..9088bb4
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.3.png b/tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.3.png
new file mode 100644
index 0000000..18cd429
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.4.png b/tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.4.png
new file mode 100644
index 0000000..739afc1
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.5.png b/tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.5.png
new file mode 100644
index 0000000..93f0682
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.qml b/tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.qml
new file mode 100644
index 0000000..7091bb3
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspositioners/data/dynamic.qml
@@ -0,0 +1,1603 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 32
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 48
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 64
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 80
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 96
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 112
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 128
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 144
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 160
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 176
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 192
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 208
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 224
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 240
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 256
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 272
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 288
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 304
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 320
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 336
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 352
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 368
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 384
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 400
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 416
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 432
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 448
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 464
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 480
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 496
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 512
+ hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ }
+ Frame {
+ msec: 528
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 544
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 560
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 576
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 592
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 608
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 624
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 640
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 656
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 672
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 688
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 704
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 720
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 736
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 752
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 768
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 784
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 800
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 816
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 832
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 848
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 864
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 880
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 896
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 912
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 928
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 944
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 960
+ image: "dynamic.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 992
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 1008
+ hash: "62727b1025930e19bb03c8f533a12ced"
+ }
+ Frame {
+ msec: 1024
+ hash: "3e52e7d7d428cf1b850cb9c60dbb3c21"
+ }
+ Frame {
+ msec: 1040
+ hash: "64f75ab14c979d33d6e0c0d86b76cd35"
+ }
+ Frame {
+ msec: 1056
+ hash: "c198a48f4050f176465649d203d6e09a"
+ }
+ Frame {
+ msec: 1072
+ hash: "6dd8cee5a585a96e78f2cf7478c4da62"
+ }
+ Frame {
+ msec: 1088
+ hash: "09edfbce2ea4b8a547f769ce709dcb6b"
+ }
+ Frame {
+ msec: 1104
+ hash: "e93d01aa6e4f5d3fc82cf5a008e3ea17"
+ }
+ Frame {
+ msec: 1120
+ hash: "0e2e7b5eec0e62853972b0139b8c17c6"
+ }
+ Frame {
+ msec: 1136
+ hash: "26d4f54628ce20f5665bdc6ddc7f3b6a"
+ }
+ Frame {
+ msec: 1152
+ hash: "59836aa6eff85b0152be352b97076d89"
+ }
+ Frame {
+ msec: 1168
+ hash: "47cc9894096731a52ca342ab04df9aad"
+ }
+ Frame {
+ msec: 1184
+ hash: "ec95dd3b34a0f17f6fb9b5bedab73653"
+ }
+ Frame {
+ msec: 1200
+ hash: "e32c2b70882828b5082ca3ec889a0dde"
+ }
+ Frame {
+ msec: 1216
+ hash: "68d3f8e9c9d5388a6f8360368c8f4d2f"
+ }
+ Frame {
+ msec: 1232
+ hash: "17378b2bd8bde7f357fa5463f457c7b2"
+ }
+ Frame {
+ msec: 1248
+ hash: "03db786cd54ec34ce8db15953a5fc847"
+ }
+ Frame {
+ msec: 1264
+ hash: "9e22a82a622ed0287c44cc629059d5bd"
+ }
+ Frame {
+ msec: 1280
+ hash: "42955cd23747f7c37d0f0229c0955e90"
+ }
+ Frame {
+ msec: 1296
+ hash: "42955cd23747f7c37d0f0229c0955e90"
+ }
+ Frame {
+ msec: 1312
+ hash: "42955cd23747f7c37d0f0229c0955e90"
+ }
+ Frame {
+ msec: 1328
+ hash: "42955cd23747f7c37d0f0229c0955e90"
+ }
+ Frame {
+ msec: 1344
+ hash: "42955cd23747f7c37d0f0229c0955e90"
+ }
+ Frame {
+ msec: 1360
+ hash: "42955cd23747f7c37d0f0229c0955e90"
+ }
+ Frame {
+ msec: 1376
+ hash: "42955cd23747f7c37d0f0229c0955e90"
+ }
+ Frame {
+ msec: 1392
+ hash: "42955cd23747f7c37d0f0229c0955e90"
+ }
+ Frame {
+ msec: 1408
+ hash: "42955cd23747f7c37d0f0229c0955e90"
+ }
+ Frame {
+ msec: 1424
+ hash: "42955cd23747f7c37d0f0229c0955e90"
+ }
+ Frame {
+ msec: 1440
+ hash: "42955cd23747f7c37d0f0229c0955e90"
+ }
+ Frame {
+ msec: 1456
+ hash: "42955cd23747f7c37d0f0229c0955e90"
+ }
+ Frame {
+ msec: 1472
+ hash: "42955cd23747f7c37d0f0229c0955e90"
+ }
+ Frame {
+ msec: 1488
+ hash: "42955cd23747f7c37d0f0229c0955e90"
+ }
+ Frame {
+ msec: 1504
+ hash: "42955cd23747f7c37d0f0229c0955e90"
+ }
+ Frame {
+ msec: 1520
+ hash: "981fb1ee75e307b548a32df08a86f4cd"
+ }
+ Frame {
+ msec: 1536
+ hash: "f77568307e93d8cd9f0ae417cc19d6e3"
+ }
+ Frame {
+ msec: 1552
+ hash: "3bdd4468e26aceee0dad6b3b97b1c1ea"
+ }
+ Frame {
+ msec: 1568
+ hash: "252c9ebc2c32755b2289ee1b03877fe3"
+ }
+ Frame {
+ msec: 1584
+ hash: "64169b7eb7b7ae8573556c5f80230965"
+ }
+ Frame {
+ msec: 1600
+ hash: "4965dfa709a9ac7d8f7dfb4bf8303c65"
+ }
+ Frame {
+ msec: 1616
+ hash: "8c53cf92510154087341ac65a93aae5a"
+ }
+ Frame {
+ msec: 1632
+ hash: "4dd7502e3e238743d2f3cf038270491e"
+ }
+ Frame {
+ msec: 1648
+ hash: "cd9a58316837eb92f4ac92dbd86bdba3"
+ }
+ Frame {
+ msec: 1664
+ hash: "5de043e3ac8696b59293a2fa60ed7e65"
+ }
+ Frame {
+ msec: 1680
+ hash: "1bf42a6f6be5a3468d2f47cccfac761e"
+ }
+ Frame {
+ msec: 1696
+ hash: "ca05510c1ad25e5d3b002603f4379a09"
+ }
+ Frame {
+ msec: 1712
+ hash: "f6904a918a6475f1965d74372e52a4b1"
+ }
+ Frame {
+ msec: 1728
+ hash: "9e2312ddfc1648b615288107a06c9f9c"
+ }
+ Frame {
+ msec: 1744
+ hash: "95c470273b1cb08d4d602efcce339554"
+ }
+ Frame {
+ msec: 1760
+ hash: "dade96f707d4a21885480e13b258b7e9"
+ }
+ Frame {
+ msec: 1776
+ hash: "0bfbd46f1d4cf562253fb383776cb601"
+ }
+ Frame {
+ msec: 1792
+ hash: "0bfbd46f1d4cf562253fb383776cb601"
+ }
+ Frame {
+ msec: 1808
+ hash: "0bfbd46f1d4cf562253fb383776cb601"
+ }
+ Frame {
+ msec: 1824
+ hash: "0bfbd46f1d4cf562253fb383776cb601"
+ }
+ Frame {
+ msec: 1840
+ hash: "0bfbd46f1d4cf562253fb383776cb601"
+ }
+ Frame {
+ msec: 1856
+ hash: "0bfbd46f1d4cf562253fb383776cb601"
+ }
+ Frame {
+ msec: 1872
+ hash: "0bfbd46f1d4cf562253fb383776cb601"
+ }
+ Frame {
+ msec: 1888
+ hash: "0bfbd46f1d4cf562253fb383776cb601"
+ }
+ Frame {
+ msec: 1904
+ hash: "0bfbd46f1d4cf562253fb383776cb601"
+ }
+ Frame {
+ msec: 1920
+ image: "dynamic.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "0bfbd46f1d4cf562253fb383776cb601"
+ }
+ Frame {
+ msec: 1952
+ hash: "0bfbd46f1d4cf562253fb383776cb601"
+ }
+ Frame {
+ msec: 1968
+ hash: "0bfbd46f1d4cf562253fb383776cb601"
+ }
+ Frame {
+ msec: 1984
+ hash: "0bfbd46f1d4cf562253fb383776cb601"
+ }
+ Frame {
+ msec: 2000
+ hash: "0bfbd46f1d4cf562253fb383776cb601"
+ }
+ Frame {
+ msec: 2016
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2032
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2048
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2064
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2080
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2096
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2112
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2128
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2144
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2160
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2176
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2192
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2208
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2224
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2240
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2256
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2272
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2288
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2304
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2320
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2336
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2352
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2368
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2384
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2400
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2416
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2432
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2448
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2464
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2480
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2496
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2512
+ hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ }
+ Frame {
+ msec: 2528
+ hash: "fabf4e535bc4cc17497939d2eeae4a2d"
+ }
+ Frame {
+ msec: 2544
+ hash: "a7981035f46869f5ae824d0c58b263b2"
+ }
+ Frame {
+ msec: 2560
+ hash: "86d8e369bdceb499b244f84ed9e80ba3"
+ }
+ Frame {
+ msec: 2576
+ hash: "e28a7dc7ea8690da75670b5a6e93a26b"
+ }
+ Frame {
+ msec: 2592
+ hash: "bf4e815360a67bd80732bd8812269b21"
+ }
+ Frame {
+ msec: 2608
+ hash: "a6f8c56cb93da8acc0c90e35596a60d4"
+ }
+ Frame {
+ msec: 2624
+ hash: "1e60656f0758605169e51b57bd03af36"
+ }
+ Frame {
+ msec: 2640
+ hash: "c069b26b9fae47e0104070d702ba9562"
+ }
+ Frame {
+ msec: 2656
+ hash: "457eb2ca1adff6cbb158afa140b2f20b"
+ }
+ Frame {
+ msec: 2672
+ hash: "4e5e750b0d94b6777aebff85d38225d9"
+ }
+ Frame {
+ msec: 2688
+ hash: "96d9840c2354a8786a8470309be97544"
+ }
+ Frame {
+ msec: 2704
+ hash: "ac7570cc7eeff1acd8c47f2d9328f8be"
+ }
+ Frame {
+ msec: 2720
+ hash: "887f937bb263c54f29659f27f2b7a3e3"
+ }
+ Frame {
+ msec: 2736
+ hash: "616371183c82b97f69a4c6e2367b8066"
+ }
+ Frame {
+ msec: 2752
+ hash: "36de8ffa9abe850fb681b37aea45ef8b"
+ }
+ Frame {
+ msec: 2768
+ hash: "0505101f0edaaf7ff17deeaaddc6bbf9"
+ }
+ Frame {
+ msec: 2784
+ hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ }
+ Frame {
+ msec: 2800
+ hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ }
+ Frame {
+ msec: 2816
+ hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ }
+ Frame {
+ msec: 2832
+ hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ }
+ Frame {
+ msec: 2848
+ hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ }
+ Frame {
+ msec: 2864
+ hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ }
+ Frame {
+ msec: 2880
+ image: "dynamic.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ }
+ Frame {
+ msec: 2912
+ hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ }
+ Frame {
+ msec: 2928
+ hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ }
+ Frame {
+ msec: 2944
+ hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ }
+ Frame {
+ msec: 2960
+ hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ }
+ Frame {
+ msec: 2976
+ hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ }
+ Frame {
+ msec: 2992
+ hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ }
+ Frame {
+ msec: 3008
+ hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ }
+ Frame {
+ msec: 3024
+ hash: "99e4d853d64a381e8db27707b5ff2b25"
+ }
+ Frame {
+ msec: 3040
+ hash: "ab0e62aeffc0d57a5e1d63e6cf49b809"
+ }
+ Frame {
+ msec: 3056
+ hash: "4ab11bbf1fb6adb0eec8895f78a24a41"
+ }
+ Frame {
+ msec: 3072
+ hash: "634ff2ceb39a3f263a3362238a4ae252"
+ }
+ Frame {
+ msec: 3088
+ hash: "7f4856873dc23a02297b2497101de9b9"
+ }
+ Frame {
+ msec: 3104
+ hash: "bca3919e9d8e6dc5badd8090401dc934"
+ }
+ Frame {
+ msec: 3120
+ hash: "824bfe40c3657cfe1368563640e4cfce"
+ }
+ Frame {
+ msec: 3136
+ hash: "f831c1600f68bda139697c406ca70c5e"
+ }
+ Frame {
+ msec: 3152
+ hash: "f8102ca251a9ff46a8fe5a24cff0d2d6"
+ }
+ Frame {
+ msec: 3168
+ hash: "f33407ad684aa16efc6615d1cf6fa4b9"
+ }
+ Frame {
+ msec: 3184
+ hash: "a73d27f776a6ebfc90309b34421700e5"
+ }
+ Frame {
+ msec: 3200
+ hash: "ff2a4e2663fc50dfec35152f0e79f935"
+ }
+ Frame {
+ msec: 3216
+ hash: "4935f5f58f2672e9d240625151044bda"
+ }
+ Frame {
+ msec: 3232
+ hash: "f3ad5c203f621fe4d5d321c3c1880743"
+ }
+ Frame {
+ msec: 3248
+ hash: "d4fb7cd2e1f6a533dae65ddbb50da8ac"
+ }
+ Frame {
+ msec: 3264
+ hash: "91705e9234c4f02d0a730f6270f9e95f"
+ }
+ Frame {
+ msec: 3280
+ hash: "41e177bec783497b996d6d5f6dac1a15"
+ }
+ Frame {
+ msec: 3296
+ hash: "41e177bec783497b996d6d5f6dac1a15"
+ }
+ Frame {
+ msec: 3312
+ hash: "41e177bec783497b996d6d5f6dac1a15"
+ }
+ Frame {
+ msec: 3328
+ hash: "41e177bec783497b996d6d5f6dac1a15"
+ }
+ Frame {
+ msec: 3344
+ hash: "41e177bec783497b996d6d5f6dac1a15"
+ }
+ Frame {
+ msec: 3360
+ hash: "41e177bec783497b996d6d5f6dac1a15"
+ }
+ Frame {
+ msec: 3376
+ hash: "41e177bec783497b996d6d5f6dac1a15"
+ }
+ Frame {
+ msec: 3392
+ hash: "41e177bec783497b996d6d5f6dac1a15"
+ }
+ Frame {
+ msec: 3408
+ hash: "41e177bec783497b996d6d5f6dac1a15"
+ }
+ Frame {
+ msec: 3424
+ hash: "41e177bec783497b996d6d5f6dac1a15"
+ }
+ Frame {
+ msec: 3440
+ hash: "41e177bec783497b996d6d5f6dac1a15"
+ }
+ Frame {
+ msec: 3456
+ hash: "41e177bec783497b996d6d5f6dac1a15"
+ }
+ Frame {
+ msec: 3472
+ hash: "41e177bec783497b996d6d5f6dac1a15"
+ }
+ Frame {
+ msec: 3488
+ hash: "41e177bec783497b996d6d5f6dac1a15"
+ }
+ Frame {
+ msec: 3504
+ hash: "41e177bec783497b996d6d5f6dac1a15"
+ }
+ Frame {
+ msec: 3520
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3536
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3552
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3568
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3584
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3600
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3616
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3632
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3648
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3664
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3680
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3696
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3712
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3728
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3744
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3760
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3776
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3792
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3808
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3824
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3840
+ image: "dynamic.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3872
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3888
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3904
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3920
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3936
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3952
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3968
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 3984
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4000
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4016
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4032
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4048
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4064
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4080
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4096
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4112
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4128
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4144
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4160
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4176
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4192
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4208
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4224
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4240
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4256
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4272
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4288
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4304
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4320
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4336
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4352
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4368
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4384
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4400
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4416
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4432
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4448
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4464
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4480
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4496
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4512
+ hash: "496dc6261695bcf04a8e574146544e98"
+ }
+ Frame {
+ msec: 4528
+ hash: "9681be99003f8a14cc5654d06d2c8255"
+ }
+ Frame {
+ msec: 4544
+ hash: "bcb592a2335aa2e35956881fd028f4e6"
+ }
+ Frame {
+ msec: 4560
+ hash: "f914b25fdcb02a02b71220d82b7b2a75"
+ }
+ Frame {
+ msec: 4576
+ hash: "63c82c08eb7f2bd50b54b94c952df3f2"
+ }
+ Frame {
+ msec: 4592
+ hash: "8a8dc82be81fa55605c6c2e749895120"
+ }
+ Frame {
+ msec: 4608
+ hash: "271f8d79b8052dfcd840ffa9ba9ffeec"
+ }
+ Frame {
+ msec: 4624
+ hash: "8f77bbd0585b57e69ac1919bd81ee3b1"
+ }
+ Frame {
+ msec: 4640
+ hash: "b974260a2f90e141ebc33ced98fbca88"
+ }
+ Frame {
+ msec: 4656
+ hash: "77ada180f8a45652a6fa636d7ece4d9d"
+ }
+ Frame {
+ msec: 4672
+ hash: "4c8dc2e33cd989cb3b0938c6c75b5f95"
+ }
+ Frame {
+ msec: 4688
+ hash: "a145954989508b925a444e14f0c27a20"
+ }
+ Frame {
+ msec: 4704
+ hash: "8d27ff203819174747ae4a5cee8d0ae8"
+ }
+ Frame {
+ msec: 4720
+ hash: "830f34b0dab780c6efe2294872ba8508"
+ }
+ Frame {
+ msec: 4736
+ hash: "5d70a4bbd815569cfe5735b596bad080"
+ }
+ Frame {
+ msec: 4752
+ hash: "964527bb82ea006e03b030c787a8597c"
+ }
+ Frame {
+ msec: 4768
+ hash: "1ad54954b818fa9e6032ac4b6114e7db"
+ }
+ Frame {
+ msec: 4784
+ hash: "47865243cc252aef67774001af70c54c"
+ }
+ Frame {
+ msec: 4800
+ image: "dynamic.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "47865243cc252aef67774001af70c54c"
+ }
+ Frame {
+ msec: 4832
+ hash: "47865243cc252aef67774001af70c54c"
+ }
+ Frame {
+ msec: 4848
+ hash: "47865243cc252aef67774001af70c54c"
+ }
+ Frame {
+ msec: 4864
+ hash: "47865243cc252aef67774001af70c54c"
+ }
+ Frame {
+ msec: 4880
+ hash: "47865243cc252aef67774001af70c54c"
+ }
+ Frame {
+ msec: 4896
+ hash: "47865243cc252aef67774001af70c54c"
+ }
+ Frame {
+ msec: 4912
+ hash: "47865243cc252aef67774001af70c54c"
+ }
+ Frame {
+ msec: 4928
+ hash: "47865243cc252aef67774001af70c54c"
+ }
+ Frame {
+ msec: 4944
+ hash: "47865243cc252aef67774001af70c54c"
+ }
+ Frame {
+ msec: 4960
+ hash: "47865243cc252aef67774001af70c54c"
+ }
+ Frame {
+ msec: 4976
+ hash: "47865243cc252aef67774001af70c54c"
+ }
+ Frame {
+ msec: 4992
+ hash: "47865243cc252aef67774001af70c54c"
+ }
+ Frame {
+ msec: 5008
+ hash: "47865243cc252aef67774001af70c54c"
+ }
+ Frame {
+ msec: 5024
+ hash: "47865243cc252aef67774001af70c54c"
+ }
+ Frame {
+ msec: 5040
+ hash: "baeb8adffc13e230e797e0437f2ad5fa"
+ }
+ Frame {
+ msec: 5056
+ hash: "d2e440fcad0ee2b7b35d7e5c4e581f73"
+ }
+ Frame {
+ msec: 5072
+ hash: "fb8acb2f69234d3ee089281d0297ad7c"
+ }
+ Frame {
+ msec: 5088
+ hash: "7fda29a83dc535ed8d6b35e999400311"
+ }
+ Frame {
+ msec: 5104
+ hash: "6482e3eb10cfdbdeb57dd38ba3e3d67e"
+ }
+ Frame {
+ msec: 5120
+ hash: "4d222549bc2565c1598a532460aae4e6"
+ }
+ Frame {
+ msec: 5136
+ hash: "776d1b0f9945c0e1ceda0cf117264919"
+ }
+ Frame {
+ msec: 5152
+ hash: "f2c362b34a0982ee1a11dea6b063945e"
+ }
+ Frame {
+ msec: 5168
+ hash: "115f02b8893972b5b1d63525ce70762e"
+ }
+ Frame {
+ msec: 5184
+ hash: "7f2d53581fe2c6c45a628fa4cd9b5742"
+ }
+ Frame {
+ msec: 5200
+ hash: "b5ed1120c4edf842b15d5144adbd93b0"
+ }
+ Frame {
+ msec: 5216
+ hash: "3511938df57c4cdce316692de204b057"
+ }
+ Frame {
+ msec: 5232
+ hash: "99583918d068ab5d132fe7a699c2a7a6"
+ }
+ Frame {
+ msec: 5248
+ hash: "c0ce9df18479dbb57fb1dbc777f4f0e5"
+ }
+ Frame {
+ msec: 5264
+ hash: "b24db7b5c406328380fcf9927fb26c5c"
+ }
+ Frame {
+ msec: 5280
+ hash: "b24db7b5c406328380fcf9927fb26c5c"
+ }
+ Frame {
+ msec: 5296
+ hash: "b24db7b5c406328380fcf9927fb26c5c"
+ }
+ Frame {
+ msec: 5312
+ hash: "b24db7b5c406328380fcf9927fb26c5c"
+ }
+ Frame {
+ msec: 5328
+ hash: "b24db7b5c406328380fcf9927fb26c5c"
+ }
+ Frame {
+ msec: 5344
+ hash: "b24db7b5c406328380fcf9927fb26c5c"
+ }
+ Frame {
+ msec: 5360
+ hash: "b24db7b5c406328380fcf9927fb26c5c"
+ }
+ Frame {
+ msec: 5376
+ hash: "b24db7b5c406328380fcf9927fb26c5c"
+ }
+ Frame {
+ msec: 5392
+ hash: "b24db7b5c406328380fcf9927fb26c5c"
+ }
+ Frame {
+ msec: 5408
+ hash: "b24db7b5c406328380fcf9927fb26c5c"
+ }
+ Frame {
+ msec: 5424
+ hash: "b24db7b5c406328380fcf9927fb26c5c"
+ }
+ Frame {
+ msec: 5440
+ hash: "b24db7b5c406328380fcf9927fb26c5c"
+ }
+ Frame {
+ msec: 5456
+ hash: "b24db7b5c406328380fcf9927fb26c5c"
+ }
+ Frame {
+ msec: 5472
+ hash: "b24db7b5c406328380fcf9927fb26c5c"
+ }
+ Frame {
+ msec: 5488
+ hash: "b24db7b5c406328380fcf9927fb26c5c"
+ }
+ Frame {
+ msec: 5504
+ hash: "b24db7b5c406328380fcf9927fb26c5c"
+ }
+ Frame {
+ msec: 5520
+ hash: "b24db7b5c406328380fcf9927fb26c5c"
+ }
+ Frame {
+ msec: 5536
+ hash: "98cc64411264d8a635a6afe6b11cee6e"
+ }
+ Frame {
+ msec: 5552
+ hash: "b86434b7af8ad1db946c43a2791d69ab"
+ }
+ Frame {
+ msec: 5568
+ hash: "f45616f9e33658d1dddb537e842c8768"
+ }
+ Frame {
+ msec: 5584
+ hash: "e49d8955e27cdc19a37c331e56c81af1"
+ }
+ Frame {
+ msec: 5600
+ hash: "b2dbe764906b50195f65dc11a5842515"
+ }
+ Frame {
+ msec: 5616
+ hash: "71ce7c63d65c29cdffd83f5ae07f0b93"
+ }
+ Frame {
+ msec: 5632
+ hash: "901d01e1fc777ec185cd023ad0ace4c1"
+ }
+ Frame {
+ msec: 5648
+ hash: "a3f31de30fc2e92bae1f735504216216"
+ }
+ Frame {
+ msec: 5664
+ hash: "0fc52dd8102506e3e7671fa548551b23"
+ }
+ Frame {
+ msec: 5680
+ hash: "fb92809e728416035dbb91116ad8fe0e"
+ }
+ Frame {
+ msec: 5696
+ hash: "9003dc8ca4f781909035cb03dc45864f"
+ }
+ Frame {
+ msec: 5712
+ hash: "2bff1de793ad8521fd54413849c3cf29"
+ }
+ Frame {
+ msec: 5728
+ hash: "8362e4db7c4446282d844a4fc6632d19"
+ }
+ Frame {
+ msec: 5744
+ hash: "b874fa274c6ec77c106ff4a0288f9169"
+ }
+ Frame {
+ msec: 5760
+ image: "dynamic.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ }
+ Frame {
+ msec: 5792
+ hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ }
+ Frame {
+ msec: 5808
+ hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ }
+ Frame {
+ msec: 5824
+ hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ }
+ Frame {
+ msec: 5840
+ hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ }
+ Frame {
+ msec: 5856
+ hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ }
+ Frame {
+ msec: 5872
+ hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ }
+ Frame {
+ msec: 5888
+ hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ }
+ Frame {
+ msec: 5904
+ hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ }
+ Frame {
+ msec: 5920
+ hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ }
+ Frame {
+ msec: 5936
+ hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ }
+ Frame {
+ msec: 5952
+ hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ }
+ Frame {
+ msec: 5968
+ hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ }
+ Frame {
+ msec: 5984
+ hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ }
+ Frame {
+ msec: 6000
+ hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ }
+ Frame {
+ msec: 6016
+ hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ }
+ Frame {
+ msec: 6032
+ hash: "7621e64568058b82bcb6f6b46cee3ebc"
+ }
+ Frame {
+ msec: 6048
+ hash: "f77f6de6fc88813f49427b4888a59dbf"
+ }
+ Frame {
+ msec: 6064
+ hash: "d3a48f596219372ac25941e4c5ec5b2b"
+ }
+ Frame {
+ msec: 6080
+ hash: "d572d932b613f9ca1e0acf144f127dd1"
+ }
+ Frame {
+ msec: 6096
+ hash: "edf317eaf51d933bcd0f57f214921a81"
+ }
+ Frame {
+ msec: 6112
+ hash: "e0cee7959a5a8a08ad03d75e7b5c6ca1"
+ }
+ Frame {
+ msec: 6128
+ hash: "96877a15f44d4a2c8d9974cb28b9e1b6"
+ }
+ Frame {
+ msec: 6144
+ hash: "c0ffb0ef6dd9d007d201feebd2f68e44"
+ }
+ Frame {
+ msec: 6160
+ hash: "209fb930223243fa19c5dde9e85ec518"
+ }
+ Frame {
+ msec: 6176
+ hash: "ae98ac4dba0e78eb8fb7f7dbe29b2832"
+ }
+ Frame {
+ msec: 6192
+ hash: "c94a7d68ce007d83df77a595a5815a96"
+ }
+ Frame {
+ msec: 6208
+ hash: "4c28e409bf5a6c1289bcab8cd59a9e42"
+ }
+ Frame {
+ msec: 6224
+ hash: "ea1009f1a3446dd5ce937e6949794794"
+ }
+ Frame {
+ msec: 6240
+ hash: "940c16766c2f87feef48e1187672ca9b"
+ }
+ Frame {
+ msec: 6256
+ hash: "93664c87c8dcfadc0345f646b2508625"
+ }
+ Frame {
+ msec: 6272
+ hash: "93664c87c8dcfadc0345f646b2508625"
+ }
+ Frame {
+ msec: 6288
+ hash: "93664c87c8dcfadc0345f646b2508625"
+ }
+ Frame {
+ msec: 6304
+ hash: "93664c87c8dcfadc0345f646b2508625"
+ }
+ Frame {
+ msec: 6320
+ hash: "93664c87c8dcfadc0345f646b2508625"
+ }
+ Frame {
+ msec: 6336
+ hash: "93664c87c8dcfadc0345f646b2508625"
+ }
+ Frame {
+ msec: 6352
+ hash: "93664c87c8dcfadc0345f646b2508625"
+ }
+ Frame {
+ msec: 6368
+ hash: "93664c87c8dcfadc0345f646b2508625"
+ }
+ Frame {
+ msec: 6384
+ hash: "93664c87c8dcfadc0345f646b2508625"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicspositioners/data/repeater.0.png b/tests/auto/declarative/visual/qmlgraphicspositioners/data/repeater.0.png
new file mode 100644
index 0000000..f7018fd
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspositioners/data/repeater.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicspositioners/data/repeater.qml b/tests/auto/declarative/visual/qmlgraphicspositioners/data/repeater.qml
new file mode 100644
index 0000000..1eb115d
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspositioners/data/repeater.qml
@@ -0,0 +1,339 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 32
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 48
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 64
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 80
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 96
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 112
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 128
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 144
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 160
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 176
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 192
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 208
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 224
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 240
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 256
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 272
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 288
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 304
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 320
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 336
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 352
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 368
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 384
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 400
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 416
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 432
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 448
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 464
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 480
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 496
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 512
+ hash: "0273c293855f2b2bdbf579fc5cdce63f"
+ }
+ Frame {
+ msec: 528
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 544
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 560
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 576
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 592
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 608
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 624
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 640
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 656
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 672
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 688
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 704
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 720
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 736
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 752
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 768
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 784
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 800
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 816
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 832
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 848
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 864
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 880
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 896
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 912
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 928
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 944
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 960
+ image: "repeater.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 992
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 1008
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 1024
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 1040
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 1056
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 1072
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 1088
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 1104
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 1120
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 1136
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 1152
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 1168
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 1184
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 1200
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 1216
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 1232
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 1248
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 1264
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 1280
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 1296
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 1312
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+ Frame {
+ msec: 1328
+ hash: "53a01771047c8ec806a335a1a3d6af71"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicspositioners/dynamic.qml b/tests/auto/declarative/visual/qmlgraphicspositioners/dynamic.qml
new file mode 100644
index 0000000..4b03749
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspositioners/dynamic.qml
@@ -0,0 +1,65 @@
+import Qt 4.6
+
+Item {
+ width: 400; height: 400;
+ property int step: 0
+ function tick()
+ {
+ step++;
+ if(step == 1){
+ row1.destroy(); //Not dynamically created, so is this valid?
+ }else if(step == 2){
+ r2a.destroy();
+ }else if(step == 3){
+ r2b.destroy();
+ }else if(step == 4){
+ r2c.destroy();
+ }else if(step == 5){
+ r3a.parent = row2;
+ }else if(step == 6){
+ r3b.parent = row2;
+ }else if(step == 7){
+ r3c.parent = row2;
+ }else if(step == 8){
+ row3.destroy();
+ }else{
+ repeater.model++;
+ }
+ }
+
+ //Tests base positioner functionality, so just using row
+ Row{
+ id: row1
+ Rectangle{id: r1a; width:20; height:20; color: "red"}
+ Rectangle{id: r1b; width:20; height:20; color: "green"}
+ Rectangle{id: r1c; width:20; height:20; color: "blue"}
+ }
+ Row{
+ y:20
+ id: row2
+ move: Transition{NumberAnimation{matchProperties:"x"}}
+ Repeater{
+ id: repeater
+ model: 0;
+ delegate: Component{ Rectangle { color: "yellow"; width:20; height:20;}}
+ }
+ Rectangle{id: r2a; width:20; height:20; color: "red"}
+ Rectangle{id: r2b; width:20; height:20; color: "green"}
+ Rectangle{id: r2c; width:20; height:20; color: "blue"}
+ }
+ Row{
+ move: Transition{NumberAnimation{matchProperties:"x"}}
+ y:40
+ id: row3
+ Rectangle{id: r3a; width:20; height:20; color: "red"}
+ Rectangle{id: r3b; width:20; height:20; color: "green"}
+ Rectangle{id: r3c; width:20; height:20; color: "blue"}
+ }
+ Timer{
+ interval: 500;
+ running: true;
+ repeat: true;
+ onTriggered: tick();
+ }
+}
+
diff --git a/tests/auto/declarative/visual/qmlgraphicspositioners/repeater.qml b/tests/auto/declarative/visual/qmlgraphicspositioners/repeater.qml
new file mode 100644
index 0000000..ff60365
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicspositioners/repeater.qml
@@ -0,0 +1,15 @@
+import Qt 4.6
+
+Item{
+ width: 200; height: 600
+ Column{
+ Rectangle{color:"Red"; width:40; height:40;}
+ Repeater{
+ id: rep
+ model: 3
+ delegate: Component{Rectangle{color:"Green"; width:40; height:40; radius: 20;}}
+ }
+ Rectangle{color:"Blue"; width:40; height:40;}
+ }
+ Timer{ interval: 500; running: true; onTriggered: rep.model=6;}
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/baseline/data-X11/parentanchor.qml b/tests/auto/declarative/visual/qmlgraphicstext/baseline/data-X11/parentanchor.qml
new file mode 100644
index 0000000..56d616e
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/baseline/data-X11/parentanchor.qml
@@ -0,0 +1,131 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 32
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 48
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 64
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 80
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 96
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 112
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 128
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 144
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 160
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 176
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 192
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 208
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 224
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 240
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 256
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 272
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 288
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 304
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 320
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 336
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 352
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 368
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 384
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 400
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 416
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 432
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 448
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 464
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 480
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 496
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/baseline/data/parentanchor.qml b/tests/auto/declarative/visual/qmlgraphicstext/baseline/data/parentanchor.qml
new file mode 100644
index 0000000..56d616e
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/baseline/data/parentanchor.qml
@@ -0,0 +1,131 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 32
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 48
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 64
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 80
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 96
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 112
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 128
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 144
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 160
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 176
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 192
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 208
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 224
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 240
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 256
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 272
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 288
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 304
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 320
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 336
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 352
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 368
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 384
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 400
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 416
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 432
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 448
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 464
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 480
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+ Frame {
+ msec: 496
+ hash: "3e022a120a2dbe688d53657508de36cf"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/baseline/parentanchor.qml b/tests/auto/declarative/visual/qmlgraphicstext/baseline/parentanchor.qml
new file mode 100644
index 0000000..80f0f03
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/baseline/parentanchor.qml
@@ -0,0 +1,14 @@
+import Qt 4.6
+
+Rectangle {
+ id: s; width: 600; height: 100; color: "lightsteelblue"
+ property string text: "The quick brown fox jumps over the lazy dog."
+ Text {
+ text: s.text
+ anchors.verticalCenter: s.verticalCenter
+ }
+ Text {
+ text: s.text
+ anchors.baseline: s.verticalCenter
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide.0.png b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide.0.png
new file mode 100644
index 0000000..eea3362
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide.qml b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide.qml
new file mode 100644
index 0000000..1ccede4
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide.qml
@@ -0,0 +1,279 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 32
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 48
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 64
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 80
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 96
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 112
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 128
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 144
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 160
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 176
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 192
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 208
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 224
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 240
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 256
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 272
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 288
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 304
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 320
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 336
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 352
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 368
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 384
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 400
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 416
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 432
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 448
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 464
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 480
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 496
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 512
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 528
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 544
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 560
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 576
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 592
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 608
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 624
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 640
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 656
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 672
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 688
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 704
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 720
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 736
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 752
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 768
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 784
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 800
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 816
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 832
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 848
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 864
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 880
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 896
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 912
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 928
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 944
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 960
+ image: "elide.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 992
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 1008
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 1024
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 1040
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+ Frame {
+ msec: 1056
+ hash: "1678890d66761a30100c37132ccec9a2"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide2.0.png b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide2.0.png
new file mode 100644
index 0000000..3dfade5
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide2.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide2.1.png b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide2.1.png
new file mode 100644
index 0000000..1ee2076
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide2.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide2.2.png b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide2.2.png
new file mode 100644
index 0000000..ae680be
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide2.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide2.3.png b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide2.3.png
new file mode 100644
index 0000000..c2859be
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide2.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide2.qml b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide2.qml
new file mode 100644
index 0000000..07ad236
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/elide2.qml
@@ -0,0 +1,991 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 32
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 48
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 64
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 80
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 96
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 112
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 128
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 144
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 160
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 176
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 192
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 208
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 224
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 240
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 256
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 272
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 288
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 304
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 320
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 336
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 352
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 368
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 384
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 400
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 416
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 432
+ hash: "fc3a7e898d6bfa2af4d774b20609f967"
+ }
+ Frame {
+ msec: 448
+ hash: "fc3a7e898d6bfa2af4d774b20609f967"
+ }
+ Frame {
+ msec: 464
+ hash: "fc3a7e898d6bfa2af4d774b20609f967"
+ }
+ Frame {
+ msec: 480
+ hash: "3bcaa6426796bc9097e0aeba90dd5e39"
+ }
+ Frame {
+ msec: 496
+ hash: "3bcaa6426796bc9097e0aeba90dd5e39"
+ }
+ Frame {
+ msec: 512
+ hash: "3bcaa6426796bc9097e0aeba90dd5e39"
+ }
+ Frame {
+ msec: 528
+ hash: "3bcaa6426796bc9097e0aeba90dd5e39"
+ }
+ Frame {
+ msec: 544
+ hash: "3bcaa6426796bc9097e0aeba90dd5e39"
+ }
+ Frame {
+ msec: 560
+ hash: "3bcaa6426796bc9097e0aeba90dd5e39"
+ }
+ Frame {
+ msec: 576
+ hash: "4daa612cd7e7ee455ff1a93329202865"
+ }
+ Frame {
+ msec: 592
+ hash: "4daa612cd7e7ee455ff1a93329202865"
+ }
+ Frame {
+ msec: 608
+ hash: "4daa612cd7e7ee455ff1a93329202865"
+ }
+ Frame {
+ msec: 624
+ hash: "4daa612cd7e7ee455ff1a93329202865"
+ }
+ Frame {
+ msec: 640
+ hash: "4daa612cd7e7ee455ff1a93329202865"
+ }
+ Frame {
+ msec: 656
+ hash: "3f362ad550db910f1d9f261557c65913"
+ }
+ Frame {
+ msec: 672
+ hash: "3f362ad550db910f1d9f261557c65913"
+ }
+ Frame {
+ msec: 688
+ hash: "f159011c2b85fe212a32a7b5d2a57016"
+ }
+ Frame {
+ msec: 704
+ hash: "f159011c2b85fe212a32a7b5d2a57016"
+ }
+ Frame {
+ msec: 720
+ hash: "f159011c2b85fe212a32a7b5d2a57016"
+ }
+ Frame {
+ msec: 736
+ hash: "f159011c2b85fe212a32a7b5d2a57016"
+ }
+ Frame {
+ msec: 752
+ hash: "f159011c2b85fe212a32a7b5d2a57016"
+ }
+ Frame {
+ msec: 768
+ hash: "f159011c2b85fe212a32a7b5d2a57016"
+ }
+ Frame {
+ msec: 784
+ hash: "a892c67199c23e5d9012a6a24cb45d16"
+ }
+ Frame {
+ msec: 800
+ hash: "a892c67199c23e5d9012a6a24cb45d16"
+ }
+ Frame {
+ msec: 816
+ hash: "a892c67199c23e5d9012a6a24cb45d16"
+ }
+ Frame {
+ msec: 832
+ hash: "532e01ed6ede95eca68e641e2edb7f1c"
+ }
+ Frame {
+ msec: 848
+ hash: "532e01ed6ede95eca68e641e2edb7f1c"
+ }
+ Frame {
+ msec: 864
+ hash: "532e01ed6ede95eca68e641e2edb7f1c"
+ }
+ Frame {
+ msec: 880
+ hash: "532e01ed6ede95eca68e641e2edb7f1c"
+ }
+ Frame {
+ msec: 896
+ hash: "532e01ed6ede95eca68e641e2edb7f1c"
+ }
+ Frame {
+ msec: 912
+ hash: "a7dc1d7dde956d62834de0968261386f"
+ }
+ Frame {
+ msec: 928
+ hash: "a7dc1d7dde956d62834de0968261386f"
+ }
+ Frame {
+ msec: 944
+ hash: "a7dc1d7dde956d62834de0968261386f"
+ }
+ Frame {
+ msec: 960
+ image: "elide2.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "a7dc1d7dde956d62834de0968261386f"
+ }
+ Frame {
+ msec: 992
+ hash: "a590e1358fac567dda9fdfc6bfe4ab89"
+ }
+ Frame {
+ msec: 1008
+ hash: "a590e1358fac567dda9fdfc6bfe4ab89"
+ }
+ Frame {
+ msec: 1024
+ hash: "778d34ca89b5db88fe26619576e9d337"
+ }
+ Frame {
+ msec: 1040
+ hash: "778d34ca89b5db88fe26619576e9d337"
+ }
+ Frame {
+ msec: 1056
+ hash: "778d34ca89b5db88fe26619576e9d337"
+ }
+ Frame {
+ msec: 1072
+ hash: "778d34ca89b5db88fe26619576e9d337"
+ }
+ Frame {
+ msec: 1088
+ hash: "778d34ca89b5db88fe26619576e9d337"
+ }
+ Frame {
+ msec: 1104
+ hash: "9424caee019aa9bccd4156b0b9ca2723"
+ }
+ Frame {
+ msec: 1120
+ hash: "9424caee019aa9bccd4156b0b9ca2723"
+ }
+ Frame {
+ msec: 1136
+ hash: "9424caee019aa9bccd4156b0b9ca2723"
+ }
+ Frame {
+ msec: 1152
+ hash: "000061a140ab71a44c0480a92ad3bc70"
+ }
+ Frame {
+ msec: 1168
+ hash: "000061a140ab71a44c0480a92ad3bc70"
+ }
+ Frame {
+ msec: 1184
+ hash: "000061a140ab71a44c0480a92ad3bc70"
+ }
+ Frame {
+ msec: 1200
+ hash: "5dec9638853165428cd15ae02e1d03ce"
+ }
+ Frame {
+ msec: 1216
+ hash: "5dec9638853165428cd15ae02e1d03ce"
+ }
+ Frame {
+ msec: 1232
+ hash: "5dec9638853165428cd15ae02e1d03ce"
+ }
+ Frame {
+ msec: 1248
+ hash: "ecb69bdbd13114715f738b1ace3ecf51"
+ }
+ Frame {
+ msec: 1264
+ hash: "ecb69bdbd13114715f738b1ace3ecf51"
+ }
+ Frame {
+ msec: 1280
+ hash: "ecb69bdbd13114715f738b1ace3ecf51"
+ }
+ Frame {
+ msec: 1296
+ hash: "ecb69bdbd13114715f738b1ace3ecf51"
+ }
+ Frame {
+ msec: 1312
+ hash: "ecb69bdbd13114715f738b1ace3ecf51"
+ }
+ Frame {
+ msec: 1328
+ hash: "923b4f4f4a3dbaefbf003859067b2ea9"
+ }
+ Frame {
+ msec: 1344
+ hash: "923b4f4f4a3dbaefbf003859067b2ea9"
+ }
+ Frame {
+ msec: 1360
+ hash: "923b4f4f4a3dbaefbf003859067b2ea9"
+ }
+ Frame {
+ msec: 1376
+ hash: "923b4f4f4a3dbaefbf003859067b2ea9"
+ }
+ Frame {
+ msec: 1392
+ hash: "923b4f4f4a3dbaefbf003859067b2ea9"
+ }
+ Frame {
+ msec: 1408
+ hash: "d4230a476237f9e13a132e775f1b960c"
+ }
+ Frame {
+ msec: 1424
+ hash: "d4230a476237f9e13a132e775f1b960c"
+ }
+ Frame {
+ msec: 1440
+ hash: "d4230a476237f9e13a132e775f1b960c"
+ }
+ Frame {
+ msec: 1456
+ hash: "d4230a476237f9e13a132e775f1b960c"
+ }
+ Frame {
+ msec: 1472
+ hash: "d4230a476237f9e13a132e775f1b960c"
+ }
+ Frame {
+ msec: 1488
+ hash: "504ad2ba8543f7ad6490bd45d86fbef9"
+ }
+ Frame {
+ msec: 1504
+ hash: "504ad2ba8543f7ad6490bd45d86fbef9"
+ }
+ Frame {
+ msec: 1520
+ hash: "504ad2ba8543f7ad6490bd45d86fbef9"
+ }
+ Frame {
+ msec: 1536
+ hash: "504ad2ba8543f7ad6490bd45d86fbef9"
+ }
+ Frame {
+ msec: 1552
+ hash: "504ad2ba8543f7ad6490bd45d86fbef9"
+ }
+ Frame {
+ msec: 1568
+ hash: "504ad2ba8543f7ad6490bd45d86fbef9"
+ }
+ Frame {
+ msec: 1584
+ hash: "dd412c6a2e5cb8890cb43142c84a5673"
+ }
+ Frame {
+ msec: 1600
+ hash: "dd412c6a2e5cb8890cb43142c84a5673"
+ }
+ Frame {
+ msec: 1616
+ hash: "dd412c6a2e5cb8890cb43142c84a5673"
+ }
+ Frame {
+ msec: 1632
+ hash: "38b1fa7bd4e2f13b05caa62903c56ab6"
+ }
+ Frame {
+ msec: 1648
+ hash: "38b1fa7bd4e2f13b05caa62903c56ab6"
+ }
+ Frame {
+ msec: 1664
+ hash: "38b1fa7bd4e2f13b05caa62903c56ab6"
+ }
+ Frame {
+ msec: 1680
+ hash: "38b1fa7bd4e2f13b05caa62903c56ab6"
+ }
+ Frame {
+ msec: 1696
+ hash: "ffb2cb01c868c1dfa6b5154c4e8a7fd8"
+ }
+ Frame {
+ msec: 1712
+ hash: "ffb2cb01c868c1dfa6b5154c4e8a7fd8"
+ }
+ Frame {
+ msec: 1728
+ hash: "ffb2cb01c868c1dfa6b5154c4e8a7fd8"
+ }
+ Frame {
+ msec: 1744
+ hash: "9effd5fc19246cfe3d2f5968c5caaa4e"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1760
+ hash: "9effd5fc19246cfe3d2f5968c5caaa4e"
+ }
+ Frame {
+ msec: 1776
+ hash: "9effd5fc19246cfe3d2f5968c5caaa4e"
+ }
+ Frame {
+ msec: 1792
+ hash: "9effd5fc19246cfe3d2f5968c5caaa4e"
+ }
+ Frame {
+ msec: 1808
+ hash: "4fa14ae57d170b16fd90d59d5ec83561"
+ }
+ Frame {
+ msec: 1824
+ hash: "4fa14ae57d170b16fd90d59d5ec83561"
+ }
+ Frame {
+ msec: 1840
+ hash: "4fa14ae57d170b16fd90d59d5ec83561"
+ }
+ Frame {
+ msec: 1856
+ hash: "4fa14ae57d170b16fd90d59d5ec83561"
+ }
+ Frame {
+ msec: 1872
+ hash: "4fa14ae57d170b16fd90d59d5ec83561"
+ }
+ Frame {
+ msec: 1888
+ hash: "976dd5bc154522438f92790f28639512"
+ }
+ Frame {
+ msec: 1904
+ hash: "976dd5bc154522438f92790f28639512"
+ }
+ Frame {
+ msec: 1920
+ image: "elide2.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "976dd5bc154522438f92790f28639512"
+ }
+ Frame {
+ msec: 1952
+ hash: "976dd5bc154522438f92790f28639512"
+ }
+ Frame {
+ msec: 1968
+ hash: "4ae1d6ddb9a78cc2f4e81b58fcca6a20"
+ }
+ Frame {
+ msec: 1984
+ hash: "4ae1d6ddb9a78cc2f4e81b58fcca6a20"
+ }
+ Frame {
+ msec: 2000
+ hash: "4ae1d6ddb9a78cc2f4e81b58fcca6a20"
+ }
+ Frame {
+ msec: 2016
+ hash: "4ae1d6ddb9a78cc2f4e81b58fcca6a20"
+ }
+ Frame {
+ msec: 2032
+ hash: "4ae1d6ddb9a78cc2f4e81b58fcca6a20"
+ }
+ Frame {
+ msec: 2048
+ hash: "84bdf634cfd4de588f2b0984aa3e97bd"
+ }
+ Frame {
+ msec: 2064
+ hash: "84bdf634cfd4de588f2b0984aa3e97bd"
+ }
+ Frame {
+ msec: 2080
+ hash: "84bdf634cfd4de588f2b0984aa3e97bd"
+ }
+ Frame {
+ msec: 2096
+ hash: "1a978ed6951afe40912efcfb54dcce65"
+ }
+ Frame {
+ msec: 2112
+ hash: "1a978ed6951afe40912efcfb54dcce65"
+ }
+ Frame {
+ msec: 2128
+ hash: "1a978ed6951afe40912efcfb54dcce65"
+ }
+ Frame {
+ msec: 2144
+ hash: "a57eea59fe6475164e24688489977869"
+ }
+ Frame {
+ msec: 2160
+ hash: "a57eea59fe6475164e24688489977869"
+ }
+ Frame {
+ msec: 2176
+ hash: "a57eea59fe6475164e24688489977869"
+ }
+ Frame {
+ msec: 2192
+ hash: "69ac1d93bd51f495783dbc6a0f7b27be"
+ }
+ Frame {
+ msec: 2208
+ hash: "69ac1d93bd51f495783dbc6a0f7b27be"
+ }
+ Frame {
+ msec: 2224
+ hash: "69ac1d93bd51f495783dbc6a0f7b27be"
+ }
+ Frame {
+ msec: 2240
+ hash: "69ac1d93bd51f495783dbc6a0f7b27be"
+ }
+ Frame {
+ msec: 2256
+ hash: "69ac1d93bd51f495783dbc6a0f7b27be"
+ }
+ Frame {
+ msec: 2272
+ hash: "04c62a4d01e9309eaeea87902013c8b9"
+ }
+ Frame {
+ msec: 2288
+ hash: "04c62a4d01e9309eaeea87902013c8b9"
+ }
+ Frame {
+ msec: 2304
+ hash: "fac2f5730a600d6b69280d5e6962c1d2"
+ }
+ Frame {
+ msec: 2320
+ hash: "fac2f5730a600d6b69280d5e6962c1d2"
+ }
+ Frame {
+ msec: 2336
+ hash: "fac2f5730a600d6b69280d5e6962c1d2"
+ }
+ Frame {
+ msec: 2352
+ hash: "fac2f5730a600d6b69280d5e6962c1d2"
+ }
+ Frame {
+ msec: 2368
+ hash: "fac2f5730a600d6b69280d5e6962c1d2"
+ }
+ Frame {
+ msec: 2384
+ hash: "13f7ce73c0a2f1c7958294e4fbf3d30d"
+ }
+ Frame {
+ msec: 2400
+ hash: "13f7ce73c0a2f1c7958294e4fbf3d30d"
+ }
+ Frame {
+ msec: 2416
+ hash: "13f7ce73c0a2f1c7958294e4fbf3d30d"
+ }
+ Frame {
+ msec: 2432
+ hash: "13f7ce73c0a2f1c7958294e4fbf3d30d"
+ }
+ Frame {
+ msec: 2448
+ hash: "13f7ce73c0a2f1c7958294e4fbf3d30d"
+ }
+ Frame {
+ msec: 2464
+ hash: "96a5678ee5bcbf28df6a2bf66b2b6189"
+ }
+ Frame {
+ msec: 2480
+ hash: "96a5678ee5bcbf28df6a2bf66b2b6189"
+ }
+ Frame {
+ msec: 2496
+ hash: "96a5678ee5bcbf28df6a2bf66b2b6189"
+ }
+ Frame {
+ msec: 2512
+ hash: "96a5678ee5bcbf28df6a2bf66b2b6189"
+ }
+ Frame {
+ msec: 2528
+ hash: "96a5678ee5bcbf28df6a2bf66b2b6189"
+ }
+ Frame {
+ msec: 2544
+ hash: "abb220abcd579abd988b6f9f7e0bc2b7"
+ }
+ Frame {
+ msec: 2560
+ hash: "abb220abcd579abd988b6f9f7e0bc2b7"
+ }
+ Frame {
+ msec: 2576
+ hash: "abb220abcd579abd988b6f9f7e0bc2b7"
+ }
+ Frame {
+ msec: 2592
+ hash: "abb220abcd579abd988b6f9f7e0bc2b7"
+ }
+ Frame {
+ msec: 2608
+ hash: "8a8585eb9a5cd1d6c38dc7076923e7f7"
+ }
+ Frame {
+ msec: 2624
+ hash: "8a8585eb9a5cd1d6c38dc7076923e7f7"
+ }
+ Frame {
+ msec: 2640
+ hash: "8a8585eb9a5cd1d6c38dc7076923e7f7"
+ }
+ Frame {
+ msec: 2656
+ hash: "c13ec1d294921e6a56f6ac4198e084eb"
+ }
+ Frame {
+ msec: 2672
+ hash: "c13ec1d294921e6a56f6ac4198e084eb"
+ }
+ Frame {
+ msec: 2688
+ hash: "c13ec1d294921e6a56f6ac4198e084eb"
+ }
+ Frame {
+ msec: 2704
+ hash: "c13ec1d294921e6a56f6ac4198e084eb"
+ }
+ Frame {
+ msec: 2720
+ hash: "53295720dbabe6fbfff56bea0e0ba7f1"
+ }
+ Frame {
+ msec: 2736
+ hash: "53295720dbabe6fbfff56bea0e0ba7f1"
+ }
+ Frame {
+ msec: 2752
+ hash: "53295720dbabe6fbfff56bea0e0ba7f1"
+ }
+ Frame {
+ msec: 2768
+ hash: "53295720dbabe6fbfff56bea0e0ba7f1"
+ }
+ Frame {
+ msec: 2784
+ hash: "53295720dbabe6fbfff56bea0e0ba7f1"
+ }
+ Frame {
+ msec: 2800
+ hash: "53295720dbabe6fbfff56bea0e0ba7f1"
+ }
+ Frame {
+ msec: 2816
+ hash: "53295720dbabe6fbfff56bea0e0ba7f1"
+ }
+ Frame {
+ msec: 2832
+ hash: "f44b88b80219497370b5d2ad380d03bf"
+ }
+ Frame {
+ msec: 2848
+ hash: "f44b88b80219497370b5d2ad380d03bf"
+ }
+ Frame {
+ msec: 2864
+ hash: "a093510751799f3466156f9775988044"
+ }
+ Frame {
+ msec: 2880
+ image: "elide2.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "a093510751799f3466156f9775988044"
+ }
+ Frame {
+ msec: 2912
+ hash: "6327bcbb2d78d3c33eb964643b0d09a5"
+ }
+ Frame {
+ msec: 2928
+ hash: "6327bcbb2d78d3c33eb964643b0d09a5"
+ }
+ Frame {
+ msec: 2944
+ hash: "6327bcbb2d78d3c33eb964643b0d09a5"
+ }
+ Frame {
+ msec: 2960
+ hash: "6327bcbb2d78d3c33eb964643b0d09a5"
+ }
+ Frame {
+ msec: 2976
+ hash: "6327bcbb2d78d3c33eb964643b0d09a5"
+ }
+ Frame {
+ msec: 2992
+ hash: "d7da3826914ad1d2696803b659992e73"
+ }
+ Frame {
+ msec: 3008
+ hash: "d7da3826914ad1d2696803b659992e73"
+ }
+ Frame {
+ msec: 3024
+ hash: "d7da3826914ad1d2696803b659992e73"
+ }
+ Frame {
+ msec: 3040
+ hash: "d7da3826914ad1d2696803b659992e73"
+ }
+ Frame {
+ msec: 3056
+ hash: "d7da3826914ad1d2696803b659992e73"
+ }
+ Frame {
+ msec: 3072
+ hash: "ad40dc153a57c35ea62d9d044f08c9ac"
+ }
+ Frame {
+ msec: 3088
+ hash: "ad40dc153a57c35ea62d9d044f08c9ac"
+ }
+ Frame {
+ msec: 3104
+ hash: "ad40dc153a57c35ea62d9d044f08c9ac"
+ }
+ Frame {
+ msec: 3120
+ hash: "df90afe882b18f3fd7b12e52ff36e66f"
+ }
+ Frame {
+ msec: 3136
+ hash: "df90afe882b18f3fd7b12e52ff36e66f"
+ }
+ Frame {
+ msec: 3152
+ hash: "5b84785ffe15c15c3b94c845db7a4a44"
+ }
+ Frame {
+ msec: 3168
+ hash: "5b84785ffe15c15c3b94c845db7a4a44"
+ }
+ Frame {
+ msec: 3184
+ hash: "5b84785ffe15c15c3b94c845db7a4a44"
+ }
+ Frame {
+ msec: 3200
+ hash: "f5ca71af8d9fa1809ab88b60f9170bb5"
+ }
+ Frame {
+ msec: 3216
+ hash: "f5ca71af8d9fa1809ab88b60f9170bb5"
+ }
+ Frame {
+ msec: 3232
+ hash: "f5ca71af8d9fa1809ab88b60f9170bb5"
+ }
+ Frame {
+ msec: 3248
+ hash: "f5ca71af8d9fa1809ab88b60f9170bb5"
+ }
+ Frame {
+ msec: 3264
+ hash: "f5ca71af8d9fa1809ab88b60f9170bb5"
+ }
+ Frame {
+ msec: 3280
+ hash: "39f1b201715413f13a60f449eef29706"
+ }
+ Frame {
+ msec: 3296
+ hash: "39f1b201715413f13a60f449eef29706"
+ }
+ Frame {
+ msec: 3312
+ hash: "39f1b201715413f13a60f449eef29706"
+ }
+ Frame {
+ msec: 3328
+ hash: "39f1b201715413f13a60f449eef29706"
+ }
+ Frame {
+ msec: 3344
+ hash: "39f1b201715413f13a60f449eef29706"
+ }
+ Frame {
+ msec: 3360
+ hash: "4baf5c1227de45f9e620fe6eb0590014"
+ }
+ Frame {
+ msec: 3376
+ hash: "4baf5c1227de45f9e620fe6eb0590014"
+ }
+ Frame {
+ msec: 3392
+ hash: "4baf5c1227de45f9e620fe6eb0590014"
+ }
+ Frame {
+ msec: 3408
+ hash: "e1ce9c06e59fb6348fff3ce650c7943e"
+ }
+ Frame {
+ msec: 3424
+ hash: "e1ce9c06e59fb6348fff3ce650c7943e"
+ }
+ Frame {
+ msec: 3440
+ hash: "ad812bdef31b4f1f42c35f7d56b3af83"
+ }
+ Frame {
+ msec: 3456
+ hash: "ad812bdef31b4f1f42c35f7d56b3af83"
+ }
+ Frame {
+ msec: 3472
+ hash: "ad812bdef31b4f1f42c35f7d56b3af83"
+ }
+ Frame {
+ msec: 3488
+ hash: "ad812bdef31b4f1f42c35f7d56b3af83"
+ }
+ Frame {
+ msec: 3504
+ hash: "ad812bdef31b4f1f42c35f7d56b3af83"
+ }
+ Frame {
+ msec: 3520
+ hash: "ad812bdef31b4f1f42c35f7d56b3af83"
+ }
+ Frame {
+ msec: 3536
+ hash: "c08c8bcfc8c23f5e0e89d7f632fde2ca"
+ }
+ Frame {
+ msec: 3552
+ hash: "c08c8bcfc8c23f5e0e89d7f632fde2ca"
+ }
+ Frame {
+ msec: 3568
+ hash: "c08c8bcfc8c23f5e0e89d7f632fde2ca"
+ }
+ Frame {
+ msec: 3584
+ hash: "c08c8bcfc8c23f5e0e89d7f632fde2ca"
+ }
+ Frame {
+ msec: 3600
+ hash: "c08c8bcfc8c23f5e0e89d7f632fde2ca"
+ }
+ Frame {
+ msec: 3616
+ hash: "b8853dc109d063d982952780aa80419a"
+ }
+ Frame {
+ msec: 3632
+ hash: "b8853dc109d063d982952780aa80419a"
+ }
+ Frame {
+ msec: 3648
+ hash: "b8853dc109d063d982952780aa80419a"
+ }
+ Frame {
+ msec: 3664
+ hash: "b8853dc109d063d982952780aa80419a"
+ }
+ Frame {
+ msec: 3680
+ hash: "b8853dc109d063d982952780aa80419a"
+ }
+ Frame {
+ msec: 3696
+ hash: "6bfd7cfd6369df1eb570fda103d9e009"
+ }
+ Frame {
+ msec: 3712
+ hash: "6bfd7cfd6369df1eb570fda103d9e009"
+ }
+ Frame {
+ msec: 3728
+ hash: "b6dba4a456cd8d1b62501039cb796625"
+ }
+ Frame {
+ msec: 3744
+ hash: "b6dba4a456cd8d1b62501039cb796625"
+ }
+ Frame {
+ msec: 3760
+ hash: "f43892fffe4a8ce005b60ec43ce0aa4a"
+ }
+ Frame {
+ msec: 3776
+ hash: "f43892fffe4a8ce005b60ec43ce0aa4a"
+ }
+ Frame {
+ msec: 3792
+ hash: "f43892fffe4a8ce005b60ec43ce0aa4a"
+ }
+ Frame {
+ msec: 3808
+ hash: "f43892fffe4a8ce005b60ec43ce0aa4a"
+ }
+ Frame {
+ msec: 3824
+ hash: "f43892fffe4a8ce005b60ec43ce0aa4a"
+ }
+ Frame {
+ msec: 3840
+ image: "elide2.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "d2e873e69aed3e0b6e53123cd63e386c"
+ }
+ Frame {
+ msec: 3872
+ hash: "d2e873e69aed3e0b6e53123cd63e386c"
+ }
+ Frame {
+ msec: 3888
+ hash: "baa8edfce77628c7a1ec83adce96e2c6"
+ }
+ Frame {
+ msec: 3904
+ hash: "baa8edfce77628c7a1ec83adce96e2c6"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/multilength.0.png b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/multilength.0.png
new file mode 100644
index 0000000..80549b4
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/multilength.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/multilength.qml b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/multilength.qml
new file mode 100644
index 0000000..c2fd0d8
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-MAC/multilength.qml
@@ -0,0 +1,303 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "17f39c541a0b5bf958c3fdaa51b72fec"
+ }
+ Frame {
+ msec: 32
+ hash: "da61bb1afef532688045116bcce1da40"
+ }
+ Frame {
+ msec: 48
+ hash: "04ddcb158ce8ade4ea9ad16405c7d81a"
+ }
+ Frame {
+ msec: 64
+ hash: "7ca43ec7a6e630c9bc07478abf5c2686"
+ }
+ Frame {
+ msec: 80
+ hash: "ae2c4e73395cf4a5663110ba1b9996b2"
+ }
+ Frame {
+ msec: 96
+ hash: "5059426cced6ff6f92102100416b34d8"
+ }
+ Frame {
+ msec: 112
+ hash: "e816cb366ba9498d0ae194b789c25f12"
+ }
+ Frame {
+ msec: 128
+ hash: "fd8cd9b2916b7045086df92d19e8b436"
+ }
+ Frame {
+ msec: 144
+ hash: "965dfe4cad0a3d07c0b086d6351a43a1"
+ }
+ Frame {
+ msec: 160
+ hash: "56759a670c864d5f2ae392fa8545f3a4"
+ }
+ Frame {
+ msec: 176
+ hash: "8d3c2be4fcef526650cc84b5c2d29170"
+ }
+ Frame {
+ msec: 192
+ hash: "6d9f995bef186a69b259b8d18470f0e7"
+ }
+ Frame {
+ msec: 208
+ hash: "670c68a0943c5f037f8bf4c9ca0df501"
+ }
+ Frame {
+ msec: 224
+ hash: "6218cf02cb762aa6c33985fe1b2e47bb"
+ }
+ Frame {
+ msec: 240
+ hash: "6e3424f2b72d6582ceb5a6c1bfe3dba4"
+ }
+ Frame {
+ msec: 256
+ hash: "fb819344ab1d2966b043be790831e680"
+ }
+ Frame {
+ msec: 272
+ hash: "a729845b780cc708ddd578eab3bc0ab1"
+ }
+ Frame {
+ msec: 288
+ hash: "543f6566c4dfaecb70007848cc4f8525"
+ }
+ Frame {
+ msec: 304
+ hash: "5497699414bd8a428ead9703dc7273d5"
+ }
+ Frame {
+ msec: 320
+ hash: "e9230e525bb0ce33fe4bf3a2c948357d"
+ }
+ Frame {
+ msec: 336
+ hash: "ef6a6989f013d444547c0b98a65a34bf"
+ }
+ Frame {
+ msec: 352
+ hash: "ee89f5163fe269884d59acac7fc23336"
+ }
+ Frame {
+ msec: 368
+ hash: "0ffb11ceccdc607c1a072dde4aa40f93"
+ }
+ Frame {
+ msec: 384
+ hash: "97a51d7916e04815724506e289040e2a"
+ }
+ Frame {
+ msec: 400
+ hash: "a63d6d73827e1b40a7fec76e6555d7ab"
+ }
+ Frame {
+ msec: 416
+ hash: "d3eaf72442852317a48dc2b638ad48be"
+ }
+ Frame {
+ msec: 432
+ hash: "fa867a486d51089ddfeb60b9d44b329e"
+ }
+ Frame {
+ msec: 448
+ hash: "834ee944cfc63209bcba94153ccd2c4e"
+ }
+ Frame {
+ msec: 464
+ hash: "6d637d4763ae457233ab669f9f124bc1"
+ }
+ Frame {
+ msec: 480
+ hash: "66c60bd9de1870f46b726c404ab924d5"
+ }
+ Frame {
+ msec: 496
+ hash: "088499b53390e3a2c3ca7f42cac101a4"
+ }
+ Frame {
+ msec: 512
+ hash: "19d41f7696c86120460c4db7a0f9be1a"
+ }
+ Frame {
+ msec: 528
+ hash: "cd3ae14964e174db94e3e6c8609f366a"
+ }
+ Frame {
+ msec: 544
+ hash: "0c2172e091c2fb42d7c016779fa543d7"
+ }
+ Frame {
+ msec: 560
+ hash: "7534175e24b2cbab08518de8fc691003"
+ }
+ Frame {
+ msec: 576
+ hash: "a9ef64d20b4f93e60f25753e2d7dd2e0"
+ }
+ Frame {
+ msec: 592
+ hash: "d8e62a9fec27bfc892b0f3034bc73c3f"
+ }
+ Frame {
+ msec: 608
+ hash: "f8eee41f72e17693074a2ac250bb850e"
+ }
+ Frame {
+ msec: 624
+ hash: "3a08b62a8aa1f410415afbd7b8ee8728"
+ }
+ Frame {
+ msec: 640
+ hash: "0c4fba2bc8b7e440736f4a23d048c23c"
+ }
+ Frame {
+ msec: 656
+ hash: "521264dbeec0fbe3a467739f0c3f7b85"
+ }
+ Frame {
+ msec: 672
+ hash: "2c455560a624acfb7f316eae8926d765"
+ }
+ Frame {
+ msec: 688
+ hash: "c9fa632a0998cfae39d434b623b3060d"
+ }
+ Frame {
+ msec: 704
+ hash: "506ea16572fa0ee72cddcedfe5b4b9ea"
+ }
+ Frame {
+ msec: 720
+ hash: "83ae06a3ad24d2a6d49c71df2a287716"
+ }
+ Frame {
+ msec: 736
+ hash: "d4b11b45b4f97de0c0b878b97b804f09"
+ }
+ Frame {
+ msec: 752
+ hash: "868aac6c273b7cc90c31c14298ab9a3b"
+ }
+ Frame {
+ msec: 768
+ hash: "03d4222586194bb6513305d1837d3467"
+ }
+ Frame {
+ msec: 784
+ hash: "21e6cd89f06077bd5d346c7ccb8fa1e9"
+ }
+ Frame {
+ msec: 800
+ hash: "326092c4c29217f5afb5730ab3984353"
+ }
+ Frame {
+ msec: 816
+ hash: "4963d64093e65fe1973ffab5b7a15abc"
+ }
+ Frame {
+ msec: 832
+ hash: "3125e6e553bbf3f2fcf8fbf797a0c1f8"
+ }
+ Frame {
+ msec: 848
+ hash: "879b24c994d4a9854d08bda2bbf2ceda"
+ }
+ Frame {
+ msec: 864
+ hash: "03c4320dc2aa030c341d54899869b561"
+ }
+ Frame {
+ msec: 880
+ hash: "ae0e91975aecc6a416b4a23504fced32"
+ }
+ Frame {
+ msec: 896
+ hash: "e4150bdf0d4bab9bddc4605a9bde5b69"
+ }
+ Frame {
+ msec: 912
+ hash: "dc961cb82a0e58603b3914f16f0a3f52"
+ }
+ Frame {
+ msec: 928
+ hash: "5339507c303e42ecab853ca1688881f3"
+ }
+ Frame {
+ msec: 944
+ hash: "a7c616c57f98eb03c1501747ea1a8b45"
+ }
+ Frame {
+ msec: 960
+ image: "multilength.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "773ad6bc56f80bd5f6ce346ae0bc79c9"
+ }
+ Frame {
+ msec: 992
+ hash: "18b9ebfb9e5beac337143cc625fdfad7"
+ }
+ Frame {
+ msec: 1008
+ hash: "efb9f12a98ea137e2b50d344c21c4a89"
+ }
+ Frame {
+ msec: 1024
+ hash: "5b880958b3d20c09a10189cfc5f7b671"
+ }
+ Frame {
+ msec: 1040
+ hash: "edf2d8c174ac6e2e3a887336dc04df8c"
+ }
+ Frame {
+ msec: 1056
+ hash: "ad04b9e0e88695a13032abae8fef6f32"
+ }
+ Frame {
+ msec: 1072
+ hash: "e4ad91c9da3e954cac33ce98832fee1c"
+ }
+ Frame {
+ msec: 1088
+ hash: "a853212cf0ddc17cb0eb9be7f2ac5475"
+ }
+ Frame {
+ msec: 1104
+ hash: "a03f7ac2553fe114c4591ed98dab3ceb"
+ }
+ Frame {
+ msec: 1120
+ hash: "5de7491803582e0d13d2ff3e2eb3df82"
+ }
+ Frame {
+ msec: 1136
+ hash: "0685263ac468ce39b468d37a20f7e5f8"
+ }
+ Frame {
+ msec: 1152
+ hash: "14d4ab3f40dc6a0835c56c0f84256182"
+ }
+ Frame {
+ msec: 1168
+ hash: "6a8c61c31c3d00592863ad356c45b354"
+ }
+ Frame {
+ msec: 1184
+ hash: "08b3e3388469b1a62d3fc7f7a94f85a2"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/data-X11/elide.0.png b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-X11/elide.0.png
new file mode 100644
index 0000000..5631a46
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-X11/elide.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/data-X11/elide.qml b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-X11/elide.qml
new file mode 100644
index 0000000..cfd832e
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-X11/elide.qml
@@ -0,0 +1,279 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 32
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 48
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 64
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 80
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 96
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 112
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 128
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 144
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 160
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 176
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 192
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 208
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 224
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 240
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 256
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 272
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 288
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 304
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 320
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 336
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 352
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 368
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 384
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 400
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 416
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 432
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 448
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 464
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 480
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 496
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 512
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 528
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 544
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 560
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 576
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 592
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 608
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 624
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 640
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 656
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 672
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 688
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 704
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 720
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 736
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 752
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 768
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 784
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 800
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 816
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 832
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 848
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 864
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 880
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 896
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 912
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 928
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 944
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 960
+ image: "elide.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 992
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 1008
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 1024
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 1040
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+ Frame {
+ msec: 1056
+ hash: "48e2da07fd229d9db6afc0eda494cd11"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/data-X11/multilength.0.png b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-X11/multilength.0.png
new file mode 100644
index 0000000..6e2b625
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-X11/multilength.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/data-X11/multilength.qml b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-X11/multilength.qml
new file mode 100644
index 0000000..0c06196
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/data-X11/multilength.qml
@@ -0,0 +1,303 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "873e914454b7a040b05649ebd1a2f8c5"
+ }
+ Frame {
+ msec: 32
+ hash: "7682a4f1e361ca252da9713734a598e8"
+ }
+ Frame {
+ msec: 48
+ hash: "fa8884b550c8df872f96b61557163bcf"
+ }
+ Frame {
+ msec: 64
+ hash: "b84ecf9e38f126c3e32defee831d9462"
+ }
+ Frame {
+ msec: 80
+ hash: "21cc08f22d1f1fcb38b27a3a4259debe"
+ }
+ Frame {
+ msec: 96
+ hash: "93bdfeab813e25e85917f49c0d5f1314"
+ }
+ Frame {
+ msec: 112
+ hash: "5f03c252602e60fe19879945fa77c203"
+ }
+ Frame {
+ msec: 128
+ hash: "f0b2079f6c512bf80989ebfdbec4cfd8"
+ }
+ Frame {
+ msec: 144
+ hash: "9e7bb12d5b7605fc1d78ed9b2a549527"
+ }
+ Frame {
+ msec: 160
+ hash: "242bbbe6da87708c92fd47607ecb789d"
+ }
+ Frame {
+ msec: 176
+ hash: "f1db5c3a230b4d3e2e1dfefe6bf032a1"
+ }
+ Frame {
+ msec: 192
+ hash: "a416e820efd8e173cc52372218513e33"
+ }
+ Frame {
+ msec: 208
+ hash: "df711ab70c6087f8138fded16167f069"
+ }
+ Frame {
+ msec: 224
+ hash: "fb28eb2eeccfab28299640ef996c1115"
+ }
+ Frame {
+ msec: 240
+ hash: "c72c6d79a50dd7147f6b33784880eb36"
+ }
+ Frame {
+ msec: 256
+ hash: "4421027e65e95f98499ca53c57220ede"
+ }
+ Frame {
+ msec: 272
+ hash: "b7fbfb90d8cc167809e8e846d9021b4b"
+ }
+ Frame {
+ msec: 288
+ hash: "004614b1bf18e9aa78e78509c4f289aa"
+ }
+ Frame {
+ msec: 304
+ hash: "1792bbd8b69bae1d92fed2a6bcfe0187"
+ }
+ Frame {
+ msec: 320
+ hash: "957a8b95d6e85885d854b8eb1db10b04"
+ }
+ Frame {
+ msec: 336
+ hash: "d00c3e4d6d8e8d04b949840c28d73a33"
+ }
+ Frame {
+ msec: 352
+ hash: "2b79feaa62d773d92d8a684685b2004c"
+ }
+ Frame {
+ msec: 368
+ hash: "ef2f11b187028de0c56b23db3168fbc8"
+ }
+ Frame {
+ msec: 384
+ hash: "3a489a96aaeca80355313198b935691d"
+ }
+ Frame {
+ msec: 400
+ hash: "389f1798f900795a8686c38ace755974"
+ }
+ Frame {
+ msec: 416
+ hash: "34fc20be52fe3843420819b9adb90b22"
+ }
+ Frame {
+ msec: 432
+ hash: "fa715c5b6640eafe204bf3b8095c74b9"
+ }
+ Frame {
+ msec: 448
+ hash: "8e8315edcf23167ac58228b8c28b43e6"
+ }
+ Frame {
+ msec: 464
+ hash: "c18e82038f57dd869112cb1be14e4cfe"
+ }
+ Frame {
+ msec: 480
+ hash: "3f07e95b09e39f2e5d93216850f4a4d9"
+ }
+ Frame {
+ msec: 496
+ hash: "20f0e6eaeac04d6f93565adfab485218"
+ }
+ Frame {
+ msec: 512
+ hash: "e3f66d1dfe88dd868a54a8493828ef5f"
+ }
+ Frame {
+ msec: 528
+ hash: "d39d34f63e1b29c187249cb388552b38"
+ }
+ Frame {
+ msec: 544
+ hash: "5d2e8df5003732f3b53fff4aaddea06c"
+ }
+ Frame {
+ msec: 560
+ hash: "35c3aa2dae481a8f817d849b3f3151f2"
+ }
+ Frame {
+ msec: 576
+ hash: "966b78018879224948b4d85fe73d7985"
+ }
+ Frame {
+ msec: 592
+ hash: "0db067bf9debc3f36dd539cf83652fb8"
+ }
+ Frame {
+ msec: 608
+ hash: "ea1c3249ffd2439533907ceaeaafbc56"
+ }
+ Frame {
+ msec: 624
+ hash: "da85c0e14b95ca9a729984b67ebd52ad"
+ }
+ Frame {
+ msec: 640
+ hash: "5c26ae844ac52dbe131fed0638787aac"
+ }
+ Frame {
+ msec: 656
+ hash: "4b09c23ad624db80afcb2a6c1d5ddb96"
+ }
+ Frame {
+ msec: 672
+ hash: "9995deb3d22b418a19093b4b988b3fcc"
+ }
+ Frame {
+ msec: 688
+ hash: "77e53358f2d4392d0ba988187e7e272c"
+ }
+ Frame {
+ msec: 704
+ hash: "3fbbb73e790cf4a0583531fe1580f761"
+ }
+ Frame {
+ msec: 720
+ hash: "9d562e141095a258ee61463e644d9889"
+ }
+ Frame {
+ msec: 736
+ hash: "d05633ca49f96bf327bed5c9c0f6ac98"
+ }
+ Frame {
+ msec: 752
+ hash: "34c38e40e831dbede8fa83de31ed76aa"
+ }
+ Frame {
+ msec: 768
+ hash: "288e52c8be54f4914f687cef4ce1f24a"
+ }
+ Frame {
+ msec: 784
+ hash: "0b8b744aaf67e8b17fa459bb0ffb6db5"
+ }
+ Frame {
+ msec: 800
+ hash: "273dbe3e8c21bfeafa516d07778928c8"
+ }
+ Frame {
+ msec: 816
+ hash: "ef94ee1885287c72fa78038547d98b96"
+ }
+ Frame {
+ msec: 832
+ hash: "965e6387672319ac04fdc42768e581f1"
+ }
+ Frame {
+ msec: 848
+ hash: "95553d8aaece94c7017e57b03cd46c9a"
+ }
+ Frame {
+ msec: 864
+ hash: "bdaf35b920e5b08b8639d452afd2d51e"
+ }
+ Frame {
+ msec: 880
+ hash: "0ed16f00e89327dc8679bec42179c4ce"
+ }
+ Frame {
+ msec: 896
+ hash: "8c93e0ac399e09e98e34b90654e0e42a"
+ }
+ Frame {
+ msec: 912
+ hash: "93798fbb33adb6c813018757cfa34017"
+ }
+ Frame {
+ msec: 928
+ hash: "db4d7581e9a1f082a2c29ef7482a7893"
+ }
+ Frame {
+ msec: 944
+ hash: "67e074c1e083334de84a3549f4ee9ca4"
+ }
+ Frame {
+ msec: 960
+ image: "multilength.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "b1122c815a755c9988bcf03a3f7d7d6d"
+ }
+ Frame {
+ msec: 992
+ hash: "31148bae6653bdc3f1827d06de845663"
+ }
+ Frame {
+ msec: 1008
+ hash: "812428a944086ca46e102891964dac69"
+ }
+ Frame {
+ msec: 1024
+ hash: "ee7bb66bd7e8623325200ac994f8b41a"
+ }
+ Frame {
+ msec: 1040
+ hash: "6bd21a98e5c373a2c78334a0255e7750"
+ }
+ Frame {
+ msec: 1056
+ hash: "2e8e1eea14068b0e82464ed52ec1ab7a"
+ }
+ Frame {
+ msec: 1072
+ hash: "6dca5756e20eeb778e31d7b602ce77d7"
+ }
+ Frame {
+ msec: 1088
+ hash: "3cbb6700b9e30864a2b1e3d4d71d2a78"
+ }
+ Frame {
+ msec: 1104
+ hash: "c4d0230d2c4f73191a514e5df4c0b083"
+ }
+ Frame {
+ msec: 1120
+ hash: "a33df967fe43151dfc503d2ac78f8ca8"
+ }
+ Frame {
+ msec: 1136
+ hash: "0c7ff101efe60b600cacaf8d04d79053"
+ }
+ Frame {
+ msec: 1152
+ hash: "d246cfb75d89b9666877860aaf45ba60"
+ }
+ Frame {
+ msec: 1168
+ hash: "1130998aa2618a29ec6bc4b9219eedfa"
+ }
+ Frame {
+ msec: 1184
+ hash: "741dd83003633bbf8d28c2d4ddd8a2d0"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide.0.png b/tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide.0.png
new file mode 100644
index 0000000..1a8c89b
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide.qml b/tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide.qml
new file mode 100644
index 0000000..59f17f7
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide.qml
@@ -0,0 +1,279 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 32
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 48
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 64
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 80
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 96
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 112
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 128
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 144
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 160
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 176
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 192
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 208
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 224
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 240
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 256
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 272
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 288
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 304
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 320
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 336
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 352
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 368
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 384
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 400
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 416
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 432
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 448
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 464
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 480
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 496
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 512
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 528
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 544
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 560
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 576
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 592
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 608
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 624
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 640
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 656
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 672
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 688
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 704
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 720
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 736
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 752
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 768
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 784
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 800
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 816
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 832
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 848
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 864
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 880
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 896
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 912
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 928
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 944
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 960
+ image: "elide.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 992
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 1008
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 1024
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 1040
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+ Frame {
+ msec: 1056
+ hash: "c80d2bcd4be99c73e6c628870206ce8c"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide2.0.png b/tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide2.0.png
new file mode 100644
index 0000000..3dfade5
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide2.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide2.1.png b/tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide2.1.png
new file mode 100644
index 0000000..1ee2076
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide2.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide2.2.png b/tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide2.2.png
new file mode 100644
index 0000000..ae680be
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide2.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide2.3.png b/tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide2.3.png
new file mode 100644
index 0000000..c2859be
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide2.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide2.qml b/tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide2.qml
new file mode 100644
index 0000000..c592f18
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/data/elide2.qml
@@ -0,0 +1,991 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 32
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 48
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 64
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 80
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 96
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 112
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 128
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 144
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 160
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 176
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 192
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 208
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 224
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 240
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 256
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 272
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 288
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 304
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 320
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 336
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 352
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 368
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 384
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 400
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 416
+ hash: "086a46352aa1221b5e57f5624b0c256b"
+ }
+ Frame {
+ msec: 432
+ hash: "fc3a7e898d6bfa2af4d774b20609f967"
+ }
+ Frame {
+ msec: 448
+ hash: "fc3a7e898d6bfa2af4d774b20609f967"
+ }
+ Frame {
+ msec: 464
+ hash: "fc3a7e898d6bfa2af4d774b20609f967"
+ }
+ Frame {
+ msec: 480
+ hash: "3bcaa6426796bc9097e0aeba90dd5e39"
+ }
+ Frame {
+ msec: 496
+ hash: "3bcaa6426796bc9097e0aeba90dd5e39"
+ }
+ Frame {
+ msec: 512
+ hash: "3bcaa6426796bc9097e0aeba90dd5e39"
+ }
+ Frame {
+ msec: 528
+ hash: "3bcaa6426796bc9097e0aeba90dd5e39"
+ }
+ Frame {
+ msec: 544
+ hash: "3bcaa6426796bc9097e0aeba90dd5e39"
+ }
+ Frame {
+ msec: 560
+ hash: "3bcaa6426796bc9097e0aeba90dd5e39"
+ }
+ Frame {
+ msec: 576
+ hash: "4daa612cd7e7ee455ff1a93329202865"
+ }
+ Frame {
+ msec: 592
+ hash: "4daa612cd7e7ee455ff1a93329202865"
+ }
+ Frame {
+ msec: 608
+ hash: "4daa612cd7e7ee455ff1a93329202865"
+ }
+ Frame {
+ msec: 624
+ hash: "4daa612cd7e7ee455ff1a93329202865"
+ }
+ Frame {
+ msec: 640
+ hash: "4daa612cd7e7ee455ff1a93329202865"
+ }
+ Frame {
+ msec: 656
+ hash: "3f362ad550db910f1d9f261557c65913"
+ }
+ Frame {
+ msec: 672
+ hash: "3f362ad550db910f1d9f261557c65913"
+ }
+ Frame {
+ msec: 688
+ hash: "f159011c2b85fe212a32a7b5d2a57016"
+ }
+ Frame {
+ msec: 704
+ hash: "f159011c2b85fe212a32a7b5d2a57016"
+ }
+ Frame {
+ msec: 720
+ hash: "f159011c2b85fe212a32a7b5d2a57016"
+ }
+ Frame {
+ msec: 736
+ hash: "f159011c2b85fe212a32a7b5d2a57016"
+ }
+ Frame {
+ msec: 752
+ hash: "f159011c2b85fe212a32a7b5d2a57016"
+ }
+ Frame {
+ msec: 768
+ hash: "f159011c2b85fe212a32a7b5d2a57016"
+ }
+ Frame {
+ msec: 784
+ hash: "a892c67199c23e5d9012a6a24cb45d16"
+ }
+ Frame {
+ msec: 800
+ hash: "a892c67199c23e5d9012a6a24cb45d16"
+ }
+ Frame {
+ msec: 816
+ hash: "a892c67199c23e5d9012a6a24cb45d16"
+ }
+ Frame {
+ msec: 832
+ hash: "532e01ed6ede95eca68e641e2edb7f1c"
+ }
+ Frame {
+ msec: 848
+ hash: "532e01ed6ede95eca68e641e2edb7f1c"
+ }
+ Frame {
+ msec: 864
+ hash: "532e01ed6ede95eca68e641e2edb7f1c"
+ }
+ Frame {
+ msec: 880
+ hash: "532e01ed6ede95eca68e641e2edb7f1c"
+ }
+ Frame {
+ msec: 896
+ hash: "532e01ed6ede95eca68e641e2edb7f1c"
+ }
+ Frame {
+ msec: 912
+ hash: "a7dc1d7dde956d62834de0968261386f"
+ }
+ Frame {
+ msec: 928
+ hash: "a7dc1d7dde956d62834de0968261386f"
+ }
+ Frame {
+ msec: 944
+ hash: "a7dc1d7dde956d62834de0968261386f"
+ }
+ Frame {
+ msec: 960
+ image: "elide2.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "a7dc1d7dde956d62834de0968261386f"
+ }
+ Frame {
+ msec: 992
+ hash: "a590e1358fac567dda9fdfc6bfe4ab89"
+ }
+ Frame {
+ msec: 1008
+ hash: "a590e1358fac567dda9fdfc6bfe4ab89"
+ }
+ Frame {
+ msec: 1024
+ hash: "778d34ca89b5db88fe26619576e9d337"
+ }
+ Frame {
+ msec: 1040
+ hash: "778d34ca89b5db88fe26619576e9d337"
+ }
+ Frame {
+ msec: 1056
+ hash: "778d34ca89b5db88fe26619576e9d337"
+ }
+ Frame {
+ msec: 1072
+ hash: "778d34ca89b5db88fe26619576e9d337"
+ }
+ Frame {
+ msec: 1088
+ hash: "778d34ca89b5db88fe26619576e9d337"
+ }
+ Frame {
+ msec: 1104
+ hash: "9424caee019aa9bccd4156b0b9ca2723"
+ }
+ Frame {
+ msec: 1120
+ hash: "9424caee019aa9bccd4156b0b9ca2723"
+ }
+ Frame {
+ msec: 1136
+ hash: "9424caee019aa9bccd4156b0b9ca2723"
+ }
+ Frame {
+ msec: 1152
+ hash: "000061a140ab71a44c0480a92ad3bc70"
+ }
+ Frame {
+ msec: 1168
+ hash: "000061a140ab71a44c0480a92ad3bc70"
+ }
+ Frame {
+ msec: 1184
+ hash: "000061a140ab71a44c0480a92ad3bc70"
+ }
+ Frame {
+ msec: 1200
+ hash: "5dec9638853165428cd15ae02e1d03ce"
+ }
+ Frame {
+ msec: 1216
+ hash: "5dec9638853165428cd15ae02e1d03ce"
+ }
+ Frame {
+ msec: 1232
+ hash: "5dec9638853165428cd15ae02e1d03ce"
+ }
+ Frame {
+ msec: 1248
+ hash: "ecb69bdbd13114715f738b1ace3ecf51"
+ }
+ Frame {
+ msec: 1264
+ hash: "ecb69bdbd13114715f738b1ace3ecf51"
+ }
+ Frame {
+ msec: 1280
+ hash: "ecb69bdbd13114715f738b1ace3ecf51"
+ }
+ Frame {
+ msec: 1296
+ hash: "ecb69bdbd13114715f738b1ace3ecf51"
+ }
+ Frame {
+ msec: 1312
+ hash: "ecb69bdbd13114715f738b1ace3ecf51"
+ }
+ Frame {
+ msec: 1328
+ hash: "923b4f4f4a3dbaefbf003859067b2ea9"
+ }
+ Frame {
+ msec: 1344
+ hash: "923b4f4f4a3dbaefbf003859067b2ea9"
+ }
+ Frame {
+ msec: 1360
+ hash: "923b4f4f4a3dbaefbf003859067b2ea9"
+ }
+ Frame {
+ msec: 1376
+ hash: "923b4f4f4a3dbaefbf003859067b2ea9"
+ }
+ Frame {
+ msec: 1392
+ hash: "923b4f4f4a3dbaefbf003859067b2ea9"
+ }
+ Frame {
+ msec: 1408
+ hash: "d4230a476237f9e13a132e775f1b960c"
+ }
+ Frame {
+ msec: 1424
+ hash: "d4230a476237f9e13a132e775f1b960c"
+ }
+ Frame {
+ msec: 1440
+ hash: "d4230a476237f9e13a132e775f1b960c"
+ }
+ Frame {
+ msec: 1456
+ hash: "d4230a476237f9e13a132e775f1b960c"
+ }
+ Frame {
+ msec: 1472
+ hash: "d4230a476237f9e13a132e775f1b960c"
+ }
+ Frame {
+ msec: 1488
+ hash: "504ad2ba8543f7ad6490bd45d86fbef9"
+ }
+ Frame {
+ msec: 1504
+ hash: "504ad2ba8543f7ad6490bd45d86fbef9"
+ }
+ Frame {
+ msec: 1520
+ hash: "504ad2ba8543f7ad6490bd45d86fbef9"
+ }
+ Frame {
+ msec: 1536
+ hash: "504ad2ba8543f7ad6490bd45d86fbef9"
+ }
+ Frame {
+ msec: 1552
+ hash: "504ad2ba8543f7ad6490bd45d86fbef9"
+ }
+ Frame {
+ msec: 1568
+ hash: "504ad2ba8543f7ad6490bd45d86fbef9"
+ }
+ Frame {
+ msec: 1584
+ hash: "dd412c6a2e5cb8890cb43142c84a5673"
+ }
+ Frame {
+ msec: 1600
+ hash: "dd412c6a2e5cb8890cb43142c84a5673"
+ }
+ Frame {
+ msec: 1616
+ hash: "dd412c6a2e5cb8890cb43142c84a5673"
+ }
+ Frame {
+ msec: 1632
+ hash: "38b1fa7bd4e2f13b05caa62903c56ab6"
+ }
+ Frame {
+ msec: 1648
+ hash: "38b1fa7bd4e2f13b05caa62903c56ab6"
+ }
+ Frame {
+ msec: 1664
+ hash: "38b1fa7bd4e2f13b05caa62903c56ab6"
+ }
+ Frame {
+ msec: 1680
+ hash: "38b1fa7bd4e2f13b05caa62903c56ab6"
+ }
+ Frame {
+ msec: 1696
+ hash: "ffb2cb01c868c1dfa6b5154c4e8a7fd8"
+ }
+ Frame {
+ msec: 1712
+ hash: "ffb2cb01c868c1dfa6b5154c4e8a7fd8"
+ }
+ Frame {
+ msec: 1728
+ hash: "ffb2cb01c868c1dfa6b5154c4e8a7fd8"
+ }
+ Frame {
+ msec: 1744
+ hash: "9effd5fc19246cfe3d2f5968c5caaa4e"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1760
+ hash: "9effd5fc19246cfe3d2f5968c5caaa4e"
+ }
+ Frame {
+ msec: 1776
+ hash: "9effd5fc19246cfe3d2f5968c5caaa4e"
+ }
+ Frame {
+ msec: 1792
+ hash: "9effd5fc19246cfe3d2f5968c5caaa4e"
+ }
+ Frame {
+ msec: 1808
+ hash: "4fa14ae57d170b16fd90d59d5ec83561"
+ }
+ Frame {
+ msec: 1824
+ hash: "4fa14ae57d170b16fd90d59d5ec83561"
+ }
+ Frame {
+ msec: 1840
+ hash: "4fa14ae57d170b16fd90d59d5ec83561"
+ }
+ Frame {
+ msec: 1856
+ hash: "4fa14ae57d170b16fd90d59d5ec83561"
+ }
+ Frame {
+ msec: 1872
+ hash: "4fa14ae57d170b16fd90d59d5ec83561"
+ }
+ Frame {
+ msec: 1888
+ hash: "976dd5bc154522438f92790f28639512"
+ }
+ Frame {
+ msec: 1904
+ hash: "976dd5bc154522438f92790f28639512"
+ }
+ Frame {
+ msec: 1920
+ image: "elide2.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "976dd5bc154522438f92790f28639512"
+ }
+ Frame {
+ msec: 1952
+ hash: "976dd5bc154522438f92790f28639512"
+ }
+ Frame {
+ msec: 1968
+ hash: "4ae1d6ddb9a78cc2f4e81b58fcca6a20"
+ }
+ Frame {
+ msec: 1984
+ hash: "4ae1d6ddb9a78cc2f4e81b58fcca6a20"
+ }
+ Frame {
+ msec: 2000
+ hash: "4ae1d6ddb9a78cc2f4e81b58fcca6a20"
+ }
+ Frame {
+ msec: 2016
+ hash: "4ae1d6ddb9a78cc2f4e81b58fcca6a20"
+ }
+ Frame {
+ msec: 2032
+ hash: "4ae1d6ddb9a78cc2f4e81b58fcca6a20"
+ }
+ Frame {
+ msec: 2048
+ hash: "84bdf634cfd4de588f2b0984aa3e97bd"
+ }
+ Frame {
+ msec: 2064
+ hash: "84bdf634cfd4de588f2b0984aa3e97bd"
+ }
+ Frame {
+ msec: 2080
+ hash: "84bdf634cfd4de588f2b0984aa3e97bd"
+ }
+ Frame {
+ msec: 2096
+ hash: "1a978ed6951afe40912efcfb54dcce65"
+ }
+ Frame {
+ msec: 2112
+ hash: "1a978ed6951afe40912efcfb54dcce65"
+ }
+ Frame {
+ msec: 2128
+ hash: "1a978ed6951afe40912efcfb54dcce65"
+ }
+ Frame {
+ msec: 2144
+ hash: "a57eea59fe6475164e24688489977869"
+ }
+ Frame {
+ msec: 2160
+ hash: "a57eea59fe6475164e24688489977869"
+ }
+ Frame {
+ msec: 2176
+ hash: "a57eea59fe6475164e24688489977869"
+ }
+ Frame {
+ msec: 2192
+ hash: "69ac1d93bd51f495783dbc6a0f7b27be"
+ }
+ Frame {
+ msec: 2208
+ hash: "69ac1d93bd51f495783dbc6a0f7b27be"
+ }
+ Frame {
+ msec: 2224
+ hash: "69ac1d93bd51f495783dbc6a0f7b27be"
+ }
+ Frame {
+ msec: 2240
+ hash: "69ac1d93bd51f495783dbc6a0f7b27be"
+ }
+ Frame {
+ msec: 2256
+ hash: "69ac1d93bd51f495783dbc6a0f7b27be"
+ }
+ Frame {
+ msec: 2272
+ hash: "04c62a4d01e9309eaeea87902013c8b9"
+ }
+ Frame {
+ msec: 2288
+ hash: "04c62a4d01e9309eaeea87902013c8b9"
+ }
+ Frame {
+ msec: 2304
+ hash: "fac2f5730a600d6b69280d5e6962c1d2"
+ }
+ Frame {
+ msec: 2320
+ hash: "fac2f5730a600d6b69280d5e6962c1d2"
+ }
+ Frame {
+ msec: 2336
+ hash: "fac2f5730a600d6b69280d5e6962c1d2"
+ }
+ Frame {
+ msec: 2352
+ hash: "fac2f5730a600d6b69280d5e6962c1d2"
+ }
+ Frame {
+ msec: 2368
+ hash: "fac2f5730a600d6b69280d5e6962c1d2"
+ }
+ Frame {
+ msec: 2384
+ hash: "13f7ce73c0a2f1c7958294e4fbf3d30d"
+ }
+ Frame {
+ msec: 2400
+ hash: "13f7ce73c0a2f1c7958294e4fbf3d30d"
+ }
+ Frame {
+ msec: 2416
+ hash: "13f7ce73c0a2f1c7958294e4fbf3d30d"
+ }
+ Frame {
+ msec: 2432
+ hash: "13f7ce73c0a2f1c7958294e4fbf3d30d"
+ }
+ Frame {
+ msec: 2448
+ hash: "13f7ce73c0a2f1c7958294e4fbf3d30d"
+ }
+ Frame {
+ msec: 2464
+ hash: "96a5678ee5bcbf28df6a2bf66b2b6189"
+ }
+ Frame {
+ msec: 2480
+ hash: "96a5678ee5bcbf28df6a2bf66b2b6189"
+ }
+ Frame {
+ msec: 2496
+ hash: "96a5678ee5bcbf28df6a2bf66b2b6189"
+ }
+ Frame {
+ msec: 2512
+ hash: "96a5678ee5bcbf28df6a2bf66b2b6189"
+ }
+ Frame {
+ msec: 2528
+ hash: "96a5678ee5bcbf28df6a2bf66b2b6189"
+ }
+ Frame {
+ msec: 2544
+ hash: "abb220abcd579abd988b6f9f7e0bc2b7"
+ }
+ Frame {
+ msec: 2560
+ hash: "abb220abcd579abd988b6f9f7e0bc2b7"
+ }
+ Frame {
+ msec: 2576
+ hash: "abb220abcd579abd988b6f9f7e0bc2b7"
+ }
+ Frame {
+ msec: 2592
+ hash: "abb220abcd579abd988b6f9f7e0bc2b7"
+ }
+ Frame {
+ msec: 2608
+ hash: "8a8585eb9a5cd1d6c38dc7076923e7f7"
+ }
+ Frame {
+ msec: 2624
+ hash: "8a8585eb9a5cd1d6c38dc7076923e7f7"
+ }
+ Frame {
+ msec: 2640
+ hash: "8a8585eb9a5cd1d6c38dc7076923e7f7"
+ }
+ Frame {
+ msec: 2656
+ hash: "c13ec1d294921e6a56f6ac4198e084eb"
+ }
+ Frame {
+ msec: 2672
+ hash: "c13ec1d294921e6a56f6ac4198e084eb"
+ }
+ Frame {
+ msec: 2688
+ hash: "c13ec1d294921e6a56f6ac4198e084eb"
+ }
+ Frame {
+ msec: 2704
+ hash: "c13ec1d294921e6a56f6ac4198e084eb"
+ }
+ Frame {
+ msec: 2720
+ hash: "53295720dbabe6fbfff56bea0e0ba7f1"
+ }
+ Frame {
+ msec: 2736
+ hash: "53295720dbabe6fbfff56bea0e0ba7f1"
+ }
+ Frame {
+ msec: 2752
+ hash: "53295720dbabe6fbfff56bea0e0ba7f1"
+ }
+ Frame {
+ msec: 2768
+ hash: "53295720dbabe6fbfff56bea0e0ba7f1"
+ }
+ Frame {
+ msec: 2784
+ hash: "53295720dbabe6fbfff56bea0e0ba7f1"
+ }
+ Frame {
+ msec: 2800
+ hash: "53295720dbabe6fbfff56bea0e0ba7f1"
+ }
+ Frame {
+ msec: 2816
+ hash: "53295720dbabe6fbfff56bea0e0ba7f1"
+ }
+ Frame {
+ msec: 2832
+ hash: "f44b88b80219497370b5d2ad380d03bf"
+ }
+ Frame {
+ msec: 2848
+ hash: "f44b88b80219497370b5d2ad380d03bf"
+ }
+ Frame {
+ msec: 2864
+ hash: "a093510751799f3466156f9775988044"
+ }
+ Frame {
+ msec: 2880
+ image: "elide2.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "a093510751799f3466156f9775988044"
+ }
+ Frame {
+ msec: 2912
+ hash: "6327bcbb2d78d3c33eb964643b0d09a5"
+ }
+ Frame {
+ msec: 2928
+ hash: "6327bcbb2d78d3c33eb964643b0d09a5"
+ }
+ Frame {
+ msec: 2944
+ hash: "6327bcbb2d78d3c33eb964643b0d09a5"
+ }
+ Frame {
+ msec: 2960
+ hash: "6327bcbb2d78d3c33eb964643b0d09a5"
+ }
+ Frame {
+ msec: 2976
+ hash: "6327bcbb2d78d3c33eb964643b0d09a5"
+ }
+ Frame {
+ msec: 2992
+ hash: "d7da3826914ad1d2696803b659992e73"
+ }
+ Frame {
+ msec: 3008
+ hash: "d7da3826914ad1d2696803b659992e73"
+ }
+ Frame {
+ msec: 3024
+ hash: "d7da3826914ad1d2696803b659992e73"
+ }
+ Frame {
+ msec: 3040
+ hash: "d7da3826914ad1d2696803b659992e73"
+ }
+ Frame {
+ msec: 3056
+ hash: "d7da3826914ad1d2696803b659992e73"
+ }
+ Frame {
+ msec: 3072
+ hash: "ad40dc153a57c35ea62d9d044f08c9ac"
+ }
+ Frame {
+ msec: 3088
+ hash: "ad40dc153a57c35ea62d9d044f08c9ac"
+ }
+ Frame {
+ msec: 3104
+ hash: "ad40dc153a57c35ea62d9d044f08c9ac"
+ }
+ Frame {
+ msec: 3120
+ hash: "df90afe882b18f3fd7b12e52ff36e66f"
+ }
+ Frame {
+ msec: 3136
+ hash: "df90afe882b18f3fd7b12e52ff36e66f"
+ }
+ Frame {
+ msec: 3152
+ hash: "5b84785ffe15c15c3b94c845db7a4a44"
+ }
+ Frame {
+ msec: 3168
+ hash: "5b84785ffe15c15c3b94c845db7a4a44"
+ }
+ Frame {
+ msec: 3184
+ hash: "5b84785ffe15c15c3b94c845db7a4a44"
+ }
+ Frame {
+ msec: 3200
+ hash: "f5ca71af8d9fa1809ab88b60f9170bb5"
+ }
+ Frame {
+ msec: 3216
+ hash: "f5ca71af8d9fa1809ab88b60f9170bb5"
+ }
+ Frame {
+ msec: 3232
+ hash: "f5ca71af8d9fa1809ab88b60f9170bb5"
+ }
+ Frame {
+ msec: 3248
+ hash: "f5ca71af8d9fa1809ab88b60f9170bb5"
+ }
+ Frame {
+ msec: 3264
+ hash: "f5ca71af8d9fa1809ab88b60f9170bb5"
+ }
+ Frame {
+ msec: 3280
+ hash: "39f1b201715413f13a60f449eef29706"
+ }
+ Frame {
+ msec: 3296
+ hash: "39f1b201715413f13a60f449eef29706"
+ }
+ Frame {
+ msec: 3312
+ hash: "39f1b201715413f13a60f449eef29706"
+ }
+ Frame {
+ msec: 3328
+ hash: "39f1b201715413f13a60f449eef29706"
+ }
+ Frame {
+ msec: 3344
+ hash: "39f1b201715413f13a60f449eef29706"
+ }
+ Frame {
+ msec: 3360
+ hash: "4baf5c1227de45f9e620fe6eb0590014"
+ }
+ Frame {
+ msec: 3376
+ hash: "4baf5c1227de45f9e620fe6eb0590014"
+ }
+ Frame {
+ msec: 3392
+ hash: "4baf5c1227de45f9e620fe6eb0590014"
+ }
+ Frame {
+ msec: 3408
+ hash: "e1ce9c06e59fb6348fff3ce650c7943e"
+ }
+ Frame {
+ msec: 3424
+ hash: "e1ce9c06e59fb6348fff3ce650c7943e"
+ }
+ Frame {
+ msec: 3440
+ hash: "ad812bdef31b4f1f42c35f7d56b3af83"
+ }
+ Frame {
+ msec: 3456
+ hash: "ad812bdef31b4f1f42c35f7d56b3af83"
+ }
+ Frame {
+ msec: 3472
+ hash: "ad812bdef31b4f1f42c35f7d56b3af83"
+ }
+ Frame {
+ msec: 3488
+ hash: "ad812bdef31b4f1f42c35f7d56b3af83"
+ }
+ Frame {
+ msec: 3504
+ hash: "ad812bdef31b4f1f42c35f7d56b3af83"
+ }
+ Frame {
+ msec: 3520
+ hash: "ad812bdef31b4f1f42c35f7d56b3af83"
+ }
+ Frame {
+ msec: 3536
+ hash: "c08c8bcfc8c23f5e0e89d7f632fde2ca"
+ }
+ Frame {
+ msec: 3552
+ hash: "c08c8bcfc8c23f5e0e89d7f632fde2ca"
+ }
+ Frame {
+ msec: 3568
+ hash: "c08c8bcfc8c23f5e0e89d7f632fde2ca"
+ }
+ Frame {
+ msec: 3584
+ hash: "c08c8bcfc8c23f5e0e89d7f632fde2ca"
+ }
+ Frame {
+ msec: 3600
+ hash: "c08c8bcfc8c23f5e0e89d7f632fde2ca"
+ }
+ Frame {
+ msec: 3616
+ hash: "b8853dc109d063d982952780aa80419a"
+ }
+ Frame {
+ msec: 3632
+ hash: "b8853dc109d063d982952780aa80419a"
+ }
+ Frame {
+ msec: 3648
+ hash: "b8853dc109d063d982952780aa80419a"
+ }
+ Frame {
+ msec: 3664
+ hash: "b8853dc109d063d982952780aa80419a"
+ }
+ Frame {
+ msec: 3680
+ hash: "b8853dc109d063d982952780aa80419a"
+ }
+ Frame {
+ msec: 3696
+ hash: "6bfd7cfd6369df1eb570fda103d9e009"
+ }
+ Frame {
+ msec: 3712
+ hash: "6bfd7cfd6369df1eb570fda103d9e009"
+ }
+ Frame {
+ msec: 3728
+ hash: "b6dba4a456cd8d1b62501039cb796625"
+ }
+ Frame {
+ msec: 3744
+ hash: "b6dba4a456cd8d1b62501039cb796625"
+ }
+ Frame {
+ msec: 3760
+ hash: "f43892fffe4a8ce005b60ec43ce0aa4a"
+ }
+ Frame {
+ msec: 3776
+ hash: "f43892fffe4a8ce005b60ec43ce0aa4a"
+ }
+ Frame {
+ msec: 3792
+ hash: "f43892fffe4a8ce005b60ec43ce0aa4a"
+ }
+ Frame {
+ msec: 3808
+ hash: "f43892fffe4a8ce005b60ec43ce0aa4a"
+ }
+ Frame {
+ msec: 3824
+ hash: "f43892fffe4a8ce005b60ec43ce0aa4a"
+ }
+ Frame {
+ msec: 3840
+ image: "elide2.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "d2e873e69aed3e0b6e53123cd63e386c"
+ }
+ Frame {
+ msec: 3872
+ hash: "d2e873e69aed3e0b6e53123cd63e386c"
+ }
+ Frame {
+ msec: 3888
+ hash: "baa8edfce77628c7a1ec83adce96e2c6"
+ }
+ Frame {
+ msec: 3904
+ hash: "baa8edfce77628c7a1ec83adce96e2c6"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/elide.qml b/tests/auto/declarative/visual/qmlgraphicstext/elide/elide.qml
new file mode 100644
index 0000000..fa6b5da
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/elide.qml
@@ -0,0 +1,31 @@
+import Qt 4.6
+
+Rectangle {
+ width: childrenRect.width
+ height: childrenRect.height
+ Column {
+ width: 80
+ height: myText.height*4
+ Text {
+ elide: "ElideLeft"
+ text: "aaa bbb ccc ddd eee fff"
+ width: 80
+ id: myText
+ }
+ Text {
+ elide: "ElideMiddle"
+ text: "aaa bbb ccc ddd eee fff"
+ width: 80
+ }
+ Text {
+ elide: "ElideRight"
+ text: "aaa bbb ccc ddd eee fff"
+ width: 80
+ }
+ Text {
+ elide: "ElideNone"
+ text: "aaa bbb ccc ddd eee fff"
+ width: 80
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/elide2.qml b/tests/auto/declarative/visual/qmlgraphicstext/elide/elide2.qml
new file mode 100644
index 0000000..c163e05
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/elide2.qml
@@ -0,0 +1,12 @@
+import Qt 4.6
+
+Rectangle {
+ width: 500
+ height: 100
+
+ Text {
+ width: NumberAnimation { from: 500; to: 0; repeat: true; duration: 5000 }
+ elide: Text.ElideRight
+ text: 'Here is some very long text that we should truncate when sizing window'
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/elide/multilength.qml b/tests/auto/declarative/visual/qmlgraphicstext/elide/multilength.qml
new file mode 100644
index 0000000..ca41eab
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/elide/multilength.qml
@@ -0,0 +1,19 @@
+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; repeat: true; duration: 1000 }
+ elide: "ElideRight"
+ 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/qmlgraphicstext/font/data-MAC/plaintext.0.png b/tests/auto/declarative/visual/qmlgraphicstext/font/data-MAC/plaintext.0.png
new file mode 100644
index 0000000..67b497f
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/font/data-MAC/plaintext.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/font/data-MAC/plaintext.qml b/tests/auto/declarative/visual/qmlgraphicstext/font/data-MAC/plaintext.qml
new file mode 100644
index 0000000..ab17eb1
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/font/data-MAC/plaintext.qml
@@ -0,0 +1,351 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 32
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 48
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 64
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 80
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 96
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 112
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 128
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 144
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 160
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 176
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 192
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 208
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 224
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 240
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 256
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 272
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 288
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 304
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 320
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 336
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 352
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 368
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 384
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 400
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 416
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 432
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 448
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 464
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 480
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 496
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 512
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 528
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 544
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 560
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 576
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 592
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 608
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 624
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 640
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 656
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 672
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 688
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 704
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 720
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 736
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 752
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 768
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 784
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 800
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 816
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 832
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 848
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 864
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 880
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 896
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 912
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 928
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 944
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 960
+ image: "plaintext.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 992
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 1008
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 1024
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 1040
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 1056
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 1072
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 1088
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 1104
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 1120
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 1136
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 1152
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 1168
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 1184
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1200
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 1216
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 1232
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 1248
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 1264
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 1280
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 1296
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 1312
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 1328
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+ Frame {
+ msec: 1344
+ hash: "cbf65bcb64a4781b79132b87f98d5fc7"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/font/data-MAC/richtext.0.png b/tests/auto/declarative/visual/qmlgraphicstext/font/data-MAC/richtext.0.png
new file mode 100644
index 0000000..6379942
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/font/data-MAC/richtext.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/font/data-MAC/richtext.qml b/tests/auto/declarative/visual/qmlgraphicstext/font/data-MAC/richtext.qml
new file mode 100644
index 0000000..72499b9
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/font/data-MAC/richtext.qml
@@ -0,0 +1,359 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 32
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 48
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 64
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 80
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 96
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 112
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 128
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 144
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 160
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 176
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 192
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 208
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 224
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 240
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 256
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 272
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 288
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 304
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 320
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 336
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 352
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 368
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 384
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 400
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 416
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 432
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 448
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 464
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 480
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 496
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 512
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 528
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 544
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 560
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 576
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 592
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 608
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 624
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 640
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 656
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 672
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 688
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 704
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 720
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 736
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 752
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 768
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 784
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 800
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 816
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 832
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 848
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 864
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 880
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 896
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 912
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 928
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 944
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 960
+ image: "richtext.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 992
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1008
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1024
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1040
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1056
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1072
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1088
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1104
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1120
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1136
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1152
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1168
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1184
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1200
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1216
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1232
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1248
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1264
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1280
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1296
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1312
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1328
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1344
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1360
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+ Frame {
+ msec: 1376
+ hash: "b902ff73e7c943bb09b5d2ae6c7a760e"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/font/data/plaintext.0.png b/tests/auto/declarative/visual/qmlgraphicstext/font/data/plaintext.0.png
new file mode 100644
index 0000000..50d56dc
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/font/data/plaintext.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/font/data/plaintext.qml b/tests/auto/declarative/visual/qmlgraphicstext/font/data/plaintext.qml
new file mode 100644
index 0000000..f4cbcbd
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/font/data/plaintext.qml
@@ -0,0 +1,351 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 32
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 48
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 64
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 80
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 96
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 112
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 128
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 144
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 160
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 176
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 192
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 208
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 224
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 240
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 256
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 272
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 288
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 304
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 320
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 336
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 352
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 368
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 384
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 400
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 416
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 432
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 448
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 464
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 480
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 496
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 512
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 528
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 544
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 560
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 576
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 592
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 608
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 624
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 640
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 656
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 672
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 688
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 704
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 720
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 736
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 752
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 768
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 784
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 800
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 816
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 832
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 848
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 864
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 880
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 896
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 912
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 928
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 944
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 960
+ image: "plaintext.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 992
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 1008
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 1024
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 1040
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 1056
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 1072
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 1088
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 1104
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 1120
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 1136
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 1152
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 1168
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 1184
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1200
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 1216
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 1232
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 1248
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 1264
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 1280
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 1296
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 1312
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 1328
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+ Frame {
+ msec: 1344
+ hash: "d553014bc56a46787e30459b0f44f57a"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/font/data/richtext.0.png b/tests/auto/declarative/visual/qmlgraphicstext/font/data/richtext.0.png
new file mode 100644
index 0000000..2910670
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/font/data/richtext.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/font/data/richtext.qml b/tests/auto/declarative/visual/qmlgraphicstext/font/data/richtext.qml
new file mode 100644
index 0000000..9f396c2
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/font/data/richtext.qml
@@ -0,0 +1,359 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 32
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 48
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 64
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 80
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 96
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 112
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 128
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 144
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 160
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 176
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 192
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 208
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 224
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 240
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 256
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 272
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 288
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 304
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 320
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 336
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 352
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 368
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 384
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 400
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 416
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 432
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 448
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 464
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 480
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 496
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 512
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 528
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 544
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 560
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 576
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 592
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 608
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 624
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 640
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 656
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 672
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 688
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 704
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 720
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 736
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 752
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 768
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 784
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 800
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 816
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 832
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 848
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 864
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 880
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 896
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 912
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 928
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 944
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 960
+ image: "richtext.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 992
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1008
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1024
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1040
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1056
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1072
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1088
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1104
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1120
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1136
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1152
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1168
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1184
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1200
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1216
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1232
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1248
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1264
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1280
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1296
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1312
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1328
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1344
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1360
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+ Frame {
+ msec: 1376
+ hash: "dfea78484b840b8cab690e277b960723"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/font/plaintext.qml b/tests/auto/declarative/visual/qmlgraphicstext/font/plaintext.qml
new file mode 100644
index 0000000..a3aa929
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/font/plaintext.qml
@@ -0,0 +1,85 @@
+import Qt 4.6
+
+Rectangle {
+ id: s; width: 800; height: 1000; color: "lightsteelblue"
+ property string text: "The quick brown fox jumps over the lazy dog."
+
+ Column {
+ spacing: 10
+ Text {
+ text: s.text
+ }
+ Text {
+ text: s.text; font.pixelSize: 18
+ }
+ Text {
+ text: s.text; font.pointSize: 25
+ }
+ Text {
+ text: s.text; color: "red"; smooth: true
+ }
+ Text {
+ text: s.text; font.capitalization: "AllUppercase"
+ }
+ Text {
+ text: s.text; font.underline: true
+ }
+ Text {
+ text: s.text; font.overline: true; smooth: true
+ }
+ Text {
+ text: s.text; font.strikeout: true
+ }
+ Text {
+ text: s.text; font.underline: true; font.overline: true; font.strikeout: true
+ }
+ Text {
+ text: s.text; font.letterSpacing: 200
+ }
+ Text {
+ text: s.text; font.underline: true; font.letterSpacing: 200; font.capitalization: "AllUppercase"; color: "blue"
+ }
+ Text {
+ text: s.text; font.overline: true; font.wordSpacing: 25; font.capitalization: "Capitalize"; color: "green"
+ }
+ Text {
+ text: s.text; font.pixelSize: 18; style: Text.Outline; styleColor: "white"
+ }
+ Text {
+ text: s.text; font.pixelSize: 18; style: Text.Sunken; styleColor: "gray"
+ }
+ Text {
+ text: s.text; font.pixelSize: 18; style: Text.Raised; styleColor: "yellow"
+ }
+ Text {
+ text: s.text; horizontalAlignment: Text.AlignLeft; width: 800
+ }
+ Text {
+ text: s.text; horizontalAlignment: Text.AlignHCenter; verticalAlignment: Text.AlignVCenter; width: 800; height: 20
+ }
+ Text {
+ text: s.text; horizontalAlignment: Text.AlignRight; verticalAlignment: Text.AlignBottom; width: 800; height: 20
+ }
+ Text {
+ text: s.text; font.pixelSize: 18; style: Text.Outline; styleColor: "white"; wrap: true; width: 200
+ }
+ Text {
+ text: s.text; elide: Text.ElideLeft; width: 200
+ }
+ Text {
+ text: s.text; elide: Text.ElideMiddle; width: 200
+ }
+ Text {
+ text: s.text; elide: Text.ElideRight; width: 200
+ }
+ Text {
+ text: s.text; elide: Text.ElideLeft; width: 200; wrap: true
+ }
+ Text {
+ text: s.text; elide: Text.ElideMiddle; width: 200; wrap: true
+ }
+ Text {
+ text: s.text; elide: Text.ElideRight; width: 200; wrap: true
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstext/font/richtext.qml b/tests/auto/declarative/visual/qmlgraphicstext/font/richtext.qml
new file mode 100644
index 0000000..35aa232
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstext/font/richtext.qml
@@ -0,0 +1,85 @@
+import Qt 4.6
+
+Rectangle {
+ id: s; width: 800; height: 1000; color: "lightsteelblue"
+ property string text: "<b>The</b> <i>quick</i> <u>brown</u> <o>fox</o> <big>jumps</big> <small>over</small> <tt>the</tt> <s>lazy</s> <em>dog</em>."
+
+ Column {
+ spacing: 10
+ Text {
+ text: s.text
+ }
+ Text {
+ text: s.text; font.pixelSize: 18
+ }
+ Text {
+ text: s.text; font.pointSize: 25
+ }
+ Text {
+ text: s.text; color: "red"; smooth: true
+ }
+ Text {
+ text: s.text; font.capitalization: "AllUppercase"
+ }
+ Text {
+ text: s.text; font.underline: true
+ }
+ Text {
+ text: s.text; font.overline: true; smooth: true
+ }
+ Text {
+ text: s.text; font.strikeout: true
+ }
+ Text {
+ text: s.text; font.underline: true; font.overline: true; font.strikeout: true
+ }
+ Text {
+ text: s.text; font.letterSpacing: 200
+ }
+ Text {
+ text: s.text; font.underline: true; font.letterSpacing: 200; font.capitalization: "AllUppercase"; color: "blue"
+ }
+ Text {
+ text: s.text; font.overline: true; font.wordSpacing: 25; font.capitalization: "Capitalize"; color: "green"
+ }
+ Text {
+ text: s.text; font.pixelSize: 18; style: Text.Outline; styleColor: "white"
+ }
+ Text {
+ text: s.text; font.pixelSize: 18; style: Text.Sunken; styleColor: "gray"
+ }
+ Text {
+ text: s.text; font.pixelSize: 18; style: Text.Raised; styleColor: "yellow"
+ }
+ Text {
+ text: s.text; horizontalAlignment: Text.AlignLeft; width: 800
+ }
+ Text {
+ text: s.text; horizontalAlignment: Text.AlignHCenter; verticalAlignment: Text.AlignVCenter; width: 800; height: 20
+ }
+ Text {
+ text: s.text; horizontalAlignment: Text.AlignRight; verticalAlignment: Text.AlignBottom; width: 800; height: 20
+ }
+ Text {
+ text: s.text; font.pixelSize: 18; style: Text.Outline; styleColor: "white"; wrap: true; width: 200
+ }
+ Text {
+ text: s.text; elide: Text.ElideLeft; width: 200
+ }
+ Text {
+ text: s.text; elide: Text.ElideMiddle; width: 200
+ }
+ Text {
+ text: s.text; elide: Text.ElideRight; width: 200
+ }
+ Text {
+ text: s.text; elide: Text.ElideLeft; width: 200; wrap: true
+ }
+ Text {
+ text: s.text; elide: Text.ElideMiddle; width: 200; wrap: true
+ }
+ Text {
+ text: s.text; elide: Text.ElideRight; width: 200; wrap: true
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/cursorDelegate.qml b/tests/auto/declarative/visual/qmlgraphicstextedit/cursorDelegate.qml
new file mode 100644
index 0000000..2faefc1
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/cursorDelegate.qml
@@ -0,0 +1,35 @@
+import Qt 4.6
+ Rectangle {
+ resources: [
+ Component { id: cursorA
+ Item { id: cPage;
+ x: Behavior { NumberAnimation { } }
+ y: Behavior { NumberAnimation { } }
+ height: Behavior { NumberAnimation { duration: 200 } }
+ Rectangle { id: cRectangle; color: "black"; y: 1; width: 1; height: parent.height-2;
+ Rectangle { id:top; color: "black"; width: 3; height: 1; x: -1; y:0}
+ Rectangle { id:bottom; color: "black"; width: 3; height: 1; x: -1; anchors.bottom: parent.bottom;}
+ opacity: 1
+ opacity: SequentialAnimation { running: cPage.parent.focus == true; repeat: true;
+ NumberAnimation { matchProperties: "opacity"; to: 1; duration: 500; easing: "easeInQuad"}
+ NumberAnimation { matchProperties: "opacity"; to: 0; duration: 500; easing: "easeOutQuad"}
+ }
+ }
+ width: 1;
+ }
+ }
+ ]
+ width: 400
+ height: 200
+ color: "white"
+ TextEdit { id: mainText
+ text: "Hello World"
+ cursorDelegate: cursorA
+ focus: true
+ font.pixelSize: 28
+ selectionColor: "lightsteelblue"
+ selectedTextColor: "deeppink"
+ color: "forestgreen"
+ anchors.centerIn: parent
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.0.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.0.png
new file mode 100644
index 0000000..464a578
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.1.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.1.png
new file mode 100644
index 0000000..9beb1ca
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.2.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.2.png
new file mode 100644
index 0000000..001be30
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.3.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.3.png
new file mode 100644
index 0000000..fc3e4b3
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.4.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.4.png
new file mode 100644
index 0000000..24f43e6
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.5.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.5.png
new file mode 100644
index 0000000..001223b
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.6.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.6.png
new file mode 100644
index 0000000..7126e07
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.7.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.7.png
new file mode 100644
index 0000000..f0bea88
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.7.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.8.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.8.png
new file mode 100644
index 0000000..4381b8d
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.8.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.qml b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.qml
new file mode 100644
index 0000000..8ee92d7
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/cursorDelegate.qml
@@ -0,0 +1,3555 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 32
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 48
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 64
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 80
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 96
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 112
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 128
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 144
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 160
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 176
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 192
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 208
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 224
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 240
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 256
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 272
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 288
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 304
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 320
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 336
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 352
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 368
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 384
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 400
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 416
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 432
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 448
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 464
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 480
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 496
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 512
+ hash: "e0366dbd264ca453f5dad3a7966f17a2"
+ }
+ Frame {
+ msec: 528
+ hash: "84cad44c4cccf8a0942865719d05c2eb"
+ }
+ Frame {
+ msec: 544
+ hash: "60d24c160adb8e074c04d4f40bf140a8"
+ }
+ Frame {
+ msec: 560
+ hash: "ff5fac70804eb01da28c2988aba520a4"
+ }
+ Frame {
+ msec: 576
+ hash: "a6bdf56b4f8783969935488e1955e59c"
+ }
+ Frame {
+ msec: 592
+ hash: "d0ad97647c5092a64426187406ec5316"
+ }
+ Frame {
+ msec: 608
+ hash: "77e7a4a4a9c38cd7b5ef734d39089e3f"
+ }
+ Frame {
+ msec: 624
+ hash: "0285340a2e03568810a76d840369f5c8"
+ }
+ Frame {
+ msec: 640
+ hash: "6ba6a1a05c5a9ec0d2897b3454affd09"
+ }
+ Frame {
+ msec: 656
+ hash: "3caa36cc3857803248d12ec09ea357df"
+ }
+ Frame {
+ msec: 672
+ hash: "500f7b72acc877fc1662e4f4ceb090e1"
+ }
+ Frame {
+ msec: 688
+ hash: "aadc71923926885ccce87e6be1c742d7"
+ }
+ Frame {
+ msec: 704
+ hash: "9b7503189ecf2999934716f227469463"
+ }
+ Frame {
+ msec: 720
+ hash: "874296e182abe96e58f9c0463a0f32c9"
+ }
+ Frame {
+ msec: 736
+ hash: "4262c79b6844d4d62aa9fb02c335fb95"
+ }
+ Frame {
+ msec: 752
+ hash: "a5862eaf12cc342054fd3f8d1f4c91c3"
+ }
+ Frame {
+ msec: 768
+ hash: "0034ef8851c9810ed5d50496aea367da"
+ }
+ Frame {
+ msec: 784
+ hash: "24cebf60ade86469a154abaa64f3b40d"
+ }
+ Frame {
+ msec: 800
+ hash: "1100ef4e2db234ea77ff4c70df6bfbe7"
+ }
+ Frame {
+ msec: 816
+ hash: "c40d8d42a55dde7dbbcae2dda9aaccb8"
+ }
+ Frame {
+ msec: 832
+ hash: "5c1000fdc279742cbe46987045c0a92b"
+ }
+ Frame {
+ msec: 848
+ hash: "bcef4a0ff72330f05f2bf5042e414fde"
+ }
+ Frame {
+ msec: 864
+ hash: "228551c38b567f1550b44f9dac08786b"
+ }
+ Frame {
+ msec: 880
+ hash: "531c5ca6992c4a12927c61e22c02dd6b"
+ }
+ Frame {
+ msec: 896
+ hash: "127cc30967f95cb88f4238e0b33c741d"
+ }
+ Frame {
+ msec: 912
+ hash: "3c3fb1d8dbe7443f80550a30ada7f120"
+ }
+ Frame {
+ msec: 928
+ hash: "edca065d42bf9b63a79d1e97d1a1eed0"
+ }
+ Frame {
+ msec: 944
+ hash: "1e4424f1f40bfce3205e1d1401ab0dcf"
+ }
+ Frame {
+ msec: 960
+ image: "cursorDelegate.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 992
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1008
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1024
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1040
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1056
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1072
+ hash: "90ac5ad7ce23786fe838426605e737e1"
+ }
+ Frame {
+ msec: 1088
+ hash: "1e4424f1f40bfce3205e1d1401ab0dcf"
+ }
+ Frame {
+ msec: 1104
+ hash: "edca065d42bf9b63a79d1e97d1a1eed0"
+ }
+ Frame {
+ msec: 1120
+ hash: "3c3fb1d8dbe7443f80550a30ada7f120"
+ }
+ Frame {
+ msec: 1136
+ hash: "127cc30967f95cb88f4238e0b33c741d"
+ }
+ Frame {
+ msec: 1152
+ hash: "531c5ca6992c4a12927c61e22c02dd6b"
+ }
+ Frame {
+ msec: 1168
+ hash: "228551c38b567f1550b44f9dac08786b"
+ }
+ Frame {
+ msec: 1184
+ hash: "bcef4a0ff72330f05f2bf5042e414fde"
+ }
+ Frame {
+ msec: 1200
+ hash: "5c1000fdc279742cbe46987045c0a92b"
+ }
+ Frame {
+ msec: 1216
+ hash: "c40d8d42a55dde7dbbcae2dda9aaccb8"
+ }
+ Frame {
+ msec: 1232
+ hash: "1100ef4e2db234ea77ff4c70df6bfbe7"
+ }
+ Frame {
+ msec: 1248
+ hash: "24cebf60ade86469a154abaa64f3b40d"
+ }
+ Frame {
+ msec: 1264
+ hash: "0034ef8851c9810ed5d50496aea367da"
+ }
+ Frame {
+ msec: 1280
+ hash: "a5862eaf12cc342054fd3f8d1f4c91c3"
+ }
+ Frame {
+ msec: 1296
+ hash: "4262c79b6844d4d62aa9fb02c335fb95"
+ }
+ Frame {
+ msec: 1312
+ hash: "874296e182abe96e58f9c0463a0f32c9"
+ }
+ Frame {
+ msec: 1328
+ hash: "9b7503189ecf2999934716f227469463"
+ }
+ Frame {
+ msec: 1344
+ hash: "aadc71923926885ccce87e6be1c742d7"
+ }
+ Frame {
+ msec: 1360
+ hash: "500f7b72acc877fc1662e4f4ceb090e1"
+ }
+ Frame {
+ msec: 1376
+ hash: "3caa36cc3857803248d12ec09ea357df"
+ }
+ Key {
+ type: 6
+ key: 16777232
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1392
+ hash: "6ba6a1a05c5a9ec0d2897b3454affd09"
+ }
+ Frame {
+ msec: 1408
+ hash: "0285340a2e03568810a76d840369f5c8"
+ }
+ Frame {
+ msec: 1424
+ hash: "77e7a4a4a9c38cd7b5ef734d39089e3f"
+ }
+ Frame {
+ msec: 1440
+ hash: "d0ad97647c5092a64426187406ec5316"
+ }
+ Frame {
+ msec: 1456
+ hash: "a6bdf56b4f8783969935488e1955e59c"
+ }
+ Key {
+ type: 7
+ key: 16777232
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1472
+ hash: "ff5fac70804eb01da28c2988aba520a4"
+ }
+ Frame {
+ msec: 1488
+ hash: "60d24c160adb8e074c04d4f40bf140a8"
+ }
+ Frame {
+ msec: 1504
+ hash: "84cad44c4cccf8a0942865719d05c2eb"
+ }
+ Frame {
+ msec: 1520
+ hash: "907c6363d1e524f391d001944febe1ac"
+ }
+ Frame {
+ msec: 1536
+ hash: "313a06d40274e46453342e66236f09f8"
+ }
+ Frame {
+ msec: 1552
+ hash: "0d410f7bfa3e4c58948a8f1e7c7695c4"
+ }
+ Frame {
+ msec: 1568
+ hash: "a9911e076af337fe30e322f03d84a528"
+ }
+ Frame {
+ msec: 1584
+ hash: "4a8efcc341bba9ba621ce0f785a75432"
+ }
+ Frame {
+ msec: 1600
+ hash: "479f192c8cf7b8e4407655382402700f"
+ }
+ Frame {
+ msec: 1616
+ hash: "63dc16e66def35abba5159d5650f165d"
+ }
+ Frame {
+ msec: 1632
+ hash: "26e88aae512304c28d425c311febce1b"
+ }
+ Key {
+ type: 6
+ key: 16777233
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1648
+ hash: "8dca7a7912ddaa853dff9c09882082b1"
+ }
+ Frame {
+ msec: 1664
+ hash: "5c3ebee155e29a0ba4a45706dd87396a"
+ }
+ Frame {
+ msec: 1680
+ hash: "29a517a66867f6f527c6db5bb5651f92"
+ }
+ Frame {
+ msec: 1696
+ hash: "a4fde31f55f866224eca2b51586b601f"
+ }
+ Frame {
+ msec: 1712
+ hash: "9c9c7fb9fb8aab8c24f2eb03df791a00"
+ }
+ Frame {
+ msec: 1728
+ hash: "dd972e37166d1186a717a956343a7758"
+ }
+ Key {
+ type: 7
+ key: 16777233
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1744
+ hash: "1af5e24651ef422ff93dab7bd2a8f832"
+ }
+ Frame {
+ msec: 1760
+ hash: "885473be4e44bb1f4b014f9b3d4d2e74"
+ }
+ Frame {
+ msec: 1776
+ hash: "1f6e0407392322c34567caaecae5b449"
+ }
+ Frame {
+ msec: 1792
+ hash: "dcae85a4b05c450b6b1619f9fd7e17b0"
+ }
+ Frame {
+ msec: 1808
+ hash: "3b872e5030e34edf678ac2547df48699"
+ }
+ Frame {
+ msec: 1824
+ hash: "5d76b324496297d08cff57b4c21ce592"
+ }
+ Frame {
+ msec: 1840
+ hash: "4acfe3c4cf2f4e477f1a72817af556d2"
+ }
+ Frame {
+ msec: 1856
+ hash: "a04671fe8d28cfb629f2090e342747fb"
+ }
+ Frame {
+ msec: 1872
+ hash: "2474db802c7d8e0ec8fa7f958c04bf30"
+ }
+ Frame {
+ msec: 1888
+ hash: "11a1e1f38c407de4bc069aa192319fe4"
+ }
+ Frame {
+ msec: 1904
+ hash: "ec8aacc8d2280068dd7f020e8648afea"
+ }
+ Frame {
+ msec: 1920
+ image: "cursorDelegate.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "fbbe4d0fed6274968a89e02bb1ca5685"
+ }
+ Frame {
+ msec: 1952
+ hash: "13d478424a8f0cab8bab6a157efce318"
+ }
+ Frame {
+ msec: 1968
+ hash: "ea6bc9ec217fb80b86276a2675c08a0f"
+ }
+ Frame {
+ msec: 1984
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2000
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2016
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2032
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2048
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2064
+ hash: "ea6bc9ec217fb80b86276a2675c08a0f"
+ }
+ Frame {
+ msec: 2080
+ hash: "13d478424a8f0cab8bab6a157efce318"
+ }
+ Frame {
+ msec: 2096
+ hash: "fbbe4d0fed6274968a89e02bb1ca5685"
+ }
+ Frame {
+ msec: 2112
+ hash: "00dedd48bd6861cb4bf4953162a67cc0"
+ }
+ Key {
+ type: 6
+ key: 16777248
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2128
+ hash: "ec8aacc8d2280068dd7f020e8648afea"
+ }
+ Frame {
+ msec: 2144
+ hash: "11a1e1f38c407de4bc069aa192319fe4"
+ }
+ Frame {
+ msec: 2160
+ hash: "2474db802c7d8e0ec8fa7f958c04bf30"
+ }
+ Frame {
+ msec: 2176
+ hash: "a04671fe8d28cfb629f2090e342747fb"
+ }
+ Frame {
+ msec: 2192
+ hash: "4acfe3c4cf2f4e477f1a72817af556d2"
+ }
+ Frame {
+ msec: 2208
+ hash: "5d76b324496297d08cff57b4c21ce592"
+ }
+ Frame {
+ msec: 2224
+ hash: "3b872e5030e34edf678ac2547df48699"
+ }
+ Frame {
+ msec: 2240
+ hash: "dcae85a4b05c450b6b1619f9fd7e17b0"
+ }
+ Frame {
+ msec: 2256
+ hash: "1f6e0407392322c34567caaecae5b449"
+ }
+ Frame {
+ msec: 2272
+ hash: "885473be4e44bb1f4b014f9b3d4d2e74"
+ }
+ Frame {
+ msec: 2288
+ hash: "1af5e24651ef422ff93dab7bd2a8f832"
+ }
+ Frame {
+ msec: 2304
+ hash: "dd972e37166d1186a717a956343a7758"
+ }
+ Frame {
+ msec: 2320
+ hash: "9c9c7fb9fb8aab8c24f2eb03df791a00"
+ }
+ Key {
+ type: 6
+ key: 16777232
+ modifiers: 33554432
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2336
+ hash: "aec9683f3a677dab781bdf3bbf7cce5e"
+ }
+ Frame {
+ msec: 2352
+ hash: "63c6a7810dec832f1b8288807f1d932a"
+ }
+ Frame {
+ msec: 2368
+ hash: "70409eeee50fbb54097a3c430e1e1f21"
+ }
+ Frame {
+ msec: 2384
+ hash: "efc77b82c0ffd7f3fbe5fed06ea418bd"
+ }
+ Frame {
+ msec: 2400
+ hash: "26e88aae512304c28d425c311febce1b"
+ }
+ Frame {
+ msec: 2416
+ hash: "63dc16e66def35abba5159d5650f165d"
+ }
+ Frame {
+ msec: 2432
+ hash: "479f192c8cf7b8e4407655382402700f"
+ }
+ Key {
+ type: 7
+ key: 16777232
+ modifiers: 33554432
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2448
+ hash: "4a8efcc341bba9ba621ce0f785a75432"
+ }
+ Frame {
+ msec: 2464
+ hash: "a9911e076af337fe30e322f03d84a528"
+ }
+ Frame {
+ msec: 2480
+ hash: "0d410f7bfa3e4c58948a8f1e7c7695c4"
+ }
+ Frame {
+ msec: 2496
+ hash: "313a06d40274e46453342e66236f09f8"
+ }
+ Frame {
+ msec: 2512
+ hash: "907c6363d1e524f391d001944febe1ac"
+ }
+ Frame {
+ msec: 2528
+ hash: "84cad44c4cccf8a0942865719d05c2eb"
+ }
+ Frame {
+ msec: 2544
+ hash: "60d24c160adb8e074c04d4f40bf140a8"
+ }
+ Frame {
+ msec: 2560
+ hash: "ff5fac70804eb01da28c2988aba520a4"
+ }
+ Frame {
+ msec: 2576
+ hash: "a6bdf56b4f8783969935488e1955e59c"
+ }
+ Frame {
+ msec: 2592
+ hash: "d0ad97647c5092a64426187406ec5316"
+ }
+ Frame {
+ msec: 2608
+ hash: "77e7a4a4a9c38cd7b5ef734d39089e3f"
+ }
+ Frame {
+ msec: 2624
+ hash: "0285340a2e03568810a76d840369f5c8"
+ }
+ Frame {
+ msec: 2640
+ hash: "6ba6a1a05c5a9ec0d2897b3454affd09"
+ }
+ Frame {
+ msec: 2656
+ hash: "3caa36cc3857803248d12ec09ea357df"
+ }
+ Frame {
+ msec: 2672
+ hash: "500f7b72acc877fc1662e4f4ceb090e1"
+ }
+ Frame {
+ msec: 2688
+ hash: "aadc71923926885ccce87e6be1c742d7"
+ }
+ Frame {
+ msec: 2704
+ hash: "9b7503189ecf2999934716f227469463"
+ }
+ Frame {
+ msec: 2720
+ hash: "874296e182abe96e58f9c0463a0f32c9"
+ }
+ Frame {
+ msec: 2736
+ hash: "4262c79b6844d4d62aa9fb02c335fb95"
+ }
+ Frame {
+ msec: 2752
+ hash: "a5862eaf12cc342054fd3f8d1f4c91c3"
+ }
+ Frame {
+ msec: 2768
+ hash: "0034ef8851c9810ed5d50496aea367da"
+ }
+ Frame {
+ msec: 2784
+ hash: "24cebf60ade86469a154abaa64f3b40d"
+ }
+ Key {
+ type: 7
+ key: 16777248
+ modifiers: 33554432
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2800
+ hash: "1100ef4e2db234ea77ff4c70df6bfbe7"
+ }
+ Frame {
+ msec: 2816
+ hash: "c40d8d42a55dde7dbbcae2dda9aaccb8"
+ }
+ Frame {
+ msec: 2832
+ hash: "5c1000fdc279742cbe46987045c0a92b"
+ }
+ Frame {
+ msec: 2848
+ hash: "bcef4a0ff72330f05f2bf5042e414fde"
+ }
+ Frame {
+ msec: 2864
+ hash: "228551c38b567f1550b44f9dac08786b"
+ }
+ Frame {
+ msec: 2880
+ image: "cursorDelegate.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "127cc30967f95cb88f4238e0b33c741d"
+ }
+ Frame {
+ msec: 2912
+ hash: "3c3fb1d8dbe7443f80550a30ada7f120"
+ }
+ Frame {
+ msec: 2928
+ hash: "edca065d42bf9b63a79d1e97d1a1eed0"
+ }
+ Frame {
+ msec: 2944
+ hash: "1e4424f1f40bfce3205e1d1401ab0dcf"
+ }
+ Frame {
+ msec: 2960
+ hash: "90ac5ad7ce23786fe838426605e737e1"
+ }
+ Frame {
+ msec: 2976
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2992
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3008
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3024
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3040
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3056
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3072
+ hash: "90ac5ad7ce23786fe838426605e737e1"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3088
+ hash: "cf467854dfde9b2111bc6e7e4442aab5"
+ }
+ Frame {
+ msec: 3104
+ hash: "df6f025130dc82f4764def81cec5fa7b"
+ }
+ Frame {
+ msec: 3120
+ hash: "bdcafed4ae9c890eec2e3e0cb2ff5a14"
+ }
+ Frame {
+ msec: 3136
+ hash: "14b328c8ec6276e022643102af80fa44"
+ }
+ Frame {
+ msec: 3152
+ hash: "078d75d72bff036574b85ac0aeaaf2b6"
+ }
+ Frame {
+ msec: 3168
+ hash: "fbefb1e0801f4578ab93dd7ff4062e68"
+ }
+ Frame {
+ msec: 3184
+ hash: "eac8375d9b9cf0afbf232e27c6ceb037"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3200
+ hash: "3462a3e166120515e67430600e4653f8"
+ }
+ Frame {
+ msec: 3216
+ hash: "7f2d9959323f0707e36ecb2252c89727"
+ }
+ Frame {
+ msec: 3232
+ hash: "0a1c2eb8a7451a5e37fefb96a58a88a1"
+ }
+ Frame {
+ msec: 3248
+ hash: "4a02aaca12e3fd86ee3b516b3a307f86"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3264
+ hash: "0034ef8851c9810ed5d50496aea367da"
+ }
+ Frame {
+ msec: 3280
+ hash: "a5862eaf12cc342054fd3f8d1f4c91c3"
+ }
+ Frame {
+ msec: 3296
+ hash: "4262c79b6844d4d62aa9fb02c335fb95"
+ }
+ Frame {
+ msec: 3312
+ hash: "874296e182abe96e58f9c0463a0f32c9"
+ }
+ Frame {
+ msec: 3328
+ hash: "9b7503189ecf2999934716f227469463"
+ }
+ Frame {
+ msec: 3344
+ hash: "aadc71923926885ccce87e6be1c742d7"
+ }
+ Frame {
+ msec: 3360
+ hash: "500f7b72acc877fc1662e4f4ceb090e1"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3376
+ hash: "3caa36cc3857803248d12ec09ea357df"
+ }
+ Frame {
+ msec: 3392
+ hash: "6ba6a1a05c5a9ec0d2897b3454affd09"
+ }
+ Frame {
+ msec: 3408
+ hash: "0285340a2e03568810a76d840369f5c8"
+ }
+ Frame {
+ msec: 3424
+ hash: "77e7a4a4a9c38cd7b5ef734d39089e3f"
+ }
+ Frame {
+ msec: 3440
+ hash: "d0ad97647c5092a64426187406ec5316"
+ }
+ Frame {
+ msec: 3456
+ hash: "a6bdf56b4f8783969935488e1955e59c"
+ }
+ Frame {
+ msec: 3472
+ hash: "ff5fac70804eb01da28c2988aba520a4"
+ }
+ Frame {
+ msec: 3488
+ hash: "60d24c160adb8e074c04d4f40bf140a8"
+ }
+ Frame {
+ msec: 3504
+ hash: "84cad44c4cccf8a0942865719d05c2eb"
+ }
+ Frame {
+ msec: 3520
+ hash: "907c6363d1e524f391d001944febe1ac"
+ }
+ Frame {
+ msec: 3536
+ hash: "313a06d40274e46453342e66236f09f8"
+ }
+ Frame {
+ msec: 3552
+ hash: "0d410f7bfa3e4c58948a8f1e7c7695c4"
+ }
+ Frame {
+ msec: 3568
+ hash: "a9911e076af337fe30e322f03d84a528"
+ }
+ Frame {
+ msec: 3584
+ hash: "4a8efcc341bba9ba621ce0f785a75432"
+ }
+ Frame {
+ msec: 3600
+ hash: "479f192c8cf7b8e4407655382402700f"
+ }
+ Frame {
+ msec: 3616
+ hash: "63dc16e66def35abba5159d5650f165d"
+ }
+ Frame {
+ msec: 3632
+ hash: "26e88aae512304c28d425c311febce1b"
+ }
+ Frame {
+ msec: 3648
+ hash: "efc77b82c0ffd7f3fbe5fed06ea418bd"
+ }
+ Frame {
+ msec: 3664
+ hash: "70409eeee50fbb54097a3c430e1e1f21"
+ }
+ Frame {
+ msec: 3680
+ hash: "63c6a7810dec832f1b8288807f1d932a"
+ }
+ Frame {
+ msec: 3696
+ hash: "aec9683f3a677dab781bdf3bbf7cce5e"
+ }
+ Frame {
+ msec: 3712
+ hash: "2e6dd79fc23acbf710e757f3d0999ab8"
+ }
+ Frame {
+ msec: 3728
+ hash: "4d9dd9e515a21478cb3364032acf8c15"
+ }
+ Frame {
+ msec: 3744
+ hash: "5dc2129cac6e667d39da3304a37a76f2"
+ }
+ Frame {
+ msec: 3760
+ hash: "ab5eb4750139875586a346b1c3a84f42"
+ }
+ Frame {
+ msec: 3776
+ hash: "96d3bd62d4a0bf39a672b97fcc050bd5"
+ }
+ Frame {
+ msec: 3792
+ hash: "546cec655631b5802eb4d7008093eb69"
+ }
+ Frame {
+ msec: 3808
+ hash: "85f33f1bf1b1e11be450ab85bf6dab3d"
+ }
+ Frame {
+ msec: 3824
+ hash: "44b195297acd1bf59e43751df8dc1c1d"
+ }
+ Frame {
+ msec: 3840
+ image: "cursorDelegate.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "47942253c07fd39894445ff5e5b9608c"
+ }
+ Frame {
+ msec: 3872
+ hash: "d26d71b1c03fb21550820dd1586a7a8e"
+ }
+ Frame {
+ msec: 3888
+ hash: "37ec2ed29006575e8bd41a1989b75e27"
+ }
+ Frame {
+ msec: 3904
+ hash: "5ad1ab34572f9ef339774134bc0ab407"
+ }
+ Frame {
+ msec: 3920
+ hash: "a4f68f6ee46642e7cc5a542b9f8a2464"
+ }
+ Frame {
+ msec: 3936
+ hash: "fce95d18a0efee74554209ca39637062"
+ }
+ Frame {
+ msec: 3952
+ hash: "1587fc2668f1f44e76f252bfd75f2708"
+ }
+ Frame {
+ msec: 3968
+ hash: "e0a6eb42de552281e297ca5c50c1df23"
+ }
+ Frame {
+ msec: 3984
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4000
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4016
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4032
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4048
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4064
+ hash: "e0a6eb42de552281e297ca5c50c1df23"
+ }
+ Frame {
+ msec: 4080
+ hash: "1587fc2668f1f44e76f252bfd75f2708"
+ }
+ Frame {
+ msec: 4096
+ hash: "fce95d18a0efee74554209ca39637062"
+ }
+ Frame {
+ msec: 4112
+ hash: "a4f68f6ee46642e7cc5a542b9f8a2464"
+ }
+ Frame {
+ msec: 4128
+ hash: "5ad1ab34572f9ef339774134bc0ab407"
+ }
+ Frame {
+ msec: 4144
+ hash: "37ec2ed29006575e8bd41a1989b75e27"
+ }
+ Frame {
+ msec: 4160
+ hash: "d26d71b1c03fb21550820dd1586a7a8e"
+ }
+ Frame {
+ msec: 4176
+ hash: "47942253c07fd39894445ff5e5b9608c"
+ }
+ Frame {
+ msec: 4192
+ hash: "a62f1cbf43da0381c7c9099d47ded882"
+ }
+ Frame {
+ msec: 4208
+ hash: "44b195297acd1bf59e43751df8dc1c1d"
+ }
+ Frame {
+ msec: 4224
+ hash: "85f33f1bf1b1e11be450ab85bf6dab3d"
+ }
+ Frame {
+ msec: 4240
+ hash: "546cec655631b5802eb4d7008093eb69"
+ }
+ Frame {
+ msec: 4256
+ hash: "96d3bd62d4a0bf39a672b97fcc050bd5"
+ }
+ Frame {
+ msec: 4272
+ hash: "ab5eb4750139875586a346b1c3a84f42"
+ }
+ Frame {
+ msec: 4288
+ hash: "5dc2129cac6e667d39da3304a37a76f2"
+ }
+ Frame {
+ msec: 4304
+ hash: "4d9dd9e515a21478cb3364032acf8c15"
+ }
+ Frame {
+ msec: 4320
+ hash: "2e6dd79fc23acbf710e757f3d0999ab8"
+ }
+ Frame {
+ msec: 4336
+ hash: "aec9683f3a677dab781bdf3bbf7cce5e"
+ }
+ Frame {
+ msec: 4352
+ hash: "63c6a7810dec832f1b8288807f1d932a"
+ }
+ Frame {
+ msec: 4368
+ hash: "70409eeee50fbb54097a3c430e1e1f21"
+ }
+ Frame {
+ msec: 4384
+ hash: "efc77b82c0ffd7f3fbe5fed06ea418bd"
+ }
+ Frame {
+ msec: 4400
+ hash: "26e88aae512304c28d425c311febce1b"
+ }
+ Frame {
+ msec: 4416
+ hash: "63dc16e66def35abba5159d5650f165d"
+ }
+ Frame {
+ msec: 4432
+ hash: "479f192c8cf7b8e4407655382402700f"
+ }
+ Frame {
+ msec: 4448
+ hash: "4a8efcc341bba9ba621ce0f785a75432"
+ }
+ Frame {
+ msec: 4464
+ hash: "a9911e076af337fe30e322f03d84a528"
+ }
+ Frame {
+ msec: 4480
+ hash: "0d410f7bfa3e4c58948a8f1e7c7695c4"
+ }
+ Frame {
+ msec: 4496
+ hash: "313a06d40274e46453342e66236f09f8"
+ }
+ Frame {
+ msec: 4512
+ hash: "907c6363d1e524f391d001944febe1ac"
+ }
+ Frame {
+ msec: 4528
+ hash: "84cad44c4cccf8a0942865719d05c2eb"
+ }
+ Frame {
+ msec: 4544
+ hash: "60d24c160adb8e074c04d4f40bf140a8"
+ }
+ Frame {
+ msec: 4560
+ hash: "ff5fac70804eb01da28c2988aba520a4"
+ }
+ Frame {
+ msec: 4576
+ hash: "a6bdf56b4f8783969935488e1955e59c"
+ }
+ Frame {
+ msec: 4592
+ hash: "d0ad97647c5092a64426187406ec5316"
+ }
+ Frame {
+ msec: 4608
+ hash: "77e7a4a4a9c38cd7b5ef734d39089e3f"
+ }
+ Frame {
+ msec: 4624
+ hash: "0285340a2e03568810a76d840369f5c8"
+ }
+ Frame {
+ msec: 4640
+ hash: "6ba6a1a05c5a9ec0d2897b3454affd09"
+ }
+ Frame {
+ msec: 4656
+ hash: "3caa36cc3857803248d12ec09ea357df"
+ }
+ Frame {
+ msec: 4672
+ hash: "500f7b72acc877fc1662e4f4ceb090e1"
+ }
+ Frame {
+ msec: 4688
+ hash: "aadc71923926885ccce87e6be1c742d7"
+ }
+ Frame {
+ msec: 4704
+ hash: "9b7503189ecf2999934716f227469463"
+ }
+ Frame {
+ msec: 4720
+ hash: "874296e182abe96e58f9c0463a0f32c9"
+ }
+ Frame {
+ msec: 4736
+ hash: "4262c79b6844d4d62aa9fb02c335fb95"
+ }
+ Frame {
+ msec: 4752
+ hash: "a5862eaf12cc342054fd3f8d1f4c91c3"
+ }
+ Frame {
+ msec: 4768
+ hash: "0034ef8851c9810ed5d50496aea367da"
+ }
+ Frame {
+ msec: 4784
+ hash: "24cebf60ade86469a154abaa64f3b40d"
+ }
+ Frame {
+ msec: 4800
+ image: "cursorDelegate.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "c40d8d42a55dde7dbbcae2dda9aaccb8"
+ }
+ Frame {
+ msec: 4832
+ hash: "5c1000fdc279742cbe46987045c0a92b"
+ }
+ Frame {
+ msec: 4848
+ hash: "bcef4a0ff72330f05f2bf5042e414fde"
+ }
+ Frame {
+ msec: 4864
+ hash: "228551c38b567f1550b44f9dac08786b"
+ }
+ Frame {
+ msec: 4880
+ hash: "531c5ca6992c4a12927c61e22c02dd6b"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 130; y: 101
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4896
+ hash: "14b328c8ec6276e022643102af80fa44"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 130; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4912
+ hash: "bdcafed4ae9c890eec2e3e0cb2ff5a14"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 131; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4928
+ hash: "df6f025130dc82f4764def81cec5fa7b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 132; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4944
+ hash: "cf467854dfde9b2111bc6e7e4442aab5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 133; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 134; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4960
+ hash: "cfcdf63ca06c2b9ab197821bc1e48c7c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 135; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4976
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 136; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4992
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 137; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 138; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5008
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 139; y: 101
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5024
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 140; y: 101
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5040
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 141; y: 100
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 143; y: 100
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5056
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 144; y: 100
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5072
+ hash: "cfcdf63ca06c2b9ab197821bc1e48c7c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 146; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5088
+ hash: "cf467854dfde9b2111bc6e7e4442aab5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 148; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 149; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5104
+ hash: "7643fcfb740d33b87915300684e85a44"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 150; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5120
+ hash: "1bd041a5e8d2237b51720fed82250303"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 151; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5136
+ hash: "1a00c9d3ce747e3bc7ee5878d21260b4"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 152; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 152; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5152
+ hash: "803896c1be68588ba2cddd7effbb8d62"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 153; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5168
+ hash: "282ab572698088fba3aba8e6a091aa38"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 154; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5184
+ hash: "24402d9e4fabd78bc8f3921db82e554e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 155; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 156; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5200
+ hash: "39a89e9ca7c4edd9c8503927d639df0f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 157; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5216
+ hash: "b984b7d032544acd4dab8901e0af1ef5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 158; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5232
+ hash: "e014414626407b0446939ad2ce38b7dd"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 160; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 161; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5248
+ hash: "beccb93613279e2f48507ddc9a4418e8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 163; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5264
+ hash: "dd861f8dc89587301e860217fdf2a701"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 164; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5280
+ hash: "1ae0b7a18a7d3ebe4871a0045005e2b7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 166; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 168; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5296
+ hash: "071e1f8bcc0e541b23d134f32c19d20b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 170; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5312
+ hash: "e8ce2716f4595bc5bf68c24c8a63bbfe"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 174; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5328
+ hash: "d36a35503af76b12fe5cec65e3f22eda"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 176; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 178; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5344
+ hash: "cea0f90a56fd5789b3e166f09f2bfcec"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 179; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5360
+ hash: "151f5357d9c1a3f1fe09380a287abab0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 180; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5376
+ hash: "bdab9d7077734087cb7f9516e9c517bc"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 182; y: 95
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 183; y: 95
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5392
+ hash: "6d6d929a7c7be1d2e7d1b2f98a6866be"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 185; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5408
+ hash: "3fbe3f45afc5aa40fff7f795ced8a05d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 187; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5424
+ hash: "b35b4dc480aeb76912d927b0ff8676c6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 189; y: 93
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 191; y: 92
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5440
+ hash: "94e82e888280f20cce3ac38b353b79f4"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 92
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5456
+ hash: "4674fbd35e467bed780a5ea2fe2e258b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 194; y: 92
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5472
+ hash: "698827bfa7ff2eae6b0e0efa99bb15bb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 92
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 198; y: 92
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5488
+ hash: "67c7adef5e41481d631f54d34423b93d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 199; y: 92
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5504
+ hash: "097512c005127fa3ebfcbc52808264a8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 200; y: 91
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5520
+ hash: "ad64b5913350e6c6fda199ecb34278f4"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 200; y: 91
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 201; y: 90
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5536
+ hash: "3237e88e0f40595d2fde62723c00b7fa"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 202; y: 89
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5552
+ hash: "18db89296849f22a7af0a1ffc9762a32"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 88
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5568
+ hash: "7f6ac84baaa2c5fcd22ba45172611840"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 204; y: 88
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5584
+ hash: "7b887d3aa44229d9f25fdde8f5ccf471"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 207; y: 86
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 208; y: 85
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5600
+ hash: "b0c08726d0f2a460d5862cd2d7ee6230"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 210; y: 85
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5616
+ hash: "d99389a3287d453b942f070d8c1e86e8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 212; y: 84
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5632
+ hash: "a0751fa826b03cb25e615c6a1435d92a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 213; y: 84
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 214; y: 84
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5648
+ hash: "f33da88ae881c846bd86ab3dc4f12efc"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 215; y: 84
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5664
+ hash: "7049bee9a984a2c2d3101eb6d3cce31e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 216; y: 84
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5680
+ hash: "72757a5099748b70241a0d4279e42313"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 216; y: 84
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 217; y: 84
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5696
+ hash: "705feb098ebb2d689526d9271098d6b5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 218; y: 84
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5712
+ hash: "49de92770edb0aae82cf66ae42b31caa"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 218; y: 84
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5728
+ hash: "70fe89f9dce556ec1859f325aa27b7db"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 219; y: 85
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 219; y: 86
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 220; y: 86
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5744
+ hash: "1ededcc625a0e9e317c5aefc238a175a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 221; y: 87
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5760
+ image: "cursorDelegate.5.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 222; y: 87
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5776
+ hash: "f1ae53071836512830f7284c4ac884b3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 222; y: 88
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5792
+ hash: "f73c2b66b61bdcb080f8be6607079729"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 224; y: 90
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5808
+ hash: "11da14806fbca5c7cd559286fb5d70ff"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 226; y: 92
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5824
+ hash: "b3ad82e900925227fb020009ae619d28"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 228; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5840
+ hash: "d8cea4160f0044b09e595610ead01879"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 229; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 231; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5856
+ hash: "bdd0d1bea8590b40cdce2fb45e17901b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 232; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5872
+ hash: "007a5d123eea589264e22f862f1bcac6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 233; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5888
+ hash: "3a83635e8371f3e26baf83c285b7801d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 233; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5904
+ hash: "6615931007ab0f9da070b6316068ad12"
+ }
+ Frame {
+ msec: 5920
+ hash: "be695ab0dced25c1c498d977fc822cef"
+ }
+ Frame {
+ msec: 5936
+ hash: "46dea7348473bc6ce4ea696292e5aae0"
+ }
+ Frame {
+ msec: 5952
+ hash: "23ce0ba723ffe4253610fdc635df9ae2"
+ }
+ Frame {
+ msec: 5968
+ hash: "9d6243396fd98b7efd14ae8a67297e79"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 233; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5984
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 232; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 232; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6000
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 231; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6016
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 230; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6032
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 229; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 228; y: 100
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6048
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 227; y: 100
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6064
+ hash: "be488252ce6c39317c33706f7febe7b5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 225; y: 100
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6080
+ hash: "16c38b5dcd8ffbadc533d4fea8a85b0d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 224; y: 101
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 222; y: 101
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6096
+ hash: "a3ca6fa1bbc5ca3ff4cf281ae112102d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 220; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6112
+ hash: "58e53a9cb886d6d90c0b5987d0693904"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 219; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6128
+ hash: "a7f3e07ad0335e2852a156b5a3e1bd3d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 217; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 216; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6144
+ hash: "bea9d0338212c01474b25ee637aa8fd0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 215; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6160
+ hash: "b509c0cdea6b1352ff1e146a8f243820"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 213; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6176
+ hash: "9c968354773878009af2f176b1e38d42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 212; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 212; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6192
+ hash: "d8cea4160f0044b09e595610ead01879"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 210; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6208
+ hash: "b3ad82e900925227fb020009ae619d28"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 210; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6224
+ hash: "11da14806fbca5c7cd559286fb5d70ff"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 208; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 207; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6240
+ hash: "707f51caadf24d3ed88b69c290d56971"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 206; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6256
+ hash: "c23b2afed7fa0e3dbce1183cf8e8d724"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 205; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6272
+ hash: "653b2e2d711c1abc1893d0068f4c531c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 204; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 104
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6288
+ hash: "246a73b19421f0ea8ec444429bd6704e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 202; y: 104
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6304
+ hash: "3878df64c0cecb2051e04dafe16ad407"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 201; y: 104
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6320
+ hash: "1cf92a793a4d145acce08c61cca3ba4f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 200; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 199; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6336
+ hash: "6c5f70c941a04172aae855eed1516971"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 197; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6352
+ hash: "5f4b8d6ad49de0ea1a2ee057e783b363"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 101
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 194; y: 101
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6368
+ hash: "dc185cf4a14801d7bcc24ceadffe312b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 191; y: 101
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 188; y: 100
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6384
+ hash: "6934c069d1b7daf1c2dd76739941c7c2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 187; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6400
+ hash: "415510947b49a08459523fa2221d3609"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 185; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6416
+ hash: "9586619df75f07cc1f01201abd0f1f43"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 182; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6432
+ hash: "d016b14c9d5e5cd2545f1c85aa1edc4f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 176; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6448
+ hash: "4100837adeaf1557534f5c243eeacc37"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 171; y: 95
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6464
+ hash: "a9351f624dc7de55ca8e799cf4371e75"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 166; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 163; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6480
+ hash: "8f2f9ba7de4e01767dda2c6d8f09e218"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 160; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6496
+ hash: "fb9b7d7e1aa140efc7e39cbca7299d34"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 159; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6512
+ hash: "eb1c2399d5779cc3382f02e69e5a31f1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 157; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 156; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6528
+ hash: "3bd98dc8a8cfb7af8a5f2ab11f387065"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 156; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6544
+ hash: "1eea9af6e5f359b96df86d56d74f8375"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 155; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6560
+ hash: "74c68b948d8e1d3c716eba5f1a186464"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 154; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 153; y: 95
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6576
+ hash: "7103ecc0c21208d210938b0cd86fa4e2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 152; y: 95
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 151; y: 95
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6592
+ hash: "187b7801be7cd9643c707016166fcb38"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 149; y: 95
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6608
+ hash: "571fe7704d5d95e91d4bd411ab00edf0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 148; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6624
+ hash: "2b6fd25a47274ffa56c3d0020babfdfc"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 146; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6640
+ hash: "febcd6b5fc1806ff57d1669c79aa4cb2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 145; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6656
+ hash: "5c731fc4a2aeccf55a0af2b7171f25ce"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 145; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6672
+ hash: "7d9df9dd9a99eabaa4b426438e44d612"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 144; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6688
+ hash: "48278540489142f8a63ed120f4b956c2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 144; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6704
+ hash: "d08abdfb587a7ec07872cb662526b6d8"
+ }
+ Frame {
+ msec: 6720
+ image: "cursorDelegate.6.png"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 144; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6736
+ hash: "4622738082ac75e00b6c63e846b7e98b"
+ }
+ Frame {
+ msec: 6752
+ hash: "87a9f2facbaba462c562f09947bb7ded"
+ }
+ Frame {
+ msec: 6768
+ hash: "77e730ece9f195c3627508d1c2a126fc"
+ }
+ Frame {
+ msec: 6784
+ hash: "4a02aaca12e3fd86ee3b516b3a307f86"
+ }
+ Frame {
+ msec: 6800
+ hash: "0a1c2eb8a7451a5e37fefb96a58a88a1"
+ }
+ Frame {
+ msec: 6816
+ hash: "7f2d9959323f0707e36ecb2252c89727"
+ }
+ Frame {
+ msec: 6832
+ hash: "3462a3e166120515e67430600e4653f8"
+ }
+ Frame {
+ msec: 6848
+ hash: "eac8375d9b9cf0afbf232e27c6ceb037"
+ }
+ Frame {
+ msec: 6864
+ hash: "fbefb1e0801f4578ab93dd7ff4062e68"
+ }
+ Frame {
+ msec: 6880
+ hash: "078d75d72bff036574b85ac0aeaaf2b6"
+ }
+ Frame {
+ msec: 6896
+ hash: "14b328c8ec6276e022643102af80fa44"
+ }
+ Frame {
+ msec: 6912
+ hash: "bdcafed4ae9c890eec2e3e0cb2ff5a14"
+ }
+ Frame {
+ msec: 6928
+ hash: "df6f025130dc82f4764def81cec5fa7b"
+ }
+ Frame {
+ msec: 6944
+ hash: "cf467854dfde9b2111bc6e7e4442aab5"
+ }
+ Frame {
+ msec: 6960
+ hash: "cfcdf63ca06c2b9ab197821bc1e48c7c"
+ }
+ Frame {
+ msec: 6976
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6992
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 7008
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 7024
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 7040
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 7056
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 7072
+ hash: "cfcdf63ca06c2b9ab197821bc1e48c7c"
+ }
+ Frame {
+ msec: 7088
+ hash: "cf467854dfde9b2111bc6e7e4442aab5"
+ }
+ Frame {
+ msec: 7104
+ hash: "df6f025130dc82f4764def81cec5fa7b"
+ }
+ Frame {
+ msec: 7120
+ hash: "bdcafed4ae9c890eec2e3e0cb2ff5a14"
+ }
+ Frame {
+ msec: 7136
+ hash: "14b328c8ec6276e022643102af80fa44"
+ }
+ Frame {
+ msec: 7152
+ hash: "078d75d72bff036574b85ac0aeaaf2b6"
+ }
+ Frame {
+ msec: 7168
+ hash: "fbefb1e0801f4578ab93dd7ff4062e68"
+ }
+ Frame {
+ msec: 7184
+ hash: "eac8375d9b9cf0afbf232e27c6ceb037"
+ }
+ Frame {
+ msec: 7200
+ hash: "3462a3e166120515e67430600e4653f8"
+ }
+ Frame {
+ msec: 7216
+ hash: "7f2d9959323f0707e36ecb2252c89727"
+ }
+ Frame {
+ msec: 7232
+ hash: "0a1c2eb8a7451a5e37fefb96a58a88a1"
+ }
+ Frame {
+ msec: 7248
+ hash: "4a02aaca12e3fd86ee3b516b3a307f86"
+ }
+ Frame {
+ msec: 7264
+ hash: "77e730ece9f195c3627508d1c2a126fc"
+ }
+ Frame {
+ msec: 7280
+ hash: "87a9f2facbaba462c562f09947bb7ded"
+ }
+ Frame {
+ msec: 7296
+ hash: "4622738082ac75e00b6c63e846b7e98b"
+ }
+ Frame {
+ msec: 7312
+ hash: "9fcec7616e28cb8317709656fd94f480"
+ }
+ Frame {
+ msec: 7328
+ hash: "d08abdfb587a7ec07872cb662526b6d8"
+ }
+ Frame {
+ msec: 7344
+ hash: "48278540489142f8a63ed120f4b956c2"
+ }
+ Frame {
+ msec: 7360
+ hash: "7d9df9dd9a99eabaa4b426438e44d612"
+ }
+ Frame {
+ msec: 7376
+ hash: "5c731fc4a2aeccf55a0af2b7171f25ce"
+ }
+ Frame {
+ msec: 7392
+ hash: "febcd6b5fc1806ff57d1669c79aa4cb2"
+ }
+ Frame {
+ msec: 7408
+ hash: "4ad2c0877360b0e1bf2212f9455f741e"
+ }
+ Frame {
+ msec: 7424
+ hash: "4df1951aac4ed1957925c95e112b0766"
+ }
+ Frame {
+ msec: 7440
+ hash: "bfbb624abe63639f2a7cb826b6b47393"
+ }
+ Frame {
+ msec: 7456
+ hash: "538cf4ee98145b3801e198b036e24a46"
+ }
+ Frame {
+ msec: 7472
+ hash: "5602c039a304ac0b1fd99957970a825b"
+ }
+ Frame {
+ msec: 7488
+ hash: "9ddd7709269b9a008e15d942e156e13a"
+ }
+ Frame {
+ msec: 7504
+ hash: "91d7c43f5f985d624e77da43ba5fb90f"
+ }
+ Frame {
+ msec: 7520
+ hash: "9153b0419d28e3c8137b58f95451cd58"
+ }
+ Frame {
+ msec: 7536
+ hash: "c5aad5ea4db81cf72f1ff390ed1dc868"
+ }
+ Frame {
+ msec: 7552
+ hash: "47b52ce9e5c705017e94b419b53d20d9"
+ }
+ Frame {
+ msec: 7568
+ hash: "f968e3289a2a6343cdb64e37b83f142a"
+ }
+ Frame {
+ msec: 7584
+ hash: "6fe898a37b17b6b6fa9a2971b518d185"
+ }
+ Frame {
+ msec: 7600
+ hash: "90ced2e487b6e760f2ad2c7d6375a36f"
+ }
+ Frame {
+ msec: 7616
+ hash: "b2d87713d12a54d4d7b6fd6ba2671704"
+ }
+ Frame {
+ msec: 7632
+ hash: "edce9857bd0e93ab841ae62ffba0149f"
+ }
+ Frame {
+ msec: 7648
+ hash: "13ce69facee6bf01c9712db1781c5ef9"
+ }
+ Frame {
+ msec: 7664
+ hash: "64924e43e004f0d9e90c23f61813c732"
+ }
+ Frame {
+ msec: 7680
+ image: "cursorDelegate.7.png"
+ }
+ Frame {
+ msec: 7696
+ hash: "9c384359c664a71b5b6b9f9d62dd38bf"
+ }
+ Frame {
+ msec: 7712
+ hash: "5998579d228bcf0efdbcee805796ec23"
+ }
+ Frame {
+ msec: 7728
+ hash: "fe69cab70ad5b25f757bc413b895ff94"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 227; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7744
+ hash: "1ededcc625a0e9e317c5aefc238a175a"
+ }
+ Frame {
+ msec: 7760
+ hash: "460a4cbee55ccdeda1941c8dccf08cbd"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 227; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7776
+ hash: "f1ae53071836512830f7284c4ac884b3"
+ }
+ Frame {
+ msec: 7792
+ hash: "f73c2b66b61bdcb080f8be6607079729"
+ }
+ Frame {
+ msec: 7808
+ hash: "11da14806fbca5c7cd559286fb5d70ff"
+ }
+ Frame {
+ msec: 7824
+ hash: "b3ad82e900925227fb020009ae619d28"
+ }
+ Frame {
+ msec: 7840
+ hash: "d8cea4160f0044b09e595610ead01879"
+ }
+ Frame {
+ msec: 7856
+ hash: "9c968354773878009af2f176b1e38d42"
+ }
+ Frame {
+ msec: 7872
+ hash: "b509c0cdea6b1352ff1e146a8f243820"
+ }
+ Frame {
+ msec: 7888
+ hash: "bea9d0338212c01474b25ee637aa8fd0"
+ }
+ Frame {
+ msec: 7904
+ hash: "a7f3e07ad0335e2852a156b5a3e1bd3d"
+ }
+ Frame {
+ msec: 7920
+ hash: "58e53a9cb886d6d90c0b5987d0693904"
+ }
+ Frame {
+ msec: 7936
+ hash: "a3ca6fa1bbc5ca3ff4cf281ae112102d"
+ }
+ Frame {
+ msec: 7952
+ hash: "16c38b5dcd8ffbadc533d4fea8a85b0d"
+ }
+ Frame {
+ msec: 7968
+ hash: "be488252ce6c39317c33706f7febe7b5"
+ }
+ Frame {
+ msec: 7984
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 8000
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 8016
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 8032
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 8048
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 8064
+ hash: "be488252ce6c39317c33706f7febe7b5"
+ }
+ Frame {
+ msec: 8080
+ hash: "16c38b5dcd8ffbadc533d4fea8a85b0d"
+ }
+ Frame {
+ msec: 8096
+ hash: "a3ca6fa1bbc5ca3ff4cf281ae112102d"
+ }
+ Frame {
+ msec: 8112
+ hash: "58e53a9cb886d6d90c0b5987d0693904"
+ }
+ Frame {
+ msec: 8128
+ hash: "a7f3e07ad0335e2852a156b5a3e1bd3d"
+ }
+ Frame {
+ msec: 8144
+ hash: "bea9d0338212c01474b25ee637aa8fd0"
+ }
+ Frame {
+ msec: 8160
+ hash: "b509c0cdea6b1352ff1e146a8f243820"
+ }
+ Frame {
+ msec: 8176
+ hash: "9c968354773878009af2f176b1e38d42"
+ }
+ Frame {
+ msec: 8192
+ hash: "d8cea4160f0044b09e595610ead01879"
+ }
+ Frame {
+ msec: 8208
+ hash: "b3ad82e900925227fb020009ae619d28"
+ }
+ Frame {
+ msec: 8224
+ hash: "11da14806fbca5c7cd559286fb5d70ff"
+ }
+ Frame {
+ msec: 8240
+ hash: "f73c2b66b61bdcb080f8be6607079729"
+ }
+ Frame {
+ msec: 8256
+ hash: "f1ae53071836512830f7284c4ac884b3"
+ }
+ Frame {
+ msec: 8272
+ hash: "460a4cbee55ccdeda1941c8dccf08cbd"
+ }
+ Frame {
+ msec: 8288
+ hash: "1ededcc625a0e9e317c5aefc238a175a"
+ }
+ Frame {
+ msec: 8304
+ hash: "70fe89f9dce556ec1859f325aa27b7db"
+ }
+ Frame {
+ msec: 8320
+ hash: "49de92770edb0aae82cf66ae42b31caa"
+ }
+ Frame {
+ msec: 8336
+ hash: "705feb098ebb2d689526d9271098d6b5"
+ }
+ Frame {
+ msec: 8352
+ hash: "72757a5099748b70241a0d4279e42313"
+ }
+ Frame {
+ msec: 8368
+ hash: "7049bee9a984a2c2d3101eb6d3cce31e"
+ }
+ Frame {
+ msec: 8384
+ hash: "f33da88ae881c846bd86ab3dc4f12efc"
+ }
+ Frame {
+ msec: 8400
+ hash: "a0751fa826b03cb25e615c6a1435d92a"
+ }
+ Frame {
+ msec: 8416
+ hash: "d99389a3287d453b942f070d8c1e86e8"
+ }
+ Frame {
+ msec: 8432
+ hash: "e3219357e73a2dfd5b80dfbd6feb79e2"
+ }
+ Frame {
+ msec: 8448
+ hash: "c0953accd856883c813d4ecf99fb632b"
+ }
+ Frame {
+ msec: 8464
+ hash: "185743339cba9dfc1a2c2ff1efd23855"
+ }
+ Frame {
+ msec: 8480
+ hash: "30a4419de779037fd84bd70a99c4d6de"
+ }
+ Frame {
+ msec: 8496
+ hash: "1d9cbd0814831c518e9e8041fe8285c9"
+ }
+ Frame {
+ msec: 8512
+ hash: "81d660df1b0eab7c382991b600f88ba3"
+ }
+ Frame {
+ msec: 8528
+ hash: "7ee1467525b9fe3b6a32fba8c2454df1"
+ }
+ Frame {
+ msec: 8544
+ hash: "28dd72957652cf130d28d30203b36c59"
+ }
+ Frame {
+ msec: 8560
+ hash: "e9697d06a22958cea4f766dd3ec31ca9"
+ }
+ Frame {
+ msec: 8576
+ hash: "81970c31a0a1e42929c83ef5140401c2"
+ }
+ Frame {
+ msec: 8592
+ hash: "ebb5be43955725bef66bf99bd7288c04"
+ }
+ Frame {
+ msec: 8608
+ hash: "afbf0645ea651b2c459eeb43bdc65992"
+ }
+ Frame {
+ msec: 8624
+ hash: "42bf6ab3963652617f2feb96ee170af5"
+ }
+ Frame {
+ msec: 8640
+ image: "cursorDelegate.8.png"
+ }
+ Frame {
+ msec: 8656
+ hash: "4a5966f600f9b27bf7a65fcc6c1c5d17"
+ }
+ Frame {
+ msec: 8672
+ hash: "ecdc1d89af1e76648c8298e2b9940549"
+ }
+ Frame {
+ msec: 8688
+ hash: "0ba1e105a7ae41926e2106b60eafdec9"
+ }
+ Frame {
+ msec: 8704
+ hash: "96e4f277d4ff76afe0c2d58b4aed3acb"
+ }
+ Frame {
+ msec: 8720
+ hash: "f41c6fd9e22354b8f5c940c04930a591"
+ }
+ Frame {
+ msec: 8736
+ hash: "00b522554cf6c0c09e5425f4d3c3fcf9"
+ }
+ Frame {
+ msec: 8752
+ hash: "e8549c0c361f20d167cab128dc996274"
+ }
+ Frame {
+ msec: 8768
+ hash: "976c61615250f9bfa3b4c02ee88bee03"
+ }
+ Frame {
+ msec: 8784
+ hash: "06c95d2fa5e2b4751e5693b179e76eb4"
+ }
+ Frame {
+ msec: 8800
+ hash: "a3d79197235c4717b1f9af3582118ca6"
+ }
+ Frame {
+ msec: 8816
+ hash: "68b23db8f519aa161278074aa318eaa1"
+ }
+ Frame {
+ msec: 8832
+ hash: "af967462be12d0b6ddd3571b00804c12"
+ }
+ Frame {
+ msec: 8848
+ hash: "46f5c0baa2b95fd418984eebe308157e"
+ }
+ Frame {
+ msec: 8864
+ hash: "0a7407c6c751b3f1380a99883e95f1dd"
+ }
+ Frame {
+ msec: 8880
+ hash: "9969c206488671c45c43f3a3dd3f5994"
+ }
+ Frame {
+ msec: 8896
+ hash: "89efa872ce2e71935b47cac101bf15c9"
+ }
+ Frame {
+ msec: 8912
+ hash: "a4545a0c50fb071d267b06bf2d114802"
+ }
+ Frame {
+ msec: 8928
+ hash: "f4df98459c18399e1c6b2d8a43bdd678"
+ }
+ Frame {
+ msec: 8944
+ hash: "027eb091eea8bf51d7ad3ff44120e075"
+ }
+ Frame {
+ msec: 8960
+ hash: "138ec35b850d20664f905a4eea6f7456"
+ }
+ Frame {
+ msec: 8976
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 8992
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 9008
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 9024
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 9040
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 9056
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 9072
+ hash: "138ec35b850d20664f905a4eea6f7456"
+ }
+ Frame {
+ msec: 9088
+ hash: "027eb091eea8bf51d7ad3ff44120e075"
+ }
+ Frame {
+ msec: 9104
+ hash: "f4df98459c18399e1c6b2d8a43bdd678"
+ }
+ Frame {
+ msec: 9120
+ hash: "a4545a0c50fb071d267b06bf2d114802"
+ }
+ Frame {
+ msec: 9136
+ hash: "89efa872ce2e71935b47cac101bf15c9"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/qt-669.0.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/qt-669.0.png
new file mode 100644
index 0000000..cc1774f
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/qt-669.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/qt-669.1.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/qt-669.1.png
new file mode 100644
index 0000000..60eba16
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/qt-669.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/qt-669.2.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/qt-669.2.png
new file mode 100644
index 0000000..d4663f7
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/qt-669.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/qt-669.3.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/qt-669.3.png
new file mode 100644
index 0000000..dc1bb52
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/qt-669.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/qt-669.qml b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/qt-669.qml
new file mode 100644
index 0000000..84c16e1
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-MAC/qt-669.qml
@@ -0,0 +1,1371 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 32
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 48
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 64
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 80
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 96
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 112
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 128
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 144
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 160
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 176
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 192
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 208
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 224
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 240
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 256
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 272
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 288
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 304
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 320
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 336
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 352
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 368
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 384
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 400
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 416
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 432
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 448
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 464
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 480
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 496
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 512
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 528
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 544
+ hash: "fbc07fa31ab2022f3155bd1fb591fe6c"
+ }
+ Frame {
+ msec: 560
+ hash: "fbc07fa31ab2022f3155bd1fb591fe6c"
+ }
+ Frame {
+ msec: 576
+ hash: "fbc07fa31ab2022f3155bd1fb591fe6c"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 592
+ hash: "fbc07fa31ab2022f3155bd1fb591fe6c"
+ }
+ Frame {
+ msec: 608
+ hash: "fbc07fa31ab2022f3155bd1fb591fe6c"
+ }
+ Frame {
+ msec: 624
+ hash: "fbc07fa31ab2022f3155bd1fb591fe6c"
+ }
+ Frame {
+ msec: 640
+ hash: "fbc07fa31ab2022f3155bd1fb591fe6c"
+ }
+ Frame {
+ msec: 656
+ hash: "fbc07fa31ab2022f3155bd1fb591fe6c"
+ }
+ Frame {
+ msec: 672
+ hash: "fbc07fa31ab2022f3155bd1fb591fe6c"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 688
+ hash: "c602a6535ef86125615307d9d187eb3f"
+ }
+ Frame {
+ msec: 704
+ hash: "c602a6535ef86125615307d9d187eb3f"
+ }
+ Frame {
+ msec: 720
+ hash: "c602a6535ef86125615307d9d187eb3f"
+ }
+ Frame {
+ msec: 736
+ hash: "c602a6535ef86125615307d9d187eb3f"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 752
+ hash: "c602a6535ef86125615307d9d187eb3f"
+ }
+ Frame {
+ msec: 768
+ hash: "c602a6535ef86125615307d9d187eb3f"
+ }
+ Frame {
+ msec: 784
+ hash: "c602a6535ef86125615307d9d187eb3f"
+ }
+ Frame {
+ msec: 800
+ hash: "c602a6535ef86125615307d9d187eb3f"
+ }
+ Frame {
+ msec: 816
+ hash: "c602a6535ef86125615307d9d187eb3f"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 832
+ hash: "c186352ed5d1539a45b3c9e1dfa408d6"
+ }
+ Frame {
+ msec: 848
+ hash: "c186352ed5d1539a45b3c9e1dfa408d6"
+ }
+ Frame {
+ msec: 864
+ hash: "c186352ed5d1539a45b3c9e1dfa408d6"
+ }
+ Frame {
+ msec: 880
+ hash: "c186352ed5d1539a45b3c9e1dfa408d6"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 896
+ hash: "c186352ed5d1539a45b3c9e1dfa408d6"
+ }
+ Frame {
+ msec: 912
+ hash: "c186352ed5d1539a45b3c9e1dfa408d6"
+ }
+ Frame {
+ msec: 928
+ hash: "c186352ed5d1539a45b3c9e1dfa408d6"
+ }
+ Frame {
+ msec: 944
+ hash: "c186352ed5d1539a45b3c9e1dfa408d6"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 960
+ image: "qt-669.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Frame {
+ msec: 992
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Frame {
+ msec: 1008
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1024
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Frame {
+ msec: 1040
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Frame {
+ msec: 1056
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Frame {
+ msec: 1072
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Frame {
+ msec: 1088
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1104
+ hash: "f90403e0b62f9579b5c5f591e75e9eb5"
+ }
+ Frame {
+ msec: 1120
+ hash: "f90403e0b62f9579b5c5f591e75e9eb5"
+ }
+ Frame {
+ msec: 1136
+ hash: "f90403e0b62f9579b5c5f591e75e9eb5"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1152
+ hash: "f90403e0b62f9579b5c5f591e75e9eb5"
+ }
+ Frame {
+ msec: 1168
+ hash: "f90403e0b62f9579b5c5f591e75e9eb5"
+ }
+ Frame {
+ msec: 1184
+ hash: "f90403e0b62f9579b5c5f591e75e9eb5"
+ }
+ Frame {
+ msec: 1200
+ hash: "f90403e0b62f9579b5c5f591e75e9eb5"
+ }
+ Frame {
+ msec: 1216
+ hash: "f90403e0b62f9579b5c5f591e75e9eb5"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1232
+ hash: "823ccdc677997c96e4ae16891ffffa77"
+ }
+ Frame {
+ msec: 1248
+ hash: "823ccdc677997c96e4ae16891ffffa77"
+ }
+ Frame {
+ msec: 1264
+ hash: "823ccdc677997c96e4ae16891ffffa77"
+ }
+ Frame {
+ msec: 1280
+ hash: "823ccdc677997c96e4ae16891ffffa77"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1296
+ hash: "823ccdc677997c96e4ae16891ffffa77"
+ }
+ Frame {
+ msec: 1312
+ hash: "823ccdc677997c96e4ae16891ffffa77"
+ }
+ Frame {
+ msec: 1328
+ hash: "823ccdc677997c96e4ae16891ffffa77"
+ }
+ Frame {
+ msec: 1344
+ hash: "823ccdc677997c96e4ae16891ffffa77"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1360
+ hash: "2718ab36551a20d36664f26e408f8f24"
+ }
+ Frame {
+ msec: 1376
+ hash: "2718ab36551a20d36664f26e408f8f24"
+ }
+ Frame {
+ msec: 1392
+ hash: "2718ab36551a20d36664f26e408f8f24"
+ }
+ Frame {
+ msec: 1408
+ hash: "2718ab36551a20d36664f26e408f8f24"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1424
+ hash: "2718ab36551a20d36664f26e408f8f24"
+ }
+ Frame {
+ msec: 1440
+ hash: "2718ab36551a20d36664f26e408f8f24"
+ }
+ Frame {
+ msec: 1456
+ hash: "2718ab36551a20d36664f26e408f8f24"
+ }
+ Frame {
+ msec: 1472
+ hash: "2718ab36551a20d36664f26e408f8f24"
+ }
+ Frame {
+ msec: 1488
+ hash: "2718ab36551a20d36664f26e408f8f24"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1504
+ hash: "781a5a09fb6c6ca1fd38f63938f9c8d0"
+ }
+ Frame {
+ msec: 1520
+ hash: "781a5a09fb6c6ca1fd38f63938f9c8d0"
+ }
+ Frame {
+ msec: 1536
+ hash: "781a5a09fb6c6ca1fd38f63938f9c8d0"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1552
+ hash: "781a5a09fb6c6ca1fd38f63938f9c8d0"
+ }
+ Frame {
+ msec: 1568
+ hash: "781a5a09fb6c6ca1fd38f63938f9c8d0"
+ }
+ Frame {
+ msec: 1584
+ hash: "781a5a09fb6c6ca1fd38f63938f9c8d0"
+ }
+ Frame {
+ msec: 1600
+ hash: "781a5a09fb6c6ca1fd38f63938f9c8d0"
+ }
+ Frame {
+ msec: 1616
+ hash: "781a5a09fb6c6ca1fd38f63938f9c8d0"
+ }
+ Frame {
+ msec: 1632
+ hash: "781a5a09fb6c6ca1fd38f63938f9c8d0"
+ }
+ Frame {
+ msec: 1648
+ hash: "781a5a09fb6c6ca1fd38f63938f9c8d0"
+ }
+ Frame {
+ msec: 1664
+ hash: "781a5a09fb6c6ca1fd38f63938f9c8d0"
+ }
+ Frame {
+ msec: 1680
+ hash: "781a5a09fb6c6ca1fd38f63938f9c8d0"
+ }
+ Frame {
+ msec: 1696
+ hash: "781a5a09fb6c6ca1fd38f63938f9c8d0"
+ }
+ Frame {
+ msec: 1712
+ hash: "781a5a09fb6c6ca1fd38f63938f9c8d0"
+ }
+ Frame {
+ msec: 1728
+ hash: "781a5a09fb6c6ca1fd38f63938f9c8d0"
+ }
+ Frame {
+ msec: 1744
+ hash: "781a5a09fb6c6ca1fd38f63938f9c8d0"
+ }
+ Frame {
+ msec: 1760
+ hash: "781a5a09fb6c6ca1fd38f63938f9c8d0"
+ }
+ Frame {
+ msec: 1776
+ hash: "781a5a09fb6c6ca1fd38f63938f9c8d0"
+ }
+ Frame {
+ msec: 1792
+ hash: "781a5a09fb6c6ca1fd38f63938f9c8d0"
+ }
+ Frame {
+ msec: 1808
+ hash: "781a5a09fb6c6ca1fd38f63938f9c8d0"
+ }
+ Frame {
+ msec: 1824
+ hash: "781a5a09fb6c6ca1fd38f63938f9c8d0"
+ }
+ Frame {
+ msec: 1840
+ hash: "781a5a09fb6c6ca1fd38f63938f9c8d0"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1856
+ hash: "2718ab36551a20d36664f26e408f8f24"
+ }
+ Frame {
+ msec: 1872
+ hash: "2718ab36551a20d36664f26e408f8f24"
+ }
+ Frame {
+ msec: 1888
+ hash: "2718ab36551a20d36664f26e408f8f24"
+ }
+ Frame {
+ msec: 1904
+ hash: "2718ab36551a20d36664f26e408f8f24"
+ }
+ Frame {
+ msec: 1920
+ image: "qt-669.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "2718ab36551a20d36664f26e408f8f24"
+ }
+ Frame {
+ msec: 1952
+ hash: "2718ab36551a20d36664f26e408f8f24"
+ }
+ Frame {
+ msec: 1968
+ hash: "2718ab36551a20d36664f26e408f8f24"
+ }
+ Frame {
+ msec: 1984
+ hash: "2718ab36551a20d36664f26e408f8f24"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2000
+ hash: "2718ab36551a20d36664f26e408f8f24"
+ }
+ Frame {
+ msec: 2016
+ hash: "2718ab36551a20d36664f26e408f8f24"
+ }
+ Frame {
+ msec: 2032
+ hash: "2718ab36551a20d36664f26e408f8f24"
+ }
+ Frame {
+ msec: 2048
+ hash: "2718ab36551a20d36664f26e408f8f24"
+ }
+ Frame {
+ msec: 2064
+ hash: "2718ab36551a20d36664f26e408f8f24"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2080
+ hash: "823ccdc677997c96e4ae16891ffffa77"
+ }
+ Frame {
+ msec: 2096
+ hash: "823ccdc677997c96e4ae16891ffffa77"
+ }
+ Frame {
+ msec: 2112
+ hash: "823ccdc677997c96e4ae16891ffffa77"
+ }
+ Frame {
+ msec: 2128
+ hash: "823ccdc677997c96e4ae16891ffffa77"
+ }
+ Frame {
+ msec: 2144
+ hash: "823ccdc677997c96e4ae16891ffffa77"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2160
+ hash: "823ccdc677997c96e4ae16891ffffa77"
+ }
+ Frame {
+ msec: 2176
+ hash: "823ccdc677997c96e4ae16891ffffa77"
+ }
+ Frame {
+ msec: 2192
+ hash: "823ccdc677997c96e4ae16891ffffa77"
+ }
+ Frame {
+ msec: 2208
+ hash: "823ccdc677997c96e4ae16891ffffa77"
+ }
+ Frame {
+ msec: 2224
+ hash: "823ccdc677997c96e4ae16891ffffa77"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2240
+ hash: "f90403e0b62f9579b5c5f591e75e9eb5"
+ }
+ Frame {
+ msec: 2256
+ hash: "f90403e0b62f9579b5c5f591e75e9eb5"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2272
+ hash: "f90403e0b62f9579b5c5f591e75e9eb5"
+ }
+ Frame {
+ msec: 2288
+ hash: "f90403e0b62f9579b5c5f591e75e9eb5"
+ }
+ Frame {
+ msec: 2304
+ hash: "f90403e0b62f9579b5c5f591e75e9eb5"
+ }
+ Frame {
+ msec: 2320
+ hash: "f90403e0b62f9579b5c5f591e75e9eb5"
+ }
+ Frame {
+ msec: 2336
+ hash: "f90403e0b62f9579b5c5f591e75e9eb5"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2352
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Frame {
+ msec: 2368
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Frame {
+ msec: 2384
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2400
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Frame {
+ msec: 2416
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Frame {
+ msec: 2432
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Frame {
+ msec: 2448
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Frame {
+ msec: 2464
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Frame {
+ msec: 2480
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Frame {
+ msec: 2496
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Frame {
+ msec: 2512
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Frame {
+ msec: 2528
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Frame {
+ msec: 2544
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Frame {
+ msec: 2560
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Frame {
+ msec: 2576
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Frame {
+ msec: 2592
+ hash: "1295bd1d94fe518d5a871e90cab88e0c"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2608
+ hash: "c186352ed5d1539a45b3c9e1dfa408d6"
+ }
+ Frame {
+ msec: 2624
+ hash: "c186352ed5d1539a45b3c9e1dfa408d6"
+ }
+ Frame {
+ msec: 2640
+ hash: "c186352ed5d1539a45b3c9e1dfa408d6"
+ }
+ Frame {
+ msec: 2656
+ hash: "c186352ed5d1539a45b3c9e1dfa408d6"
+ }
+ Frame {
+ msec: 2672
+ hash: "c186352ed5d1539a45b3c9e1dfa408d6"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2688
+ hash: "c186352ed5d1539a45b3c9e1dfa408d6"
+ }
+ Frame {
+ msec: 2704
+ hash: "c186352ed5d1539a45b3c9e1dfa408d6"
+ }
+ Frame {
+ msec: 2720
+ hash: "c186352ed5d1539a45b3c9e1dfa408d6"
+ }
+ Frame {
+ msec: 2736
+ hash: "c186352ed5d1539a45b3c9e1dfa408d6"
+ }
+ Frame {
+ msec: 2752
+ hash: "c186352ed5d1539a45b3c9e1dfa408d6"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2768
+ hash: "c602a6535ef86125615307d9d187eb3f"
+ }
+ Frame {
+ msec: 2784
+ hash: "c602a6535ef86125615307d9d187eb3f"
+ }
+ Frame {
+ msec: 2800
+ hash: "c602a6535ef86125615307d9d187eb3f"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2816
+ hash: "c602a6535ef86125615307d9d187eb3f"
+ }
+ Frame {
+ msec: 2832
+ hash: "c602a6535ef86125615307d9d187eb3f"
+ }
+ Frame {
+ msec: 2848
+ hash: "c602a6535ef86125615307d9d187eb3f"
+ }
+ Frame {
+ msec: 2864
+ hash: "c602a6535ef86125615307d9d187eb3f"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2880
+ image: "qt-669.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "fbc07fa31ab2022f3155bd1fb591fe6c"
+ }
+ Frame {
+ msec: 2912
+ hash: "fbc07fa31ab2022f3155bd1fb591fe6c"
+ }
+ Frame {
+ msec: 2928
+ hash: "fbc07fa31ab2022f3155bd1fb591fe6c"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2944
+ hash: "fbc07fa31ab2022f3155bd1fb591fe6c"
+ }
+ Frame {
+ msec: 2960
+ hash: "fbc07fa31ab2022f3155bd1fb591fe6c"
+ }
+ Frame {
+ msec: 2976
+ hash: "fbc07fa31ab2022f3155bd1fb591fe6c"
+ }
+ Frame {
+ msec: 2992
+ hash: "fbc07fa31ab2022f3155bd1fb591fe6c"
+ }
+ Frame {
+ msec: 3008
+ hash: "fbc07fa31ab2022f3155bd1fb591fe6c"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3024
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3040
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3056
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3072
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3088
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3104
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3120
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3136
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3152
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3168
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3184
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3200
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3216
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3232
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3248
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3264
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3280
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3296
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3312
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3328
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3344
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3360
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3376
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3392
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3408
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3424
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3440
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3456
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3472
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3488
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3504
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3520
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3536
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3552
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3568
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3584
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3600
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3616
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3632
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3648
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3664
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3680
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Frame {
+ msec: 3696
+ hash: "e64c3246a0f81e2df29ac276ac6d411f"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3712
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 3728
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 3744
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 3760
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 3776
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 3792
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3808
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 3824
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 3840
+ image: "qt-669.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 3872
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 3888
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 3904
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 3920
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 3936
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 3952
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 3968
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 3984
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 4000
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 4016
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 4032
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 4048
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 4064
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 4080
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 4096
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 4112
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 4128
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 4144
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 4160
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 4176
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 4192
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 4208
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 4224
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 4240
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 4256
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 4272
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 4288
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+ Frame {
+ msec: 4304
+ hash: "c043ae4adb31cb53bfc089e7f2ed07b2"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.0.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.0.png
new file mode 100644
index 0000000..ec65f49
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.1.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.1.png
new file mode 100644
index 0000000..ec65f49
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.2.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.2.png
new file mode 100644
index 0000000..ec65f49
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.3.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.3.png
new file mode 100644
index 0000000..ec65f49
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.4.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.4.png
new file mode 100644
index 0000000..ec65f49
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.5.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.5.png
new file mode 100644
index 0000000..ec65f49
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.6.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.6.png
new file mode 100644
index 0000000..ec65f49
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.qml b/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.qml
new file mode 100644
index 0000000..4ff00f4
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data-X11/wrap.qml
@@ -0,0 +1,2467 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 84
+ modifiers: 33554432
+ text: "54"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 32
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 16777248
+ modifiers: 33554432
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 48
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 64
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 80
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 96
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 72
+ modifiers: 0
+ text: "68"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 112
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 128
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 144
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 73
+ modifiers: 0
+ text: "69"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 160
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 176
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 192
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 72
+ modifiers: 0
+ text: "68"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 208
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 224
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 240
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 73
+ modifiers: 0
+ text: "69"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 256
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 272
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 288
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 304
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 320
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 336
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 352
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 368
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 384
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 400
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 416
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 432
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 448
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 464
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 73
+ modifiers: 0
+ text: "69"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 480
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 496
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 512
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 528
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Key {
+ type: 7
+ key: 73
+ modifiers: 0
+ text: "69"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 544
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 560
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 576
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 592
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 608
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Key {
+ type: 6
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 624
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 640
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 656
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 672
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 688
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 704
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 720
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 736
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 752
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 768
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 784
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 800
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 816
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 832
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 848
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 864
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 880
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 896
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 912
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 928
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 944
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 960
+ image: "wrap.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 992
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 69
+ modifiers: 0
+ text: "65"
+ autorep: false
+ count: 1
+ }
+ Key {
+ type: 7
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1008
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1024
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1040
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1056
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1072
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 69
+ modifiers: 0
+ text: "65"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1088
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1104
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1120
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1136
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1152
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1168
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1184
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1200
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1216
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1232
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1248
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1264
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Key {
+ type: 6
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1280
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1296
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1312
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1328
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1344
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1360
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1376
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1392
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1408
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1424
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1440
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1456
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1472
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1488
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1504
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1520
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1536
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1552
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 72
+ modifiers: 0
+ text: "68"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1568
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1584
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1600
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1616
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1632
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Key {
+ type: 7
+ key: 72
+ modifiers: 0
+ text: "68"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1648
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1664
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1680
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1696
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1712
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1728
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1744
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1760
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1776
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1792
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1808
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1824
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1840
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1856
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1872
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1888
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1904
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1920
+ image: "wrap.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1952
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1968
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1984
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2000
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2016
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2032
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2048
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 69
+ modifiers: 0
+ text: "65"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2064
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2080
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2096
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2112
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 69
+ modifiers: 0
+ text: "65"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2128
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2144
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2160
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2176
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2192
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2208
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 88
+ modifiers: 0
+ text: "78"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2224
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2240
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2256
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2272
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2288
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2304
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 88
+ modifiers: 0
+ text: "78"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2320
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2336
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2352
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2368
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2384
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2400
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2416
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2432
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2448
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2464
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2480
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 69
+ modifiers: 0
+ text: "65"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2496
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2512
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2528
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2544
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 69
+ modifiers: 0
+ text: "65"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2560
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2576
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2592
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2608
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2624
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2640
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 68
+ modifiers: 0
+ text: "64"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2656
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2672
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2688
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2704
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 68
+ modifiers: 0
+ text: "64"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2720
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2736
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2752
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 73
+ modifiers: 0
+ text: "69"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2768
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2784
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2800
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2816
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2832
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Key {
+ type: 7
+ key: 73
+ modifiers: 0
+ text: "69"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2848
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2864
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2880
+ image: "wrap.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2912
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2928
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2944
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2960
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2976
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2992
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3008
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3024
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3040
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3056
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3072
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3088
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 87
+ modifiers: 0
+ text: "77"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3104
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3120
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3136
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3152
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3168
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 87
+ modifiers: 0
+ text: "77"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3184
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3200
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3216
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3232
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3248
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 82
+ modifiers: 0
+ text: "72"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3264
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3280
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3296
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 82
+ modifiers: 0
+ text: "72"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3312
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3328
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3344
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3360
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3376
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3392
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3408
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3424
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3440
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3456
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3472
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 80
+ modifiers: 0
+ text: "70"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3488
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3504
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3520
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3536
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 80
+ modifiers: 0
+ text: "70"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3552
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3568
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3584
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3600
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3616
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3632
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3648
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3664
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3680
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3696
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3712
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3728
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3744
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3760
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3776
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3792
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3808
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3824
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3840
+ image: "wrap.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3872
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3888
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3904
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 67
+ modifiers: 0
+ text: "63"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3920
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3936
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3952
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3968
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3984
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 67
+ modifiers: 0
+ text: "63"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4000
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4016
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 79
+ modifiers: 0
+ text: "6f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4032
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4048
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4064
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 79
+ modifiers: 0
+ text: "6f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4080
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 82
+ modifiers: 0
+ text: "72"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4096
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4112
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4128
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4144
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 82
+ modifiers: 0
+ text: "72"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4160
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4176
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4192
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 82
+ modifiers: 0
+ text: "72"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4208
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4224
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4240
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4256
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4272
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 69
+ modifiers: 0
+ text: "65"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4288
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 82
+ modifiers: 0
+ text: "72"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4304
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4320
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4336
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 69
+ modifiers: 0
+ text: "65"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4352
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4368
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4384
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4400
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4416
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 67
+ modifiers: 0
+ text: "63"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4432
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4448
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4464
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 67
+ modifiers: 0
+ text: "63"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4480
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4496
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4512
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4528
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4544
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4560
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4576
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4592
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4608
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4624
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4640
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4656
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4672
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 76
+ modifiers: 0
+ text: "6c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4688
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4704
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4720
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4736
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 76
+ modifiers: 0
+ text: "6c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4752
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4768
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4784
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 89
+ modifiers: 0
+ text: "79"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4800
+ image: "wrap.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 89
+ modifiers: 0
+ text: "79"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4832
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4848
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4864
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4880
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 46
+ modifiers: 0
+ text: "2e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4896
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4912
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4928
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4944
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 46
+ modifiers: 0
+ text: "2e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4960
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4976
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4992
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5008
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5024
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5040
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5056
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5072
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5088
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5104
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5120
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5136
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5152
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5168
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5184
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5200
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5216
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5232
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5248
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5264
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5280
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5296
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5312
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5328
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5344
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5360
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5376
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5392
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5408
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5424
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5440
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5456
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5472
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5488
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5504
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5520
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5536
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5552
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5568
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5584
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5600
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5616
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5632
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5648
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5664
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5680
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5696
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5712
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5728
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5744
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5760
+ image: "wrap.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5792
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5808
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5824
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5840
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5856
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5872
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5888
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5904
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5920
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5936
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5952
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5968
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5984
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6000
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6016
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6032
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6048
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6064
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6080
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6096
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6112
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6128
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6144
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6160
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6176
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6192
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6208
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6224
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6240
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6256
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6272
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6288
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6304
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6320
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6336
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6352
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6368
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6384
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6400
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6416
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6432
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6448
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6464
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6480
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6496
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6512
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6528
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6544
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6560
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6576
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6592
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6608
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6624
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6640
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6656
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6672
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6688
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6704
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6720
+ image: "wrap.6.png"
+ }
+ Frame {
+ msec: 6736
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6752
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6768
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6784
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6800
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6816
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6832
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6848
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6864
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.0.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.0.png
new file mode 100644
index 0000000..555996a
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.1.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.1.png
new file mode 100644
index 0000000..b705bad
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.2.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.2.png
new file mode 100644
index 0000000..094cd2a
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.3.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.3.png
new file mode 100644
index 0000000..9c519c7
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.4.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.4.png
new file mode 100644
index 0000000..3ec77b5
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.5.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.5.png
new file mode 100644
index 0000000..579a66e
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.6.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.6.png
new file mode 100644
index 0000000..9e5ac90
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.7.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.7.png
new file mode 100644
index 0000000..9f3acfc
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.7.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.8.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.8.png
new file mode 100644
index 0000000..f27518a
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.8.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.qml b/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.qml
new file mode 100644
index 0000000..8578d48
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/cursorDelegate.qml
@@ -0,0 +1,3555 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 32
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 48
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 64
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 80
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 96
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 112
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 128
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 144
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 160
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 176
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 192
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 208
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 224
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 240
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 256
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 272
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 288
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 304
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 320
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 336
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 352
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 368
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 384
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 400
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 416
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 432
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 448
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 464
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 480
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 496
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 512
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 528
+ hash: "15da97430bcbac3a16d9897bbf2e4dbd"
+ }
+ Frame {
+ msec: 544
+ hash: "2aec32493055ad17f4aac9b3c9b84c5f"
+ }
+ Frame {
+ msec: 560
+ hash: "e0826ff09b628a5e3ddf6d9e5593f937"
+ }
+ Frame {
+ msec: 576
+ hash: "eacfa8db605b9e386a55508e8943e7d1"
+ }
+ Frame {
+ msec: 592
+ hash: "2dbe9b5bbb5baf12cd2cbfb4190be316"
+ }
+ Frame {
+ msec: 608
+ hash: "60a60e06237318bf005f87bbba386fef"
+ }
+ Frame {
+ msec: 624
+ hash: "97549f388c02adb8884c2e79510adc7e"
+ }
+ Frame {
+ msec: 640
+ hash: "d882fe91d9df9862d620cf984e27d0bd"
+ }
+ Frame {
+ msec: 656
+ hash: "6310b65572e39256122c7620f7e87442"
+ }
+ Frame {
+ msec: 672
+ hash: "4e7374a683050ff440056b6e7c971d2b"
+ }
+ Frame {
+ msec: 688
+ hash: "35c0d55cda3a02eb4c441a5832bcbbf4"
+ }
+ Frame {
+ msec: 704
+ hash: "8d71c418593eb3e4834d5e608ffd3f29"
+ }
+ Frame {
+ msec: 720
+ hash: "0da2c1cd0138172698a3bee5d19168c5"
+ }
+ Frame {
+ msec: 736
+ hash: "8ca757a4fd1987329488f63251b0f6b4"
+ }
+ Frame {
+ msec: 752
+ hash: "70c827f1b34b44cbd775b666913556d6"
+ }
+ Frame {
+ msec: 768
+ hash: "2b91dcef1b3ca66059dd9db4c8e335f3"
+ }
+ Frame {
+ msec: 784
+ hash: "38abc77b2361ce257d39c0cf268ba42b"
+ }
+ Frame {
+ msec: 800
+ hash: "59865194eb63465dd0f3925c7a500340"
+ }
+ Frame {
+ msec: 816
+ hash: "7bed5747d6b771db0fe5802153e54f2f"
+ }
+ Frame {
+ msec: 832
+ hash: "9ac1bf268749bc8e58bc4d04b55ef849"
+ }
+ Frame {
+ msec: 848
+ hash: "64ea5cb46782d250c46a7a2c8cceea20"
+ }
+ Frame {
+ msec: 864
+ hash: "d81037eb21bfcb434b6c7f3bbd21ad12"
+ }
+ Frame {
+ msec: 880
+ hash: "1079ea3a1a62e2cca9a8e907bc5aa4e1"
+ }
+ Frame {
+ msec: 896
+ hash: "96422f9bfbc11775cd7d1fae2ba357bd"
+ }
+ Frame {
+ msec: 912
+ hash: "0d247385059a6f68b37bc34f6b2214b1"
+ }
+ Frame {
+ msec: 928
+ hash: "7c513361e13a90eef229b42e68ffaa18"
+ }
+ Frame {
+ msec: 944
+ hash: "510b8441c613f0637dfc46e03c278112"
+ }
+ Frame {
+ msec: 960
+ image: "cursorDelegate.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "8d90112e2e1c6f226a1a5f4f75785939"
+ }
+ Frame {
+ msec: 992
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 1008
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 1024
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 1040
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 1056
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 1072
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 1088
+ hash: "8d90112e2e1c6f226a1a5f4f75785939"
+ }
+ Frame {
+ msec: 1104
+ hash: "85e6af1f5fd15338a15f984e24d5ec9d"
+ }
+ Frame {
+ msec: 1120
+ hash: "510b8441c613f0637dfc46e03c278112"
+ }
+ Frame {
+ msec: 1136
+ hash: "7c513361e13a90eef229b42e68ffaa18"
+ }
+ Frame {
+ msec: 1152
+ hash: "0d247385059a6f68b37bc34f6b2214b1"
+ }
+ Frame {
+ msec: 1168
+ hash: "96422f9bfbc11775cd7d1fae2ba357bd"
+ }
+ Frame {
+ msec: 1184
+ hash: "1079ea3a1a62e2cca9a8e907bc5aa4e1"
+ }
+ Frame {
+ msec: 1200
+ hash: "d81037eb21bfcb434b6c7f3bbd21ad12"
+ }
+ Frame {
+ msec: 1216
+ hash: "64ea5cb46782d250c46a7a2c8cceea20"
+ }
+ Frame {
+ msec: 1232
+ hash: "9ac1bf268749bc8e58bc4d04b55ef849"
+ }
+ Frame {
+ msec: 1248
+ hash: "7bed5747d6b771db0fe5802153e54f2f"
+ }
+ Frame {
+ msec: 1264
+ hash: "59865194eb63465dd0f3925c7a500340"
+ }
+ Frame {
+ msec: 1280
+ hash: "38abc77b2361ce257d39c0cf268ba42b"
+ }
+ Frame {
+ msec: 1296
+ hash: "2b91dcef1b3ca66059dd9db4c8e335f3"
+ }
+ Frame {
+ msec: 1312
+ hash: "70c827f1b34b44cbd775b666913556d6"
+ }
+ Frame {
+ msec: 1328
+ hash: "8ca757a4fd1987329488f63251b0f6b4"
+ }
+ Frame {
+ msec: 1344
+ hash: "0da2c1cd0138172698a3bee5d19168c5"
+ }
+ Frame {
+ msec: 1360
+ hash: "8d71c418593eb3e4834d5e608ffd3f29"
+ }
+ Frame {
+ msec: 1376
+ hash: "35c0d55cda3a02eb4c441a5832bcbbf4"
+ }
+ Key {
+ type: 6
+ key: 16777232
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1392
+ hash: "4e7374a683050ff440056b6e7c971d2b"
+ }
+ Frame {
+ msec: 1408
+ hash: "6310b65572e39256122c7620f7e87442"
+ }
+ Frame {
+ msec: 1424
+ hash: "d882fe91d9df9862d620cf984e27d0bd"
+ }
+ Frame {
+ msec: 1440
+ hash: "97549f388c02adb8884c2e79510adc7e"
+ }
+ Frame {
+ msec: 1456
+ hash: "60a60e06237318bf005f87bbba386fef"
+ }
+ Key {
+ type: 7
+ key: 16777232
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1472
+ hash: "2dbe9b5bbb5baf12cd2cbfb4190be316"
+ }
+ Frame {
+ msec: 1488
+ hash: "eacfa8db605b9e386a55508e8943e7d1"
+ }
+ Frame {
+ msec: 1504
+ hash: "e0826ff09b628a5e3ddf6d9e5593f937"
+ }
+ Frame {
+ msec: 1520
+ hash: "2aec32493055ad17f4aac9b3c9b84c5f"
+ }
+ Frame {
+ msec: 1536
+ hash: "c0e72cdf776b0c62742aa9c3683cd523"
+ }
+ Frame {
+ msec: 1552
+ hash: "ea3f512181b3ee94d8cdd4d9f59ed962"
+ }
+ Frame {
+ msec: 1568
+ hash: "de924155855e76d0591217448f79bdb6"
+ }
+ Frame {
+ msec: 1584
+ hash: "51da770a75102de9ad1920f1f6c44146"
+ }
+ Frame {
+ msec: 1600
+ hash: "e3c0e8f6385ef2ab9b671be3243774c4"
+ }
+ Frame {
+ msec: 1616
+ hash: "eac6de65ea6726f0cc50b6d30c1b7ba5"
+ }
+ Frame {
+ msec: 1632
+ hash: "2ee111386bd646c4ee577405e490a2f7"
+ }
+ Key {
+ type: 6
+ key: 16777233
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1648
+ hash: "24c376d5a2b3555126b156c8bc7a7a0c"
+ }
+ Frame {
+ msec: 1664
+ hash: "d9c35de8b02f11db321d9bdcdcd65403"
+ }
+ Frame {
+ msec: 1680
+ hash: "0b32a66497ec3cdd05dc27c0ef9c5718"
+ }
+ Frame {
+ msec: 1696
+ hash: "9626f80ef170af2db135792337203265"
+ }
+ Frame {
+ msec: 1712
+ hash: "6e4ce7599da579f764ff10e982888889"
+ }
+ Frame {
+ msec: 1728
+ hash: "5ad4dd681be780c0068734ca5c722507"
+ }
+ Key {
+ type: 7
+ key: 16777233
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1744
+ hash: "7d620ef53049f9195cc832d6f9dfd52b"
+ }
+ Frame {
+ msec: 1760
+ hash: "0f54144c574af01958505eedd69162f6"
+ }
+ Frame {
+ msec: 1776
+ hash: "50f168354e3901283708a4ae9088783d"
+ }
+ Frame {
+ msec: 1792
+ hash: "c55fdf2fd0a4eeb9ca0e3072aa3e60c4"
+ }
+ Frame {
+ msec: 1808
+ hash: "d351de13e7bb5b273ec3aebb88dffbd5"
+ }
+ Frame {
+ msec: 1824
+ hash: "977d44194d1ef05801167157714891af"
+ }
+ Frame {
+ msec: 1840
+ hash: "ef3694ca78764709abbe2f8781578fb4"
+ }
+ Frame {
+ msec: 1856
+ hash: "77afbc0e0b828d03148ed7fe342dfbda"
+ }
+ Frame {
+ msec: 1872
+ hash: "0d94e37430d8b835e65750a6af525ef7"
+ }
+ Frame {
+ msec: 1888
+ hash: "e009a8d2cb7c7f1200055666cf2efd9c"
+ }
+ Frame {
+ msec: 1904
+ hash: "096a2742962d7b22dba768577373e656"
+ }
+ Frame {
+ msec: 1920
+ image: "cursorDelegate.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "905b6c7ab24fd1a12f17494fc1935e98"
+ }
+ Frame {
+ msec: 1952
+ hash: "9bc98b4a32ea933fcc3a40eaae9b3516"
+ }
+ Frame {
+ msec: 1968
+ hash: "70f0313540b3517f3b6d403c3ab1199c"
+ }
+ Frame {
+ msec: 1984
+ hash: "309ae1af1ef7dbaf0b892ad60fd3eb93"
+ }
+ Frame {
+ msec: 2000
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 2016
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 2032
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 2048
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 2064
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 2080
+ hash: "309ae1af1ef7dbaf0b892ad60fd3eb93"
+ }
+ Frame {
+ msec: 2096
+ hash: "70f0313540b3517f3b6d403c3ab1199c"
+ }
+ Frame {
+ msec: 2112
+ hash: "9bc98b4a32ea933fcc3a40eaae9b3516"
+ }
+ Key {
+ type: 6
+ key: 16777248
+ modifiers: 33554432
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2128
+ hash: "905b6c7ab24fd1a12f17494fc1935e98"
+ }
+ Frame {
+ msec: 2144
+ hash: "31adf3a3bfbd1083c50cae7ed5d64334"
+ }
+ Frame {
+ msec: 2160
+ hash: "096a2742962d7b22dba768577373e656"
+ }
+ Frame {
+ msec: 2176
+ hash: "e009a8d2cb7c7f1200055666cf2efd9c"
+ }
+ Frame {
+ msec: 2192
+ hash: "0d94e37430d8b835e65750a6af525ef7"
+ }
+ Frame {
+ msec: 2208
+ hash: "77afbc0e0b828d03148ed7fe342dfbda"
+ }
+ Frame {
+ msec: 2224
+ hash: "ef3694ca78764709abbe2f8781578fb4"
+ }
+ Frame {
+ msec: 2240
+ hash: "977d44194d1ef05801167157714891af"
+ }
+ Frame {
+ msec: 2256
+ hash: "d351de13e7bb5b273ec3aebb88dffbd5"
+ }
+ Frame {
+ msec: 2272
+ hash: "c55fdf2fd0a4eeb9ca0e3072aa3e60c4"
+ }
+ Frame {
+ msec: 2288
+ hash: "50f168354e3901283708a4ae9088783d"
+ }
+ Frame {
+ msec: 2304
+ hash: "0f54144c574af01958505eedd69162f6"
+ }
+ Frame {
+ msec: 2320
+ hash: "7d620ef53049f9195cc832d6f9dfd52b"
+ }
+ Key {
+ type: 6
+ key: 16777232
+ modifiers: 33554432
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2336
+ hash: "03e906dfb3bf98f521d805331d3b5b9c"
+ }
+ Frame {
+ msec: 2352
+ hash: "c2376393ea9541b909b6b4fe188fa03e"
+ }
+ Frame {
+ msec: 2368
+ hash: "9b3935370412c75acdf6e91100cf2f53"
+ }
+ Frame {
+ msec: 2384
+ hash: "30ab7913bdfc51d2df5ab9f3863d28c7"
+ }
+ Frame {
+ msec: 2400
+ hash: "593656e93d6e01419002dbb581aa6cbd"
+ }
+ Frame {
+ msec: 2416
+ hash: "33800dd560e44ce39d6325bbdee689de"
+ }
+ Frame {
+ msec: 2432
+ hash: "c41a9c4f08053d5d18fb2d530ed8b5ad"
+ }
+ Key {
+ type: 7
+ key: 16777232
+ modifiers: 33554432
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2448
+ hash: "b3f2d4a2cb9a9d1304a2a2d07ad41ff2"
+ }
+ Frame {
+ msec: 2464
+ hash: "93cf7fe53bc1fd749c523d40b27d17b4"
+ }
+ Frame {
+ msec: 2480
+ hash: "6e9226d01dd93cff763e851148da8dfd"
+ }
+ Frame {
+ msec: 2496
+ hash: "79fdbda495bbc6c9ae8be03e1467de92"
+ }
+ Frame {
+ msec: 2512
+ hash: "c30fc0fa9351dbcdbe4f2a297cba9a52"
+ }
+ Frame {
+ msec: 2528
+ hash: "eaf26162fd5ce42262ea08ef39a7123d"
+ }
+ Frame {
+ msec: 2544
+ hash: "7bf0d6a5753a60eefae6d3c3819fabe4"
+ }
+ Frame {
+ msec: 2560
+ hash: "a2ee3a3b9cd22d7c0e54524cad32e647"
+ }
+ Frame {
+ msec: 2576
+ hash: "822298cfc4e2d64db1bf3e442dd891e6"
+ }
+ Frame {
+ msec: 2592
+ hash: "d075c64000b045eae1b42dce701787b7"
+ }
+ Frame {
+ msec: 2608
+ hash: "5ca7f15af781f896c83c81077f6b072e"
+ }
+ Frame {
+ msec: 2624
+ hash: "7d0f14896e67c56ed5238472dc127cb1"
+ }
+ Frame {
+ msec: 2640
+ hash: "dca161e8a9d786ba9d50aa655ccbecd3"
+ }
+ Frame {
+ msec: 2656
+ hash: "73bfcb0f5104efd056f25f7d73126369"
+ }
+ Frame {
+ msec: 2672
+ hash: "0090459043b05bf9504434f36230b32b"
+ }
+ Frame {
+ msec: 2688
+ hash: "f64315858f375c6ded480b2017fc18a5"
+ }
+ Frame {
+ msec: 2704
+ hash: "fe4c0ecfa9779c9fe052d4ffc9386d46"
+ }
+ Frame {
+ msec: 2720
+ hash: "849ad15f0ca893881165e956e8a26174"
+ }
+ Frame {
+ msec: 2736
+ hash: "c4373fa63ed00832c70a6b94cb729397"
+ }
+ Frame {
+ msec: 2752
+ hash: "0c7e08fb7f0dd954b0f171a37ef2a310"
+ }
+ Frame {
+ msec: 2768
+ hash: "505071572df7aa300a675f8a808bc7f4"
+ }
+ Frame {
+ msec: 2784
+ hash: "52839867e81d52746196f299a8371453"
+ }
+ Key {
+ type: 7
+ key: 16777248
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2800
+ hash: "c4d214a7e0fc52c2a45fc6e3df12550a"
+ }
+ Frame {
+ msec: 2816
+ hash: "f1fa48d796667bd053fff4af7ec1d8ce"
+ }
+ Frame {
+ msec: 2832
+ hash: "081e46decc8aba911f018acfd761cda1"
+ }
+ Frame {
+ msec: 2848
+ hash: "fa417c9bfda1da66320a8e59fbaeb5b6"
+ }
+ Frame {
+ msec: 2864
+ hash: "83dfa353fd20f3bf7caa8e6ca9a9933c"
+ }
+ Frame {
+ msec: 2880
+ image: "cursorDelegate.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "c11459b1d3e51f3d2f5bd30049bcca42"
+ }
+ Frame {
+ msec: 2912
+ hash: "997ff3fa82ba2fb27a9c41ed9abe8991"
+ }
+ Frame {
+ msec: 2928
+ hash: "f8baaadde147266416c9ab3f9d9106ce"
+ }
+ Frame {
+ msec: 2944
+ hash: "79d1d34fd343d8de631aa3259167fe26"
+ }
+ Frame {
+ msec: 2960
+ hash: "8b1445ca6131a0fc4377ded24a60186a"
+ }
+ Frame {
+ msec: 2976
+ hash: "784cc01604ecadf74a45164f73f0336d"
+ }
+ Frame {
+ msec: 2992
+ hash: "b9aeac2be5c8e16e7938e141f32776be"
+ }
+ Frame {
+ msec: 3008
+ hash: "b9aeac2be5c8e16e7938e141f32776be"
+ }
+ Frame {
+ msec: 3024
+ hash: "b9aeac2be5c8e16e7938e141f32776be"
+ }
+ Frame {
+ msec: 3040
+ hash: "b9aeac2be5c8e16e7938e141f32776be"
+ }
+ Frame {
+ msec: 3056
+ hash: "b9aeac2be5c8e16e7938e141f32776be"
+ }
+ Frame {
+ msec: 3072
+ hash: "b9aeac2be5c8e16e7938e141f32776be"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3088
+ hash: "00dfc5f4468482cb5f74e62be235b1d2"
+ }
+ Frame {
+ msec: 3104
+ hash: "62bc9c57724f7ab6bcf7d75d8ff68097"
+ }
+ Frame {
+ msec: 3120
+ hash: "ad65de5a6887c0a31a9d8f72a2a651db"
+ }
+ Frame {
+ msec: 3136
+ hash: "75e854ccaad087bfe776a843f0bd7284"
+ }
+ Frame {
+ msec: 3152
+ hash: "1e3f580f37a0dc063a383bdf435e85ea"
+ }
+ Frame {
+ msec: 3168
+ hash: "3d78320cb021944d7c6cee1a42056663"
+ }
+ Frame {
+ msec: 3184
+ hash: "fca865f762c1a6cc3e487e0e908eef73"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3200
+ hash: "fb7ad9156658f3866d19e43f006cf013"
+ }
+ Frame {
+ msec: 3216
+ hash: "6f7411363c66d0959ea5a16a9b610e61"
+ }
+ Frame {
+ msec: 3232
+ hash: "a33dce3c55b1b1541cfb9b85a75fcb53"
+ }
+ Frame {
+ msec: 3248
+ hash: "56b81435dc4ce193bb98c3d02c781242"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3264
+ hash: "59865194eb63465dd0f3925c7a500340"
+ }
+ Frame {
+ msec: 3280
+ hash: "38abc77b2361ce257d39c0cf268ba42b"
+ }
+ Frame {
+ msec: 3296
+ hash: "2b91dcef1b3ca66059dd9db4c8e335f3"
+ }
+ Frame {
+ msec: 3312
+ hash: "70c827f1b34b44cbd775b666913556d6"
+ }
+ Frame {
+ msec: 3328
+ hash: "8ca757a4fd1987329488f63251b0f6b4"
+ }
+ Frame {
+ msec: 3344
+ hash: "0da2c1cd0138172698a3bee5d19168c5"
+ }
+ Frame {
+ msec: 3360
+ hash: "8d71c418593eb3e4834d5e608ffd3f29"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3376
+ hash: "35c0d55cda3a02eb4c441a5832bcbbf4"
+ }
+ Frame {
+ msec: 3392
+ hash: "4e7374a683050ff440056b6e7c971d2b"
+ }
+ Frame {
+ msec: 3408
+ hash: "6310b65572e39256122c7620f7e87442"
+ }
+ Frame {
+ msec: 3424
+ hash: "d882fe91d9df9862d620cf984e27d0bd"
+ }
+ Frame {
+ msec: 3440
+ hash: "97549f388c02adb8884c2e79510adc7e"
+ }
+ Frame {
+ msec: 3456
+ hash: "60a60e06237318bf005f87bbba386fef"
+ }
+ Frame {
+ msec: 3472
+ hash: "2dbe9b5bbb5baf12cd2cbfb4190be316"
+ }
+ Frame {
+ msec: 3488
+ hash: "eacfa8db605b9e386a55508e8943e7d1"
+ }
+ Frame {
+ msec: 3504
+ hash: "e0826ff09b628a5e3ddf6d9e5593f937"
+ }
+ Frame {
+ msec: 3520
+ hash: "2aec32493055ad17f4aac9b3c9b84c5f"
+ }
+ Frame {
+ msec: 3536
+ hash: "c0e72cdf776b0c62742aa9c3683cd523"
+ }
+ Frame {
+ msec: 3552
+ hash: "ea3f512181b3ee94d8cdd4d9f59ed962"
+ }
+ Frame {
+ msec: 3568
+ hash: "de924155855e76d0591217448f79bdb6"
+ }
+ Frame {
+ msec: 3584
+ hash: "51da770a75102de9ad1920f1f6c44146"
+ }
+ Frame {
+ msec: 3600
+ hash: "e3c0e8f6385ef2ab9b671be3243774c4"
+ }
+ Frame {
+ msec: 3616
+ hash: "eac6de65ea6726f0cc50b6d30c1b7ba5"
+ }
+ Frame {
+ msec: 3632
+ hash: "2ee111386bd646c4ee577405e490a2f7"
+ }
+ Frame {
+ msec: 3648
+ hash: "fe95122352effcf1815bc237fc6ce6ab"
+ }
+ Frame {
+ msec: 3664
+ hash: "e3bb1ec3b84df25712f06e0d6963efdd"
+ }
+ Frame {
+ msec: 3680
+ hash: "a10d3184acc85c46e171fe4cf82e1c23"
+ }
+ Frame {
+ msec: 3696
+ hash: "d566b2763312e5e823593806acd9e809"
+ }
+ Frame {
+ msec: 3712
+ hash: "7db073b7487ddea48e7c9df8b9bfdc00"
+ }
+ Frame {
+ msec: 3728
+ hash: "85c663b943f67d158367dba0508980a5"
+ }
+ Frame {
+ msec: 3744
+ hash: "6336ce0d912ee63773475c4c6c5d59be"
+ }
+ Frame {
+ msec: 3760
+ hash: "c75ba80484af36633b6a4d17b666b1c9"
+ }
+ Frame {
+ msec: 3776
+ hash: "08b7d4eef2d15bc717ff1a981a11f275"
+ }
+ Frame {
+ msec: 3792
+ hash: "0ab8bebb0e43786a7e51ea780745080c"
+ }
+ Frame {
+ msec: 3808
+ hash: "6fa1811f520eff9893b3c7b00e53fa7d"
+ }
+ Frame {
+ msec: 3824
+ hash: "6feb44655bfbec651cc2902676bd08b4"
+ }
+ Frame {
+ msec: 3840
+ image: "cursorDelegate.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "00b7714df163d8055514e0dbd8a83bac"
+ }
+ Frame {
+ msec: 3872
+ hash: "6ef2a330d70a7e0ce343bb352c46f126"
+ }
+ Frame {
+ msec: 3888
+ hash: "f4e26309fa3b8a6d55f44bf146544101"
+ }
+ Frame {
+ msec: 3904
+ hash: "dfa1e24149f2662a4a552da3bb64348c"
+ }
+ Frame {
+ msec: 3920
+ hash: "9ab9d6ef4aeb5863401a9e251f684e2d"
+ }
+ Frame {
+ msec: 3936
+ hash: "c9f7591a37a3743b3b48de5337fd2fa0"
+ }
+ Frame {
+ msec: 3952
+ hash: "2d38f17db530050574d9192c805c142d"
+ }
+ Frame {
+ msec: 3968
+ hash: "38a4ad2cf9fa3015eff67014900a44cc"
+ }
+ Frame {
+ msec: 3984
+ hash: "9d9ce4ac0de6caa2f0bb78eac414ba65"
+ }
+ Frame {
+ msec: 4000
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 4016
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 4032
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 4048
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 4064
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 4080
+ hash: "9d9ce4ac0de6caa2f0bb78eac414ba65"
+ }
+ Frame {
+ msec: 4096
+ hash: "38a4ad2cf9fa3015eff67014900a44cc"
+ }
+ Frame {
+ msec: 4112
+ hash: "2d38f17db530050574d9192c805c142d"
+ }
+ Frame {
+ msec: 4128
+ hash: "c9f7591a37a3743b3b48de5337fd2fa0"
+ }
+ Frame {
+ msec: 4144
+ hash: "9ab9d6ef4aeb5863401a9e251f684e2d"
+ }
+ Frame {
+ msec: 4160
+ hash: "dfa1e24149f2662a4a552da3bb64348c"
+ }
+ Frame {
+ msec: 4176
+ hash: "f4e26309fa3b8a6d55f44bf146544101"
+ }
+ Frame {
+ msec: 4192
+ hash: "6ef2a330d70a7e0ce343bb352c46f126"
+ }
+ Frame {
+ msec: 4208
+ hash: "00b7714df163d8055514e0dbd8a83bac"
+ }
+ Frame {
+ msec: 4224
+ hash: "ae46d672649a4b0fc5171f776af93a2c"
+ }
+ Frame {
+ msec: 4240
+ hash: "6feb44655bfbec651cc2902676bd08b4"
+ }
+ Frame {
+ msec: 4256
+ hash: "6fa1811f520eff9893b3c7b00e53fa7d"
+ }
+ Frame {
+ msec: 4272
+ hash: "0ab8bebb0e43786a7e51ea780745080c"
+ }
+ Frame {
+ msec: 4288
+ hash: "08b7d4eef2d15bc717ff1a981a11f275"
+ }
+ Frame {
+ msec: 4304
+ hash: "c75ba80484af36633b6a4d17b666b1c9"
+ }
+ Frame {
+ msec: 4320
+ hash: "6336ce0d912ee63773475c4c6c5d59be"
+ }
+ Frame {
+ msec: 4336
+ hash: "85c663b943f67d158367dba0508980a5"
+ }
+ Frame {
+ msec: 4352
+ hash: "7db073b7487ddea48e7c9df8b9bfdc00"
+ }
+ Frame {
+ msec: 4368
+ hash: "d566b2763312e5e823593806acd9e809"
+ }
+ Frame {
+ msec: 4384
+ hash: "a10d3184acc85c46e171fe4cf82e1c23"
+ }
+ Frame {
+ msec: 4400
+ hash: "e3bb1ec3b84df25712f06e0d6963efdd"
+ }
+ Frame {
+ msec: 4416
+ hash: "fe95122352effcf1815bc237fc6ce6ab"
+ }
+ Frame {
+ msec: 4432
+ hash: "2ee111386bd646c4ee577405e490a2f7"
+ }
+ Frame {
+ msec: 4448
+ hash: "eac6de65ea6726f0cc50b6d30c1b7ba5"
+ }
+ Frame {
+ msec: 4464
+ hash: "e3c0e8f6385ef2ab9b671be3243774c4"
+ }
+ Frame {
+ msec: 4480
+ hash: "51da770a75102de9ad1920f1f6c44146"
+ }
+ Frame {
+ msec: 4496
+ hash: "de924155855e76d0591217448f79bdb6"
+ }
+ Frame {
+ msec: 4512
+ hash: "ea3f512181b3ee94d8cdd4d9f59ed962"
+ }
+ Frame {
+ msec: 4528
+ hash: "c0e72cdf776b0c62742aa9c3683cd523"
+ }
+ Frame {
+ msec: 4544
+ hash: "2aec32493055ad17f4aac9b3c9b84c5f"
+ }
+ Frame {
+ msec: 4560
+ hash: "e0826ff09b628a5e3ddf6d9e5593f937"
+ }
+ Frame {
+ msec: 4576
+ hash: "eacfa8db605b9e386a55508e8943e7d1"
+ }
+ Frame {
+ msec: 4592
+ hash: "2dbe9b5bbb5baf12cd2cbfb4190be316"
+ }
+ Frame {
+ msec: 4608
+ hash: "60a60e06237318bf005f87bbba386fef"
+ }
+ Frame {
+ msec: 4624
+ hash: "97549f388c02adb8884c2e79510adc7e"
+ }
+ Frame {
+ msec: 4640
+ hash: "d882fe91d9df9862d620cf984e27d0bd"
+ }
+ Frame {
+ msec: 4656
+ hash: "6310b65572e39256122c7620f7e87442"
+ }
+ Frame {
+ msec: 4672
+ hash: "4e7374a683050ff440056b6e7c971d2b"
+ }
+ Frame {
+ msec: 4688
+ hash: "35c0d55cda3a02eb4c441a5832bcbbf4"
+ }
+ Frame {
+ msec: 4704
+ hash: "8d71c418593eb3e4834d5e608ffd3f29"
+ }
+ Frame {
+ msec: 4720
+ hash: "0da2c1cd0138172698a3bee5d19168c5"
+ }
+ Frame {
+ msec: 4736
+ hash: "8ca757a4fd1987329488f63251b0f6b4"
+ }
+ Frame {
+ msec: 4752
+ hash: "70c827f1b34b44cbd775b666913556d6"
+ }
+ Frame {
+ msec: 4768
+ hash: "2b91dcef1b3ca66059dd9db4c8e335f3"
+ }
+ Frame {
+ msec: 4784
+ hash: "38abc77b2361ce257d39c0cf268ba42b"
+ }
+ Frame {
+ msec: 4800
+ image: "cursorDelegate.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "7bed5747d6b771db0fe5802153e54f2f"
+ }
+ Frame {
+ msec: 4832
+ hash: "9ac1bf268749bc8e58bc4d04b55ef849"
+ }
+ Frame {
+ msec: 4848
+ hash: "64ea5cb46782d250c46a7a2c8cceea20"
+ }
+ Frame {
+ msec: 4864
+ hash: "d81037eb21bfcb434b6c7f3bbd21ad12"
+ }
+ Frame {
+ msec: 4880
+ hash: "1079ea3a1a62e2cca9a8e907bc5aa4e1"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 130; y: 101
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4896
+ hash: "3d78320cb021944d7c6cee1a42056663"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 130; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4912
+ hash: "1e3f580f37a0dc063a383bdf435e85ea"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 131; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4928
+ hash: "75e854ccaad087bfe776a843f0bd7284"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 132; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4944
+ hash: "ad65de5a6887c0a31a9d8f72a2a651db"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 133; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 134; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4960
+ hash: "62bc9c57724f7ab6bcf7d75d8ff68097"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 135; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4976
+ hash: "00dfc5f4468482cb5f74e62be235b1d2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 136; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4992
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 137; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 138; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5008
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 139; y: 101
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5024
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 140; y: 101
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5040
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 141; y: 100
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 143; y: 100
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5056
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 144; y: 100
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5072
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 146; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5088
+ hash: "748dc58a3ad83d7b99d7b26ad2f82786"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 148; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 149; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5104
+ hash: "242cc0ee7c3bdb44e8933068d3a93b61"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 150; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5120
+ hash: "3be6f0a35fb085dcf6c9481cf1c23f9d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 151; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5136
+ hash: "a6f63267eaba9aefd2c9ab338571ef33"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 152; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 152; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5152
+ hash: "ba37dd9ba649e294465dc707f6b768ec"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 153; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5168
+ hash: "35b186609721ec0b8a121d15bc54ce49"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 154; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5184
+ hash: "700ff15e4e48af93362455a149d90363"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 155; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 156; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5200
+ hash: "1c51eb8d4d25d086bda4d595a49c3a86"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 157; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5216
+ hash: "2f085b047d24384d463163df7fac2bd3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 158; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5232
+ hash: "46d7aff6eb47e50e23c061ecb149fbf9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 160; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 161; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5248
+ hash: "48d7a8f749f7501dbaa4599ca41096a5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 163; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5264
+ hash: "4c2a085c69c118fedfa15fe46cdc508b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 164; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5280
+ hash: "25f25828a4d22fe85db0de5c562f658e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 166; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 168; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5296
+ hash: "e9fb14ec21e9ec1235d2fea6e055b69d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 170; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5312
+ hash: "66417881aeb85778be66566241c45f5a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 174; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5328
+ hash: "c8c136690ffd8e5cc3e58f7376693b4f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 176; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 178; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5344
+ hash: "c58c4fb5b7197cd8bd95742dc8715bbf"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 179; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5360
+ hash: "2e0c93380883fcf2d0e56024fecba605"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 180; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5376
+ hash: "5f169f09e3d868eb0425a331d4bc3144"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 182; y: 95
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 183; y: 95
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5392
+ hash: "ed648742be4b0ded04e713e83ed24b27"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 185; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5408
+ hash: "92131288bb38480469f4578282dedaf8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 187; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5424
+ hash: "e16773f750bb0f635552b1eeadb2d625"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 189; y: 93
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 191; y: 92
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5440
+ hash: "6e653cd552d82f38f30b8027d1951534"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 92
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5456
+ hash: "cfc1d6efa8d1b3b86396704f0be031ad"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 194; y: 92
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5472
+ hash: "5848af73f5ab7c811639a6d01921d502"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 92
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 198; y: 92
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5488
+ hash: "3823e7da05678f63e6761a81ed7233e2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 199; y: 92
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5504
+ hash: "d095abe9814a60824914960a11663f12"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 200; y: 91
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5520
+ hash: "18922bb3269d903a36e0b690249b473a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 200; y: 91
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 201; y: 90
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5536
+ hash: "4d8400a3ca2b782e7b054bb2f71d4543"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 202; y: 89
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5552
+ hash: "24ed25d7a767f01fb02f545fc6c6931a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 88
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5568
+ hash: "55fb16784e3655ae70f97d6c32853cdc"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 204; y: 88
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5584
+ hash: "694e6979f0de62b61324dc4b144a2d5d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 207; y: 86
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 208; y: 85
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5600
+ hash: "e61b8b03251f6312e3de4e0c8af684d5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 210; y: 85
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5616
+ hash: "6203321f87d53692dbb2b2aaf7dd3944"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 212; y: 84
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5632
+ hash: "297b77029475d77cd8e481199b23da30"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 213; y: 84
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 214; y: 84
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5648
+ hash: "414615d772b4c80bf85eabfdca6fd0e0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 215; y: 84
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5664
+ hash: "46d70882552a21267eebb3505da086f3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 216; y: 84
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5680
+ hash: "372acafc63624307bcb384c48a803ab7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 216; y: 84
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 217; y: 84
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5696
+ hash: "1b98094dd4f192af8229b7058b8ce396"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 218; y: 84
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5712
+ hash: "d627fa0ce696e46650225e43134643f5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 218; y: 84
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5728
+ hash: "0410f4b504d768bc00940b20d3d942f9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 219; y: 85
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 219; y: 86
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 220; y: 86
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5744
+ hash: "5f8011b44681d769800af8d205c757cb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 221; y: 87
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5760
+ image: "cursorDelegate.5.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 222; y: 87
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5776
+ hash: "99f7a46f841f96445962b5fb3496d996"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 222; y: 88
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5792
+ hash: "ed8bba2823ca2fe7cf138af0fcc52806"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 224; y: 90
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5808
+ hash: "c9007b7ae5038ba59bfc6fac15c80d5f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 226; y: 92
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5824
+ hash: "2db81c955a99652bcfef958e870054af"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 228; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5840
+ hash: "1e3906d7f3ee5a29c3c90b8e1f6c1eb0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 229; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 231; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5856
+ hash: "fc59738903cc9e6f36ef4d27bfde9496"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 232; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5872
+ hash: "768aaf4ef2b13b40b75bdf15787966b6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 233; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5888
+ hash: "3085baedc0c58a6757b134bb4f80fa9e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 233; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5904
+ hash: "0a1b8cad167bf93801f4d0dd34bf872e"
+ }
+ Frame {
+ msec: 5920
+ hash: "6366e04808ee015feed44d95cc117e1e"
+ }
+ Frame {
+ msec: 5936
+ hash: "dd67a8542a243aac9462e25dc1586e6e"
+ }
+ Frame {
+ msec: 5952
+ hash: "e06c8788b2ef327d005b4048f0807334"
+ }
+ Frame {
+ msec: 5968
+ hash: "dda2beda1253bd477d04cada4ec4df27"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 233; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5984
+ hash: "d659d1724637d90497c8e417764d3477"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 232; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 232; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6000
+ hash: "91035aecf2ac15f3c2c3dbc4b73b540f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 231; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6016
+ hash: "91035aecf2ac15f3c2c3dbc4b73b540f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 230; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6032
+ hash: "91035aecf2ac15f3c2c3dbc4b73b540f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 229; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 228; y: 100
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6048
+ hash: "91035aecf2ac15f3c2c3dbc4b73b540f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 227; y: 100
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6064
+ hash: "91035aecf2ac15f3c2c3dbc4b73b540f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 225; y: 100
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6080
+ hash: "bdc53613cad59416ed79287874eb59f8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 224; y: 101
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 222; y: 101
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6096
+ hash: "54efe0acb07fb69827024a566773a36e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 220; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6112
+ hash: "860530a5ac3d89193f3cf234e21f8f6a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 219; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6128
+ hash: "ade5f8e28159304b22866f688efdbb46"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 217; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 216; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6144
+ hash: "7d5f5cf34910527d899e89ea07fb7254"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 215; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6160
+ hash: "c201ed0f2419396a229d8396152aba01"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 213; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6176
+ hash: "b99135e2cb03ab252ff379c8001c26ad"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 212; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 212; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6192
+ hash: "768aaf4ef2b13b40b75bdf15787966b6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 210; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6208
+ hash: "71a5bed1a87e16c986b2f4b245e956b8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 210; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6224
+ hash: "7155607add8c7254286097cda52b5888"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 208; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 207; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6240
+ hash: "e516e4d8a4ef0195ae04b3287f536ffd"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 206; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6256
+ hash: "afa06d10b37d8ad8b57e392142ff50f2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 205; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6272
+ hash: "88c3fe68f7251d87a5bf197b9d59b899"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 204; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 104
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6288
+ hash: "b2687baf5148539ee2181b18077e0a3d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 202; y: 104
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6304
+ hash: "457aed68cee2b9f3ff3c7d5f0eb2b6aa"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 201; y: 104
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6320
+ hash: "48bb4683718a3b7c34baea29260fbe8c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 200; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 199; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6336
+ hash: "7c32fbf799bbfc10d0fbdd96bcfa9d95"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 197; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6352
+ hash: "68cee3b8213a9d38e2ed431d06eb6756"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 196; y: 101
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 194; y: 101
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6368
+ hash: "596c732c40a86d16bc649f164b919457"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 191; y: 101
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 188; y: 100
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6384
+ hash: "d9cb5bf69d4f8aaebefae6d680a99185"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 187; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6400
+ hash: "bb6759f3aff00f027f4f426efb775d2d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 185; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6416
+ hash: "a408d88f97c30ab8ab12a222b03571b4"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 182; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6432
+ hash: "bb2e8994dc014eb6d4e4e33257269c2a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 176; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6448
+ hash: "190e9df0b8d20b0f37a198e9f3976416"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 171; y: 95
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6464
+ hash: "aa7be52534c8550948deea6ae174330d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 166; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 163; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6480
+ hash: "533caac613ea1279a51a5b5b29acdccc"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 160; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6496
+ hash: "288cc34879d9ed8ed381ba6cc31de3e7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 159; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6512
+ hash: "2a57602c47ab788f288daa81b985fc1d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 157; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 156; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6528
+ hash: "fa3540fafa1a9e3c5e796b598dce8fb1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 156; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6544
+ hash: "7e9b17ae7c10cb30153539911ac6eb13"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 155; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6560
+ hash: "9e62b16c858e80ff1294ec53e2390498"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 154; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 153; y: 95
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6576
+ hash: "287470e6cf9bd4b9acfd1cd1512307e3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 152; y: 95
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 151; y: 95
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6592
+ hash: "4086c7c7a573a1b9f98d22ebf9b46c5f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 149; y: 95
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6608
+ hash: "7d0868f000a1102916720a29a332543f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 148; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6624
+ hash: "bda3cfdca81f7cba54514c512eb6b12e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 146; y: 96
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6640
+ hash: "923ff9fac39c3fba2c9cf7b52fc652ad"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 145; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6656
+ hash: "269718e3586affbbdf0b9599e12f5677"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 145; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6672
+ hash: "d12e03b5da6ea7b162d7dec6930c1a54"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 144; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6688
+ hash: "96edf1f15c674c5d8c4e4ce9e1d34f1d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 144; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6704
+ hash: "70ce229fae6985dd49de8cca01c031e6"
+ }
+ Frame {
+ msec: 6720
+ image: "cursorDelegate.6.png"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 144; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6736
+ hash: "56215b7d24ac382ff1ed256c80d14091"
+ }
+ Frame {
+ msec: 6752
+ hash: "ac132304e072806431803d26e345b264"
+ }
+ Frame {
+ msec: 6768
+ hash: "a8f3e7fbb95ed8fe2b83871eb3d2c151"
+ }
+ Frame {
+ msec: 6784
+ hash: "43906030c2572af0f8f0577dbc86e346"
+ }
+ Frame {
+ msec: 6800
+ hash: "d64b58801430d5063225dceac1603bca"
+ }
+ Frame {
+ msec: 6816
+ hash: "56b81435dc4ce193bb98c3d02c781242"
+ }
+ Frame {
+ msec: 6832
+ hash: "a33dce3c55b1b1541cfb9b85a75fcb53"
+ }
+ Frame {
+ msec: 6848
+ hash: "6f7411363c66d0959ea5a16a9b610e61"
+ }
+ Frame {
+ msec: 6864
+ hash: "fb7ad9156658f3866d19e43f006cf013"
+ }
+ Frame {
+ msec: 6880
+ hash: "fca865f762c1a6cc3e487e0e908eef73"
+ }
+ Frame {
+ msec: 6896
+ hash: "3d78320cb021944d7c6cee1a42056663"
+ }
+ Frame {
+ msec: 6912
+ hash: "1e3f580f37a0dc063a383bdf435e85ea"
+ }
+ Frame {
+ msec: 6928
+ hash: "75e854ccaad087bfe776a843f0bd7284"
+ }
+ Frame {
+ msec: 6944
+ hash: "ad65de5a6887c0a31a9d8f72a2a651db"
+ }
+ Frame {
+ msec: 6960
+ hash: "62bc9c57724f7ab6bcf7d75d8ff68097"
+ }
+ Frame {
+ msec: 6976
+ hash: "00dfc5f4468482cb5f74e62be235b1d2"
+ }
+ Frame {
+ msec: 6992
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 7008
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 7024
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 7040
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 7056
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 7072
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 7088
+ hash: "00dfc5f4468482cb5f74e62be235b1d2"
+ }
+ Frame {
+ msec: 7104
+ hash: "62bc9c57724f7ab6bcf7d75d8ff68097"
+ }
+ Frame {
+ msec: 7120
+ hash: "ad65de5a6887c0a31a9d8f72a2a651db"
+ }
+ Frame {
+ msec: 7136
+ hash: "75e854ccaad087bfe776a843f0bd7284"
+ }
+ Frame {
+ msec: 7152
+ hash: "1e3f580f37a0dc063a383bdf435e85ea"
+ }
+ Frame {
+ msec: 7168
+ hash: "3d78320cb021944d7c6cee1a42056663"
+ }
+ Frame {
+ msec: 7184
+ hash: "fca865f762c1a6cc3e487e0e908eef73"
+ }
+ Frame {
+ msec: 7200
+ hash: "fb7ad9156658f3866d19e43f006cf013"
+ }
+ Frame {
+ msec: 7216
+ hash: "6f7411363c66d0959ea5a16a9b610e61"
+ }
+ Frame {
+ msec: 7232
+ hash: "a33dce3c55b1b1541cfb9b85a75fcb53"
+ }
+ Frame {
+ msec: 7248
+ hash: "56b81435dc4ce193bb98c3d02c781242"
+ }
+ Frame {
+ msec: 7264
+ hash: "d64b58801430d5063225dceac1603bca"
+ }
+ Frame {
+ msec: 7280
+ hash: "43906030c2572af0f8f0577dbc86e346"
+ }
+ Frame {
+ msec: 7296
+ hash: "a8f3e7fbb95ed8fe2b83871eb3d2c151"
+ }
+ Frame {
+ msec: 7312
+ hash: "ac132304e072806431803d26e345b264"
+ }
+ Frame {
+ msec: 7328
+ hash: "56215b7d24ac382ff1ed256c80d14091"
+ }
+ Frame {
+ msec: 7344
+ hash: "4d5c97925b21d699f1c3720a3f51ebbb"
+ }
+ Frame {
+ msec: 7360
+ hash: "70ce229fae6985dd49de8cca01c031e6"
+ }
+ Frame {
+ msec: 7376
+ hash: "96edf1f15c674c5d8c4e4ce9e1d34f1d"
+ }
+ Frame {
+ msec: 7392
+ hash: "d12e03b5da6ea7b162d7dec6930c1a54"
+ }
+ Frame {
+ msec: 7408
+ hash: "269718e3586affbbdf0b9599e12f5677"
+ }
+ Frame {
+ msec: 7424
+ hash: "42d19ea6dd328c505da5a4eee23a257d"
+ }
+ Frame {
+ msec: 7440
+ hash: "e4d9d77859759dd95cf3ffee8f142cd8"
+ }
+ Frame {
+ msec: 7456
+ hash: "445e4c6e9872b63a1461e3277dd8185c"
+ }
+ Frame {
+ msec: 7472
+ hash: "d6343c629acd987179eae0d158d2504c"
+ }
+ Frame {
+ msec: 7488
+ hash: "a5340087baa2c3694ed0cc2bbc3e2ad9"
+ }
+ Frame {
+ msec: 7504
+ hash: "205973c30aaca71d1f20e740ce971d82"
+ }
+ Frame {
+ msec: 7520
+ hash: "ed28c7e07755e177222c7e322116bfb4"
+ }
+ Frame {
+ msec: 7536
+ hash: "6cebfc407a985694c803940608ab1303"
+ }
+ Frame {
+ msec: 7552
+ hash: "87f825fc820d3942e4d9b5ece5be3714"
+ }
+ Frame {
+ msec: 7568
+ hash: "9aa56dfe90ed2eba58eee0ff6ff3822c"
+ }
+ Frame {
+ msec: 7584
+ hash: "c93acf87a918f21a55cf39ea255315a3"
+ }
+ Frame {
+ msec: 7600
+ hash: "f8ce1bec5d5016c56fc66d52c28e69d1"
+ }
+ Frame {
+ msec: 7616
+ hash: "a365dba2f7c4be77ea98b727813c2f03"
+ }
+ Frame {
+ msec: 7632
+ hash: "e8d1c35ee9ef74c4070adfce5e4560f1"
+ }
+ Frame {
+ msec: 7648
+ hash: "f5f2dbb041eeb4de1821761f4fbca506"
+ }
+ Frame {
+ msec: 7664
+ hash: "f4ea6e9dff51778e9b5d1321453617ec"
+ }
+ Frame {
+ msec: 7680
+ image: "cursorDelegate.7.png"
+ }
+ Frame {
+ msec: 7696
+ hash: "f2869791dde1eb4c2ea24e04dc3ac653"
+ }
+ Frame {
+ msec: 7712
+ hash: "9bd70e91b765de22b70fe295adc4f87f"
+ }
+ Frame {
+ msec: 7728
+ hash: "c0338d0a5c72ba63bff666a76ab3242c"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 227; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7744
+ hash: "cb2a643eed9b5658260e04495820cd3d"
+ }
+ Frame {
+ msec: 7760
+ hash: "6dda51f2e611b1f589c75820fd8c7295"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 227; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7776
+ hash: "98d8692afd47c61421ddcae62414a72e"
+ }
+ Frame {
+ msec: 7792
+ hash: "2c533bcdd9df45c6f942d47509ebf20e"
+ }
+ Frame {
+ msec: 7808
+ hash: "d28f231fb1e128329e8985689deac882"
+ }
+ Frame {
+ msec: 7824
+ hash: "ea73450baf98a2f629ce1c203cfcd728"
+ }
+ Frame {
+ msec: 7840
+ hash: "959a31d38edc343b5e081fd0cddc81df"
+ }
+ Frame {
+ msec: 7856
+ hash: "9b1ae10ee8e9b3f176357733af9e6735"
+ }
+ Frame {
+ msec: 7872
+ hash: "89b0dd11f456bbb321e0bd2e1614c193"
+ }
+ Frame {
+ msec: 7888
+ hash: "a0a3aa6d8d4c677894e745ee432084e2"
+ }
+ Frame {
+ msec: 7904
+ hash: "f63207b8903085b19de1c9b6a9ff90e0"
+ }
+ Frame {
+ msec: 7920
+ hash: "c8f2126fece8c2b473c6511aa568dddb"
+ }
+ Frame {
+ msec: 7936
+ hash: "6ccd1f30e85dbad74468c228d92a9a3c"
+ }
+ Frame {
+ msec: 7952
+ hash: "bae09fe9f29e0f6ebda298cae753ddab"
+ }
+ Frame {
+ msec: 7968
+ hash: "cde4abae868488345fb124b927f46b45"
+ }
+ Frame {
+ msec: 7984
+ hash: "a88ccf9c8ae34ffcfd15af4e66102040"
+ }
+ Frame {
+ msec: 8000
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 8016
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 8032
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 8048
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 8064
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 8080
+ hash: "a88ccf9c8ae34ffcfd15af4e66102040"
+ }
+ Frame {
+ msec: 8096
+ hash: "cde4abae868488345fb124b927f46b45"
+ }
+ Frame {
+ msec: 8112
+ hash: "bae09fe9f29e0f6ebda298cae753ddab"
+ }
+ Frame {
+ msec: 8128
+ hash: "6ccd1f30e85dbad74468c228d92a9a3c"
+ }
+ Frame {
+ msec: 8144
+ hash: "c8f2126fece8c2b473c6511aa568dddb"
+ }
+ Frame {
+ msec: 8160
+ hash: "f63207b8903085b19de1c9b6a9ff90e0"
+ }
+ Frame {
+ msec: 8176
+ hash: "a0a3aa6d8d4c677894e745ee432084e2"
+ }
+ Frame {
+ msec: 8192
+ hash: "89b0dd11f456bbb321e0bd2e1614c193"
+ }
+ Frame {
+ msec: 8208
+ hash: "9b1ae10ee8e9b3f176357733af9e6735"
+ }
+ Frame {
+ msec: 8224
+ hash: "959a31d38edc343b5e081fd0cddc81df"
+ }
+ Frame {
+ msec: 8240
+ hash: "ea73450baf98a2f629ce1c203cfcd728"
+ }
+ Frame {
+ msec: 8256
+ hash: "d28f231fb1e128329e8985689deac882"
+ }
+ Frame {
+ msec: 8272
+ hash: "2c533bcdd9df45c6f942d47509ebf20e"
+ }
+ Frame {
+ msec: 8288
+ hash: "98d8692afd47c61421ddcae62414a72e"
+ }
+ Frame {
+ msec: 8304
+ hash: "6dda51f2e611b1f589c75820fd8c7295"
+ }
+ Frame {
+ msec: 8320
+ hash: "cb2a643eed9b5658260e04495820cd3d"
+ }
+ Frame {
+ msec: 8336
+ hash: "88afd2fa1182fbb2aab100d4587a1006"
+ }
+ Frame {
+ msec: 8352
+ hash: "bc657c5181a11a9ff9565f134bdccb8d"
+ }
+ Frame {
+ msec: 8368
+ hash: "a296634d814a6e12f9d09f4d8a9fa097"
+ }
+ Frame {
+ msec: 8384
+ hash: "f05a2deeb12722904c4f31d641dffeb4"
+ }
+ Frame {
+ msec: 8400
+ hash: "75823698247e39dd10a70fe224e13597"
+ }
+ Frame {
+ msec: 8416
+ hash: "244fa06c168f7a7401b8ec7f5ddb0e52"
+ }
+ Frame {
+ msec: 8432
+ hash: "a78e0f88d269290e9086d1d854618f0c"
+ }
+ Frame {
+ msec: 8448
+ hash: "57b1281d29d5c5fdc15d9cf1e3a5545c"
+ }
+ Frame {
+ msec: 8464
+ hash: "a24ac211ef29dcf7f22ac95991f1af3f"
+ }
+ Frame {
+ msec: 8480
+ hash: "361f978ea3597fd518c25c0069c22e8b"
+ }
+ Frame {
+ msec: 8496
+ hash: "ac8e2c01eb58aac0eb4feb6aba9b9628"
+ }
+ Frame {
+ msec: 8512
+ hash: "6099612934b5eb90296f1cc3cb5c1a84"
+ }
+ Frame {
+ msec: 8528
+ hash: "7c3f08291168065fc9c1d62108022d33"
+ }
+ Frame {
+ msec: 8544
+ hash: "8bf57ba445d668af5f3e59276c4f8800"
+ }
+ Frame {
+ msec: 8560
+ hash: "c8ed352cbfbc472ea4802a9e03d40052"
+ }
+ Frame {
+ msec: 8576
+ hash: "11e5546b30e47d2f3067c0364b9f0877"
+ }
+ Frame {
+ msec: 8592
+ hash: "9df0f136fca92d4a05f17ee68f0cd286"
+ }
+ Frame {
+ msec: 8608
+ hash: "39f47838a622ba328548cad57cca9e12"
+ }
+ Frame {
+ msec: 8624
+ hash: "c891d582be4b23c01e29032fe861081f"
+ }
+ Frame {
+ msec: 8640
+ image: "cursorDelegate.8.png"
+ }
+ Frame {
+ msec: 8656
+ hash: "c3820dfd382c4568d9fbd2ee95889eda"
+ }
+ Frame {
+ msec: 8672
+ hash: "528cf8778318bf7216b54f983dadb2b4"
+ }
+ Frame {
+ msec: 8688
+ hash: "419518a3c63aa36f6070e95eb93e58a3"
+ }
+ Frame {
+ msec: 8704
+ hash: "11b22e2853c0a9ea6e4ac764348698c9"
+ }
+ Frame {
+ msec: 8720
+ hash: "8018329c4b57647942ae34a5f83c2b12"
+ }
+ Frame {
+ msec: 8736
+ hash: "c37e9fd5c3d664c2e4911c8cb9fcabf7"
+ }
+ Frame {
+ msec: 8752
+ hash: "4e7895f802c9fc249894ba0db25959f7"
+ }
+ Frame {
+ msec: 8768
+ hash: "5fed71d99ef70432bc6be8caaea36f17"
+ }
+ Frame {
+ msec: 8784
+ hash: "69976d074acbd7a5731c70b33c8f084b"
+ }
+ Frame {
+ msec: 8800
+ hash: "c88952348da3df0627b12b8bb05ca13e"
+ }
+ Frame {
+ msec: 8816
+ hash: "cc5222da7a17c66d4db146c406492701"
+ }
+ Frame {
+ msec: 8832
+ hash: "8915e752776da27cb86019c9decc8a8c"
+ }
+ Frame {
+ msec: 8848
+ hash: "d8a77ccc7c01cf187e846a2903e1c55e"
+ }
+ Frame {
+ msec: 8864
+ hash: "3cf3f02f98a199c81ef73e8905e7f7ee"
+ }
+ Frame {
+ msec: 8880
+ hash: "7a1d47e0109fc370bf63714040cbef96"
+ }
+ Frame {
+ msec: 8896
+ hash: "2ca8b8ddbe73b29327e474da34a14a87"
+ }
+ Frame {
+ msec: 8912
+ hash: "ee75214865fca848aa38cc05b6049d8f"
+ }
+ Frame {
+ msec: 8928
+ hash: "05ab7d8118a806f2215160f5f266a082"
+ }
+ Frame {
+ msec: 8944
+ hash: "31e63095b7be56d0bf75e9cff832feb7"
+ }
+ Frame {
+ msec: 8960
+ hash: "3ffda2c2f154f1eb806e9f0963057fa1"
+ }
+ Frame {
+ msec: 8976
+ hash: "4e805203b58e8f6f331f2e878704fa01"
+ }
+ Frame {
+ msec: 8992
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 9008
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 9024
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 9040
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 9056
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 9072
+ hash: "60edce44dd4ca7fac8d8093990ee5ec1"
+ }
+ Frame {
+ msec: 9088
+ hash: "4e805203b58e8f6f331f2e878704fa01"
+ }
+ Frame {
+ msec: 9104
+ hash: "3ffda2c2f154f1eb806e9f0963057fa1"
+ }
+ Frame {
+ msec: 9120
+ hash: "31e63095b7be56d0bf75e9cff832feb7"
+ }
+ Frame {
+ msec: 9136
+ hash: "05ab7d8118a806f2215160f5f266a082"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/qt-669.0.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data/qt-669.0.png
new file mode 100644
index 0000000..95a835a
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/qt-669.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/qt-669.1.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data/qt-669.1.png
new file mode 100644
index 0000000..409192c
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/qt-669.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/qt-669.2.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data/qt-669.2.png
new file mode 100644
index 0000000..cd2f112
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/qt-669.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/qt-669.3.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data/qt-669.3.png
new file mode 100644
index 0000000..7191c1e
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/qt-669.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/qt-669.qml b/tests/auto/declarative/visual/qmlgraphicstextedit/data/qt-669.qml
new file mode 100644
index 0000000..352c890
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/qt-669.qml
@@ -0,0 +1,1371 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 32
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 48
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 64
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 80
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 96
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 112
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 128
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 144
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 160
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 176
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 192
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 208
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 224
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 240
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 256
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 272
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 288
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 304
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 320
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 336
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 352
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 368
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 384
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 400
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 416
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 432
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 448
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 464
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 480
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 496
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 512
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 528
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 544
+ hash: "394360c0bff5ee3ad206d2911838d64e"
+ }
+ Frame {
+ msec: 560
+ hash: "394360c0bff5ee3ad206d2911838d64e"
+ }
+ Frame {
+ msec: 576
+ hash: "394360c0bff5ee3ad206d2911838d64e"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 592
+ hash: "394360c0bff5ee3ad206d2911838d64e"
+ }
+ Frame {
+ msec: 608
+ hash: "394360c0bff5ee3ad206d2911838d64e"
+ }
+ Frame {
+ msec: 624
+ hash: "394360c0bff5ee3ad206d2911838d64e"
+ }
+ Frame {
+ msec: 640
+ hash: "394360c0bff5ee3ad206d2911838d64e"
+ }
+ Frame {
+ msec: 656
+ hash: "394360c0bff5ee3ad206d2911838d64e"
+ }
+ Frame {
+ msec: 672
+ hash: "394360c0bff5ee3ad206d2911838d64e"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 688
+ hash: "3c455f51fea0926576077d55d6fbfbb2"
+ }
+ Frame {
+ msec: 704
+ hash: "3c455f51fea0926576077d55d6fbfbb2"
+ }
+ Frame {
+ msec: 720
+ hash: "3c455f51fea0926576077d55d6fbfbb2"
+ }
+ Frame {
+ msec: 736
+ hash: "3c455f51fea0926576077d55d6fbfbb2"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 752
+ hash: "3c455f51fea0926576077d55d6fbfbb2"
+ }
+ Frame {
+ msec: 768
+ hash: "3c455f51fea0926576077d55d6fbfbb2"
+ }
+ Frame {
+ msec: 784
+ hash: "3c455f51fea0926576077d55d6fbfbb2"
+ }
+ Frame {
+ msec: 800
+ hash: "3c455f51fea0926576077d55d6fbfbb2"
+ }
+ Frame {
+ msec: 816
+ hash: "3c455f51fea0926576077d55d6fbfbb2"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 832
+ hash: "c87aaf72137c2b9e8c876879e7215072"
+ }
+ Frame {
+ msec: 848
+ hash: "c87aaf72137c2b9e8c876879e7215072"
+ }
+ Frame {
+ msec: 864
+ hash: "c87aaf72137c2b9e8c876879e7215072"
+ }
+ Frame {
+ msec: 880
+ hash: "c87aaf72137c2b9e8c876879e7215072"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 896
+ hash: "c87aaf72137c2b9e8c876879e7215072"
+ }
+ Frame {
+ msec: 912
+ hash: "c87aaf72137c2b9e8c876879e7215072"
+ }
+ Frame {
+ msec: 928
+ hash: "c87aaf72137c2b9e8c876879e7215072"
+ }
+ Frame {
+ msec: 944
+ hash: "c87aaf72137c2b9e8c876879e7215072"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 960
+ image: "qt-669.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Frame {
+ msec: 992
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Frame {
+ msec: 1008
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1024
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Frame {
+ msec: 1040
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Frame {
+ msec: 1056
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Frame {
+ msec: 1072
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Frame {
+ msec: 1088
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1104
+ hash: "c899e9d181860f682ba7275fa36f82a1"
+ }
+ Frame {
+ msec: 1120
+ hash: "c899e9d181860f682ba7275fa36f82a1"
+ }
+ Frame {
+ msec: 1136
+ hash: "c899e9d181860f682ba7275fa36f82a1"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1152
+ hash: "c899e9d181860f682ba7275fa36f82a1"
+ }
+ Frame {
+ msec: 1168
+ hash: "c899e9d181860f682ba7275fa36f82a1"
+ }
+ Frame {
+ msec: 1184
+ hash: "c899e9d181860f682ba7275fa36f82a1"
+ }
+ Frame {
+ msec: 1200
+ hash: "c899e9d181860f682ba7275fa36f82a1"
+ }
+ Frame {
+ msec: 1216
+ hash: "c899e9d181860f682ba7275fa36f82a1"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1232
+ hash: "1313880b796ae7134f50fa8dafa4a974"
+ }
+ Frame {
+ msec: 1248
+ hash: "1313880b796ae7134f50fa8dafa4a974"
+ }
+ Frame {
+ msec: 1264
+ hash: "1313880b796ae7134f50fa8dafa4a974"
+ }
+ Frame {
+ msec: 1280
+ hash: "1313880b796ae7134f50fa8dafa4a974"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1296
+ hash: "1313880b796ae7134f50fa8dafa4a974"
+ }
+ Frame {
+ msec: 1312
+ hash: "1313880b796ae7134f50fa8dafa4a974"
+ }
+ Frame {
+ msec: 1328
+ hash: "1313880b796ae7134f50fa8dafa4a974"
+ }
+ Frame {
+ msec: 1344
+ hash: "1313880b796ae7134f50fa8dafa4a974"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1360
+ hash: "d85314199885fdf9cc8e666c3fb723fb"
+ }
+ Frame {
+ msec: 1376
+ hash: "d85314199885fdf9cc8e666c3fb723fb"
+ }
+ Frame {
+ msec: 1392
+ hash: "d85314199885fdf9cc8e666c3fb723fb"
+ }
+ Frame {
+ msec: 1408
+ hash: "d85314199885fdf9cc8e666c3fb723fb"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1424
+ hash: "d85314199885fdf9cc8e666c3fb723fb"
+ }
+ Frame {
+ msec: 1440
+ hash: "d85314199885fdf9cc8e666c3fb723fb"
+ }
+ Frame {
+ msec: 1456
+ hash: "d85314199885fdf9cc8e666c3fb723fb"
+ }
+ Frame {
+ msec: 1472
+ hash: "d85314199885fdf9cc8e666c3fb723fb"
+ }
+ Frame {
+ msec: 1488
+ hash: "d85314199885fdf9cc8e666c3fb723fb"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1504
+ hash: "a3b98f215b2329e29d17b61eba0f9e45"
+ }
+ Frame {
+ msec: 1520
+ hash: "a3b98f215b2329e29d17b61eba0f9e45"
+ }
+ Frame {
+ msec: 1536
+ hash: "a3b98f215b2329e29d17b61eba0f9e45"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1552
+ hash: "a3b98f215b2329e29d17b61eba0f9e45"
+ }
+ Frame {
+ msec: 1568
+ hash: "a3b98f215b2329e29d17b61eba0f9e45"
+ }
+ Frame {
+ msec: 1584
+ hash: "a3b98f215b2329e29d17b61eba0f9e45"
+ }
+ Frame {
+ msec: 1600
+ hash: "a3b98f215b2329e29d17b61eba0f9e45"
+ }
+ Frame {
+ msec: 1616
+ hash: "a3b98f215b2329e29d17b61eba0f9e45"
+ }
+ Frame {
+ msec: 1632
+ hash: "a3b98f215b2329e29d17b61eba0f9e45"
+ }
+ Frame {
+ msec: 1648
+ hash: "a3b98f215b2329e29d17b61eba0f9e45"
+ }
+ Frame {
+ msec: 1664
+ hash: "a3b98f215b2329e29d17b61eba0f9e45"
+ }
+ Frame {
+ msec: 1680
+ hash: "a3b98f215b2329e29d17b61eba0f9e45"
+ }
+ Frame {
+ msec: 1696
+ hash: "a3b98f215b2329e29d17b61eba0f9e45"
+ }
+ Frame {
+ msec: 1712
+ hash: "a3b98f215b2329e29d17b61eba0f9e45"
+ }
+ Frame {
+ msec: 1728
+ hash: "a3b98f215b2329e29d17b61eba0f9e45"
+ }
+ Frame {
+ msec: 1744
+ hash: "a3b98f215b2329e29d17b61eba0f9e45"
+ }
+ Frame {
+ msec: 1760
+ hash: "a3b98f215b2329e29d17b61eba0f9e45"
+ }
+ Frame {
+ msec: 1776
+ hash: "a3b98f215b2329e29d17b61eba0f9e45"
+ }
+ Frame {
+ msec: 1792
+ hash: "a3b98f215b2329e29d17b61eba0f9e45"
+ }
+ Frame {
+ msec: 1808
+ hash: "a3b98f215b2329e29d17b61eba0f9e45"
+ }
+ Frame {
+ msec: 1824
+ hash: "a3b98f215b2329e29d17b61eba0f9e45"
+ }
+ Frame {
+ msec: 1840
+ hash: "a3b98f215b2329e29d17b61eba0f9e45"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1856
+ hash: "d85314199885fdf9cc8e666c3fb723fb"
+ }
+ Frame {
+ msec: 1872
+ hash: "d85314199885fdf9cc8e666c3fb723fb"
+ }
+ Frame {
+ msec: 1888
+ hash: "d85314199885fdf9cc8e666c3fb723fb"
+ }
+ Frame {
+ msec: 1904
+ hash: "d85314199885fdf9cc8e666c3fb723fb"
+ }
+ Frame {
+ msec: 1920
+ image: "qt-669.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "d85314199885fdf9cc8e666c3fb723fb"
+ }
+ Frame {
+ msec: 1952
+ hash: "d85314199885fdf9cc8e666c3fb723fb"
+ }
+ Frame {
+ msec: 1968
+ hash: "d85314199885fdf9cc8e666c3fb723fb"
+ }
+ Frame {
+ msec: 1984
+ hash: "d85314199885fdf9cc8e666c3fb723fb"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2000
+ hash: "d85314199885fdf9cc8e666c3fb723fb"
+ }
+ Frame {
+ msec: 2016
+ hash: "d85314199885fdf9cc8e666c3fb723fb"
+ }
+ Frame {
+ msec: 2032
+ hash: "d85314199885fdf9cc8e666c3fb723fb"
+ }
+ Frame {
+ msec: 2048
+ hash: "d85314199885fdf9cc8e666c3fb723fb"
+ }
+ Frame {
+ msec: 2064
+ hash: "d85314199885fdf9cc8e666c3fb723fb"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2080
+ hash: "1313880b796ae7134f50fa8dafa4a974"
+ }
+ Frame {
+ msec: 2096
+ hash: "1313880b796ae7134f50fa8dafa4a974"
+ }
+ Frame {
+ msec: 2112
+ hash: "1313880b796ae7134f50fa8dafa4a974"
+ }
+ Frame {
+ msec: 2128
+ hash: "1313880b796ae7134f50fa8dafa4a974"
+ }
+ Frame {
+ msec: 2144
+ hash: "1313880b796ae7134f50fa8dafa4a974"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2160
+ hash: "1313880b796ae7134f50fa8dafa4a974"
+ }
+ Frame {
+ msec: 2176
+ hash: "1313880b796ae7134f50fa8dafa4a974"
+ }
+ Frame {
+ msec: 2192
+ hash: "1313880b796ae7134f50fa8dafa4a974"
+ }
+ Frame {
+ msec: 2208
+ hash: "1313880b796ae7134f50fa8dafa4a974"
+ }
+ Frame {
+ msec: 2224
+ hash: "1313880b796ae7134f50fa8dafa4a974"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2240
+ hash: "c899e9d181860f682ba7275fa36f82a1"
+ }
+ Frame {
+ msec: 2256
+ hash: "c899e9d181860f682ba7275fa36f82a1"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2272
+ hash: "c899e9d181860f682ba7275fa36f82a1"
+ }
+ Frame {
+ msec: 2288
+ hash: "c899e9d181860f682ba7275fa36f82a1"
+ }
+ Frame {
+ msec: 2304
+ hash: "c899e9d181860f682ba7275fa36f82a1"
+ }
+ Frame {
+ msec: 2320
+ hash: "c899e9d181860f682ba7275fa36f82a1"
+ }
+ Frame {
+ msec: 2336
+ hash: "c899e9d181860f682ba7275fa36f82a1"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2352
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Frame {
+ msec: 2368
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Frame {
+ msec: 2384
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2400
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Frame {
+ msec: 2416
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Frame {
+ msec: 2432
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Frame {
+ msec: 2448
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Frame {
+ msec: 2464
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Frame {
+ msec: 2480
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Frame {
+ msec: 2496
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Frame {
+ msec: 2512
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Frame {
+ msec: 2528
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Frame {
+ msec: 2544
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Frame {
+ msec: 2560
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Frame {
+ msec: 2576
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Frame {
+ msec: 2592
+ hash: "2caf044acf7aaf0af6a03e7b8180fa16"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2608
+ hash: "c87aaf72137c2b9e8c876879e7215072"
+ }
+ Frame {
+ msec: 2624
+ hash: "c87aaf72137c2b9e8c876879e7215072"
+ }
+ Frame {
+ msec: 2640
+ hash: "c87aaf72137c2b9e8c876879e7215072"
+ }
+ Frame {
+ msec: 2656
+ hash: "c87aaf72137c2b9e8c876879e7215072"
+ }
+ Frame {
+ msec: 2672
+ hash: "c87aaf72137c2b9e8c876879e7215072"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2688
+ hash: "c87aaf72137c2b9e8c876879e7215072"
+ }
+ Frame {
+ msec: 2704
+ hash: "c87aaf72137c2b9e8c876879e7215072"
+ }
+ Frame {
+ msec: 2720
+ hash: "c87aaf72137c2b9e8c876879e7215072"
+ }
+ Frame {
+ msec: 2736
+ hash: "c87aaf72137c2b9e8c876879e7215072"
+ }
+ Frame {
+ msec: 2752
+ hash: "c87aaf72137c2b9e8c876879e7215072"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2768
+ hash: "3c455f51fea0926576077d55d6fbfbb2"
+ }
+ Frame {
+ msec: 2784
+ hash: "3c455f51fea0926576077d55d6fbfbb2"
+ }
+ Frame {
+ msec: 2800
+ hash: "3c455f51fea0926576077d55d6fbfbb2"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2816
+ hash: "3c455f51fea0926576077d55d6fbfbb2"
+ }
+ Frame {
+ msec: 2832
+ hash: "3c455f51fea0926576077d55d6fbfbb2"
+ }
+ Frame {
+ msec: 2848
+ hash: "3c455f51fea0926576077d55d6fbfbb2"
+ }
+ Frame {
+ msec: 2864
+ hash: "3c455f51fea0926576077d55d6fbfbb2"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2880
+ image: "qt-669.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "394360c0bff5ee3ad206d2911838d64e"
+ }
+ Frame {
+ msec: 2912
+ hash: "394360c0bff5ee3ad206d2911838d64e"
+ }
+ Frame {
+ msec: 2928
+ hash: "394360c0bff5ee3ad206d2911838d64e"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2944
+ hash: "394360c0bff5ee3ad206d2911838d64e"
+ }
+ Frame {
+ msec: 2960
+ hash: "394360c0bff5ee3ad206d2911838d64e"
+ }
+ Frame {
+ msec: 2976
+ hash: "394360c0bff5ee3ad206d2911838d64e"
+ }
+ Frame {
+ msec: 2992
+ hash: "394360c0bff5ee3ad206d2911838d64e"
+ }
+ Frame {
+ msec: 3008
+ hash: "394360c0bff5ee3ad206d2911838d64e"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3024
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3040
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3056
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3072
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3088
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3104
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3120
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3136
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3152
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3168
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3184
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3200
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3216
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3232
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3248
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3264
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3280
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3296
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3312
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3328
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3344
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3360
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3376
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3392
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3408
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3424
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3440
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3456
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3472
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3488
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3504
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3520
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3536
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3552
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3568
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3584
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3600
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3616
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3632
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3648
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3664
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3680
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Frame {
+ msec: 3696
+ hash: "10573e4c9dab5bd6e46ec79949c098e5"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3712
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 3728
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 3744
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 3760
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 3776
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 3792
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3808
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 3824
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 3840
+ image: "qt-669.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 3872
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 3888
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 3904
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 3920
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 3936
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 3952
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 3968
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 3984
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 4000
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 4016
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 4032
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 4048
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 4064
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 4080
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 4096
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 4112
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 4128
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 4144
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 4160
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 4176
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 4192
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 4208
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 4224
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 4240
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 4256
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 4272
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 4288
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+ Frame {
+ msec: 4304
+ hash: "4e0ce00bde70a96774a6477ef2305b7f"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.0.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.0.png
new file mode 100644
index 0000000..ec65f49
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.1.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.1.png
new file mode 100644
index 0000000..ec65f49
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.2.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.2.png
new file mode 100644
index 0000000..ec65f49
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.3.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.3.png
new file mode 100644
index 0000000..ec65f49
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.4.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.4.png
new file mode 100644
index 0000000..ec65f49
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.5.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.5.png
new file mode 100644
index 0000000..ec65f49
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.6.png b/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.6.png
new file mode 100644
index 0000000..ec65f49
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.qml b/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.qml
new file mode 100644
index 0000000..f96daa9
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/data/wrap.qml
@@ -0,0 +1,2467 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 84
+ modifiers: 33554432
+ text: "54"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 32
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 16777248
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 48
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 64
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 80
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 96
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 72
+ modifiers: 0
+ text: "68"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 112
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 128
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 144
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 73
+ modifiers: 0
+ text: "69"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 160
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 176
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 192
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 72
+ modifiers: 0
+ text: "68"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 208
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 224
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 240
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 73
+ modifiers: 0
+ text: "69"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 256
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 272
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 288
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 304
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 320
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 336
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 352
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 368
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 384
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 400
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 416
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 432
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 448
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 464
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 73
+ modifiers: 0
+ text: "69"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 480
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 496
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 512
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 528
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Key {
+ type: 7
+ key: 73
+ modifiers: 0
+ text: "69"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 544
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 560
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 576
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 592
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 608
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Key {
+ type: 6
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 624
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 640
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 656
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 672
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 688
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 704
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 720
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 736
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 752
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 768
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 784
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 800
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 816
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 832
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 848
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 864
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 880
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 896
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 912
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 928
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 944
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 960
+ image: "wrap.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 992
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 69
+ modifiers: 0
+ text: "65"
+ autorep: false
+ count: 1
+ }
+ Key {
+ type: 7
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1008
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1024
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1040
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1056
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1072
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 69
+ modifiers: 0
+ text: "65"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1088
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1104
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1120
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1136
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1152
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1168
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1184
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1200
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1216
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1232
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1248
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1264
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Key {
+ type: 6
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1280
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1296
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1312
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1328
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1344
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1360
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1376
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1392
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1408
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1424
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1440
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1456
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1472
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1488
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1504
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1520
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1536
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1552
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 72
+ modifiers: 0
+ text: "68"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1568
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1584
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1600
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1616
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1632
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Key {
+ type: 7
+ key: 72
+ modifiers: 0
+ text: "68"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1648
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1664
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1680
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1696
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1712
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1728
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1744
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1760
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1776
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1792
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1808
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1824
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1840
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1856
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1872
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1888
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1904
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1920
+ image: "wrap.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1952
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1968
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1984
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2000
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2016
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2032
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2048
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 69
+ modifiers: 0
+ text: "65"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2064
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2080
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2096
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2112
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 69
+ modifiers: 0
+ text: "65"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2128
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2144
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2160
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2176
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2192
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2208
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 88
+ modifiers: 0
+ text: "78"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2224
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2240
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2256
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2272
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2288
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2304
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 88
+ modifiers: 0
+ text: "78"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2320
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2336
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2352
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2368
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2384
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2400
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2416
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2432
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2448
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2464
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2480
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 69
+ modifiers: 0
+ text: "65"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2496
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2512
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2528
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2544
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 69
+ modifiers: 0
+ text: "65"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2560
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2576
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2592
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2608
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2624
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2640
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 68
+ modifiers: 0
+ text: "64"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2656
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2672
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2688
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2704
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 68
+ modifiers: 0
+ text: "64"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2720
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2736
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2752
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 73
+ modifiers: 0
+ text: "69"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2768
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2784
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2800
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2816
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2832
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Key {
+ type: 7
+ key: 73
+ modifiers: 0
+ text: "69"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2848
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2864
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2880
+ image: "wrap.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2912
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2928
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2944
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2960
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2976
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2992
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3008
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3024
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3040
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3056
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3072
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3088
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 87
+ modifiers: 0
+ text: "77"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3104
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3120
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3136
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3152
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3168
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 87
+ modifiers: 0
+ text: "77"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3184
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3200
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3216
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3232
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3248
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 82
+ modifiers: 0
+ text: "72"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3264
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3280
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3296
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 82
+ modifiers: 0
+ text: "72"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3312
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3328
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3344
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3360
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3376
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3392
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3408
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3424
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3440
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3456
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3472
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 80
+ modifiers: 0
+ text: "70"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3488
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3504
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3520
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3536
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 80
+ modifiers: 0
+ text: "70"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3552
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3568
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3584
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3600
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3616
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3632
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3648
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3664
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3680
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3696
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3712
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3728
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3744
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3760
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3776
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3792
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3808
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3824
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3840
+ image: "wrap.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3872
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3888
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3904
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 67
+ modifiers: 0
+ text: "63"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3920
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3936
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3952
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3968
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3984
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 67
+ modifiers: 0
+ text: "63"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4000
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4016
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 79
+ modifiers: 0
+ text: "6f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4032
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4048
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4064
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 79
+ modifiers: 0
+ text: "6f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4080
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 82
+ modifiers: 0
+ text: "72"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4096
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4112
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4128
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4144
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 82
+ modifiers: 0
+ text: "72"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4160
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4176
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4192
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 82
+ modifiers: 0
+ text: "72"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4208
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4224
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4240
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4256
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4272
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 69
+ modifiers: 0
+ text: "65"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4288
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 82
+ modifiers: 0
+ text: "72"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4304
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4320
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4336
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 69
+ modifiers: 0
+ text: "65"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4352
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4368
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4384
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4400
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4416
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 67
+ modifiers: 0
+ text: "63"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4432
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4448
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4464
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 67
+ modifiers: 0
+ text: "63"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4480
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4496
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4512
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4528
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4544
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4560
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4576
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4592
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4608
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 84
+ modifiers: 0
+ text: "74"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4624
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4640
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4656
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4672
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 76
+ modifiers: 0
+ text: "6c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4688
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4704
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4720
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4736
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 76
+ modifiers: 0
+ text: "6c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4752
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4768
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4784
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 89
+ modifiers: 0
+ text: "79"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4800
+ image: "wrap.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 89
+ modifiers: 0
+ text: "79"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4832
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4848
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4864
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4880
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 46
+ modifiers: 0
+ text: "2e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4896
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4912
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4928
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4944
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 7
+ key: 46
+ modifiers: 0
+ text: "2e"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4960
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4976
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4992
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5008
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5024
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5040
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5056
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5072
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5088
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5104
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5120
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5136
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5152
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5168
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5184
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5200
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5216
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5232
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5248
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5264
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5280
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5296
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5312
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5328
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5344
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5360
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5376
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5392
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5408
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5424
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5440
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5456
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5472
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5488
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5504
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5520
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5536
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5552
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5568
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5584
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5600
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5616
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5632
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5648
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5664
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5680
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5696
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5712
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5728
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5744
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5760
+ image: "wrap.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5792
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5808
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5824
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5840
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5856
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5872
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5888
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5904
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5920
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5936
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5952
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5968
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5984
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6000
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6016
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6032
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6048
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6064
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6080
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6096
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6112
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6128
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6144
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6160
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6176
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6192
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6208
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6224
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6240
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6256
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6272
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6288
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6304
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6320
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6336
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6352
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6368
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6384
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6400
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6416
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6432
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6448
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6464
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6480
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6496
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6512
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6528
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6544
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6560
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6576
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6592
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6608
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6624
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6640
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6656
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6672
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6688
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6704
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6720
+ image: "wrap.6.png"
+ }
+ Frame {
+ msec: 6736
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6752
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6768
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6784
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6800
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6816
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6832
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6848
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6864
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/qt-669.qml b/tests/auto/declarative/visual/qmlgraphicstextedit/qt-669.qml
new file mode 100644
index 0000000..b01ddf8
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/qt-669.qml
@@ -0,0 +1,19 @@
+import Qt 4.6
+
+Rectangle {
+ Component { id: testableCursor
+ //Doesn't blink
+ Rectangle {
+ color:"black"
+ width:1
+ }
+ }
+ color: "green"
+ width:400;
+ height:40;
+ TextEdit {
+ focus: true;
+ cursorDelegate: testableCursor
+ text: "Jackdaws love my big sphinx of Quartz"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstextedit/wrap.qml b/tests/auto/declarative/visual/qmlgraphicstextedit/wrap.qml
new file mode 100644
index 0000000..f9fe025
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextedit/wrap.qml
@@ -0,0 +1,21 @@
+import Qt 4.6
+
+Item {
+ height:400
+ width: 200
+ TextEdit {
+ width: 200
+ height: 200
+ wrap: true
+ focus: true
+ }
+ //With QTBUG-6273 only the bottom one would be wrapped
+ TextEdit {
+ width: 200
+ height: 200
+ wrap: true
+ text: "This is a test that text edit wraps correctly."
+ y:200
+ }
+
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/cursorDelegate.qml b/tests/auto/declarative/visual/qmlgraphicstextinput/cursorDelegate.qml
new file mode 100644
index 0000000..d10755c
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/cursorDelegate.qml
@@ -0,0 +1,35 @@
+import Qt 4.6
+ Rectangle {
+ resources: [
+ Component { id: cursorA
+ Item { id: cPage;
+ x: Behavior { NumberAnimation { } }
+ y: Behavior { NumberAnimation { } }
+ height: Behavior { NumberAnimation { duration: 200 } }
+ Rectangle { id: cRectangle; color: "black"; y: 1; width: 1; height: parent.height-2;
+ Rectangle { id:top; color: "black"; width: 3; height: 1; x: -1; y:0}
+ Rectangle { id:bottom; color: "black"; width: 3; height: 1; x: -1; anchors.bottom: parent.bottom;}
+ opacity: 1
+ opacity: SequentialAnimation { running: cPage.parent.focus == true; repeat: true;
+ NumberAnimation { matchProperties: "opacity"; to: 1; duration: 500; easing: "easeInQuad"}
+ NumberAnimation { matchProperties: "opacity"; to: 0; duration: 500; easing: "easeOutQuad"}
+ }
+ }
+ width: 1;
+ }
+ }
+ ]
+ width: 400
+ height: 200
+ color: "white"
+ TextInput { id: mainText
+ text: "Hello World"
+ cursorDelegate: cursorA
+ focus: true
+ font.pixelSize: 28
+ selectionColor: "lightsteelblue"
+ selectedTextColor: "deeppink"
+ color: "forestgreen"
+ anchors.centerIn: parent
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.0.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.0.png
new file mode 100644
index 0000000..9d0bab2
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.1.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.1.png
new file mode 100644
index 0000000..db66ff7
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.2.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.2.png
new file mode 100644
index 0000000..cbcca68
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.3.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.3.png
new file mode 100644
index 0000000..c22196b
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.4.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.4.png
new file mode 100644
index 0000000..a1d051e
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.5.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.5.png
new file mode 100644
index 0000000..9289dc0
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.6.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.6.png
new file mode 100644
index 0000000..7331f89
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.7.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.7.png
new file mode 100644
index 0000000..968bdd2
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.7.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.8.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.8.png
new file mode 100644
index 0000000..9a3436a
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.8.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.qml b/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.qml
new file mode 100644
index 0000000..3b664b6
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data-MAC/cursorDelegate.qml
@@ -0,0 +1,3379 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 32
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 48
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 64
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 80
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 96
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 112
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 128
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 144
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 160
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 176
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 192
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 208
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 224
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 240
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 256
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 272
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 288
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 304
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 320
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 336
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 352
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 368
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 384
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 400
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 416
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 432
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 448
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 464
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 480
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 496
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Frame {
+ msec: 512
+ hash: "701d8c0f72330c0b72df071bd17749e6"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 528
+ hash: "438be260f19d04c9f98ed7dce1c7db40"
+ }
+ Frame {
+ msec: 544
+ hash: "6032aada2c48092000ecb93e52656414"
+ }
+ Frame {
+ msec: 560
+ hash: "d23bdd94019477d8378cde580d8765ad"
+ }
+ Frame {
+ msec: 576
+ hash: "d74f8e44d47710714d4197809fffb622"
+ }
+ Frame {
+ msec: 592
+ hash: "4fbbb8447d80012bc6b5c24ddbfe498e"
+ }
+ Frame {
+ msec: 608
+ hash: "4e875ba8703b690a17e445f2b3810435"
+ }
+ Frame {
+ msec: 624
+ hash: "e4d7a59716cd704fe1cfa8ba91454e93"
+ }
+ Frame {
+ msec: 640
+ hash: "a2ea272b45d8de225826d9381015ff2e"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 656
+ hash: "5d112a3675ea4c010e7bc60e036d0262"
+ }
+ Frame {
+ msec: 672
+ hash: "788d8962f311adf57a3acc876b0e8804"
+ }
+ Frame {
+ msec: 688
+ hash: "827fdd6a3d1006f4a9dd2faf208ea436"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 704
+ hash: "91b2695e4915238ae8610a64e279b0f4"
+ }
+ Frame {
+ msec: 720
+ hash: "a97d90765f87b998eae6e9f603c61bff"
+ }
+ Frame {
+ msec: 736
+ hash: "48969edab07b942480d93ac2d383ca24"
+ }
+ Frame {
+ msec: 752
+ hash: "ecfd9d6d5873001f0c67806544a14983"
+ }
+ Frame {
+ msec: 768
+ hash: "a3a3bc1e2523d3e7f961893bcd1dd3a8"
+ }
+ Frame {
+ msec: 784
+ hash: "e337735ad0b42e60c54f16f3da7af3cf"
+ }
+ Frame {
+ msec: 800
+ hash: "c39db081130d269f25dbcb1a19afb8d0"
+ }
+ Frame {
+ msec: 816
+ hash: "c464d501e3935ec0f53eb780bd1a8289"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 832
+ hash: "9dc01a69f2a6892d3c4203674c8bef72"
+ }
+ Frame {
+ msec: 848
+ hash: "d94054222fd37a350bd8abd592a332e3"
+ }
+ Frame {
+ msec: 864
+ hash: "46fed264c233490b477e3a7c22183e18"
+ }
+ Frame {
+ msec: 880
+ hash: "34bc703c915b49b0450ece1d18306df8"
+ }
+ Frame {
+ msec: 896
+ hash: "e87f18da2fa5c91c9b2b5dea50f9c1e2"
+ }
+ Frame {
+ msec: 912
+ hash: "4f6dbc7b249c37390518cc263832b587"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 928
+ hash: "df09fa2fd138d1b480eec82db3872d6f"
+ }
+ Frame {
+ msec: 944
+ hash: "b74cb1bfbb979a5e91853d9145d277d8"
+ }
+ Frame {
+ msec: 960
+ image: "cursorDelegate.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 992
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1008
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1024
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1040
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 1056
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Key {
+ type: 6
+ key: 16777248
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 33554432
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1072
+ hash: "35425ae3ccf3c8dcc1483479c57a3287"
+ }
+ Frame {
+ msec: 1088
+ hash: "b74cb1bfbb979a5e91853d9145d277d8"
+ }
+ Frame {
+ msec: 1104
+ hash: "df09fa2fd138d1b480eec82db3872d6f"
+ }
+ Frame {
+ msec: 1120
+ hash: "4f6dbc7b249c37390518cc263832b587"
+ }
+ Frame {
+ msec: 1136
+ hash: "e87f18da2fa5c91c9b2b5dea50f9c1e2"
+ }
+ Frame {
+ msec: 1152
+ hash: "34bc703c915b49b0450ece1d18306df8"
+ }
+ Frame {
+ msec: 1168
+ hash: "46fed264c233490b477e3a7c22183e18"
+ }
+ Frame {
+ msec: 1184
+ hash: "d94054222fd37a350bd8abd592a332e3"
+ }
+ Frame {
+ msec: 1200
+ hash: "9dc01a69f2a6892d3c4203674c8bef72"
+ }
+ Frame {
+ msec: 1216
+ hash: "76fb2e1ad33affe33c0887f04caa7396"
+ }
+ Frame {
+ msec: 1232
+ hash: "0f500339c81ca3621d13910017b84b7b"
+ }
+ Frame {
+ msec: 1248
+ hash: "702864de569e6a5648ee174d5ef891f8"
+ }
+ Frame {
+ msec: 1264
+ hash: "01e937e1fcc0331b2541fa32c3479a24"
+ }
+ Frame {
+ msec: 1280
+ hash: "ee661e6cc1f86e755ff399adb6b11fd1"
+ }
+ Frame {
+ msec: 1296
+ hash: "ea2d610e9b41e72b2984a51f0d3f7587"
+ }
+ Frame {
+ msec: 1312
+ hash: "4a646d76b706698a02cead560b1f8d57"
+ }
+ Frame {
+ msec: 1328
+ hash: "48ec87bfc25471f6fa2d43f9db80b693"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 100663296
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1344
+ hash: "12b5e016bad990d1f2bf427ee8e3e6d9"
+ }
+ Frame {
+ msec: 1360
+ hash: "66a2ba3f9e005cd58aa50cfa0000cd15"
+ }
+ Frame {
+ msec: 1376
+ hash: "a2e9e42e09dadbd0791f52bb96e0e0dc"
+ }
+ Frame {
+ msec: 1392
+ hash: "ac68396566ea85a157e944e601dd8d18"
+ }
+ Frame {
+ msec: 1408
+ hash: "b9bfdebec8dd1a93de7ef2768b2542ba"
+ }
+ Frame {
+ msec: 1424
+ hash: "2e0a4b960803770acb34ef56ccf2be35"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 100663296
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1440
+ hash: "df1643f0f8b7aa2dc080958822aeb3d0"
+ }
+ Frame {
+ msec: 1456
+ hash: "15bb91195adfaf83e88fd93e41ff3e17"
+ }
+ Frame {
+ msec: 1472
+ hash: "dc0476c27bd7eef3a59637df9a3fecd8"
+ }
+ Frame {
+ msec: 1488
+ hash: "a271f69e9dc6d1e0362c3e10760895df"
+ }
+ Frame {
+ msec: 1504
+ hash: "7fe66bcc6bada354b4dd7baf8c977740"
+ }
+ Frame {
+ msec: 1520
+ hash: "6b502dbd5ac8ff010df326cb9b593dce"
+ }
+ Frame {
+ msec: 1536
+ hash: "a9dd21649a95a6a6e8daea91bc6e2a5f"
+ }
+ Frame {
+ msec: 1552
+ hash: "374686590eaa02b7b436caa40cc0b0a0"
+ }
+ Frame {
+ msec: 1568
+ hash: "09ac3c5d413b1f650407eaa971aade81"
+ }
+ Frame {
+ msec: 1584
+ hash: "39f84e04f1ae58600591c0de40558d2c"
+ }
+ Frame {
+ msec: 1600
+ hash: "0336ea1799835af2185c361e221a9661"
+ }
+ Frame {
+ msec: 1616
+ hash: "8c7ab13e499d7f31107cf0f899334259"
+ }
+ Frame {
+ msec: 1632
+ hash: "bad5899324e52c9e6eadb72f3e7c2150"
+ }
+ Frame {
+ msec: 1648
+ hash: "4b78f451ecb22cfbed9f5998d61018eb"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 100663296
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1664
+ hash: "6c913bc712eee18947a43dd1c0a6516b"
+ }
+ Frame {
+ msec: 1680
+ hash: "4e566abf1e0696e72b2a4beab5a53d6e"
+ }
+ Frame {
+ msec: 1696
+ hash: "6ad579c289c63a6b90a1517765fc041e"
+ }
+ Frame {
+ msec: 1712
+ hash: "cef43f349cf221a1aa6e6e70f1fa6339"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 100663296
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1728
+ hash: "d89f7e3e2510fcb34786584747633673"
+ }
+ Frame {
+ msec: 1744
+ hash: "eb23a3eac684808f73034f4e4ef8984d"
+ }
+ Frame {
+ msec: 1760
+ hash: "6f2c1f61e58940d9cc1a70c0db903446"
+ }
+ Frame {
+ msec: 1776
+ hash: "f036a5ecda518be198f3bdf2dbc5baab"
+ }
+ Frame {
+ msec: 1792
+ hash: "7411784774fdc3b324644395f7beb013"
+ }
+ Frame {
+ msec: 1808
+ hash: "abfdd1f8440998af2ff7903f49f1bd7c"
+ }
+ Frame {
+ msec: 1824
+ hash: "6edd29f2e8d3d81e912c6b279ecc1885"
+ }
+ Frame {
+ msec: 1840
+ hash: "8eb5ba22793c7cbfa97a64557f2a023f"
+ }
+ Frame {
+ msec: 1856
+ hash: "9a39470525e6f508228f7e0014e02d64"
+ }
+ Frame {
+ msec: 1872
+ hash: "b3ad10cf28151f5f7f5a4c3540f1660e"
+ }
+ Frame {
+ msec: 1888
+ hash: "816203df3cf42fa7a0e8d6730c186444"
+ }
+ Frame {
+ msec: 1904
+ hash: "a0a7e7ff7960dfe6149e526badf799a6"
+ }
+ Frame {
+ msec: 1920
+ image: "cursorDelegate.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "4d245b2285eadfd206409f74e03c7fc9"
+ }
+ Frame {
+ msec: 1952
+ hash: "e1d5e6c2e4df1454b5a256c3678ffdef"
+ }
+ Frame {
+ msec: 1968
+ hash: "781d7fb03a37cb3f297cc0d2df338fd7"
+ }
+ Key {
+ type: 7
+ key: 16777249
+ modifiers: 100663296
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1984
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2000
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2016
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2032
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2048
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2064
+ hash: "781d7fb03a37cb3f297cc0d2df338fd7"
+ }
+ Frame {
+ msec: 2080
+ hash: "e1d5e6c2e4df1454b5a256c3678ffdef"
+ }
+ Frame {
+ msec: 2096
+ hash: "4d245b2285eadfd206409f74e03c7fc9"
+ }
+ Frame {
+ msec: 2112
+ hash: "5a647962e016d15daa417d88524d6061"
+ }
+ Frame {
+ msec: 2128
+ hash: "a0a7e7ff7960dfe6149e526badf799a6"
+ }
+ Frame {
+ msec: 2144
+ hash: "816203df3cf42fa7a0e8d6730c186444"
+ }
+ Frame {
+ msec: 2160
+ hash: "b3ad10cf28151f5f7f5a4c3540f1660e"
+ }
+ Frame {
+ msec: 2176
+ hash: "9a39470525e6f508228f7e0014e02d64"
+ }
+ Frame {
+ msec: 2192
+ hash: "8eb5ba22793c7cbfa97a64557f2a023f"
+ }
+ Frame {
+ msec: 2208
+ hash: "6edd29f2e8d3d81e912c6b279ecc1885"
+ }
+ Frame {
+ msec: 2224
+ hash: "abfdd1f8440998af2ff7903f49f1bd7c"
+ }
+ Frame {
+ msec: 2240
+ hash: "7411784774fdc3b324644395f7beb013"
+ }
+ Frame {
+ msec: 2256
+ hash: "f036a5ecda518be198f3bdf2dbc5baab"
+ }
+ Key {
+ type: 7
+ key: 16777248
+ modifiers: 33554432
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2272
+ hash: "6f2c1f61e58940d9cc1a70c0db903446"
+ }
+ Frame {
+ msec: 2288
+ hash: "eb23a3eac684808f73034f4e4ef8984d"
+ }
+ Frame {
+ msec: 2304
+ hash: "d89f7e3e2510fcb34786584747633673"
+ }
+ Frame {
+ msec: 2320
+ hash: "cef43f349cf221a1aa6e6e70f1fa6339"
+ }
+ Frame {
+ msec: 2336
+ hash: "6ad579c289c63a6b90a1517765fc041e"
+ }
+ Frame {
+ msec: 2352
+ hash: "4e566abf1e0696e72b2a4beab5a53d6e"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2368
+ hash: "6c913bc712eee18947a43dd1c0a6516b"
+ }
+ Frame {
+ msec: 2384
+ hash: "2c518a32ca3b5ca924709cc6990fb039"
+ }
+ Frame {
+ msec: 2400
+ hash: "7f40db00bd3e6d0b39454eefa1403f44"
+ }
+ Frame {
+ msec: 2416
+ hash: "98db32e0d1812e9584105dc4dbceff80"
+ }
+ Frame {
+ msec: 2432
+ hash: "c2150a67391bb574141c16cb011847bf"
+ }
+ Frame {
+ msec: 2448
+ hash: "f9ea21d894fa2dace4d43ce99a580b90"
+ }
+ Frame {
+ msec: 2464
+ hash: "2f580c3244499fc6ecd2121693f463fd"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2480
+ hash: "2f7f421d3e6a895a9efa6b0e8feb81c4"
+ }
+ Frame {
+ msec: 2496
+ hash: "35a18447f319431ed0a645d05a1d03d1"
+ }
+ Frame {
+ msec: 2512
+ hash: "54e36fb4014be554d13709b48b9bdce7"
+ }
+ Frame {
+ msec: 2528
+ hash: "dbe3456536a729b268850a6ee5d1fb47"
+ }
+ Frame {
+ msec: 2544
+ hash: "4c148434cf3868db5dc98f426d9fb913"
+ }
+ Frame {
+ msec: 2560
+ hash: "2eb6da3ebfd531037523347603a805e2"
+ }
+ Frame {
+ msec: 2576
+ hash: "fefbb2f4671f8a36f9d2207ced8c0bfb"
+ }
+ Frame {
+ msec: 2592
+ hash: "1ab596339afc1f96136ee69c4b7688e1"
+ }
+ Frame {
+ msec: 2608
+ hash: "e07f59d729cb2790296e8c7cd3d0d3c9"
+ }
+ Frame {
+ msec: 2624
+ hash: "a7dccada1080487cab2d0a916676c5cb"
+ }
+ Frame {
+ msec: 2640
+ hash: "ac5939eb4379394fab829b307cbfe7ec"
+ }
+ Frame {
+ msec: 2656
+ hash: "9329d353c678d2bc61d08f63029d1b9b"
+ }
+ Frame {
+ msec: 2672
+ hash: "41263f56af7875028bb0c1e7eccf6f5d"
+ }
+ Frame {
+ msec: 2688
+ hash: "e2eb18af82c85ea78ba438163e922df3"
+ }
+ Frame {
+ msec: 2704
+ hash: "91b2695e4915238ae8610a64e279b0f4"
+ }
+ Frame {
+ msec: 2720
+ hash: "a97d90765f87b998eae6e9f603c61bff"
+ }
+ Frame {
+ msec: 2736
+ hash: "48969edab07b942480d93ac2d383ca24"
+ }
+ Frame {
+ msec: 2752
+ hash: "ecfd9d6d5873001f0c67806544a14983"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2768
+ hash: "01e937e1fcc0331b2541fa32c3479a24"
+ }
+ Frame {
+ msec: 2784
+ hash: "702864de569e6a5648ee174d5ef891f8"
+ }
+ Frame {
+ msec: 2800
+ hash: "0f500339c81ca3621d13910017b84b7b"
+ }
+ Frame {
+ msec: 2816
+ hash: "76fb2e1ad33affe33c0887f04caa7396"
+ }
+ Frame {
+ msec: 2832
+ hash: "9dc01a69f2a6892d3c4203674c8bef72"
+ }
+ Frame {
+ msec: 2848
+ hash: "d94054222fd37a350bd8abd592a332e3"
+ }
+ Frame {
+ msec: 2864
+ hash: "46fed264c233490b477e3a7c22183e18"
+ }
+ Frame {
+ msec: 2880
+ image: "cursorDelegate.2.png"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2896
+ hash: "e87f18da2fa5c91c9b2b5dea50f9c1e2"
+ }
+ Frame {
+ msec: 2912
+ hash: "4f6dbc7b249c37390518cc263832b587"
+ }
+ Frame {
+ msec: 2928
+ hash: "df09fa2fd138d1b480eec82db3872d6f"
+ }
+ Frame {
+ msec: 2944
+ hash: "b74cb1bfbb979a5e91853d9145d277d8"
+ }
+ Frame {
+ msec: 2960
+ hash: "35425ae3ccf3c8dcc1483479c57a3287"
+ }
+ Frame {
+ msec: 2976
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 2992
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3008
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3024
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3040
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3056
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 3072
+ hash: "35425ae3ccf3c8dcc1483479c57a3287"
+ }
+ Frame {
+ msec: 3088
+ hash: "b74cb1bfbb979a5e91853d9145d277d8"
+ }
+ Frame {
+ msec: 3104
+ hash: "df09fa2fd138d1b480eec82db3872d6f"
+ }
+ Frame {
+ msec: 3120
+ hash: "4f6dbc7b249c37390518cc263832b587"
+ }
+ Frame {
+ msec: 3136
+ hash: "e87f18da2fa5c91c9b2b5dea50f9c1e2"
+ }
+ Frame {
+ msec: 3152
+ hash: "34bc703c915b49b0450ece1d18306df8"
+ }
+ Frame {
+ msec: 3168
+ hash: "46fed264c233490b477e3a7c22183e18"
+ }
+ Frame {
+ msec: 3184
+ hash: "d94054222fd37a350bd8abd592a332e3"
+ }
+ Frame {
+ msec: 3200
+ hash: "9dc01a69f2a6892d3c4203674c8bef72"
+ }
+ Frame {
+ msec: 3216
+ hash: "76fb2e1ad33affe33c0887f04caa7396"
+ }
+ Frame {
+ msec: 3232
+ hash: "0f500339c81ca3621d13910017b84b7b"
+ }
+ Frame {
+ msec: 3248
+ hash: "702864de569e6a5648ee174d5ef891f8"
+ }
+ Frame {
+ msec: 3264
+ hash: "01e937e1fcc0331b2541fa32c3479a24"
+ }
+ Frame {
+ msec: 3280
+ hash: "ee661e6cc1f86e755ff399adb6b11fd1"
+ }
+ Frame {
+ msec: 3296
+ hash: "ea2d610e9b41e72b2984a51f0d3f7587"
+ }
+ Frame {
+ msec: 3312
+ hash: "4a646d76b706698a02cead560b1f8d57"
+ }
+ Frame {
+ msec: 3328
+ hash: "48ec87bfc25471f6fa2d43f9db80b693"
+ }
+ Frame {
+ msec: 3344
+ hash: "827fdd6a3d1006f4a9dd2faf208ea436"
+ }
+ Frame {
+ msec: 3360
+ hash: "788d8962f311adf57a3acc876b0e8804"
+ }
+ Frame {
+ msec: 3376
+ hash: "5d112a3675ea4c010e7bc60e036d0262"
+ }
+ Frame {
+ msec: 3392
+ hash: "a2ea272b45d8de225826d9381015ff2e"
+ }
+ Frame {
+ msec: 3408
+ hash: "e4d7a59716cd704fe1cfa8ba91454e93"
+ }
+ Frame {
+ msec: 3424
+ hash: "4e875ba8703b690a17e445f2b3810435"
+ }
+ Frame {
+ msec: 3440
+ hash: "4fbbb8447d80012bc6b5c24ddbfe498e"
+ }
+ Frame {
+ msec: 3456
+ hash: "d74f8e44d47710714d4197809fffb622"
+ }
+ Frame {
+ msec: 3472
+ hash: "d23bdd94019477d8378cde580d8765ad"
+ }
+ Frame {
+ msec: 3488
+ hash: "6032aada2c48092000ecb93e52656414"
+ }
+ Frame {
+ msec: 3504
+ hash: "438be260f19d04c9f98ed7dce1c7db40"
+ }
+ Frame {
+ msec: 3520
+ hash: "3af60972e7d5d4320a549e5df52a1228"
+ }
+ Frame {
+ msec: 3536
+ hash: "bf8459b99ca0bf568c58a3bb2a2fcc1f"
+ }
+ Frame {
+ msec: 3552
+ hash: "c0dc1cf5ba7014e069c4d4bd7ac0f89d"
+ }
+ Frame {
+ msec: 3568
+ hash: "f2ddf9d4fd3a2a2d354172714ce94d99"
+ }
+ Frame {
+ msec: 3584
+ hash: "bdfb42dc3879099e402784238c2cdddb"
+ }
+ Frame {
+ msec: 3600
+ hash: "5e483b0fd4808f2fb31aea90ccf86d3e"
+ }
+ Frame {
+ msec: 3616
+ hash: "8159bda651d95a320ac09aa6feb377a1"
+ }
+ Frame {
+ msec: 3632
+ hash: "ceda37af96bd02baae218d3bfaed93f7"
+ }
+ Frame {
+ msec: 3648
+ hash: "4b81757a105aa7c5ac6148455eea66c3"
+ }
+ Frame {
+ msec: 3664
+ hash: "ff7e2cdd006f9b76ab8c0416d81f0cb1"
+ }
+ Frame {
+ msec: 3680
+ hash: "9b174cd9a87ff193ce646408946b310c"
+ }
+ Frame {
+ msec: 3696
+ hash: "89fa590b47ee77021dedf7938439ce69"
+ }
+ Frame {
+ msec: 3712
+ hash: "6e5680803184dfc76cbf1c2de804d6cc"
+ }
+ Frame {
+ msec: 3728
+ hash: "c6de6b9203673c77427ab84ce86daaf5"
+ }
+ Frame {
+ msec: 3744
+ hash: "198f8e912c19debd51f837627d1171e9"
+ }
+ Frame {
+ msec: 3760
+ hash: "3b380dcb6815698241f3dcccb52785c2"
+ }
+ Frame {
+ msec: 3776
+ hash: "254942e12b8a31420d2243b7e2529ae8"
+ }
+ Frame {
+ msec: 3792
+ hash: "ebf121910a5318c284f8e964d63aed40"
+ }
+ Frame {
+ msec: 3808
+ hash: "0fcf416a80d22f077fcf4d23bddeb6c6"
+ }
+ Frame {
+ msec: 3824
+ hash: "4a6596da390380dbafc1cdaceca1101e"
+ }
+ Frame {
+ msec: 3840
+ image: "cursorDelegate.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "c2be53ae5e2d5d3081df9af31426ec84"
+ }
+ Frame {
+ msec: 3872
+ hash: "52350ac5d10f8fe7571d12193b861d3f"
+ }
+ Frame {
+ msec: 3888
+ hash: "f286a35d7f4a022315f69a5db72da388"
+ }
+ Frame {
+ msec: 3904
+ hash: "aa329519eba4dad9589bff095528c535"
+ }
+ Frame {
+ msec: 3920
+ hash: "0beae60853afaaa0e7f7540fb50bcddf"
+ }
+ Frame {
+ msec: 3936
+ hash: "dc098a8b4d2f117a09cf1f2ced201a60"
+ }
+ Frame {
+ msec: 3952
+ hash: "3655b992097b433071ec9dd69e086c70"
+ }
+ Frame {
+ msec: 3968
+ hash: "82cb92d7940d13deee97e4ccda9210fb"
+ }
+ Frame {
+ msec: 3984
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4000
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4016
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4032
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4048
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4064
+ hash: "82cb92d7940d13deee97e4ccda9210fb"
+ }
+ Key {
+ type: 6
+ key: 16777232
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4080
+ hash: "3655b992097b433071ec9dd69e086c70"
+ }
+ Frame {
+ msec: 4096
+ hash: "dc098a8b4d2f117a09cf1f2ced201a60"
+ }
+ Frame {
+ msec: 4112
+ hash: "0beae60853afaaa0e7f7540fb50bcddf"
+ }
+ Frame {
+ msec: 4128
+ hash: "aa329519eba4dad9589bff095528c535"
+ }
+ Key {
+ type: 7
+ key: 16777232
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4144
+ hash: "f286a35d7f4a022315f69a5db72da388"
+ }
+ Frame {
+ msec: 4160
+ hash: "52350ac5d10f8fe7571d12193b861d3f"
+ }
+ Frame {
+ msec: 4176
+ hash: "c2be53ae5e2d5d3081df9af31426ec84"
+ }
+ Frame {
+ msec: 4192
+ hash: "367391b2a124e2c818510567d0884d18"
+ }
+ Frame {
+ msec: 4208
+ hash: "4a6596da390380dbafc1cdaceca1101e"
+ }
+ Frame {
+ msec: 4224
+ hash: "0fcf416a80d22f077fcf4d23bddeb6c6"
+ }
+ Frame {
+ msec: 4240
+ hash: "ebf121910a5318c284f8e964d63aed40"
+ }
+ Frame {
+ msec: 4256
+ hash: "254942e12b8a31420d2243b7e2529ae8"
+ }
+ Frame {
+ msec: 4272
+ hash: "3b380dcb6815698241f3dcccb52785c2"
+ }
+ Frame {
+ msec: 4288
+ hash: "198f8e912c19debd51f837627d1171e9"
+ }
+ Frame {
+ msec: 4304
+ hash: "c6de6b9203673c77427ab84ce86daaf5"
+ }
+ Frame {
+ msec: 4320
+ hash: "6e5680803184dfc76cbf1c2de804d6cc"
+ }
+ Frame {
+ msec: 4336
+ hash: "89fa590b47ee77021dedf7938439ce69"
+ }
+ Frame {
+ msec: 4352
+ hash: "9b174cd9a87ff193ce646408946b310c"
+ }
+ Frame {
+ msec: 4368
+ hash: "ff7e2cdd006f9b76ab8c0416d81f0cb1"
+ }
+ Frame {
+ msec: 4384
+ hash: "4b81757a105aa7c5ac6148455eea66c3"
+ }
+ Frame {
+ msec: 4400
+ hash: "ceda37af96bd02baae218d3bfaed93f7"
+ }
+ Frame {
+ msec: 4416
+ hash: "8159bda651d95a320ac09aa6feb377a1"
+ }
+ Frame {
+ msec: 4432
+ hash: "5e483b0fd4808f2fb31aea90ccf86d3e"
+ }
+ Frame {
+ msec: 4448
+ hash: "bdfb42dc3879099e402784238c2cdddb"
+ }
+ Frame {
+ msec: 4464
+ hash: "f2ddf9d4fd3a2a2d354172714ce94d99"
+ }
+ Frame {
+ msec: 4480
+ hash: "c0dc1cf5ba7014e069c4d4bd7ac0f89d"
+ }
+ Frame {
+ msec: 4496
+ hash: "bf8459b99ca0bf568c58a3bb2a2fcc1f"
+ }
+ Frame {
+ msec: 4512
+ hash: "3af60972e7d5d4320a549e5df52a1228"
+ }
+ Frame {
+ msec: 4528
+ hash: "438be260f19d04c9f98ed7dce1c7db40"
+ }
+ Frame {
+ msec: 4544
+ hash: "6032aada2c48092000ecb93e52656414"
+ }
+ Frame {
+ msec: 4560
+ hash: "d23bdd94019477d8378cde580d8765ad"
+ }
+ Frame {
+ msec: 4576
+ hash: "d74f8e44d47710714d4197809fffb622"
+ }
+ Key {
+ type: 6
+ key: 16777233
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4592
+ hash: "4fbbb8447d80012bc6b5c24ddbfe498e"
+ }
+ Frame {
+ msec: 4608
+ hash: "4e875ba8703b690a17e445f2b3810435"
+ }
+ Frame {
+ msec: 4624
+ hash: "e4d7a59716cd704fe1cfa8ba91454e93"
+ }
+ Key {
+ type: 7
+ key: 16777233
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4640
+ hash: "a2ea272b45d8de225826d9381015ff2e"
+ }
+ Frame {
+ msec: 4656
+ hash: "5d112a3675ea4c010e7bc60e036d0262"
+ }
+ Frame {
+ msec: 4672
+ hash: "788d8962f311adf57a3acc876b0e8804"
+ }
+ Frame {
+ msec: 4688
+ hash: "827fdd6a3d1006f4a9dd2faf208ea436"
+ }
+ Frame {
+ msec: 4704
+ hash: "48ec87bfc25471f6fa2d43f9db80b693"
+ }
+ Frame {
+ msec: 4720
+ hash: "4a646d76b706698a02cead560b1f8d57"
+ }
+ Frame {
+ msec: 4736
+ hash: "ea2d610e9b41e72b2984a51f0d3f7587"
+ }
+ Frame {
+ msec: 4752
+ hash: "ee661e6cc1f86e755ff399adb6b11fd1"
+ }
+ Frame {
+ msec: 4768
+ hash: "01e937e1fcc0331b2541fa32c3479a24"
+ }
+ Frame {
+ msec: 4784
+ hash: "702864de569e6a5648ee174d5ef891f8"
+ }
+ Frame {
+ msec: 4800
+ image: "cursorDelegate.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "76fb2e1ad33affe33c0887f04caa7396"
+ }
+ Frame {
+ msec: 4832
+ hash: "9dc01a69f2a6892d3c4203674c8bef72"
+ }
+ Frame {
+ msec: 4848
+ hash: "d94054222fd37a350bd8abd592a332e3"
+ }
+ Frame {
+ msec: 4864
+ hash: "46fed264c233490b477e3a7c22183e18"
+ }
+ Frame {
+ msec: 4880
+ hash: "34bc703c915b49b0450ece1d18306df8"
+ }
+ Frame {
+ msec: 4896
+ hash: "e87f18da2fa5c91c9b2b5dea50f9c1e2"
+ }
+ Frame {
+ msec: 4912
+ hash: "4f6dbc7b249c37390518cc263832b587"
+ }
+ Frame {
+ msec: 4928
+ hash: "df09fa2fd138d1b480eec82db3872d6f"
+ }
+ Frame {
+ msec: 4944
+ hash: "b74cb1bfbb979a5e91853d9145d277d8"
+ }
+ Frame {
+ msec: 4960
+ hash: "35425ae3ccf3c8dcc1483479c57a3287"
+ }
+ Frame {
+ msec: 4976
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 4992
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5008
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5024
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5040
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5056
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 5072
+ hash: "35425ae3ccf3c8dcc1483479c57a3287"
+ }
+ Frame {
+ msec: 5088
+ hash: "b74cb1bfbb979a5e91853d9145d277d8"
+ }
+ Frame {
+ msec: 5104
+ hash: "df09fa2fd138d1b480eec82db3872d6f"
+ }
+ Frame {
+ msec: 5120
+ hash: "4f6dbc7b249c37390518cc263832b587"
+ }
+ Frame {
+ msec: 5136
+ hash: "e87f18da2fa5c91c9b2b5dea50f9c1e2"
+ }
+ Frame {
+ msec: 5152
+ hash: "34bc703c915b49b0450ece1d18306df8"
+ }
+ Frame {
+ msec: 5168
+ hash: "46fed264c233490b477e3a7c22183e18"
+ }
+ Frame {
+ msec: 5184
+ hash: "d94054222fd37a350bd8abd592a332e3"
+ }
+ Frame {
+ msec: 5200
+ hash: "9dc01a69f2a6892d3c4203674c8bef72"
+ }
+ Frame {
+ msec: 5216
+ hash: "76fb2e1ad33affe33c0887f04caa7396"
+ }
+ Frame {
+ msec: 5232
+ hash: "0f500339c81ca3621d13910017b84b7b"
+ }
+ Frame {
+ msec: 5248
+ hash: "702864de569e6a5648ee174d5ef891f8"
+ }
+ Frame {
+ msec: 5264
+ hash: "01e937e1fcc0331b2541fa32c3479a24"
+ }
+ Frame {
+ msec: 5280
+ hash: "ee661e6cc1f86e755ff399adb6b11fd1"
+ }
+ Frame {
+ msec: 5296
+ hash: "ea2d610e9b41e72b2984a51f0d3f7587"
+ }
+ Frame {
+ msec: 5312
+ hash: "4a646d76b706698a02cead560b1f8d57"
+ }
+ Frame {
+ msec: 5328
+ hash: "48ec87bfc25471f6fa2d43f9db80b693"
+ }
+ Frame {
+ msec: 5344
+ hash: "827fdd6a3d1006f4a9dd2faf208ea436"
+ }
+ Frame {
+ msec: 5360
+ hash: "788d8962f311adf57a3acc876b0e8804"
+ }
+ Frame {
+ msec: 5376
+ hash: "5d112a3675ea4c010e7bc60e036d0262"
+ }
+ Frame {
+ msec: 5392
+ hash: "a2ea272b45d8de225826d9381015ff2e"
+ }
+ Frame {
+ msec: 5408
+ hash: "e4d7a59716cd704fe1cfa8ba91454e93"
+ }
+ Frame {
+ msec: 5424
+ hash: "4e875ba8703b690a17e445f2b3810435"
+ }
+ Frame {
+ msec: 5440
+ hash: "4fbbb8447d80012bc6b5c24ddbfe498e"
+ }
+ Frame {
+ msec: 5456
+ hash: "d74f8e44d47710714d4197809fffb622"
+ }
+ Frame {
+ msec: 5472
+ hash: "d23bdd94019477d8378cde580d8765ad"
+ }
+ Frame {
+ msec: 5488
+ hash: "6032aada2c48092000ecb93e52656414"
+ }
+ Frame {
+ msec: 5504
+ hash: "438be260f19d04c9f98ed7dce1c7db40"
+ }
+ Frame {
+ msec: 5520
+ hash: "3af60972e7d5d4320a549e5df52a1228"
+ }
+ Frame {
+ msec: 5536
+ hash: "bf8459b99ca0bf568c58a3bb2a2fcc1f"
+ }
+ Frame {
+ msec: 5552
+ hash: "c0dc1cf5ba7014e069c4d4bd7ac0f89d"
+ }
+ Frame {
+ msec: 5568
+ hash: "f2ddf9d4fd3a2a2d354172714ce94d99"
+ }
+ Frame {
+ msec: 5584
+ hash: "bdfb42dc3879099e402784238c2cdddb"
+ }
+ Frame {
+ msec: 5600
+ hash: "5e483b0fd4808f2fb31aea90ccf86d3e"
+ }
+ Frame {
+ msec: 5616
+ hash: "8159bda651d95a320ac09aa6feb377a1"
+ }
+ Frame {
+ msec: 5632
+ hash: "ceda37af96bd02baae218d3bfaed93f7"
+ }
+ Frame {
+ msec: 5648
+ hash: "4b81757a105aa7c5ac6148455eea66c3"
+ }
+ Frame {
+ msec: 5664
+ hash: "ff7e2cdd006f9b76ab8c0416d81f0cb1"
+ }
+ Frame {
+ msec: 5680
+ hash: "9b174cd9a87ff193ce646408946b310c"
+ }
+ Frame {
+ msec: 5696
+ hash: "89fa590b47ee77021dedf7938439ce69"
+ }
+ Frame {
+ msec: 5712
+ hash: "6e5680803184dfc76cbf1c2de804d6cc"
+ }
+ Frame {
+ msec: 5728
+ hash: "c6de6b9203673c77427ab84ce86daaf5"
+ }
+ Frame {
+ msec: 5744
+ hash: "198f8e912c19debd51f837627d1171e9"
+ }
+ Frame {
+ msec: 5760
+ image: "cursorDelegate.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "254942e12b8a31420d2243b7e2529ae8"
+ }
+ Frame {
+ msec: 5792
+ hash: "ebf121910a5318c284f8e964d63aed40"
+ }
+ Frame {
+ msec: 5808
+ hash: "0fcf416a80d22f077fcf4d23bddeb6c6"
+ }
+ Frame {
+ msec: 5824
+ hash: "4a6596da390380dbafc1cdaceca1101e"
+ }
+ Frame {
+ msec: 5840
+ hash: "367391b2a124e2c818510567d0884d18"
+ }
+ Frame {
+ msec: 5856
+ hash: "c2be53ae5e2d5d3081df9af31426ec84"
+ }
+ Frame {
+ msec: 5872
+ hash: "52350ac5d10f8fe7571d12193b861d3f"
+ }
+ Frame {
+ msec: 5888
+ hash: "f286a35d7f4a022315f69a5db72da388"
+ }
+ Frame {
+ msec: 5904
+ hash: "aa329519eba4dad9589bff095528c535"
+ }
+ Frame {
+ msec: 5920
+ hash: "0beae60853afaaa0e7f7540fb50bcddf"
+ }
+ Frame {
+ msec: 5936
+ hash: "dc098a8b4d2f117a09cf1f2ced201a60"
+ }
+ Frame {
+ msec: 5952
+ hash: "3655b992097b433071ec9dd69e086c70"
+ }
+ Frame {
+ msec: 5968
+ hash: "82cb92d7940d13deee97e4ccda9210fb"
+ }
+ Frame {
+ msec: 5984
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6000
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6016
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6032
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6048
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 6064
+ hash: "82cb92d7940d13deee97e4ccda9210fb"
+ }
+ Frame {
+ msec: 6080
+ hash: "3655b992097b433071ec9dd69e086c70"
+ }
+ Frame {
+ msec: 6096
+ hash: "dc098a8b4d2f117a09cf1f2ced201a60"
+ }
+ Frame {
+ msec: 6112
+ hash: "0beae60853afaaa0e7f7540fb50bcddf"
+ }
+ Frame {
+ msec: 6128
+ hash: "aa329519eba4dad9589bff095528c535"
+ }
+ Frame {
+ msec: 6144
+ hash: "f286a35d7f4a022315f69a5db72da388"
+ }
+ Frame {
+ msec: 6160
+ hash: "52350ac5d10f8fe7571d12193b861d3f"
+ }
+ Frame {
+ msec: 6176
+ hash: "c2be53ae5e2d5d3081df9af31426ec84"
+ }
+ Frame {
+ msec: 6192
+ hash: "367391b2a124e2c818510567d0884d18"
+ }
+ Frame {
+ msec: 6208
+ hash: "4a6596da390380dbafc1cdaceca1101e"
+ }
+ Frame {
+ msec: 6224
+ hash: "0fcf416a80d22f077fcf4d23bddeb6c6"
+ }
+ Frame {
+ msec: 6240
+ hash: "ebf121910a5318c284f8e964d63aed40"
+ }
+ Frame {
+ msec: 6256
+ hash: "254942e12b8a31420d2243b7e2529ae8"
+ }
+ Frame {
+ msec: 6272
+ hash: "3b380dcb6815698241f3dcccb52785c2"
+ }
+ Frame {
+ msec: 6288
+ hash: "198f8e912c19debd51f837627d1171e9"
+ }
+ Frame {
+ msec: 6304
+ hash: "c6de6b9203673c77427ab84ce86daaf5"
+ }
+ Frame {
+ msec: 6320
+ hash: "6e5680803184dfc76cbf1c2de804d6cc"
+ }
+ Frame {
+ msec: 6336
+ hash: "89fa590b47ee77021dedf7938439ce69"
+ }
+ Frame {
+ msec: 6352
+ hash: "9b174cd9a87ff193ce646408946b310c"
+ }
+ Frame {
+ msec: 6368
+ hash: "ff7e2cdd006f9b76ab8c0416d81f0cb1"
+ }
+ Frame {
+ msec: 6384
+ hash: "4b81757a105aa7c5ac6148455eea66c3"
+ }
+ Frame {
+ msec: 6400
+ hash: "ceda37af96bd02baae218d3bfaed93f7"
+ }
+ Frame {
+ msec: 6416
+ hash: "8159bda651d95a320ac09aa6feb377a1"
+ }
+ Frame {
+ msec: 6432
+ hash: "5e483b0fd4808f2fb31aea90ccf86d3e"
+ }
+ Frame {
+ msec: 6448
+ hash: "bdfb42dc3879099e402784238c2cdddb"
+ }
+ Frame {
+ msec: 6464
+ hash: "f2ddf9d4fd3a2a2d354172714ce94d99"
+ }
+ Frame {
+ msec: 6480
+ hash: "c0dc1cf5ba7014e069c4d4bd7ac0f89d"
+ }
+ Frame {
+ msec: 6496
+ hash: "bf8459b99ca0bf568c58a3bb2a2fcc1f"
+ }
+ Frame {
+ msec: 6512
+ hash: "3af60972e7d5d4320a549e5df52a1228"
+ }
+ Frame {
+ msec: 6528
+ hash: "438be260f19d04c9f98ed7dce1c7db40"
+ }
+ Frame {
+ msec: 6544
+ hash: "6032aada2c48092000ecb93e52656414"
+ }
+ Frame {
+ msec: 6560
+ hash: "d23bdd94019477d8378cde580d8765ad"
+ }
+ Frame {
+ msec: 6576
+ hash: "d74f8e44d47710714d4197809fffb622"
+ }
+ Frame {
+ msec: 6592
+ hash: "4fbbb8447d80012bc6b5c24ddbfe498e"
+ }
+ Frame {
+ msec: 6608
+ hash: "4e875ba8703b690a17e445f2b3810435"
+ }
+ Frame {
+ msec: 6624
+ hash: "e4d7a59716cd704fe1cfa8ba91454e93"
+ }
+ Frame {
+ msec: 6640
+ hash: "a2ea272b45d8de225826d9381015ff2e"
+ }
+ Frame {
+ msec: 6656
+ hash: "5d112a3675ea4c010e7bc60e036d0262"
+ }
+ Frame {
+ msec: 6672
+ hash: "788d8962f311adf57a3acc876b0e8804"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 271; y: 89
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6688
+ hash: "e2eb18af82c85ea78ba438163e922df3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 271; y: 92
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6704
+ hash: "91b2695e4915238ae8610a64e279b0f4"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 271; y: 95
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 270; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6720
+ image: "cursorDelegate.6.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 269; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6736
+ hash: "ea2d610e9b41e72b2984a51f0d3f7587"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 268; y: 107
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6752
+ hash: "ee661e6cc1f86e755ff399adb6b11fd1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 266; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6768
+ hash: "01e937e1fcc0331b2541fa32c3479a24"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 266; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6784
+ hash: "702864de569e6a5648ee174d5ef891f8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 265; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6800
+ hash: "0f500339c81ca3621d13910017b84b7b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 263; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 261; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6816
+ hash: "76fb2e1ad33affe33c0887f04caa7396"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 259; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6832
+ hash: "9dc01a69f2a6892d3c4203674c8bef72"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 256; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6848
+ hash: "58693aa1a3616310b7ae1e529c4c461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 250; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 243; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6864
+ hash: "96afccd7ec697c9c10840f0effaa448d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 235; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6880
+ hash: "a00d49e2a9069b1be41f95f6ff4c0312"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 227; y: 121
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6896
+ hash: "a0ff4b93291fc12054d3989a20335a87"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 218; y: 124
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 209; y: 126
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6912
+ hash: "a86e1347bb25489547514955762d92d3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 200; y: 126
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6928
+ hash: "e5cba3c1e41e38117508c84e894beb11"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 190; y: 127
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6944
+ hash: "2560f53b8ac0a84fef895dbb8f0e393e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 181; y: 127
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 172; y: 127
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6960
+ hash: "c1b8bfc008319b793b6bd9345d34ccf5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 163; y: 127
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6976
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 154; y: 126
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6992
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 146; y: 124
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 138; y: 121
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7008
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 130; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7024
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 123; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7040
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 118; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 114; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7056
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 110; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7072
+ hash: "a9f2804ac7918971f237c4cfa6339c24"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 108; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7088
+ hash: "bc9c96855f048cb6c86d480e501322ab"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 107; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 106; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7104
+ hash: "706730602364bfb4d0193d1728a6d350"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 105; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7120
+ hash: "df80fe3e3ba35ab3fafca929b9101e13"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 104; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7136
+ hash: "aa8fa1baf61919004a4f14948826882e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 103; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 102; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7152
+ hash: "1829dfa3615d6ae430ba81a2df9a9e15"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 101; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7168
+ hash: "c4ea5c767192bbd3bfac58d07594016a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 100; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7184
+ hash: "319aede65b3473f28a4ca62a524e4a76"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 100; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 100; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7200
+ hash: "e1de653161e3348e083267c9082bc0f0"
+ }
+ Frame {
+ msec: 7216
+ hash: "de5f2d5147c600d2cb44072801c2338e"
+ }
+ Frame {
+ msec: 7232
+ hash: "6db41d704d2e28f36b206bdb317ee361"
+ }
+ Frame {
+ msec: 7248
+ hash: "a500b87efea241cdf8adf97ae86e10c3"
+ }
+ Frame {
+ msec: 7264
+ hash: "86c4eb0164a5b57eb22de4c9d58345f5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 100; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7280
+ hash: "2dbb1e3a1374b7c4aecd5a891be4573d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 101; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7296
+ hash: "07bcafdf5ca28a1416a20ed375ec3ea6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 101; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7312
+ hash: "e79def41bbf7e544d64cf19d74524d3a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 102; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 102; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7328
+ hash: "20aff98618d16c00dc9b76035e9523f5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 103; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7344
+ hash: "12b5e016bad990d1f2bf427ee8e3e6d9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 104; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 105; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7360
+ hash: "66a2ba3f9e005cd58aa50cfa0000cd15"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 107; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7376
+ hash: "a2e9e42e09dadbd0791f52bb96e0e0dc"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 110; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7392
+ hash: "ac68396566ea85a157e944e601dd8d18"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 113; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 117; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7408
+ hash: "b9bfdebec8dd1a93de7ef2768b2542ba"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 124; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7424
+ hash: "2e0a4b960803770acb34ef56ccf2be35"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 131; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7440
+ hash: "df1643f0f8b7aa2dc080958822aeb3d0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 138; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 144; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7456
+ hash: "af8ce877d953727d37fd6f7e4962f45a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 148; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 152; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7472
+ hash: "b9de04c0d7532d67404a5a773d9fab99"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 155; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7488
+ hash: "7904312a7efe0b545070c5a5615011df"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 157; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7504
+ hash: "0069a8f088c83c6716bac15567a5b38d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 159; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 162; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7520
+ hash: "8c17c78d663097e275ed2f80d6479caf"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 163; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7536
+ hash: "9e8781569e07fca7def229b76189082d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 165; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7552
+ hash: "8dba2f259740d869bfa20205d2e14433"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 166; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 168; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7568
+ hash: "4e7ad066aadbad3f71a08962ba1379c0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 171; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7584
+ hash: "a5d1554a6fb311239acc077f01adc597"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 174; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7600
+ hash: "e91b45c430f7e10c2205af620350ddb6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 177; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 183; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7616
+ hash: "6c731f4dbdec441cd36b1e9727758d73"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 188; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7632
+ hash: "31634e757bdec45feb1f021e35746d65"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 193; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7648
+ hash: "846dcb42fa85719223eb19f7af3d0630"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 198; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 206; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7664
+ hash: "a5826c5d7d1b9161cc7fb76f59021fdd"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 209; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7680
+ image: "cursorDelegate.7.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 211; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7696
+ hash: "bdfb9b949489744bc77905249eb647f9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 212; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 212; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7712
+ hash: "307d4fb47604c00e213f8d9616e0da13"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 213; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7728
+ hash: "74201a80a9032cb18b0c9e26bb67363f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 214; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7744
+ hash: "38ca918199552a525fb7f3a3773761d9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 215; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7760
+ hash: "d64c06c25229b3b64b779ca1bef7d2cb"
+ }
+ Frame {
+ msec: 7776
+ hash: "4ba0117db1ff431de20c06c79866d509"
+ }
+ Frame {
+ msec: 7792
+ hash: "ca56899ded0e5ea361aac24493793f58"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 215; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 215; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7808
+ hash: "ebce1d3b4d088278b6f36dac444c7ca6"
+ }
+ Frame {
+ msec: 7824
+ hash: "16c52065169bffc4648eda0226dba13a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 216; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7840
+ hash: "7a5a6a02f57545d9f2336ff18dd118d6"
+ }
+ Frame {
+ msec: 7856
+ hash: "328c8133c68fc2e86dc2193d1bee3259"
+ }
+ Frame {
+ msec: 7872
+ hash: "fcad1d2819e3cede6081b4dfbb5a4a65"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 216; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7888
+ hash: "85ff2968ba06443f300c9c0ef36c7054"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 216; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7904
+ hash: "871025c33fa769a790fc460a95b183ec"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 216; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7920
+ hash: "5b96f2673e0ccd2b198b9f99c65b4b12"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 217; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7936
+ hash: "5fc6f30a2dd019c4f2af056b51cfaa27"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 218; y: 115
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 218; y: 115
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7952
+ hash: "fc6bf3bcde1f89f0bff40e3e019aed33"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 219; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7968
+ hash: "703beec7b035080146131936da8c0fb3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 220; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7984
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 221; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 222; y: 113
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8000
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 222; y: 113
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8016
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 8032
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 8048
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 222; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8064
+ hash: "703beec7b035080146131936da8c0fb3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 222; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8080
+ hash: "fc6bf3bcde1f89f0bff40e3e019aed33"
+ }
+ Frame {
+ msec: 8096
+ hash: "5fc6f30a2dd019c4f2af056b51cfaa27"
+ }
+ Frame {
+ msec: 8112
+ hash: "5b96f2673e0ccd2b198b9f99c65b4b12"
+ }
+ Frame {
+ msec: 8128
+ hash: "871025c33fa769a790fc460a95b183ec"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 222; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8144
+ hash: "85ff2968ba06443f300c9c0ef36c7054"
+ }
+ Frame {
+ msec: 8160
+ hash: "fcad1d2819e3cede6081b4dfbb5a4a65"
+ }
+ Frame {
+ msec: 8176
+ hash: "328c8133c68fc2e86dc2193d1bee3259"
+ }
+ Frame {
+ msec: 8192
+ hash: "7a5a6a02f57545d9f2336ff18dd118d6"
+ }
+ Frame {
+ msec: 8208
+ hash: "16c52065169bffc4648eda0226dba13a"
+ }
+ Frame {
+ msec: 8224
+ hash: "ebce1d3b4d088278b6f36dac444c7ca6"
+ }
+ Frame {
+ msec: 8240
+ hash: "ca56899ded0e5ea361aac24493793f58"
+ }
+ Frame {
+ msec: 8256
+ hash: "4ba0117db1ff431de20c06c79866d509"
+ }
+ Frame {
+ msec: 8272
+ hash: "d64c06c25229b3b64b779ca1bef7d2cb"
+ }
+ Frame {
+ msec: 8288
+ hash: "38ca918199552a525fb7f3a3773761d9"
+ }
+ Frame {
+ msec: 8304
+ hash: "74201a80a9032cb18b0c9e26bb67363f"
+ }
+ Frame {
+ msec: 8320
+ hash: "307d4fb47604c00e213f8d9616e0da13"
+ }
+ Frame {
+ msec: 8336
+ hash: "9ad660f83ed62b964b676106f8aa7114"
+ }
+ Frame {
+ msec: 8352
+ hash: "457fc0df515f9813e98a6a86f4ab5231"
+ }
+ Frame {
+ msec: 8368
+ hash: "372cbc6ad4edc85319743627ced05671"
+ }
+ Frame {
+ msec: 8384
+ hash: "4e08beac6ee40acaa4de6963522d63d0"
+ }
+ Frame {
+ msec: 8400
+ hash: "5e790c2199a5e95fc17f8c0b49809cc9"
+ }
+ Frame {
+ msec: 8416
+ hash: "e36310e1866d4a95bac60084fa4aa2c1"
+ }
+ Frame {
+ msec: 8432
+ hash: "b7182b171316cc2db4de2b23de93dc41"
+ }
+ Frame {
+ msec: 8448
+ hash: "6aaf7f8e6e238973dfd4030eb146198b"
+ }
+ Frame {
+ msec: 8464
+ hash: "901ead3167e602dfe043c56c6c805d54"
+ }
+ Frame {
+ msec: 8480
+ hash: "5a97542680475b1382ad5b7c3f6fa96a"
+ }
+ Frame {
+ msec: 8496
+ hash: "fb34d93127f3c3ad0c7bacce0200753b"
+ }
+ Frame {
+ msec: 8512
+ hash: "993c97dc85e83e241538356e317b7767"
+ }
+ Frame {
+ msec: 8528
+ hash: "fb11a9edb3a613be5cb6949c76c5c715"
+ }
+ Frame {
+ msec: 8544
+ hash: "e68b7461f94adeaf330f67d36d0d3b3e"
+ }
+ Frame {
+ msec: 8560
+ hash: "7ed043cc027fdb467bd16847187cd48d"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 277; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8576
+ hash: "fefbb2f4671f8a36f9d2207ced8c0bfb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 277; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8592
+ hash: "1ab596339afc1f96136ee69c4b7688e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 276; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8608
+ hash: "e07f59d729cb2790296e8c7cd3d0d3c9"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 276; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8624
+ hash: "a7dccada1080487cab2d0a916676c5cb"
+ }
+ Frame {
+ msec: 8640
+ image: "cursorDelegate.8.png"
+ }
+ Frame {
+ msec: 8656
+ hash: "9329d353c678d2bc61d08f63029d1b9b"
+ }
+ Frame {
+ msec: 8672
+ hash: "41263f56af7875028bb0c1e7eccf6f5d"
+ }
+ Frame {
+ msec: 8688
+ hash: "e2eb18af82c85ea78ba438163e922df3"
+ }
+ Frame {
+ msec: 8704
+ hash: "91b2695e4915238ae8610a64e279b0f4"
+ }
+ Frame {
+ msec: 8720
+ hash: "a97d90765f87b998eae6e9f603c61bff"
+ }
+ Frame {
+ msec: 8736
+ hash: "48969edab07b942480d93ac2d383ca24"
+ }
+ Frame {
+ msec: 8752
+ hash: "ecfd9d6d5873001f0c67806544a14983"
+ }
+ Frame {
+ msec: 8768
+ hash: "a3a3bc1e2523d3e7f961893bcd1dd3a8"
+ }
+ Frame {
+ msec: 8784
+ hash: "e337735ad0b42e60c54f16f3da7af3cf"
+ }
+ Frame {
+ msec: 8800
+ hash: "c39db081130d269f25dbcb1a19afb8d0"
+ }
+ Frame {
+ msec: 8816
+ hash: "c464d501e3935ec0f53eb780bd1a8289"
+ }
+ Frame {
+ msec: 8832
+ hash: "2be4fd986de19f6f76dfddec75b26804"
+ }
+ Frame {
+ msec: 8848
+ hash: "a1280e9fb86ca96b2340bb70aa774806"
+ }
+ Frame {
+ msec: 8864
+ hash: "cce4c17a387893478bcfa547f7561aba"
+ }
+ Frame {
+ msec: 8880
+ hash: "7094db3e04895d8d7f5f58caf0658592"
+ }
+ Frame {
+ msec: 8896
+ hash: "edb1f644757f9ba0a39549d77141c280"
+ }
+ Frame {
+ msec: 8912
+ hash: "cd381e847ecfce2db111bdf94a437cbc"
+ }
+ Frame {
+ msec: 8928
+ hash: "6a089603b641b683a744b88f2ebe82d1"
+ }
+ Frame {
+ msec: 8944
+ hash: "8c0e47f7c87a1a11cd733a453b31c780"
+ }
+ Frame {
+ msec: 8960
+ hash: "b53c892d62e787eb2565820d79739de6"
+ }
+ Frame {
+ msec: 8976
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 8992
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 9008
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 9024
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 9040
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 9056
+ hash: "e165a0b90fdc1eef2c8244ad8545bd6f"
+ }
+ Frame {
+ msec: 9072
+ hash: "b53c892d62e787eb2565820d79739de6"
+ }
+ Frame {
+ msec: 9088
+ hash: "8c0e47f7c87a1a11cd733a453b31c780"
+ }
+ Frame {
+ msec: 9104
+ hash: "6a089603b641b683a744b88f2ebe82d1"
+ }
+ Frame {
+ msec: 9120
+ hash: "cd381e847ecfce2db111bdf94a437cbc"
+ }
+ Frame {
+ msec: 9136
+ hash: "edb1f644757f9ba0a39549d77141c280"
+ }
+ Frame {
+ msec: 9152
+ hash: "7094db3e04895d8d7f5f58caf0658592"
+ }
+ Frame {
+ msec: 9168
+ hash: "cce4c17a387893478bcfa547f7561aba"
+ }
+ Frame {
+ msec: 9184
+ hash: "a1280e9fb86ca96b2340bb70aa774806"
+ }
+ Frame {
+ msec: 9200
+ hash: "2be4fd986de19f6f76dfddec75b26804"
+ }
+ Frame {
+ msec: 9216
+ hash: "c464d501e3935ec0f53eb780bd1a8289"
+ }
+ Frame {
+ msec: 9232
+ hash: "c39db081130d269f25dbcb1a19afb8d0"
+ }
+ Frame {
+ msec: 9248
+ hash: "e337735ad0b42e60c54f16f3da7af3cf"
+ }
+ Frame {
+ msec: 9264
+ hash: "a3a3bc1e2523d3e7f961893bcd1dd3a8"
+ }
+ Frame {
+ msec: 9280
+ hash: "ecfd9d6d5873001f0c67806544a14983"
+ }
+ Frame {
+ msec: 9296
+ hash: "48969edab07b942480d93ac2d383ca24"
+ }
+ Frame {
+ msec: 9312
+ hash: "a97d90765f87b998eae6e9f603c61bff"
+ }
+ Frame {
+ msec: 9328
+ hash: "91b2695e4915238ae8610a64e279b0f4"
+ }
+ Frame {
+ msec: 9344
+ hash: "e2eb18af82c85ea78ba438163e922df3"
+ }
+ Frame {
+ msec: 9360
+ hash: "41263f56af7875028bb0c1e7eccf6f5d"
+ }
+ Frame {
+ msec: 9376
+ hash: "9329d353c678d2bc61d08f63029d1b9b"
+ }
+ Frame {
+ msec: 9392
+ hash: "ac5939eb4379394fab829b307cbfe7ec"
+ }
+ Frame {
+ msec: 9408
+ hash: "a7dccada1080487cab2d0a916676c5cb"
+ }
+ Frame {
+ msec: 9424
+ hash: "e07f59d729cb2790296e8c7cd3d0d3c9"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.0.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.0.png
new file mode 100644
index 0000000..2b45a06
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.1.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.1.png
new file mode 100644
index 0000000..1f5bae0
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.2.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.2.png
new file mode 100644
index 0000000..cb2b5a4
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.3.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.3.png
new file mode 100644
index 0000000..aa24805
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.4.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.4.png
new file mode 100644
index 0000000..aa24805
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.qml b/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.qml
new file mode 100644
index 0000000..dd7b291
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/echoMode.qml
@@ -0,0 +1,1043 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 32
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Key {
+ type: 6
+ key: 16777248
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 48
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 64
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 80
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 96
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 112
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 128
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 144
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 160
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 176
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 192
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 208
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 224
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 240
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 256
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 272
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 288
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 304
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 320
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 336
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 352
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Key {
+ type: 6
+ key: 74
+ modifiers: 33554432
+ text: "4a"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 368
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 384
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 400
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 416
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 432
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Key {
+ type: 7
+ key: 74
+ modifiers: 33554432
+ text: "4a"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 448
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 464
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 480
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 496
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 512
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 528
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Key {
+ type: 7
+ key: 16777248
+ modifiers: 33554432
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 544
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 560
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 576
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 592
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 608
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 624
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 640
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 656
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 672
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 688
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Key {
+ type: 6
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 704
+ hash: "fbc09d695e0b47aae6e977c13f535bfd"
+ }
+ Frame {
+ msec: 720
+ hash: "fbc09d695e0b47aae6e977c13f535bfd"
+ }
+ Frame {
+ msec: 736
+ hash: "fbc09d695e0b47aae6e977c13f535bfd"
+ }
+ Frame {
+ msec: 752
+ hash: "fbc09d695e0b47aae6e977c13f535bfd"
+ }
+ Frame {
+ msec: 768
+ hash: "fbc09d695e0b47aae6e977c13f535bfd"
+ }
+ Key {
+ type: 7
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 784
+ hash: "fbc09d695e0b47aae6e977c13f535bfd"
+ }
+ Frame {
+ msec: 800
+ hash: "fbc09d695e0b47aae6e977c13f535bfd"
+ }
+ Frame {
+ msec: 816
+ hash: "fbc09d695e0b47aae6e977c13f535bfd"
+ }
+ Frame {
+ msec: 832
+ hash: "fbc09d695e0b47aae6e977c13f535bfd"
+ }
+ Frame {
+ msec: 848
+ hash: "fbc09d695e0b47aae6e977c13f535bfd"
+ }
+ Key {
+ type: 6
+ key: 67
+ modifiers: 0
+ text: "63"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 864
+ hash: "a4b81c526a5bf8902fde9b8721980977"
+ }
+ Frame {
+ msec: 880
+ hash: "a4b81c526a5bf8902fde9b8721980977"
+ }
+ Frame {
+ msec: 896
+ hash: "a4b81c526a5bf8902fde9b8721980977"
+ }
+ Key {
+ type: 7
+ key: 67
+ modifiers: 0
+ text: "63"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 912
+ hash: "a4b81c526a5bf8902fde9b8721980977"
+ }
+ Frame {
+ msec: 928
+ hash: "a4b81c526a5bf8902fde9b8721980977"
+ }
+ Frame {
+ msec: 944
+ hash: "a4b81c526a5bf8902fde9b8721980977"
+ }
+ Frame {
+ msec: 960
+ image: "echoMode.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "a4b81c526a5bf8902fde9b8721980977"
+ }
+ Key {
+ type: 6
+ key: 75
+ modifiers: 0
+ text: "6b"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 992
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1008
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1024
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1040
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Key {
+ type: 7
+ key: 75
+ modifiers: 0
+ text: "6b"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1056
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1072
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1088
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1104
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1120
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1136
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1152
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1168
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1184
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1200
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1216
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1232
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Key {
+ type: 6
+ key: 68
+ modifiers: 0
+ text: "64"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1248
+ hash: "94defec2865529f185d02cfcbfe166cc"
+ }
+ Frame {
+ msec: 1264
+ hash: "94defec2865529f185d02cfcbfe166cc"
+ }
+ Frame {
+ msec: 1280
+ hash: "94defec2865529f185d02cfcbfe166cc"
+ }
+ Key {
+ type: 7
+ key: 68
+ modifiers: 0
+ text: "64"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1296
+ hash: "94defec2865529f185d02cfcbfe166cc"
+ }
+ Frame {
+ msec: 1312
+ hash: "94defec2865529f185d02cfcbfe166cc"
+ }
+ Frame {
+ msec: 1328
+ hash: "94defec2865529f185d02cfcbfe166cc"
+ }
+ Key {
+ type: 6
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1344
+ hash: "f625a2a82879df96141000e6931d4487"
+ }
+ Frame {
+ msec: 1360
+ hash: "f625a2a82879df96141000e6931d4487"
+ }
+ Frame {
+ msec: 1376
+ hash: "f625a2a82879df96141000e6931d4487"
+ }
+ Frame {
+ msec: 1392
+ hash: "f625a2a82879df96141000e6931d4487"
+ }
+ Frame {
+ msec: 1408
+ hash: "f625a2a82879df96141000e6931d4487"
+ }
+ Frame {
+ msec: 1424
+ hash: "f625a2a82879df96141000e6931d4487"
+ }
+ Frame {
+ msec: 1440
+ hash: "f625a2a82879df96141000e6931d4487"
+ }
+ Frame {
+ msec: 1456
+ hash: "f625a2a82879df96141000e6931d4487"
+ }
+ Frame {
+ msec: 1472
+ hash: "f625a2a82879df96141000e6931d4487"
+ }
+ Key {
+ type: 7
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1488
+ hash: "f625a2a82879df96141000e6931d4487"
+ }
+ Key {
+ type: 6
+ key: 87
+ modifiers: 0
+ text: "77"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1504
+ hash: "1cf29837a4ea63bbb06c15382680d1b6"
+ }
+ Frame {
+ msec: 1520
+ hash: "1cf29837a4ea63bbb06c15382680d1b6"
+ }
+ Frame {
+ msec: 1536
+ hash: "1cf29837a4ea63bbb06c15382680d1b6"
+ }
+ Frame {
+ msec: 1552
+ hash: "1cf29837a4ea63bbb06c15382680d1b6"
+ }
+ Key {
+ type: 7
+ key: 87
+ modifiers: 0
+ text: "77"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1568
+ hash: "1cf29837a4ea63bbb06c15382680d1b6"
+ }
+ Frame {
+ msec: 1584
+ hash: "1cf29837a4ea63bbb06c15382680d1b6"
+ }
+ Frame {
+ msec: 1600
+ hash: "1cf29837a4ea63bbb06c15382680d1b6"
+ }
+ Frame {
+ msec: 1616
+ hash: "1cf29837a4ea63bbb06c15382680d1b6"
+ }
+ Frame {
+ msec: 1632
+ hash: "1cf29837a4ea63bbb06c15382680d1b6"
+ }
+ Frame {
+ msec: 1648
+ hash: "1cf29837a4ea63bbb06c15382680d1b6"
+ }
+ Key {
+ type: 6
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1664
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Frame {
+ msec: 1680
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Frame {
+ msec: 1696
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Frame {
+ msec: 1712
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Frame {
+ msec: 1728
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Key {
+ type: 6
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1744
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Key {
+ type: 7
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1760
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Frame {
+ msec: 1776
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Frame {
+ msec: 1792
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Key {
+ type: 7
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1808
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Frame {
+ msec: 1824
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Frame {
+ msec: 1840
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Frame {
+ msec: 1856
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Key {
+ type: 6
+ key: 76
+ modifiers: 0
+ text: "6c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1872
+ hash: "cb2dc1c4fc4e213841b873561f404a4f"
+ }
+ Frame {
+ msec: 1888
+ hash: "cb2dc1c4fc4e213841b873561f404a4f"
+ }
+ Frame {
+ msec: 1904
+ hash: "cb2dc1c4fc4e213841b873561f404a4f"
+ }
+ Frame {
+ msec: 1920
+ image: "echoMode.1.png"
+ }
+ Key {
+ type: 7
+ key: 76
+ modifiers: 0
+ text: "6c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1936
+ hash: "cb2dc1c4fc4e213841b873561f404a4f"
+ }
+ Frame {
+ msec: 1952
+ hash: "cb2dc1c4fc4e213841b873561f404a4f"
+ }
+ Frame {
+ msec: 1968
+ hash: "cb2dc1c4fc4e213841b873561f404a4f"
+ }
+ Frame {
+ msec: 1984
+ hash: "cb2dc1c4fc4e213841b873561f404a4f"
+ }
+ Frame {
+ msec: 2000
+ hash: "cb2dc1c4fc4e213841b873561f404a4f"
+ }
+ Frame {
+ msec: 2016
+ hash: "cb2dc1c4fc4e213841b873561f404a4f"
+ }
+ Key {
+ type: 6
+ key: 79
+ modifiers: 0
+ text: "6f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2032
+ hash: "c2aff1ebdee69cca7dc67a102fce5e8e"
+ }
+ Frame {
+ msec: 2048
+ hash: "c2aff1ebdee69cca7dc67a102fce5e8e"
+ }
+ Key {
+ type: 7
+ key: 79
+ modifiers: 0
+ text: "6f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2064
+ hash: "c2aff1ebdee69cca7dc67a102fce5e8e"
+ }
+ Frame {
+ msec: 2080
+ hash: "c2aff1ebdee69cca7dc67a102fce5e8e"
+ }
+ Key {
+ type: 6
+ key: 86
+ modifiers: 0
+ text: "76"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2096
+ hash: "c82441813af6ff577687f29f6a09da38"
+ }
+ Frame {
+ msec: 2112
+ hash: "c82441813af6ff577687f29f6a09da38"
+ }
+ Frame {
+ msec: 2128
+ hash: "c82441813af6ff577687f29f6a09da38"
+ }
+ Frame {
+ msec: 2144
+ hash: "c82441813af6ff577687f29f6a09da38"
+ }
+ Key {
+ type: 6
+ key: 69
+ modifiers: 0
+ text: "65"
+ autorep: false
+ count: 1
+ }
+ Key {
+ type: 7
+ key: 86
+ modifiers: 0
+ text: "76"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2160
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Frame {
+ msec: 2176
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Frame {
+ msec: 2192
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Frame {
+ msec: 2208
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Key {
+ type: 6
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2224
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Key {
+ type: 7
+ key: 69
+ modifiers: 0
+ text: "65"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2240
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Frame {
+ msec: 2256
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Frame {
+ msec: 2272
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Frame {
+ msec: 2288
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Frame {
+ msec: 2304
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Key {
+ type: 7
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2320
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Frame {
+ msec: 2336
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Key {
+ type: 6
+ key: 77
+ modifiers: 0
+ text: "6d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2352
+ hash: "8f36e26d8685fe55e7a1dd294188f649"
+ }
+ Frame {
+ msec: 2368
+ hash: "8f36e26d8685fe55e7a1dd294188f649"
+ }
+ Frame {
+ msec: 2384
+ hash: "8f36e26d8685fe55e7a1dd294188f649"
+ }
+ Frame {
+ msec: 2400
+ hash: "8f36e26d8685fe55e7a1dd294188f649"
+ }
+ Frame {
+ msec: 2416
+ hash: "8f36e26d8685fe55e7a1dd294188f649"
+ }
+ Frame {
+ msec: 2432
+ hash: "8f36e26d8685fe55e7a1dd294188f649"
+ }
+ Key {
+ type: 7
+ key: 77
+ modifiers: 0
+ text: "6d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2448
+ hash: "8f36e26d8685fe55e7a1dd294188f649"
+ }
+ Frame {
+ msec: 2464
+ hash: "8f36e26d8685fe55e7a1dd294188f649"
+ }
+ Frame {
+ msec: 2480
+ hash: "8f36e26d8685fe55e7a1dd294188f649"
+ }
+ Frame {
+ msec: 2496
+ hash: "8f36e26d8685fe55e7a1dd294188f649"
+ }
+ Key {
+ type: 6
+ key: 89
+ modifiers: 0
+ text: "79"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2512
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2528
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2544
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Key {
+ type: 7
+ key: 89
+ modifiers: 0
+ text: "79"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2560
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2576
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2592
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2608
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2624
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2640
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2656
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2672
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2688
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2704
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2720
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2736
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2752
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2768
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2784
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2800
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2816
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2832
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2848
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2864
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2880
+ image: "echoMode.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2912
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2928
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2944
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2960
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2976
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2992
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 3008
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 3024
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 3040
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 3056
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/hAlign.0.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/hAlign.0.png
new file mode 100644
index 0000000..87c2e07
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/hAlign.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/hAlign.qml b/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/hAlign.qml
new file mode 100644
index 0000000..e29ac56
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data-X11/hAlign.qml
@@ -0,0 +1,107 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 32
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 48
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 64
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 80
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 96
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 112
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 128
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 144
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 160
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 176
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 192
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 208
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 224
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 240
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 256
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 272
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 288
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 304
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 320
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 336
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 352
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 368
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 384
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 400
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.0.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.0.png
new file mode 100644
index 0000000..f04f65e
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.1.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.1.png
new file mode 100644
index 0000000..46a703a
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.2.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.2.png
new file mode 100644
index 0000000..e4a3877
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.3.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.3.png
new file mode 100644
index 0000000..9ef842a
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.4.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.4.png
new file mode 100644
index 0000000..706e2b3
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.5.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.5.png
new file mode 100644
index 0000000..bcc86cc
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.6.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.6.png
new file mode 100644
index 0000000..51ddd44
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.7.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.7.png
new file mode 100644
index 0000000..0a2fdda
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.7.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.8.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.8.png
new file mode 100644
index 0000000..9c88bff
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.8.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.qml b/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.qml
new file mode 100644
index 0000000..df2dd38
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data/cursorDelegate.qml
@@ -0,0 +1,3379 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 32
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 48
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 64
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 80
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 96
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 112
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 128
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 144
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 160
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 176
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 192
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 208
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 224
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 240
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 256
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 272
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 288
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 304
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 320
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 336
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 352
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 368
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 384
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 400
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 416
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 432
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 448
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 464
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 480
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 496
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Frame {
+ msec: 512
+ hash: "cd442d6dc4d155f54ae24f03d080f50c"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 528
+ hash: "56db24ad686d34e75a2d184e5b1da2a9"
+ }
+ Frame {
+ msec: 544
+ hash: "c3487c7c7dcd392e7eacb74045dd4143"
+ }
+ Frame {
+ msec: 560
+ hash: "70aedcda6c93875d18ee111d8a19549e"
+ }
+ Frame {
+ msec: 576
+ hash: "47ad557d366536ad457f6866241dba93"
+ }
+ Frame {
+ msec: 592
+ hash: "e715c2a82745829665226df78598b819"
+ }
+ Frame {
+ msec: 608
+ hash: "2ff4bd5602c34c020162f0503d625049"
+ }
+ Frame {
+ msec: 624
+ hash: "a494b3b25a23daa858034ebccce0d1c7"
+ }
+ Frame {
+ msec: 640
+ hash: "59d2fb8e21802d256b11730b31919fb3"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 656
+ hash: "5e09b95292d6d0afe76a5015b0ccebf1"
+ }
+ Frame {
+ msec: 672
+ hash: "de3c911aec7e42557ece4bdcf02ce562"
+ }
+ Frame {
+ msec: 688
+ hash: "680f51f63c4b11a247a668eb7bbd2b62"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 704
+ hash: "9aa569f7b251371bdd1cb05c8d3aab28"
+ }
+ Frame {
+ msec: 720
+ hash: "a242c9d5ed7f9aef0a0622dcb66d0a7e"
+ }
+ Frame {
+ msec: 736
+ hash: "a0cb3f796fddf7100ca19aee3dedbea8"
+ }
+ Frame {
+ msec: 752
+ hash: "b4e273b6415e3951eab2f831100b0bb2"
+ }
+ Frame {
+ msec: 768
+ hash: "fd3fd655785c4e3c470f742451e3470f"
+ }
+ Frame {
+ msec: 784
+ hash: "7a9b2057760e48d5f9cfdc79b08866d8"
+ }
+ Frame {
+ msec: 800
+ hash: "2a55b52db02d97963d382c9862307384"
+ }
+ Frame {
+ msec: 816
+ hash: "c6c90915393fc7cb0aaa464caefbadb0"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 832
+ hash: "4f097223462c8f619188b0b0c2ecb080"
+ }
+ Frame {
+ msec: 848
+ hash: "243be452ff0798538defc6a14cb8a08b"
+ }
+ Frame {
+ msec: 864
+ hash: "e5472ed9a8a43a64a0fea12540619940"
+ }
+ Frame {
+ msec: 880
+ hash: "90b0f5f1aa7b5f066fb1266ea63254eb"
+ }
+ Frame {
+ msec: 896
+ hash: "97d5f9fe02e4bd06ec30a7805945f167"
+ }
+ Frame {
+ msec: 912
+ hash: "eb381a1e2ad945e4cfa540c137edbda7"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 928
+ hash: "75252ff61682fd32117f0759ebe4b6a1"
+ }
+ Frame {
+ msec: 944
+ hash: "d724bdacc59bce29d0a42d72479be0b6"
+ }
+ Frame {
+ msec: 960
+ image: "cursorDelegate.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 992
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 1008
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 1024
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 1040
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 1056
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Key {
+ type: 6
+ key: 16777248
+ modifiers: 33554432
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 100663296
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1072
+ hash: "d7703c18b69f485bba3abd655100b50d"
+ }
+ Frame {
+ msec: 1088
+ hash: "d724bdacc59bce29d0a42d72479be0b6"
+ }
+ Frame {
+ msec: 1104
+ hash: "75252ff61682fd32117f0759ebe4b6a1"
+ }
+ Frame {
+ msec: 1120
+ hash: "eb381a1e2ad945e4cfa540c137edbda7"
+ }
+ Frame {
+ msec: 1136
+ hash: "97d5f9fe02e4bd06ec30a7805945f167"
+ }
+ Frame {
+ msec: 1152
+ hash: "90b0f5f1aa7b5f066fb1266ea63254eb"
+ }
+ Frame {
+ msec: 1168
+ hash: "e5472ed9a8a43a64a0fea12540619940"
+ }
+ Frame {
+ msec: 1184
+ hash: "243be452ff0798538defc6a14cb8a08b"
+ }
+ Frame {
+ msec: 1200
+ hash: "4f097223462c8f619188b0b0c2ecb080"
+ }
+ Frame {
+ msec: 1216
+ hash: "e7346d8f223684143a0940def878b874"
+ }
+ Frame {
+ msec: 1232
+ hash: "512b9746ae4482557b8cef9f99905954"
+ }
+ Frame {
+ msec: 1248
+ hash: "4220dde85eb1c027366efd0798927e8d"
+ }
+ Frame {
+ msec: 1264
+ hash: "54f7f94b5cdf1becb2ee61d7f6f02c0e"
+ }
+ Frame {
+ msec: 1280
+ hash: "de09380dd57c58ae99fbdba169a19975"
+ }
+ Frame {
+ msec: 1296
+ hash: "bfc1b03df244839a012e8302dc07764f"
+ }
+ Frame {
+ msec: 1312
+ hash: "d5f220e5337837ec0d07eb118e2f948e"
+ }
+ Frame {
+ msec: 1328
+ hash: "7640c78a286b0b7bdf2ec9117ceced4a"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 100663296
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1344
+ hash: "c659fd76d632aac26d396809b57826dd"
+ }
+ Frame {
+ msec: 1360
+ hash: "b5ba335eca37416970dcab53157d7ae6"
+ }
+ Frame {
+ msec: 1376
+ hash: "df498dac81260d8867221612ff3b7619"
+ }
+ Frame {
+ msec: 1392
+ hash: "578c3a682278f4ead0ca894f029dbfb7"
+ }
+ Frame {
+ msec: 1408
+ hash: "5fe9b2365b091047df1b18bcaa5b1bb4"
+ }
+ Frame {
+ msec: 1424
+ hash: "c513b8df83f1d1cc3c05769c41741653"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 100663296
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1440
+ hash: "ee70a2002f52a3f4a9fa32db668db3d0"
+ }
+ Frame {
+ msec: 1456
+ hash: "3f299da38c2f3f9057df987d5d339e1f"
+ }
+ Frame {
+ msec: 1472
+ hash: "55f6adbd00910e5f39977162cfe8dcc5"
+ }
+ Frame {
+ msec: 1488
+ hash: "151fb386855954ae5143046cab314ddf"
+ }
+ Frame {
+ msec: 1504
+ hash: "d9ec76b2c07077b5b6d6c3777d116164"
+ }
+ Frame {
+ msec: 1520
+ hash: "ef3ba6c27d9b28de829360985505c185"
+ }
+ Frame {
+ msec: 1536
+ hash: "8eafd8f9aea08c172f40de3c4f2b3b59"
+ }
+ Frame {
+ msec: 1552
+ hash: "2329d5b8182794bb8375f0de204c9b16"
+ }
+ Frame {
+ msec: 1568
+ hash: "e6b25cf1a8c6858f6937e649b1315955"
+ }
+ Frame {
+ msec: 1584
+ hash: "3aeedff600509a138b0de31e10bbdd7b"
+ }
+ Frame {
+ msec: 1600
+ hash: "0636dee0ddc551ce8ecf3a6c6300b020"
+ }
+ Frame {
+ msec: 1616
+ hash: "77f5b0dfdf0c631cf863be60bd09db9c"
+ }
+ Frame {
+ msec: 1632
+ hash: "2e86762371ae933546e8b2154c78f74b"
+ }
+ Frame {
+ msec: 1648
+ hash: "1051ec29f94c31b257a5b1c922f8e93f"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 100663296
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1664
+ hash: "5c60da876c8cc9fa334905b5fc7c2a3d"
+ }
+ Frame {
+ msec: 1680
+ hash: "c0b0cddd62853ac3499b7ada200d206a"
+ }
+ Frame {
+ msec: 1696
+ hash: "5bd588d64917f942e0f5ea1553acbf63"
+ }
+ Frame {
+ msec: 1712
+ hash: "bc5744ef5c81b7d5b365bf977f909be5"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 100663296
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1728
+ hash: "892a1a8a5a9c198e5ae04cc19f0e1d0c"
+ }
+ Frame {
+ msec: 1744
+ hash: "708799d2d834302c659958701e217b37"
+ }
+ Frame {
+ msec: 1760
+ hash: "360d75bcc178bcfd4f93741d653fd821"
+ }
+ Frame {
+ msec: 1776
+ hash: "1cfe03528b1cd84e69efc02b9677c748"
+ }
+ Frame {
+ msec: 1792
+ hash: "6f45d7c37f1fb90138011b2af24aaf1e"
+ }
+ Frame {
+ msec: 1808
+ hash: "ba164375e7ac18cf2e1e613498158fbf"
+ }
+ Frame {
+ msec: 1824
+ hash: "14052b9da9e17a6f06fed05d4ed82b9c"
+ }
+ Frame {
+ msec: 1840
+ hash: "aac15ce22bfe38f44a46e4644913f144"
+ }
+ Frame {
+ msec: 1856
+ hash: "c63aa02ba29ea18334b188185690948d"
+ }
+ Frame {
+ msec: 1872
+ hash: "11ed187ccd4c2221f166851c08b6b467"
+ }
+ Frame {
+ msec: 1888
+ hash: "3543bd4e538981d4bb2c2313c9663a53"
+ }
+ Frame {
+ msec: 1904
+ hash: "a05fa618b094bde2b54b730f513bcabe"
+ }
+ Frame {
+ msec: 1920
+ image: "cursorDelegate.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "52fc4a32526a74f9a04d8795c7a47c6e"
+ }
+ Frame {
+ msec: 1952
+ hash: "17623e1b0ffca3b7736ce930f078dbe0"
+ }
+ Frame {
+ msec: 1968
+ hash: "75226dac5691627851d83c7370d7603c"
+ }
+ Key {
+ type: 7
+ key: 16777249
+ modifiers: 33554432
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1984
+ hash: "9e506ad52020e2913e80a13a7f3ac797"
+ }
+ Frame {
+ msec: 2000
+ hash: "9e506ad52020e2913e80a13a7f3ac797"
+ }
+ Frame {
+ msec: 2016
+ hash: "9e506ad52020e2913e80a13a7f3ac797"
+ }
+ Frame {
+ msec: 2032
+ hash: "9e506ad52020e2913e80a13a7f3ac797"
+ }
+ Frame {
+ msec: 2048
+ hash: "9e506ad52020e2913e80a13a7f3ac797"
+ }
+ Frame {
+ msec: 2064
+ hash: "75226dac5691627851d83c7370d7603c"
+ }
+ Frame {
+ msec: 2080
+ hash: "17623e1b0ffca3b7736ce930f078dbe0"
+ }
+ Frame {
+ msec: 2096
+ hash: "52fc4a32526a74f9a04d8795c7a47c6e"
+ }
+ Frame {
+ msec: 2112
+ hash: "89f2d3b4441faee557b8d5f44e1e1e18"
+ }
+ Frame {
+ msec: 2128
+ hash: "a05fa618b094bde2b54b730f513bcabe"
+ }
+ Frame {
+ msec: 2144
+ hash: "3543bd4e538981d4bb2c2313c9663a53"
+ }
+ Frame {
+ msec: 2160
+ hash: "11ed187ccd4c2221f166851c08b6b467"
+ }
+ Frame {
+ msec: 2176
+ hash: "c63aa02ba29ea18334b188185690948d"
+ }
+ Frame {
+ msec: 2192
+ hash: "aac15ce22bfe38f44a46e4644913f144"
+ }
+ Frame {
+ msec: 2208
+ hash: "14052b9da9e17a6f06fed05d4ed82b9c"
+ }
+ Frame {
+ msec: 2224
+ hash: "ba164375e7ac18cf2e1e613498158fbf"
+ }
+ Frame {
+ msec: 2240
+ hash: "6f45d7c37f1fb90138011b2af24aaf1e"
+ }
+ Frame {
+ msec: 2256
+ hash: "1cfe03528b1cd84e69efc02b9677c748"
+ }
+ Key {
+ type: 7
+ key: 16777248
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2272
+ hash: "360d75bcc178bcfd4f93741d653fd821"
+ }
+ Frame {
+ msec: 2288
+ hash: "708799d2d834302c659958701e217b37"
+ }
+ Frame {
+ msec: 2304
+ hash: "892a1a8a5a9c198e5ae04cc19f0e1d0c"
+ }
+ Frame {
+ msec: 2320
+ hash: "bc5744ef5c81b7d5b365bf977f909be5"
+ }
+ Frame {
+ msec: 2336
+ hash: "5bd588d64917f942e0f5ea1553acbf63"
+ }
+ Frame {
+ msec: 2352
+ hash: "c0b0cddd62853ac3499b7ada200d206a"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2368
+ hash: "5c60da876c8cc9fa334905b5fc7c2a3d"
+ }
+ Frame {
+ msec: 2384
+ hash: "136a103a893991b97ec09f373c68c5b9"
+ }
+ Frame {
+ msec: 2400
+ hash: "b2181ce0165ee060e1a8b713027011a9"
+ }
+ Frame {
+ msec: 2416
+ hash: "e4836bbaf1834658e3ec4bf54a619b53"
+ }
+ Frame {
+ msec: 2432
+ hash: "3072492f5f72427c8d45cf3c5d3ff919"
+ }
+ Frame {
+ msec: 2448
+ hash: "d897cba896239c77df4f7adb93ad5def"
+ }
+ Frame {
+ msec: 2464
+ hash: "ec9867a95de6d6f4c0f92af567d73771"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2480
+ hash: "06b72e3180eb946622e4592de0fa6f91"
+ }
+ Frame {
+ msec: 2496
+ hash: "33f109c026eaefed113cc12db5912a19"
+ }
+ Frame {
+ msec: 2512
+ hash: "ce72c4b4470394dc1c4efd4d9de9907f"
+ }
+ Frame {
+ msec: 2528
+ hash: "64ac1105ea10ae1f6401e8421731c606"
+ }
+ Frame {
+ msec: 2544
+ hash: "ef977bd74941d3506b8f3ee4b1f587ad"
+ }
+ Frame {
+ msec: 2560
+ hash: "9278de91e10788ae5a80399ff5372460"
+ }
+ Frame {
+ msec: 2576
+ hash: "ddaaf945a5f714b856ed5155f4e502b2"
+ }
+ Frame {
+ msec: 2592
+ hash: "f6bb6ba15d996345df04825da71c2cf3"
+ }
+ Frame {
+ msec: 2608
+ hash: "466c78a5a5052b39b113adeda761da6c"
+ }
+ Frame {
+ msec: 2624
+ hash: "db650537d773e0d8a737a7bf5f408a5e"
+ }
+ Frame {
+ msec: 2640
+ hash: "64be9f85869f19defada296343895a2b"
+ }
+ Frame {
+ msec: 2656
+ hash: "5ac6d9751bfadbc7aa064ca0b4d78b2b"
+ }
+ Frame {
+ msec: 2672
+ hash: "a088b351dcc6fc3a8d29256f3a2410c3"
+ }
+ Frame {
+ msec: 2688
+ hash: "a16a77170a6c969042024fa0868da12d"
+ }
+ Frame {
+ msec: 2704
+ hash: "3a2509d0d3a314d2ed72f811f4af741e"
+ }
+ Frame {
+ msec: 2720
+ hash: "484db4e1954048cad7eea48bfea08267"
+ }
+ Frame {
+ msec: 2736
+ hash: "ad0f84634c5f99ab62ab6d12ad8d8c6a"
+ }
+ Frame {
+ msec: 2752
+ hash: "d99b590307f6910963257a1c41c50120"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2768
+ hash: "54f7f94b5cdf1becb2ee61d7f6f02c0e"
+ }
+ Frame {
+ msec: 2784
+ hash: "4220dde85eb1c027366efd0798927e8d"
+ }
+ Frame {
+ msec: 2800
+ hash: "512b9746ae4482557b8cef9f99905954"
+ }
+ Frame {
+ msec: 2816
+ hash: "e7346d8f223684143a0940def878b874"
+ }
+ Frame {
+ msec: 2832
+ hash: "4f097223462c8f619188b0b0c2ecb080"
+ }
+ Frame {
+ msec: 2848
+ hash: "243be452ff0798538defc6a14cb8a08b"
+ }
+ Frame {
+ msec: 2864
+ hash: "e5472ed9a8a43a64a0fea12540619940"
+ }
+ Frame {
+ msec: 2880
+ image: "cursorDelegate.2.png"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2896
+ hash: "97d5f9fe02e4bd06ec30a7805945f167"
+ }
+ Frame {
+ msec: 2912
+ hash: "eb381a1e2ad945e4cfa540c137edbda7"
+ }
+ Frame {
+ msec: 2928
+ hash: "75252ff61682fd32117f0759ebe4b6a1"
+ }
+ Frame {
+ msec: 2944
+ hash: "d724bdacc59bce29d0a42d72479be0b6"
+ }
+ Frame {
+ msec: 2960
+ hash: "d7703c18b69f485bba3abd655100b50d"
+ }
+ Frame {
+ msec: 2976
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 2992
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 3008
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 3024
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 3040
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 3056
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 3072
+ hash: "d7703c18b69f485bba3abd655100b50d"
+ }
+ Frame {
+ msec: 3088
+ hash: "d724bdacc59bce29d0a42d72479be0b6"
+ }
+ Frame {
+ msec: 3104
+ hash: "75252ff61682fd32117f0759ebe4b6a1"
+ }
+ Frame {
+ msec: 3120
+ hash: "eb381a1e2ad945e4cfa540c137edbda7"
+ }
+ Frame {
+ msec: 3136
+ hash: "97d5f9fe02e4bd06ec30a7805945f167"
+ }
+ Frame {
+ msec: 3152
+ hash: "90b0f5f1aa7b5f066fb1266ea63254eb"
+ }
+ Frame {
+ msec: 3168
+ hash: "e5472ed9a8a43a64a0fea12540619940"
+ }
+ Frame {
+ msec: 3184
+ hash: "243be452ff0798538defc6a14cb8a08b"
+ }
+ Frame {
+ msec: 3200
+ hash: "4f097223462c8f619188b0b0c2ecb080"
+ }
+ Frame {
+ msec: 3216
+ hash: "e7346d8f223684143a0940def878b874"
+ }
+ Frame {
+ msec: 3232
+ hash: "512b9746ae4482557b8cef9f99905954"
+ }
+ Frame {
+ msec: 3248
+ hash: "4220dde85eb1c027366efd0798927e8d"
+ }
+ Frame {
+ msec: 3264
+ hash: "54f7f94b5cdf1becb2ee61d7f6f02c0e"
+ }
+ Frame {
+ msec: 3280
+ hash: "de09380dd57c58ae99fbdba169a19975"
+ }
+ Frame {
+ msec: 3296
+ hash: "bfc1b03df244839a012e8302dc07764f"
+ }
+ Frame {
+ msec: 3312
+ hash: "d5f220e5337837ec0d07eb118e2f948e"
+ }
+ Frame {
+ msec: 3328
+ hash: "7640c78a286b0b7bdf2ec9117ceced4a"
+ }
+ Frame {
+ msec: 3344
+ hash: "680f51f63c4b11a247a668eb7bbd2b62"
+ }
+ Frame {
+ msec: 3360
+ hash: "de3c911aec7e42557ece4bdcf02ce562"
+ }
+ Frame {
+ msec: 3376
+ hash: "5e09b95292d6d0afe76a5015b0ccebf1"
+ }
+ Frame {
+ msec: 3392
+ hash: "59d2fb8e21802d256b11730b31919fb3"
+ }
+ Frame {
+ msec: 3408
+ hash: "a494b3b25a23daa858034ebccce0d1c7"
+ }
+ Frame {
+ msec: 3424
+ hash: "2ff4bd5602c34c020162f0503d625049"
+ }
+ Frame {
+ msec: 3440
+ hash: "e715c2a82745829665226df78598b819"
+ }
+ Frame {
+ msec: 3456
+ hash: "47ad557d366536ad457f6866241dba93"
+ }
+ Frame {
+ msec: 3472
+ hash: "70aedcda6c93875d18ee111d8a19549e"
+ }
+ Frame {
+ msec: 3488
+ hash: "c3487c7c7dcd392e7eacb74045dd4143"
+ }
+ Frame {
+ msec: 3504
+ hash: "56db24ad686d34e75a2d184e5b1da2a9"
+ }
+ Frame {
+ msec: 3520
+ hash: "436349a8371597a74404428983cd894c"
+ }
+ Frame {
+ msec: 3536
+ hash: "6e1bb59ec518614a0414092f4939d5ad"
+ }
+ Frame {
+ msec: 3552
+ hash: "f0aa02772df579b921e0c68f794d2327"
+ }
+ Frame {
+ msec: 3568
+ hash: "09ea1462da333c2aeaaa01e9e4f8d54b"
+ }
+ Frame {
+ msec: 3584
+ hash: "46d23d8472ce833591dcff548a644288"
+ }
+ Frame {
+ msec: 3600
+ hash: "a7566d5d35a89078bb378bf3f6c78e13"
+ }
+ Frame {
+ msec: 3616
+ hash: "4c5f7155b20e34a5627387cdc466e890"
+ }
+ Frame {
+ msec: 3632
+ hash: "e9b98922327c412db0116a56283d3c86"
+ }
+ Frame {
+ msec: 3648
+ hash: "29ffede9c16c34ead5f291e69e388084"
+ }
+ Frame {
+ msec: 3664
+ hash: "16958b8f0b1dbdc15333d99bd1349124"
+ }
+ Frame {
+ msec: 3680
+ hash: "3408f8d6e4d6ef34d4d5a0cb51090c4c"
+ }
+ Frame {
+ msec: 3696
+ hash: "b32b099b260789266d0a3c0edd61c04e"
+ }
+ Frame {
+ msec: 3712
+ hash: "4dd3617b25e8b95cf2ec31db8b3bb80f"
+ }
+ Frame {
+ msec: 3728
+ hash: "46b42a08c59909f067810d1984f7a04e"
+ }
+ Frame {
+ msec: 3744
+ hash: "ab8c505601c381e8a44fa7b6eea6579d"
+ }
+ Frame {
+ msec: 3760
+ hash: "73f56e6e1d2cbf3f559d679eb2c15529"
+ }
+ Frame {
+ msec: 3776
+ hash: "b230c56da330823d7d7f7e081c304acb"
+ }
+ Frame {
+ msec: 3792
+ hash: "9f3cbd0023dbd78ba4951c26f71c7d5d"
+ }
+ Frame {
+ msec: 3808
+ hash: "9e9b11cf2695dd02c1ab175ff194f491"
+ }
+ Frame {
+ msec: 3824
+ hash: "8fa6f8eb5deb0ab95c3454e5812ada1d"
+ }
+ Frame {
+ msec: 3840
+ image: "cursorDelegate.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "0b6b24ae8df7c3aa9abb48edb6619d8a"
+ }
+ Frame {
+ msec: 3872
+ hash: "45805295dd2482fdf21ac8c9bfe47869"
+ }
+ Frame {
+ msec: 3888
+ hash: "4893cd31a730d786f075edfd0afc0ad9"
+ }
+ Frame {
+ msec: 3904
+ hash: "a3fbfe732568f5cf6e63809fd7e0c32e"
+ }
+ Frame {
+ msec: 3920
+ hash: "21d3327710d51f714e84b5a28df13e4f"
+ }
+ Frame {
+ msec: 3936
+ hash: "ea065ab48f27f60505eab36debee3faa"
+ }
+ Frame {
+ msec: 3952
+ hash: "fe4c2e368d2110374b7ba9e30f330713"
+ }
+ Frame {
+ msec: 3968
+ hash: "723281f6c1a3f03cf170e4de93fa4dbf"
+ }
+ Frame {
+ msec: 3984
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 4000
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 4016
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 4032
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 4048
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 4064
+ hash: "723281f6c1a3f03cf170e4de93fa4dbf"
+ }
+ Key {
+ type: 6
+ key: 16777232
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4080
+ hash: "c779e46a89c3c9d0f8234a3192175b60"
+ }
+ Frame {
+ msec: 4096
+ hash: "f223cfeba468e161943b24ac960196de"
+ }
+ Frame {
+ msec: 4112
+ hash: "dd2f21f063d055edc23c874380149067"
+ }
+ Frame {
+ msec: 4128
+ hash: "af580b32b67117eb062bbcefe262c719"
+ }
+ Key {
+ type: 7
+ key: 16777232
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4144
+ hash: "991f76d483e033024932790f85bb3c5d"
+ }
+ Frame {
+ msec: 4160
+ hash: "3d8aa66ab9533d14a468f0869b457033"
+ }
+ Frame {
+ msec: 4176
+ hash: "a5540bd5d088ab1201b5f22b32579d7c"
+ }
+ Frame {
+ msec: 4192
+ hash: "e0844f30578fef2cdcee4e4ff28ab7cf"
+ }
+ Frame {
+ msec: 4208
+ hash: "710e7022b65a9b3fd3a7372bf7f37c7a"
+ }
+ Frame {
+ msec: 4224
+ hash: "db553c856b11db7e6feb38b9d562a804"
+ }
+ Frame {
+ msec: 4240
+ hash: "6ba56c4ec6e903b0d82235c230ed78cb"
+ }
+ Frame {
+ msec: 4256
+ hash: "786de35a11c3fc1a228392195f509c28"
+ }
+ Frame {
+ msec: 4272
+ hash: "cc6307597cea821b63391fc9bdbe038b"
+ }
+ Frame {
+ msec: 4288
+ hash: "73d49e4d0bef103e11820d888bef0368"
+ }
+ Frame {
+ msec: 4304
+ hash: "b2ed6ebf66252463326c2f220b3992fa"
+ }
+ Frame {
+ msec: 4320
+ hash: "129b5bc6d55621e2366fc0d80f105df2"
+ }
+ Frame {
+ msec: 4336
+ hash: "ae8fe55fa9b497cd6eff18a517c301d8"
+ }
+ Frame {
+ msec: 4352
+ hash: "535210bd848a20db2966b06278198e07"
+ }
+ Frame {
+ msec: 4368
+ hash: "1f4ea7783b5c60bfc424c73cea07a3a0"
+ }
+ Frame {
+ msec: 4384
+ hash: "5b61f2e9308c4de2864bb7cf133ce545"
+ }
+ Frame {
+ msec: 4400
+ hash: "f641f87e9556ecfd24f0f0a772295e52"
+ }
+ Frame {
+ msec: 4416
+ hash: "36f28574c0b042647bc064d75afa9fbc"
+ }
+ Frame {
+ msec: 4432
+ hash: "dba2ca165b8ab35113b8ec127b204ae9"
+ }
+ Frame {
+ msec: 4448
+ hash: "56324b95f63eabba718df588159f374d"
+ }
+ Frame {
+ msec: 4464
+ hash: "af65d67fef3c743e31acca03716040c4"
+ }
+ Frame {
+ msec: 4480
+ hash: "105481b5becd127af4c28961d900148c"
+ }
+ Frame {
+ msec: 4496
+ hash: "4859d6bf9c456e52fd463e4c2f68d7f6"
+ }
+ Frame {
+ msec: 4512
+ hash: "21c0958bd3c6a1056bb062165c9bc18b"
+ }
+ Frame {
+ msec: 4528
+ hash: "287d258a79f45c26c92c69cce6b1a2f3"
+ }
+ Frame {
+ msec: 4544
+ hash: "deabc5c7dd111adcb253eb833f118764"
+ }
+ Frame {
+ msec: 4560
+ hash: "4bad7380f6b645c551edbe06ff67cac9"
+ }
+ Frame {
+ msec: 4576
+ hash: "67fc71c16d0b9405c35590bafdc5ea40"
+ }
+ Key {
+ type: 6
+ key: 16777233
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4592
+ hash: "7aed794eae2f0c65342f190ed4d4f889"
+ }
+ Frame {
+ msec: 4608
+ hash: "23edee3af8f1904558863d37c520555a"
+ }
+ Frame {
+ msec: 4624
+ hash: "2f9ed13e8a0d0edf098b05db02c04bdf"
+ }
+ Key {
+ type: 7
+ key: 16777233
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4640
+ hash: "86ed2aa2428feb9c6c14ad2a74e97978"
+ }
+ Frame {
+ msec: 4656
+ hash: "e189dc0dae9457a6af5082c6ccf451b6"
+ }
+ Frame {
+ msec: 4672
+ hash: "62d4bfa65bfdc50d24d9204f4df7bad8"
+ }
+ Frame {
+ msec: 4688
+ hash: "5a11ec8a0485a018ebe317e01136e4a5"
+ }
+ Frame {
+ msec: 4704
+ hash: "9aa569f7b251371bdd1cb05c8d3aab28"
+ }
+ Frame {
+ msec: 4720
+ hash: "a242c9d5ed7f9aef0a0622dcb66d0a7e"
+ }
+ Frame {
+ msec: 4736
+ hash: "a0cb3f796fddf7100ca19aee3dedbea8"
+ }
+ Frame {
+ msec: 4752
+ hash: "b4e273b6415e3951eab2f831100b0bb2"
+ }
+ Frame {
+ msec: 4768
+ hash: "fd3fd655785c4e3c470f742451e3470f"
+ }
+ Frame {
+ msec: 4784
+ hash: "7a9b2057760e48d5f9cfdc79b08866d8"
+ }
+ Frame {
+ msec: 4800
+ image: "cursorDelegate.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "c6c90915393fc7cb0aaa464caefbadb0"
+ }
+ Frame {
+ msec: 4832
+ hash: "36b65658073ac2687dbd88ec7a408a98"
+ }
+ Frame {
+ msec: 4848
+ hash: "84e165f9f2c55c5c51a260b11ca195c2"
+ }
+ Frame {
+ msec: 4864
+ hash: "c11cfcfda6f161d058a3d9e93349b578"
+ }
+ Frame {
+ msec: 4880
+ hash: "0568f8c0e1fa51b7547790a7f4978ea3"
+ }
+ Frame {
+ msec: 4896
+ hash: "b66fd97ac36ac395df74e9a0dd58d0c7"
+ }
+ Frame {
+ msec: 4912
+ hash: "31b5b3d68e452ffd90e9804ff9e9a264"
+ }
+ Frame {
+ msec: 4928
+ hash: "3cc8791e419986e1e913d4e153243fb2"
+ }
+ Frame {
+ msec: 4944
+ hash: "ff1b3ce85bc9f3dd3feb90fa31c3bc0a"
+ }
+ Frame {
+ msec: 4960
+ hash: "d3ae969e538c642d82662d08ef05964e"
+ }
+ Frame {
+ msec: 4976
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 4992
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 5008
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 5024
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 5040
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 5056
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 5072
+ hash: "d3ae969e538c642d82662d08ef05964e"
+ }
+ Frame {
+ msec: 5088
+ hash: "ff1b3ce85bc9f3dd3feb90fa31c3bc0a"
+ }
+ Frame {
+ msec: 5104
+ hash: "3cc8791e419986e1e913d4e153243fb2"
+ }
+ Frame {
+ msec: 5120
+ hash: "31b5b3d68e452ffd90e9804ff9e9a264"
+ }
+ Frame {
+ msec: 5136
+ hash: "b66fd97ac36ac395df74e9a0dd58d0c7"
+ }
+ Frame {
+ msec: 5152
+ hash: "0568f8c0e1fa51b7547790a7f4978ea3"
+ }
+ Frame {
+ msec: 5168
+ hash: "c11cfcfda6f161d058a3d9e93349b578"
+ }
+ Frame {
+ msec: 5184
+ hash: "84e165f9f2c55c5c51a260b11ca195c2"
+ }
+ Frame {
+ msec: 5200
+ hash: "36b65658073ac2687dbd88ec7a408a98"
+ }
+ Frame {
+ msec: 5216
+ hash: "c6c90915393fc7cb0aaa464caefbadb0"
+ }
+ Frame {
+ msec: 5232
+ hash: "2a55b52db02d97963d382c9862307384"
+ }
+ Frame {
+ msec: 5248
+ hash: "7a9b2057760e48d5f9cfdc79b08866d8"
+ }
+ Frame {
+ msec: 5264
+ hash: "fd3fd655785c4e3c470f742451e3470f"
+ }
+ Frame {
+ msec: 5280
+ hash: "b4e273b6415e3951eab2f831100b0bb2"
+ }
+ Frame {
+ msec: 5296
+ hash: "a0cb3f796fddf7100ca19aee3dedbea8"
+ }
+ Frame {
+ msec: 5312
+ hash: "a242c9d5ed7f9aef0a0622dcb66d0a7e"
+ }
+ Frame {
+ msec: 5328
+ hash: "9aa569f7b251371bdd1cb05c8d3aab28"
+ }
+ Frame {
+ msec: 5344
+ hash: "5a11ec8a0485a018ebe317e01136e4a5"
+ }
+ Frame {
+ msec: 5360
+ hash: "62d4bfa65bfdc50d24d9204f4df7bad8"
+ }
+ Frame {
+ msec: 5376
+ hash: "e189dc0dae9457a6af5082c6ccf451b6"
+ }
+ Frame {
+ msec: 5392
+ hash: "86ed2aa2428feb9c6c14ad2a74e97978"
+ }
+ Frame {
+ msec: 5408
+ hash: "2f9ed13e8a0d0edf098b05db02c04bdf"
+ }
+ Frame {
+ msec: 5424
+ hash: "23edee3af8f1904558863d37c520555a"
+ }
+ Frame {
+ msec: 5440
+ hash: "7aed794eae2f0c65342f190ed4d4f889"
+ }
+ Frame {
+ msec: 5456
+ hash: "0fa12b48c08266f50e77506e4136dd56"
+ }
+ Frame {
+ msec: 5472
+ hash: "679ee2b26a118ab53a84fa116de09edf"
+ }
+ Frame {
+ msec: 5488
+ hash: "b9dcdd88fba70636cbcae160edcc0136"
+ }
+ Frame {
+ msec: 5504
+ hash: "90af75eeef63ae67e9f6ff1a61d7cca3"
+ }
+ Frame {
+ msec: 5520
+ hash: "29d80ae32451c24b655c4d1fd01d3aa1"
+ }
+ Frame {
+ msec: 5536
+ hash: "c73fe137644cbc006d0b5274b72faa46"
+ }
+ Frame {
+ msec: 5552
+ hash: "8a4d76ae60f5d720a382cced2f6a2b5e"
+ }
+ Frame {
+ msec: 5568
+ hash: "a1efa0d424d568d338c6db9fc095c2fb"
+ }
+ Frame {
+ msec: 5584
+ hash: "205cafcabb29b78a6db3dcaf44a74ab6"
+ }
+ Frame {
+ msec: 5600
+ hash: "7507a3d2158d4cc68454c85922526871"
+ }
+ Frame {
+ msec: 5616
+ hash: "7135a6a7999e82cb81e39228805332ee"
+ }
+ Frame {
+ msec: 5632
+ hash: "ac2b714b5f32d2b911f31690d7082dc1"
+ }
+ Frame {
+ msec: 5648
+ hash: "5cb1ae6d86aafdf11284480c81b939dc"
+ }
+ Frame {
+ msec: 5664
+ hash: "ac705840cc94eb4af7a52d62649d0157"
+ }
+ Frame {
+ msec: 5680
+ hash: "8c2ebcd80e26ac7b9d25be486f54c4ce"
+ }
+ Frame {
+ msec: 5696
+ hash: "12b84aa02dbbab3592d3eb3cb6884b41"
+ }
+ Frame {
+ msec: 5712
+ hash: "675043ddde6ed65a3ec4ed093be1e760"
+ }
+ Frame {
+ msec: 5728
+ hash: "478126aeef5ddae9c0a77d08294cf3f2"
+ }
+ Frame {
+ msec: 5744
+ hash: "0b43af73d91a500ccdf27b4347b9bc47"
+ }
+ Frame {
+ msec: 5760
+ image: "cursorDelegate.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "a6d8708d08bedf0cab5230d6f2936936"
+ }
+ Frame {
+ msec: 5792
+ hash: "02e0646024aeef6f01b7541b15267baa"
+ }
+ Frame {
+ msec: 5808
+ hash: "da6717c94b46ad7a647c445c06314b0d"
+ }
+ Frame {
+ msec: 5824
+ hash: "2ed12d49d72884160ebbf6b6d0e15a9d"
+ }
+ Frame {
+ msec: 5840
+ hash: "a1fbc3333b7f742a8336a6fcbad156c9"
+ }
+ Frame {
+ msec: 5856
+ hash: "25cac33299d58cdd7775e8b75410085e"
+ }
+ Frame {
+ msec: 5872
+ hash: "5d81833eb342f632945c0571e18cb1f9"
+ }
+ Frame {
+ msec: 5888
+ hash: "23f6f2a7d971494af43a0fb97dbf8fb5"
+ }
+ Frame {
+ msec: 5904
+ hash: "216b70d02a4685dc07258454bb4e7c85"
+ }
+ Frame {
+ msec: 5920
+ hash: "1e06742af58d6e63facdc599c46e11b1"
+ }
+ Frame {
+ msec: 5936
+ hash: "00f8ac72d3794ed8d66db987402ecde0"
+ }
+ Frame {
+ msec: 5952
+ hash: "42ab5f162acba94f563823f5be1e37d2"
+ }
+ Frame {
+ msec: 5968
+ hash: "3272b97fdc54eb9f3590e7bbe4ac457d"
+ }
+ Frame {
+ msec: 5984
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 6000
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 6016
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 6032
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 6048
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 6064
+ hash: "3272b97fdc54eb9f3590e7bbe4ac457d"
+ }
+ Frame {
+ msec: 6080
+ hash: "42ab5f162acba94f563823f5be1e37d2"
+ }
+ Frame {
+ msec: 6096
+ hash: "00f8ac72d3794ed8d66db987402ecde0"
+ }
+ Frame {
+ msec: 6112
+ hash: "1e06742af58d6e63facdc599c46e11b1"
+ }
+ Frame {
+ msec: 6128
+ hash: "216b70d02a4685dc07258454bb4e7c85"
+ }
+ Frame {
+ msec: 6144
+ hash: "23f6f2a7d971494af43a0fb97dbf8fb5"
+ }
+ Frame {
+ msec: 6160
+ hash: "5d81833eb342f632945c0571e18cb1f9"
+ }
+ Frame {
+ msec: 6176
+ hash: "25cac33299d58cdd7775e8b75410085e"
+ }
+ Frame {
+ msec: 6192
+ hash: "a1fbc3333b7f742a8336a6fcbad156c9"
+ }
+ Frame {
+ msec: 6208
+ hash: "2ed12d49d72884160ebbf6b6d0e15a9d"
+ }
+ Frame {
+ msec: 6224
+ hash: "da6717c94b46ad7a647c445c06314b0d"
+ }
+ Frame {
+ msec: 6240
+ hash: "02e0646024aeef6f01b7541b15267baa"
+ }
+ Frame {
+ msec: 6256
+ hash: "a6d8708d08bedf0cab5230d6f2936936"
+ }
+ Frame {
+ msec: 6272
+ hash: "68d459091a85f24ece39a207e395039b"
+ }
+ Frame {
+ msec: 6288
+ hash: "0b43af73d91a500ccdf27b4347b9bc47"
+ }
+ Frame {
+ msec: 6304
+ hash: "478126aeef5ddae9c0a77d08294cf3f2"
+ }
+ Frame {
+ msec: 6320
+ hash: "675043ddde6ed65a3ec4ed093be1e760"
+ }
+ Frame {
+ msec: 6336
+ hash: "12b84aa02dbbab3592d3eb3cb6884b41"
+ }
+ Frame {
+ msec: 6352
+ hash: "8c2ebcd80e26ac7b9d25be486f54c4ce"
+ }
+ Frame {
+ msec: 6368
+ hash: "ac705840cc94eb4af7a52d62649d0157"
+ }
+ Frame {
+ msec: 6384
+ hash: "5cb1ae6d86aafdf11284480c81b939dc"
+ }
+ Frame {
+ msec: 6400
+ hash: "ac2b714b5f32d2b911f31690d7082dc1"
+ }
+ Frame {
+ msec: 6416
+ hash: "7135a6a7999e82cb81e39228805332ee"
+ }
+ Frame {
+ msec: 6432
+ hash: "7507a3d2158d4cc68454c85922526871"
+ }
+ Frame {
+ msec: 6448
+ hash: "205cafcabb29b78a6db3dcaf44a74ab6"
+ }
+ Frame {
+ msec: 6464
+ hash: "a1efa0d424d568d338c6db9fc095c2fb"
+ }
+ Frame {
+ msec: 6480
+ hash: "8a4d76ae60f5d720a382cced2f6a2b5e"
+ }
+ Frame {
+ msec: 6496
+ hash: "c73fe137644cbc006d0b5274b72faa46"
+ }
+ Frame {
+ msec: 6512
+ hash: "29d80ae32451c24b655c4d1fd01d3aa1"
+ }
+ Frame {
+ msec: 6528
+ hash: "90af75eeef63ae67e9f6ff1a61d7cca3"
+ }
+ Frame {
+ msec: 6544
+ hash: "b9dcdd88fba70636cbcae160edcc0136"
+ }
+ Frame {
+ msec: 6560
+ hash: "679ee2b26a118ab53a84fa116de09edf"
+ }
+ Frame {
+ msec: 6576
+ hash: "0fa12b48c08266f50e77506e4136dd56"
+ }
+ Frame {
+ msec: 6592
+ hash: "7aed794eae2f0c65342f190ed4d4f889"
+ }
+ Frame {
+ msec: 6608
+ hash: "23edee3af8f1904558863d37c520555a"
+ }
+ Frame {
+ msec: 6624
+ hash: "2f9ed13e8a0d0edf098b05db02c04bdf"
+ }
+ Frame {
+ msec: 6640
+ hash: "86ed2aa2428feb9c6c14ad2a74e97978"
+ }
+ Frame {
+ msec: 6656
+ hash: "e189dc0dae9457a6af5082c6ccf451b6"
+ }
+ Frame {
+ msec: 6672
+ hash: "62d4bfa65bfdc50d24d9204f4df7bad8"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 271; y: 89
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6688
+ hash: "680f51f63c4b11a247a668eb7bbd2b62"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 271; y: 92
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6704
+ hash: "7640c78a286b0b7bdf2ec9117ceced4a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 271; y: 95
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 270; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6720
+ image: "cursorDelegate.6.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 269; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6736
+ hash: "bfc1b03df244839a012e8302dc07764f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 268; y: 107
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6752
+ hash: "de09380dd57c58ae99fbdba169a19975"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 266; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6768
+ hash: "54f7f94b5cdf1becb2ee61d7f6f02c0e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 266; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6784
+ hash: "4220dde85eb1c027366efd0798927e8d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 265; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6800
+ hash: "512b9746ae4482557b8cef9f99905954"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 263; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 261; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6816
+ hash: "e7346d8f223684143a0940def878b874"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 259; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6832
+ hash: "7e7382302681cd29a2c6959a3a704660"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 256; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6848
+ hash: "ef8f7dfdd4e70100ecaecca4055d8f52"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 250; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 243; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6864
+ hash: "f5cacabb78b88c31af1a1b1e6f60069b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 235; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6880
+ hash: "b016ef2306b0a721df86b6916e7953e4"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 227; y: 121
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6896
+ hash: "a78e9b0b93569b77b0659c771336971a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 218; y: 124
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 209; y: 126
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6912
+ hash: "b957ab07bcbaeffca963d9148130a965"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 200; y: 126
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6928
+ hash: "140bc4b078bac52d6903bdfdfc35a94c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 190; y: 127
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6944
+ hash: "047c3a7403ae88cceb7fc875793d1ed8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 181; y: 127
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 172; y: 127
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6960
+ hash: "03d48446aaf94450a3a9a8f1e956493f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 163; y: 127
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6976
+ hash: "6672e47aa6a975fbd82d2fe5bc99bbaf"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 154; y: 126
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6992
+ hash: "3bc73489d06e446d4c96117756a59227"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 146; y: 124
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 138; y: 121
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7008
+ hash: "aed995a61df4a1c189ef2962000d02de"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 130; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7024
+ hash: "aed995a61df4a1c189ef2962000d02de"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 123; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7040
+ hash: "74f0bbe92a23146fbdbd365edd5741c8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 118; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 114; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7056
+ hash: "74f0bbe92a23146fbdbd365edd5741c8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 110; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7072
+ hash: "6456208c6367687b8dc701791eccd7d4"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 108; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7088
+ hash: "376b59dc6e00a51bc9f2d4cfa2718e57"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 107; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 106; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7104
+ hash: "fb7bc3401f70ce6eee131c9c7510e1fe"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 105; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7120
+ hash: "675a419f0cd8351d6b2a65daf7d2707a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 104; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7136
+ hash: "2f7951abac64e0f10d3b66d04966b6e9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 103; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 102; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7152
+ hash: "1f8daa78c58ae11ec105bd87681c1762"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 101; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7168
+ hash: "23ab196ed43219c26d94431698f6ac8d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 100; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7184
+ hash: "9581e2695f4818e063ec032cb5bb6b7f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 100; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 100; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7200
+ hash: "6752cd7c5383e0ccc9b08f79db6ac310"
+ }
+ Frame {
+ msec: 7216
+ hash: "51f5675e0fb1410c5a8ec03a86b42681"
+ }
+ Frame {
+ msec: 7232
+ hash: "c3c23213b2649b5ccabd8e420a251e00"
+ }
+ Frame {
+ msec: 7248
+ hash: "02ceab31171fe983a10e862b53aea16f"
+ }
+ Frame {
+ msec: 7264
+ hash: "8a774dda9a1bc16bd270724e570daf20"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 100; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7280
+ hash: "2b6b892cebfcce14a9db485fecf16703"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 101; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7296
+ hash: "8b8e6d3362f018cbd9b487f03cfb7a22"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 101; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7312
+ hash: "a8477a9429633384073618cc60841e6c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 102; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 102; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7328
+ hash: "59558c6665b73f02809259e039b4423a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 103; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7344
+ hash: "93540071bab8a970a929d209f628970e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 104; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 105; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7360
+ hash: "78cdb0a05583150ea33040d32d95de47"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 107; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7376
+ hash: "4b1ee34985d3f5b8dd4355678ad39af4"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 110; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7392
+ hash: "5484e7699c388eabf0311de49706397f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 113; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 117; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7408
+ hash: "dee6c2380f398323002ebb43a38d27e8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 124; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7424
+ hash: "d66a27728e7fd3c616842613a034c5a0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 131; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7440
+ hash: "5f851161f99fcf5b67cbe008a3faf411"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 138; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 144; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7456
+ hash: "013e949285cfa9edb34ab14e26753230"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 148; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 152; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7472
+ hash: "5b50acdcbd49969bcce2cfab6f9af380"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 155; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7488
+ hash: "d4aeb24211007cfc01512d289ae7aa01"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 157; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7504
+ hash: "6f1b7e12bbf54586e9a48989145f3274"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 159; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 162; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7520
+ hash: "0e09c7468bc03770c6cc7f0fba1ee9c0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 163; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7536
+ hash: "0fc4522bbf1a2e72002eb0a3c7224e1f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 165; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7552
+ hash: "91727292aaa314bf263c618a577b7f74"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 166; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 168; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7568
+ hash: "a78fb2545d11c521a50a10fd2d1700a7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 171; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7584
+ hash: "c207a291b47628921125acd4b8ed5ea8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 174; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7600
+ hash: "9a8e3df504ba36e82c51d71a3f5ce268"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 177; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 183; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7616
+ hash: "8cd9da94db91da50ae457d41866a32ba"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 188; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7632
+ hash: "9e52b6fdc3ce4ad9c5986e47ffa762fc"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 193; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7648
+ hash: "a1aff55bffb76bd4e2ac9ee482a03978"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 198; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 206; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7664
+ hash: "ba52431b72683cfbf0cc795a2407630e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 209; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7680
+ image: "cursorDelegate.7.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 211; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7696
+ hash: "eb5a19fbfbdceef233ed3c86c782817c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 212; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 212; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7712
+ hash: "7c8f3f2e96fa6a63867cb716061c8c77"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 213; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7728
+ hash: "96b0007f857aa19b41d184a7c7931f69"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 214; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7744
+ hash: "96201712b9ffbd9bfbebb5a5b7e23aba"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 215; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7760
+ hash: "d75e13a7715d5c329a47fdb818dfdbe5"
+ }
+ Frame {
+ msec: 7776
+ hash: "c8fa0c2d9e6aa1f3a33e76a31534359d"
+ }
+ Frame {
+ msec: 7792
+ hash: "03b11cc517f84c58a681906fdda98347"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 215; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 215; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7808
+ hash: "74cdf8af5d56216ad422951a56661536"
+ }
+ Frame {
+ msec: 7824
+ hash: "fcac2575aad872eada547508f312f09c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 216; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7840
+ hash: "7d76aec1f29d2d6745585be8ef113be5"
+ }
+ Frame {
+ msec: 7856
+ hash: "2b4fe4f39433671a9bc440efa1c589a8"
+ }
+ Frame {
+ msec: 7872
+ hash: "55a166f920e76173e14121d848a11aa0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 216; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7888
+ hash: "f764df8ecd68161d3529800e922254f4"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 216; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7904
+ hash: "749caf21947e915b163f72e6fd190032"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 216; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7920
+ hash: "c350910df8ae4fea573a20d334fd3401"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 217; y: 116
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7936
+ hash: "d177da450f1d380a6d2406e2393b9582"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 218; y: 115
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 218; y: 115
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7952
+ hash: "bf3da78d7cac19daf2d5150b77840b1e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 219; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7968
+ hash: "22e337b0b81b18045a205355da6981ad"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 220; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7984
+ hash: "66c66927d2fc590fc43c146a403c1ccb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 221; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 222; y: 113
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8000
+ hash: "66c66927d2fc590fc43c146a403c1ccb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 222; y: 113
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8016
+ hash: "66c66927d2fc590fc43c146a403c1ccb"
+ }
+ Frame {
+ msec: 8032
+ hash: "66c66927d2fc590fc43c146a403c1ccb"
+ }
+ Frame {
+ msec: 8048
+ hash: "66c66927d2fc590fc43c146a403c1ccb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 222; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8064
+ hash: "22e337b0b81b18045a205355da6981ad"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 222; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8080
+ hash: "bf3da78d7cac19daf2d5150b77840b1e"
+ }
+ Frame {
+ msec: 8096
+ hash: "d177da450f1d380a6d2406e2393b9582"
+ }
+ Frame {
+ msec: 8112
+ hash: "c350910df8ae4fea573a20d334fd3401"
+ }
+ Frame {
+ msec: 8128
+ hash: "749caf21947e915b163f72e6fd190032"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 222; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8144
+ hash: "f764df8ecd68161d3529800e922254f4"
+ }
+ Frame {
+ msec: 8160
+ hash: "55a166f920e76173e14121d848a11aa0"
+ }
+ Frame {
+ msec: 8176
+ hash: "2b4fe4f39433671a9bc440efa1c589a8"
+ }
+ Frame {
+ msec: 8192
+ hash: "7d76aec1f29d2d6745585be8ef113be5"
+ }
+ Frame {
+ msec: 8208
+ hash: "fcac2575aad872eada547508f312f09c"
+ }
+ Frame {
+ msec: 8224
+ hash: "74cdf8af5d56216ad422951a56661536"
+ }
+ Frame {
+ msec: 8240
+ hash: "03b11cc517f84c58a681906fdda98347"
+ }
+ Frame {
+ msec: 8256
+ hash: "c8fa0c2d9e6aa1f3a33e76a31534359d"
+ }
+ Frame {
+ msec: 8272
+ hash: "d75e13a7715d5c329a47fdb818dfdbe5"
+ }
+ Frame {
+ msec: 8288
+ hash: "96201712b9ffbd9bfbebb5a5b7e23aba"
+ }
+ Frame {
+ msec: 8304
+ hash: "96b0007f857aa19b41d184a7c7931f69"
+ }
+ Frame {
+ msec: 8320
+ hash: "bff5b731de7c93fa0cdcefbf99beeb5e"
+ }
+ Frame {
+ msec: 8336
+ hash: "ce76704964873be1bc6a324d8a3381be"
+ }
+ Frame {
+ msec: 8352
+ hash: "a31b4f2a3defc968098029328de9352d"
+ }
+ Frame {
+ msec: 8368
+ hash: "295e3f40a511bd30e1c6599ead93619a"
+ }
+ Frame {
+ msec: 8384
+ hash: "3cd74da8b04de8ec7446490dea0e4e6c"
+ }
+ Frame {
+ msec: 8400
+ hash: "78a7db5a316609136d1b873d20d5dd3e"
+ }
+ Frame {
+ msec: 8416
+ hash: "0f176fb11bfe26f872ef7103011df9e6"
+ }
+ Frame {
+ msec: 8432
+ hash: "47866013e79bc77607e0c40bf8457bed"
+ }
+ Frame {
+ msec: 8448
+ hash: "5f35467db5c5e0baf5caff90b97e2d0c"
+ }
+ Frame {
+ msec: 8464
+ hash: "fefa89763cc1ad8323fdf37b1f5f63d3"
+ }
+ Frame {
+ msec: 8480
+ hash: "b9823f88fa51944075ce6dedd695f097"
+ }
+ Frame {
+ msec: 8496
+ hash: "72521de21fcc57d6ccf16350b0df8eee"
+ }
+ Frame {
+ msec: 8512
+ hash: "fcd591a2e56ba5efa95b315b7bd10532"
+ }
+ Frame {
+ msec: 8528
+ hash: "5d437d59995741030e0975829712f85d"
+ }
+ Frame {
+ msec: 8544
+ hash: "e7189d174b181985b6aef10b8642726f"
+ }
+ Frame {
+ msec: 8560
+ hash: "cefadbae14e573f6c83d07ffc3a5152e"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 277; y: 97
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8576
+ hash: "0fa12b48c08266f50e77506e4136dd56"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 277; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8592
+ hash: "7aed794eae2f0c65342f190ed4d4f889"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 276; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8608
+ hash: "23edee3af8f1904558863d37c520555a"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 276; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8624
+ hash: "2f9ed13e8a0d0edf098b05db02c04bdf"
+ }
+ Frame {
+ msec: 8640
+ image: "cursorDelegate.8.png"
+ }
+ Frame {
+ msec: 8656
+ hash: "e189dc0dae9457a6af5082c6ccf451b6"
+ }
+ Frame {
+ msec: 8672
+ hash: "62d4bfa65bfdc50d24d9204f4df7bad8"
+ }
+ Frame {
+ msec: 8688
+ hash: "5a11ec8a0485a018ebe317e01136e4a5"
+ }
+ Frame {
+ msec: 8704
+ hash: "9aa569f7b251371bdd1cb05c8d3aab28"
+ }
+ Frame {
+ msec: 8720
+ hash: "a242c9d5ed7f9aef0a0622dcb66d0a7e"
+ }
+ Frame {
+ msec: 8736
+ hash: "a0cb3f796fddf7100ca19aee3dedbea8"
+ }
+ Frame {
+ msec: 8752
+ hash: "b4e273b6415e3951eab2f831100b0bb2"
+ }
+ Frame {
+ msec: 8768
+ hash: "fd3fd655785c4e3c470f742451e3470f"
+ }
+ Frame {
+ msec: 8784
+ hash: "7a9b2057760e48d5f9cfdc79b08866d8"
+ }
+ Frame {
+ msec: 8800
+ hash: "2a55b52db02d97963d382c9862307384"
+ }
+ Frame {
+ msec: 8816
+ hash: "c6c90915393fc7cb0aaa464caefbadb0"
+ }
+ Frame {
+ msec: 8832
+ hash: "36b65658073ac2687dbd88ec7a408a98"
+ }
+ Frame {
+ msec: 8848
+ hash: "84e165f9f2c55c5c51a260b11ca195c2"
+ }
+ Frame {
+ msec: 8864
+ hash: "c11cfcfda6f161d058a3d9e93349b578"
+ }
+ Frame {
+ msec: 8880
+ hash: "0568f8c0e1fa51b7547790a7f4978ea3"
+ }
+ Frame {
+ msec: 8896
+ hash: "b66fd97ac36ac395df74e9a0dd58d0c7"
+ }
+ Frame {
+ msec: 8912
+ hash: "31b5b3d68e452ffd90e9804ff9e9a264"
+ }
+ Frame {
+ msec: 8928
+ hash: "3cc8791e419986e1e913d4e153243fb2"
+ }
+ Frame {
+ msec: 8944
+ hash: "ff1b3ce85bc9f3dd3feb90fa31c3bc0a"
+ }
+ Frame {
+ msec: 8960
+ hash: "d3ae969e538c642d82662d08ef05964e"
+ }
+ Frame {
+ msec: 8976
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 8992
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 9008
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 9024
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 9040
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 9056
+ hash: "e3948b393a3778066a90197b31c71e51"
+ }
+ Frame {
+ msec: 9072
+ hash: "d3ae969e538c642d82662d08ef05964e"
+ }
+ Frame {
+ msec: 9088
+ hash: "ff1b3ce85bc9f3dd3feb90fa31c3bc0a"
+ }
+ Frame {
+ msec: 9104
+ hash: "3cc8791e419986e1e913d4e153243fb2"
+ }
+ Frame {
+ msec: 9120
+ hash: "31b5b3d68e452ffd90e9804ff9e9a264"
+ }
+ Frame {
+ msec: 9136
+ hash: "b66fd97ac36ac395df74e9a0dd58d0c7"
+ }
+ Frame {
+ msec: 9152
+ hash: "0568f8c0e1fa51b7547790a7f4978ea3"
+ }
+ Frame {
+ msec: 9168
+ hash: "c11cfcfda6f161d058a3d9e93349b578"
+ }
+ Frame {
+ msec: 9184
+ hash: "84e165f9f2c55c5c51a260b11ca195c2"
+ }
+ Frame {
+ msec: 9200
+ hash: "36b65658073ac2687dbd88ec7a408a98"
+ }
+ Frame {
+ msec: 9216
+ hash: "c6c90915393fc7cb0aaa464caefbadb0"
+ }
+ Frame {
+ msec: 9232
+ hash: "2a55b52db02d97963d382c9862307384"
+ }
+ Frame {
+ msec: 9248
+ hash: "7a9b2057760e48d5f9cfdc79b08866d8"
+ }
+ Frame {
+ msec: 9264
+ hash: "fd3fd655785c4e3c470f742451e3470f"
+ }
+ Frame {
+ msec: 9280
+ hash: "b4e273b6415e3951eab2f831100b0bb2"
+ }
+ Frame {
+ msec: 9296
+ hash: "a0cb3f796fddf7100ca19aee3dedbea8"
+ }
+ Frame {
+ msec: 9312
+ hash: "a242c9d5ed7f9aef0a0622dcb66d0a7e"
+ }
+ Frame {
+ msec: 9328
+ hash: "9aa569f7b251371bdd1cb05c8d3aab28"
+ }
+ Frame {
+ msec: 9344
+ hash: "5a11ec8a0485a018ebe317e01136e4a5"
+ }
+ Frame {
+ msec: 9360
+ hash: "62d4bfa65bfdc50d24d9204f4df7bad8"
+ }
+ Frame {
+ msec: 9376
+ hash: "e189dc0dae9457a6af5082c6ccf451b6"
+ }
+ Frame {
+ msec: 9392
+ hash: "86ed2aa2428feb9c6c14ad2a74e97978"
+ }
+ Frame {
+ msec: 9408
+ hash: "2f9ed13e8a0d0edf098b05db02c04bdf"
+ }
+ Frame {
+ msec: 9424
+ hash: "23edee3af8f1904558863d37c520555a"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.0.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.0.png
new file mode 100644
index 0000000..2b45a06
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.1.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.1.png
new file mode 100644
index 0000000..1f5bae0
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.2.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.2.png
new file mode 100644
index 0000000..cb2b5a4
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.3.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.3.png
new file mode 100644
index 0000000..aa24805
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.4.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.4.png
new file mode 100644
index 0000000..aa24805
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.qml b/tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.qml
new file mode 100644
index 0000000..873a86d
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data/echoMode.qml
@@ -0,0 +1,1043 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 32
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Key {
+ type: 6
+ key: 16777248
+ modifiers: 33554432
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 48
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 64
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 80
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 96
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 112
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 128
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 144
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 160
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 176
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 192
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 208
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 224
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 240
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 256
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 272
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 288
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 304
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 320
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 336
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Frame {
+ msec: 352
+ hash: "b73bd9c2fef8812591fff9f43b73da13"
+ }
+ Key {
+ type: 6
+ key: 74
+ modifiers: 33554432
+ text: "4a"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 368
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 384
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 400
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 416
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 432
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Key {
+ type: 7
+ key: 74
+ modifiers: 33554432
+ text: "4a"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 448
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 464
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 480
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 496
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 512
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 528
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Key {
+ type: 7
+ key: 16777248
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 544
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 560
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 576
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 592
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 608
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 624
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 640
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 656
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 672
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Frame {
+ msec: 688
+ hash: "e8b6bdc7d552bb13c5dc2f50b8cf1125"
+ }
+ Key {
+ type: 6
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 704
+ hash: "fbc09d695e0b47aae6e977c13f535bfd"
+ }
+ Frame {
+ msec: 720
+ hash: "fbc09d695e0b47aae6e977c13f535bfd"
+ }
+ Frame {
+ msec: 736
+ hash: "fbc09d695e0b47aae6e977c13f535bfd"
+ }
+ Frame {
+ msec: 752
+ hash: "fbc09d695e0b47aae6e977c13f535bfd"
+ }
+ Frame {
+ msec: 768
+ hash: "fbc09d695e0b47aae6e977c13f535bfd"
+ }
+ Key {
+ type: 7
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 784
+ hash: "fbc09d695e0b47aae6e977c13f535bfd"
+ }
+ Frame {
+ msec: 800
+ hash: "fbc09d695e0b47aae6e977c13f535bfd"
+ }
+ Frame {
+ msec: 816
+ hash: "fbc09d695e0b47aae6e977c13f535bfd"
+ }
+ Frame {
+ msec: 832
+ hash: "fbc09d695e0b47aae6e977c13f535bfd"
+ }
+ Frame {
+ msec: 848
+ hash: "fbc09d695e0b47aae6e977c13f535bfd"
+ }
+ Key {
+ type: 6
+ key: 67
+ modifiers: 0
+ text: "63"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 864
+ hash: "a4b81c526a5bf8902fde9b8721980977"
+ }
+ Frame {
+ msec: 880
+ hash: "a4b81c526a5bf8902fde9b8721980977"
+ }
+ Frame {
+ msec: 896
+ hash: "a4b81c526a5bf8902fde9b8721980977"
+ }
+ Key {
+ type: 7
+ key: 67
+ modifiers: 0
+ text: "63"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 912
+ hash: "a4b81c526a5bf8902fde9b8721980977"
+ }
+ Frame {
+ msec: 928
+ hash: "a4b81c526a5bf8902fde9b8721980977"
+ }
+ Frame {
+ msec: 944
+ hash: "a4b81c526a5bf8902fde9b8721980977"
+ }
+ Frame {
+ msec: 960
+ image: "echoMode.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "a4b81c526a5bf8902fde9b8721980977"
+ }
+ Key {
+ type: 6
+ key: 75
+ modifiers: 0
+ text: "6b"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 992
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1008
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1024
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1040
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Key {
+ type: 7
+ key: 75
+ modifiers: 0
+ text: "6b"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1056
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1072
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1088
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1104
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1120
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1136
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1152
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1168
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1184
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1200
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1216
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Frame {
+ msec: 1232
+ hash: "d072aebc2314a149a856634786b208a0"
+ }
+ Key {
+ type: 6
+ key: 68
+ modifiers: 0
+ text: "64"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1248
+ hash: "94defec2865529f185d02cfcbfe166cc"
+ }
+ Frame {
+ msec: 1264
+ hash: "94defec2865529f185d02cfcbfe166cc"
+ }
+ Frame {
+ msec: 1280
+ hash: "94defec2865529f185d02cfcbfe166cc"
+ }
+ Key {
+ type: 7
+ key: 68
+ modifiers: 0
+ text: "64"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1296
+ hash: "94defec2865529f185d02cfcbfe166cc"
+ }
+ Frame {
+ msec: 1312
+ hash: "94defec2865529f185d02cfcbfe166cc"
+ }
+ Frame {
+ msec: 1328
+ hash: "94defec2865529f185d02cfcbfe166cc"
+ }
+ Key {
+ type: 6
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1344
+ hash: "f625a2a82879df96141000e6931d4487"
+ }
+ Frame {
+ msec: 1360
+ hash: "f625a2a82879df96141000e6931d4487"
+ }
+ Frame {
+ msec: 1376
+ hash: "f625a2a82879df96141000e6931d4487"
+ }
+ Frame {
+ msec: 1392
+ hash: "f625a2a82879df96141000e6931d4487"
+ }
+ Frame {
+ msec: 1408
+ hash: "f625a2a82879df96141000e6931d4487"
+ }
+ Frame {
+ msec: 1424
+ hash: "f625a2a82879df96141000e6931d4487"
+ }
+ Frame {
+ msec: 1440
+ hash: "f625a2a82879df96141000e6931d4487"
+ }
+ Frame {
+ msec: 1456
+ hash: "f625a2a82879df96141000e6931d4487"
+ }
+ Frame {
+ msec: 1472
+ hash: "f625a2a82879df96141000e6931d4487"
+ }
+ Key {
+ type: 7
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1488
+ hash: "f625a2a82879df96141000e6931d4487"
+ }
+ Key {
+ type: 6
+ key: 87
+ modifiers: 0
+ text: "77"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1504
+ hash: "1cf29837a4ea63bbb06c15382680d1b6"
+ }
+ Frame {
+ msec: 1520
+ hash: "1cf29837a4ea63bbb06c15382680d1b6"
+ }
+ Frame {
+ msec: 1536
+ hash: "1cf29837a4ea63bbb06c15382680d1b6"
+ }
+ Frame {
+ msec: 1552
+ hash: "1cf29837a4ea63bbb06c15382680d1b6"
+ }
+ Key {
+ type: 7
+ key: 87
+ modifiers: 0
+ text: "77"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1568
+ hash: "1cf29837a4ea63bbb06c15382680d1b6"
+ }
+ Frame {
+ msec: 1584
+ hash: "1cf29837a4ea63bbb06c15382680d1b6"
+ }
+ Frame {
+ msec: 1600
+ hash: "1cf29837a4ea63bbb06c15382680d1b6"
+ }
+ Frame {
+ msec: 1616
+ hash: "1cf29837a4ea63bbb06c15382680d1b6"
+ }
+ Frame {
+ msec: 1632
+ hash: "1cf29837a4ea63bbb06c15382680d1b6"
+ }
+ Frame {
+ msec: 1648
+ hash: "1cf29837a4ea63bbb06c15382680d1b6"
+ }
+ Key {
+ type: 6
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1664
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Frame {
+ msec: 1680
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Frame {
+ msec: 1696
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Frame {
+ msec: 1712
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Frame {
+ msec: 1728
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Key {
+ type: 6
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1744
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Key {
+ type: 7
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1760
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Frame {
+ msec: 1776
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Frame {
+ msec: 1792
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Key {
+ type: 7
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1808
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Frame {
+ msec: 1824
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Frame {
+ msec: 1840
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Frame {
+ msec: 1856
+ hash: "6eabb6d168ecc9ac604dcf2db0075380"
+ }
+ Key {
+ type: 6
+ key: 76
+ modifiers: 0
+ text: "6c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1872
+ hash: "cb2dc1c4fc4e213841b873561f404a4f"
+ }
+ Frame {
+ msec: 1888
+ hash: "cb2dc1c4fc4e213841b873561f404a4f"
+ }
+ Frame {
+ msec: 1904
+ hash: "cb2dc1c4fc4e213841b873561f404a4f"
+ }
+ Frame {
+ msec: 1920
+ image: "echoMode.1.png"
+ }
+ Key {
+ type: 7
+ key: 76
+ modifiers: 0
+ text: "6c"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1936
+ hash: "cb2dc1c4fc4e213841b873561f404a4f"
+ }
+ Frame {
+ msec: 1952
+ hash: "cb2dc1c4fc4e213841b873561f404a4f"
+ }
+ Frame {
+ msec: 1968
+ hash: "cb2dc1c4fc4e213841b873561f404a4f"
+ }
+ Frame {
+ msec: 1984
+ hash: "cb2dc1c4fc4e213841b873561f404a4f"
+ }
+ Frame {
+ msec: 2000
+ hash: "cb2dc1c4fc4e213841b873561f404a4f"
+ }
+ Frame {
+ msec: 2016
+ hash: "cb2dc1c4fc4e213841b873561f404a4f"
+ }
+ Key {
+ type: 6
+ key: 79
+ modifiers: 0
+ text: "6f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2032
+ hash: "c2aff1ebdee69cca7dc67a102fce5e8e"
+ }
+ Frame {
+ msec: 2048
+ hash: "c2aff1ebdee69cca7dc67a102fce5e8e"
+ }
+ Key {
+ type: 7
+ key: 79
+ modifiers: 0
+ text: "6f"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2064
+ hash: "c2aff1ebdee69cca7dc67a102fce5e8e"
+ }
+ Frame {
+ msec: 2080
+ hash: "c2aff1ebdee69cca7dc67a102fce5e8e"
+ }
+ Key {
+ type: 6
+ key: 86
+ modifiers: 0
+ text: "76"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2096
+ hash: "c82441813af6ff577687f29f6a09da38"
+ }
+ Frame {
+ msec: 2112
+ hash: "c82441813af6ff577687f29f6a09da38"
+ }
+ Frame {
+ msec: 2128
+ hash: "c82441813af6ff577687f29f6a09da38"
+ }
+ Frame {
+ msec: 2144
+ hash: "c82441813af6ff577687f29f6a09da38"
+ }
+ Key {
+ type: 6
+ key: 69
+ modifiers: 0
+ text: "65"
+ autorep: false
+ count: 1
+ }
+ Key {
+ type: 7
+ key: 86
+ modifiers: 0
+ text: "76"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2160
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Frame {
+ msec: 2176
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Frame {
+ msec: 2192
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Frame {
+ msec: 2208
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Key {
+ type: 6
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2224
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Key {
+ type: 7
+ key: 69
+ modifiers: 0
+ text: "65"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2240
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Frame {
+ msec: 2256
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Frame {
+ msec: 2272
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Frame {
+ msec: 2288
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Frame {
+ msec: 2304
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Key {
+ type: 7
+ key: 32
+ modifiers: 0
+ text: "20"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2320
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Frame {
+ msec: 2336
+ hash: "d7da9862980b99e97a1fcd1b5c4c976f"
+ }
+ Key {
+ type: 6
+ key: 77
+ modifiers: 0
+ text: "6d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2352
+ hash: "8f36e26d8685fe55e7a1dd294188f649"
+ }
+ Frame {
+ msec: 2368
+ hash: "8f36e26d8685fe55e7a1dd294188f649"
+ }
+ Frame {
+ msec: 2384
+ hash: "8f36e26d8685fe55e7a1dd294188f649"
+ }
+ Frame {
+ msec: 2400
+ hash: "8f36e26d8685fe55e7a1dd294188f649"
+ }
+ Frame {
+ msec: 2416
+ hash: "8f36e26d8685fe55e7a1dd294188f649"
+ }
+ Frame {
+ msec: 2432
+ hash: "8f36e26d8685fe55e7a1dd294188f649"
+ }
+ Key {
+ type: 7
+ key: 77
+ modifiers: 0
+ text: "6d"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2448
+ hash: "8f36e26d8685fe55e7a1dd294188f649"
+ }
+ Frame {
+ msec: 2464
+ hash: "8f36e26d8685fe55e7a1dd294188f649"
+ }
+ Frame {
+ msec: 2480
+ hash: "8f36e26d8685fe55e7a1dd294188f649"
+ }
+ Frame {
+ msec: 2496
+ hash: "8f36e26d8685fe55e7a1dd294188f649"
+ }
+ Key {
+ type: 6
+ key: 89
+ modifiers: 0
+ text: "79"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2512
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2528
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2544
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Key {
+ type: 7
+ key: 89
+ modifiers: 0
+ text: "79"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2560
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2576
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2592
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2608
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2624
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2640
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2656
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2672
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2688
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2704
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2720
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2736
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2752
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2768
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2784
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2800
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2816
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2832
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2848
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2864
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2880
+ image: "echoMode.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2912
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2928
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2944
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2960
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2976
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 2992
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 3008
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 3024
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 3040
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+ Frame {
+ msec: 3056
+ hash: "316f2ba46d059755576e6822dc77afb2"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data/hAlign.0.png b/tests/auto/declarative/visual/qmlgraphicstextinput/data/hAlign.0.png
new file mode 100644
index 0000000..87c2e07
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data/hAlign.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/data/hAlign.qml b/tests/auto/declarative/visual/qmlgraphicstextinput/data/hAlign.qml
new file mode 100644
index 0000000..e29ac56
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/data/hAlign.qml
@@ -0,0 +1,107 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 32
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 48
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 64
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 80
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 96
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 112
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 128
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 144
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 160
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 176
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 192
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 208
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 224
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 240
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 256
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 272
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 288
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 304
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 320
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 336
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 352
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 368
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 384
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+ Frame {
+ msec: 400
+ hash: "7619ed68aca3544f373777e11a4bfefa"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/echoMode.qml b/tests/auto/declarative/visual/qmlgraphicstextinput/echoMode.qml
new file mode 100644
index 0000000..b0b50e4
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/echoMode.qml
@@ -0,0 +1,10 @@
+import Qt 4.6
+
+Item{
+ height: 50; width: 200
+ Column{
+ //Not an exhaustive echo mode test, that's in QLineEdit (since the functionality is in QLineControl)
+ TextInput{ id: main; focus: true; echoMode: TextInput.Password }
+ Text{ text: main.text }
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlgraphicstextinput/hAlign.qml b/tests/auto/declarative/visual/qmlgraphicstextinput/hAlign.qml
new file mode 100644
index 0000000..2d65adf
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlgraphicstextinput/hAlign.qml
@@ -0,0 +1,39 @@
+import Qt 4.6
+
+Item{
+ width:600;
+ height:300;
+ Column{
+ TextInput{
+ text: "Jackdaws love my big sphinx of quartz";
+ horizontalAlignment: TextInput.AlignLeft;
+ }
+ TextInput{
+ text: "Jackdaws love my big sphinx of quartz";
+ horizontalAlignment: TextInput.AlignHCenter;
+ }
+ TextInput{
+ text: "Jackdaws love my big sphinx of quartz";
+ horizontalAlignment: TextInput.AlignRight;
+ }
+ Rectangle{ width: 600; height: 10; color: "pink" }
+ TextInput{
+ height: 30;
+ width: 600;
+ text: "Jackdaws love my big sphinx of quartz";
+ horizontalAlignment: TextInput.AlignLeft;
+ }
+ TextInput{
+ height: 30;
+ width: 600;
+ text: "Jackdaws love my big sphinx of quartz";
+ horizontalAlignment: TextInput.AlignHCenter;
+ }
+ TextInput{
+ height: 30;
+ width: 600;
+ text: "Jackdaws love my big sphinx of quartz";
+ horizontalAlignment: TextInput.AlignRight;
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/drag.0.png b/tests/auto/declarative/visual/qmlmouseregion/data/drag.0.png
new file mode 100644
index 0000000..cf36d60
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/drag.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/drag.1.png b/tests/auto/declarative/visual/qmlmouseregion/data/drag.1.png
new file mode 100644
index 0000000..6069df8
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/drag.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/drag.2.png b/tests/auto/declarative/visual/qmlmouseregion/data/drag.2.png
new file mode 100644
index 0000000..b8bd5f3
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/drag.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/drag.3.png b/tests/auto/declarative/visual/qmlmouseregion/data/drag.3.png
new file mode 100644
index 0000000..cf36d60
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/drag.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/drag.4.png b/tests/auto/declarative/visual/qmlmouseregion/data/drag.4.png
new file mode 100644
index 0000000..831d6b4
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/drag.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/drag.5.png b/tests/auto/declarative/visual/qmlmouseregion/data/drag.5.png
new file mode 100644
index 0000000..f7079dc
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/drag.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/drag.6.png b/tests/auto/declarative/visual/qmlmouseregion/data/drag.6.png
new file mode 100644
index 0000000..a5f4451
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/drag.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/drag.7.png b/tests/auto/declarative/visual/qmlmouseregion/data/drag.7.png
new file mode 100644
index 0000000..e1261d0
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/drag.7.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/drag.8.png b/tests/auto/declarative/visual/qmlmouseregion/data/drag.8.png
new file mode 100644
index 0000000..653905e
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/drag.8.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/drag.qml b/tests/auto/declarative/visual/qmlmouseregion/data/drag.qml
new file mode 100644
index 0000000..5a131e9
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/drag.qml
@@ -0,0 +1,5207 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 32
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 48
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 64
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 80
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 96
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 112
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 128
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 144
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 160
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 176
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 192
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 208
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 224
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 240
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 256
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 272
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 288
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 304
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 320
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 336
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 352
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 368
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 384
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 400
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 416
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 432
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 448
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 464
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 480
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 496
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 512
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 528
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 544
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 560
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 576
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 592
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 608
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 624
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 640
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 656
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 672
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 688
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 704
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 720
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 736
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 752
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 768
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 784
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 800
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 816
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 832
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 848
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 864
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 880
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 896
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 912
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 928
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 944
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 960
+ image: "drag.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 992
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1008
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1024
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1040
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1056
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1072
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1088
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1104
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1120
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1136
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1152
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1168
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1184
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1200
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1216
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1232
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1248
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1264
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1280
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1296
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1312
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1328
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1344
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1360
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1376
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1392
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1408
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1424
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1440
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1456
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1472
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1488
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1504
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1520
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1536
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1552
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1568
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1584
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1600
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1616
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1632
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1648
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1664
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1680
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1696
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1712
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1728
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1744
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1760
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1776
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1792
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 16; y: 54
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1808
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 1824
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 16; y: 55
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 17; y: 55
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1840
+ hash: "b6b4b2c7acddd23609caa9727911b981"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 17; y: 55
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1856
+ hash: "b6b4b2c7acddd23609caa9727911b981"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 18; y: 55
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1872
+ hash: "022610222cfbcf9e9a8991cdb60c7bbb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 19; y: 54
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1888
+ hash: "9b5201a3201a102b20592d81218b5e74"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 22; y: 49
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 29; y: 42
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1904
+ hash: "a6c6df34bb552249393ba208ad327691"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 37; y: 35
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1920
+ image: "drag.1.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 47; y: 27
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1936
+ hash: "978543d8f9688605625f40b960d79c28"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 59; y: 21
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 73; y: 15
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1952
+ hash: "6170ab3a7e51278ac4462b89fe7781b4"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 87; y: 9
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1968
+ hash: "32866f0aa5b13b3ab68661f49336439e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 100; y: 5
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1984
+ hash: "26dc17c16eed46d37932cfe48d182b62"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 111; y: 1
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 121; y: -3
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2000
+ hash: "ba70936fb44396fac184cc7ba0e94a90"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 130; y: -6
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2016
+ hash: "bae13291d4f031c34d80428d83367ede"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 140; y: -8
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2032
+ hash: "0a2fbfdc27bb6662553f637f1c325475"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 151; y: -9
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 160; y: -9
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2048
+ hash: "cdab85736dfcc4424d42e0e96094eded"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 170; y: -9
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2064
+ hash: "76d51ce9ad69560d983d8d86d50f7bd0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 174; y: -9
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2080
+ hash: "b5ada9e80f7f894aa141d5e3cfa5d69e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 176; y: -9
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2096
+ hash: "446d35fc7b9c0fe4bf0bfe0182f994f6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 183; y: -5
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2112
+ hash: "cced849d314835d43ebd93bcfe396c12"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 188; y: -3
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2128
+ hash: "09696d700944c373f82d7c6f75d51c51"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 193; y: 0
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2144
+ hash: "af56586db93c49637c9bfbb17cac9001"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 199; y: 2
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 203; y: 5
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2160
+ hash: "66fc1b30b4037aad3975036faccbb7a7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 209; y: 8
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2176
+ hash: "3f443d9c89d6ba1b36ca9635bc32de1a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 217; y: 11
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2192
+ hash: "df47db8cc7bb466b298749a6449d3d70"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 227; y: 15
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 234; y: 18
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 241; y: 20
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2208
+ hash: "c1146fdc0e628d050442606096e52b10"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 252; y: 23
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2224
+ hash: "22f44c43f300fd7ff2b4d87d93756178"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 272; y: 30
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2240
+ hash: "bf11dc9a9679692abde5d116a169eecf"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 299; y: 38
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 329; y: 48
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2256
+ hash: "e63f1960f342639ac412010ffcefb049"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 360; y: 57
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2272
+ hash: "ae0228419ec9358025c3026a39abd671"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 392; y: 65
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2288
+ hash: "6d2272e2bea21c280100ed8de5b95d4e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 422; y: 72
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 451; y: 76
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2304
+ hash: "1628c6fa5feabd90924452bc9f55054d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 476; y: 78
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2320
+ hash: "f696791eb0a317b0efb69407616bec9f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 497; y: 78
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2336
+ hash: "f696791eb0a317b0efb69407616bec9f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 513; y: 77
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 527; y: 76
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2352
+ hash: "1628c6fa5feabd90924452bc9f55054d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 538; y: 75
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2368
+ hash: "a5d3d247e22a2852a60fe07ab40345a5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 548; y: 74
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2384
+ hash: "a453fb6bcdd87f819782d8d8c46b56ee"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 556; y: 74
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 563; y: 75
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2400
+ hash: "a5d3d247e22a2852a60fe07ab40345a5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 570; y: 76
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2416
+ hash: "1628c6fa5feabd90924452bc9f55054d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 576; y: 78
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2432
+ hash: "f696791eb0a317b0efb69407616bec9f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 582; y: 78
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 585; y: 80
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2448
+ hash: "8f061986df633c21dcad767ee857988c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 589; y: 81
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2464
+ hash: "2cc110a6fb800171d7d752693ede1e4e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 592; y: 82
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2480
+ hash: "319fc3053e02a8b161f33a79d9839bb1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 595; y: 85
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 597; y: 89
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2496
+ hash: "42915c8866746316cf1083a2d55410fb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 601; y: 95
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2512
+ hash: "5df34b3ae292de9a9cd8ff09347e7bd4"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 606; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2528
+ hash: "1f9bc3c955983ea85f568797cb4f7365"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 609; y: 113
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 613; y: 124
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2544
+ hash: "3f156dc64a12c672874acf5456ef4a31"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 618; y: 136
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2560
+ hash: "d4d9fe5b5f138e06a87039ebf8695d03"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 619; y: 142
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2576
+ hash: "383fe813021ee2791930200b2f88a802"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 620; y: 148
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 622; y: 155
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2592
+ hash: "a235544bd5e791dfa329bd0b87358bfa"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 625; y: 163
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2608
+ hash: "a87497cf47db3209610b532efe7eb380"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 629; y: 174
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2624
+ hash: "abe69b4e4b7508028226f9b73c38058a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 634; y: 194
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 642; y: 225
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2640
+ hash: "51c72fa2fa4c8765d882fe65dc0d697d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 649; y: 260
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2656
+ hash: "79da7ed21bd6fc16b7264d4403e763cc"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 655; y: 291
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2672
+ hash: "b2828b6340a57fa45416469b23b7cef0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 658; y: 316
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 659; y: 340
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2688
+ hash: "64a5351f2d746b338c34c7ea9ba6e1fe"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 660; y: 370
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2704
+ hash: "9eedb7a6875210084fd2ec95d3505512"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 661; y: 408
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2720
+ hash: "b88eb8fa8a0cfc263dc7b655ddc29db0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 661; y: 448
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2736
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 660; y: 487
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 659; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2752
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 658; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2768
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 658; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2784
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 658; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 658; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2800
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 657; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2816
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 656; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2832
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 654; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 652; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2848
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 651; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2864
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 650; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2880
+ image: "drag.2.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 650; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 648; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2896
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 647; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2912
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 646; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2928
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 645; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 644; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2944
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 643; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2960
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 642; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2976
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 641; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 640; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2992
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 640; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3008
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 639; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3024
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 639; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 638; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3040
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 636; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3056
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 625; y: 505
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3072
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 611; y: 505
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3088
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 582; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 546; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3104
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 505; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3120
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 460; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3136
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 408; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 354; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3152
+ hash: "c2997fdde10812f02791bfed5f158ac3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 300; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3168
+ hash: "23a6dfbd09e5b44d04f252cedaeb68af"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 250; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3184
+ hash: "f74422989711f86a0840ffc98e8a29e9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 206; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 163; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3200
+ hash: "fa922246d254a7c46d2d1d6ec91a2b02"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 140; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 122; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3216
+ hash: "ef216cb8c2bf58db7d58bd8a2e4eb38d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 101; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3232
+ hash: "a383228d22e64b8a7758c959288eaca8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 64; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3248
+ hash: "636ca2a8e91c49ef6c8b1c93b830f345"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 36; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 16; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3264
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -1; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3280
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3296
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3312
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3328
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3344
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3360
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3376
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 505
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3392
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 504
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 504
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3408
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 505
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3424
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3440
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3456
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3472
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3488
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3504
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3520
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3536
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3552
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Frame {
+ msec: 3568
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3584
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3600
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3616
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Frame {
+ msec: 3632
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 491
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3648
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 428
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3664
+ hash: "9fa1e3686467f28cb013fe093dab388c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 342
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3680
+ hash: "7ef97d10862f80d53e0b3b4446661deb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 264
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 203
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3696
+ hash: "c679866b3965b7b5f48b843d6efccf42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 160
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3712
+ hash: "de4bd9ad3cbb9bb19bf75f871b044072"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 144
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3728
+ hash: "c5349bbddc03edd5ee3537e2a738f1ad"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 136
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 132
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3744
+ hash: "bcbe9ec2687a6030385f08d3dc17becf"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 130
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3760
+ hash: "3ad767f63eaccb9e64a9f704900f2530"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 129
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3776
+ hash: "421a1ffde15fda0e7846bc095ed2ea37"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 128
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 128
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3792
+ hash: "55c260da304a6b1119af83f6a4efcff0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 123
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3808
+ hash: "f231cc521db801b4ec71248812e12db8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 104
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3824
+ hash: "b489b6b604e7f7699cac9e42d0725323"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 68
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 35
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3840
+ image: "drag.3.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 13
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3856
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 2
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3872
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: -6
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: -12
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3888
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: -25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3904
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: -46
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3920
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: -65
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: -70
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3936
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: -74
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3952
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: -76
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3968
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: -76
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3984
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: -76
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4000
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: -77
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4016
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: -78
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4032
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 4048
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: -78
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4064
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 4080
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 4096
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: -77
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4112
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 4128
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 4144
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: -78
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4160
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -3; y: -84
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4176
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -2; y: -105
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 1; y: -151
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4192
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 4208
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 4224
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 4240
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 4256
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 4272
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 4288
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 4304
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 4320
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 4336
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 4352
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 4368
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Frame {
+ msec: 4384
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 3; y: -151
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4400
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 4; y: -149
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4416
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 5; y: -147
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4432
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 5; y: -143
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 6; y: -138
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4448
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 7; y: -130
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4464
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 9; y: -117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4480
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 13; y: -94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 20; y: -63
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4496
+ hash: "b1b54f7bf8ab9cf98d96f9b34192434b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 29; y: -24
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4512
+ hash: "a6c6df34bb552249393ba208ad327691"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 39; y: 15
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4528
+ hash: "a05eb803b1f1f3574a2f2e08fe37bd35"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 49; y: 50
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 58; y: 74
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4544
+ hash: "3c2f3db46673c2640a26832900b609cb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 65; y: 91
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4560
+ hash: "d0539a9791874f48634bb3cb9f78d9db"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 71; y: 103
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4576
+ hash: "f2d862a0b81e2578799d64aef2e6bddc"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 77; y: 112
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 81; y: 121
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4592
+ hash: "295ef097845e30064c4d810a7718896c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 86; y: 128
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4608
+ hash: "22a4a17d82ac402c0e8372861609ff1c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 92; y: 136
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4624
+ hash: "a70e81b1435afd77b9079c58685ef9d0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 98; y: 143
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 104; y: 151
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4640
+ hash: "d66fefd68fcd96834548c18797eee4bd"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 111; y: 159
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4656
+ hash: "fcc435dc6f2643cd21a7cfac078880af"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 118; y: 166
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4672
+ hash: "736edfcf33245d46aaea199634896c17"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 123; y: 173
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 129; y: 183
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4688
+ hash: "7b7ab312d0c6f4bfc87a2ae467324f4e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 137; y: 197
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4704
+ hash: "d78ce756fc27055eeee15001419b7fb5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 146; y: 215
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4720
+ hash: "4f15a726939d7f489d1fe58ebb5bcd0a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 157; y: 235
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 168; y: 255
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4736
+ hash: "72184d71fd2fdc6786a43045db0be68f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 180; y: 274
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4752
+ hash: "3b3f3f34218bf238f310412cb8c4968d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 192; y: 293
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4768
+ hash: "24c00a7154471431d43b1db957ad6424"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 205; y: 316
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 221; y: 343
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4784
+ hash: "30081a33ab007ff2c7ba6cc293a5aec3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 237; y: 371
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4800
+ image: "drag.4.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 253; y: 396
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4816
+ hash: "c0cadb7730838d553b146804c37506b0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 268; y: 419
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 276; y: 429
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 284; y: 438
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4832
+ hash: "101c007d0e2cf82331ba1cab4880e8a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 291; y: 448
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4848
+ hash: "72e46df7427420c5e942a97831723d3f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 307; y: 468
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4864
+ hash: "4b7a009b46982a1e9e31250d7ebf0a20"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 323; y: 492
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 341; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4880
+ hash: "a3ba70933b6452fad0cdc4192e04be23"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 359; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4896
+ hash: "c2ee16182222b403f914eb5550ac6f91"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 378; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4912
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 397; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 416; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4928
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 432; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4944
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 445; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4960
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 456; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 466; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4976
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 475; y: 506
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4992
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 482; y: 505
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5008
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 488; y: 504
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 492; y: 503
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5024
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 496; y: 503
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5040
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 500; y: 502
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5056
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 507; y: 501
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5072
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 512; y: 500
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 516; y: 498
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5088
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 521; y: 494
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5104
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 525; y: 486
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5120
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 532; y: 472
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 542; y: 445
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5136
+ hash: "9356ce797d12ae076af947cd0e658551"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 553; y: 414
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5152
+ hash: "76a8d3b8465f08fdc4586c7766667eff"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 563; y: 389
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5168
+ hash: "569e56ba99776d03dd3140e53bc77f56"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 569; y: 373
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 573; y: 363
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5184
+ hash: "7139c72a2458685006da79d9cf11bc44"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 577; y: 354
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5200
+ hash: "a83d5ef213edec4c8f938ab04afb5c4f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 580; y: 344
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5216
+ hash: "5533602bc8a473c162966142d4bddebd"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 584; y: 321
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 586; y: 301
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5232
+ hash: "7a79d6e31874428233e9c141d70522fd"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 588; y: 264
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5248
+ hash: "b14f4daeb25cd71baae36f4cec111813"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 591; y: 238
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5264
+ hash: "e2b2513d2918ffb85bab5fff5a8be644"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 592; y: 225
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 593; y: 216
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5280
+ hash: "af0cbb3423491917db1fdaa8350d48b0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 594; y: 209
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5296
+ hash: "b9c107f0a13ad37ae05b4d5f9e5f5442"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 594; y: 200
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5312
+ hash: "0bbc0c7a4a40ee6b19565c04c23b565d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 594; y: 182
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 593; y: 146
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5328
+ hash: "49494e8526a1417c151c7cac7099b9e6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 590; y: 107
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5344
+ hash: "5e0839c4414cc8ddc5241c658fd3bf88"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 585; y: 80
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5360
+ hash: "8f061986df633c21dcad767ee857988c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 582; y: 67
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5376
+ hash: "d78c0a4fa0ccad407a565fab3a5c95b9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 579; y: 61
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 576; y: 57
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5392
+ hash: "cee6816f84911bc2262afe28d8996719"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 573; y: 55
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5408
+ hash: "2cc6cd514ef7299dd60bf1a735b81d36"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 569; y: 51
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5424
+ hash: "68c40f3551d7d10e61c5ffbb6948c7e6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 564; y: 44
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 557; y: 35
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5440
+ hash: "68c40f3551d7d10e61c5ffbb6948c7e6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 548; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5456
+ hash: "68c40f3551d7d10e61c5ffbb6948c7e6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 540; y: 14
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 532; y: 5
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5472
+ hash: "68c40f3551d7d10e61c5ffbb6948c7e6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 524; y: -1
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5488
+ hash: "68c40f3551d7d10e61c5ffbb6948c7e6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 517; y: -5
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5504
+ hash: "68c40f3551d7d10e61c5ffbb6948c7e6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 510; y: -9
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5520
+ hash: "68c40f3551d7d10e61c5ffbb6948c7e6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 501; y: -14
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 492; y: -18
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5536
+ hash: "68c40f3551d7d10e61c5ffbb6948c7e6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 483; y: -21
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5552
+ hash: "68c40f3551d7d10e61c5ffbb6948c7e6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 476; y: -21
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5568
+ hash: "68c40f3551d7d10e61c5ffbb6948c7e6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 470; y: -19
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 464; y: -15
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5584
+ hash: "68c40f3551d7d10e61c5ffbb6948c7e6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 458; y: -9
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5600
+ hash: "68c40f3551d7d10e61c5ffbb6948c7e6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 452; y: -3
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5616
+ hash: "68c40f3551d7d10e61c5ffbb6948c7e6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 446; y: 4
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 439; y: 11
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5632
+ hash: "68c40f3551d7d10e61c5ffbb6948c7e6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 432; y: 20
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5648
+ hash: "68c40f3551d7d10e61c5ffbb6948c7e6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 424; y: 29
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5664
+ hash: "68c40f3551d7d10e61c5ffbb6948c7e6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 413; y: 42
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 400; y: 59
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5680
+ hash: "9bc8a652f43c0e3cae9492f5dff624e7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 392; y: 70
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 385; y: 79
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5696
+ hash: "5465128afe72d9618cd9abc47f4ce72f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 378; y: 88
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5712
+ hash: "ad739c2028caf8f89d8ae04d509c7854"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 366; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 353; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5728
+ hash: "97cd37f639a7bea76a2f68774c0753db"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 339; y: 126
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5744
+ hash: "d24fc8a57dd34e6ddb726426247ec219"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 324; y: 140
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5760
+ image: "drag.5.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 308; y: 158
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 288; y: 181
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5776
+ hash: "7af87eb80fa9d87fe8d8b5e4a2fff5e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 266; y: 208
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5792
+ hash: "73623f4a857fd4d5150c2eeef1341540"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 243; y: 237
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5808
+ hash: "076c4b60d9ec197950ade51e3f1be791"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 217; y: 265
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 191; y: 291
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5824
+ hash: "22b7d7765c634763fa86912ea262efca"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 167; y: 314
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5840
+ hash: "1267c017931bda0b88b4672f46d499e0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 147; y: 331
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5856
+ hash: "b6a545e4c14b809f4ebcffbcb59a8e4f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 132; y: 344
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 121; y: 354
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5872
+ hash: "b1085cb508d4613c76e99bc879c62cbf"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 111; y: 363
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5888
+ hash: "365fd1260c2109e6d5bd0a97ce3a7e4e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 100; y: 370
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5904
+ hash: "3a7d001313b23cbbb7f3d842ab40f41b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 86; y: 377
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 66; y: 385
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5920
+ hash: "c5bda48bb2eaee54d6d8416592830327"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 45; y: 394
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5936
+ hash: "5d0fd6d8a6ced4f197fe3b09e7e9155b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 29; y: 402
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5952
+ hash: "79e2825f98644c061ae5216ae1823e4b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 16; y: 410
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 6; y: 417
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5968
+ hash: "22a3978f2f3a0cde67f459527af3b3f2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 0; y: 422
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 427
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5984
+ hash: "1511bec94911dd272f78a726e15bf76e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 432
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6000
+ hash: "0f892f7e570cdc703e492248c9f54b6c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 439
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6016
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 447
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 452
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6032
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 457
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6048
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 459
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6064
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 464
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 465
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6080
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 467
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6096
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 468
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6112
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 468
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 468
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6128
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 468
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6144
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 468
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6160
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 469
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 470
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6176
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 470
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6192
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Frame {
+ msec: 6208
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 470
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6224
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -3; y: 470
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -3; y: 470
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6240
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -2; y: 470
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6256
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -1; y: 470
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6272
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -1; y: 468
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 0; y: 467
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6288
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 0; y: 464
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6304
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 0; y: 458
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6320
+ hash: "ec34aa6937d2c081bdf11660a5eb461a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -3; y: 441
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 408
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6336
+ hash: "58413f9b01f1e0b49519d8b6a3011607"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 366
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6352
+ hash: "b3992d2f9c1383c710ee325a94117a8b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 327
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6368
+ hash: "bd415044fcf6218d8184cb0206105e65"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 300
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 288
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6384
+ hash: "e7296140fe8b28bed77e95e588c0e463"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 280
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6400
+ hash: "9ff532223ccccd663809187465e478c2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 276
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6416
+ hash: "4de9ca75503db05df5d8274d75c202e5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 271
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 259
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6432
+ hash: "a83b5bc409207e986055081b4ed3faa6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 227
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6448
+ hash: "7fdbd00dd3553241f30fd6568a8ab646"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 190
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6464
+ hash: "5ebaa67eaadc1ede8c46964fa1dffff1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -4; y: 169
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -2; y: 160
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6480
+ hash: "de4bd9ad3cbb9bb19bf75f871b044072"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 1; y: 156
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6496
+ hash: "9d762cd4dd6508cf8b54c47b76f4ef37"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 5; y: 155
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6512
+ hash: "bdf17c384f4f824a89a06b88ba17c15f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 10; y: 154
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 25; y: 152
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6528
+ hash: "f279f28995785afd143726aef7673b50"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 52; y: 149
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6544
+ hash: "53b6b82a61d017e12afb01a728d8d856"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 80; y: 148
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6560
+ hash: "9a48039175cab1360a0cf5cc195e2082"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 98; y: 148
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 112; y: 150
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6576
+ hash: "cfc3991e30eef6c2edb66cb6060b2bde"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 123; y: 153
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6592
+ hash: "737d8907f62768e623ba76866a509d1e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 134; y: 155
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6608
+ hash: "dea2a596f7d85f29728b33d126d997e5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 145; y: 158
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 157; y: 161
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6624
+ hash: "3969a0bbb284ab1d5efd20cf93b0422d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 168; y: 164
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6640
+ hash: "071ff25e49f7f16a727ff58c42ff766e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 176; y: 169
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6656
+ hash: "454abec991a4675763f379c256919fa7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 184; y: 173
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 189; y: 177
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6672
+ hash: "6de741c4e6057dc8580106155c4ac627"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 194; y: 184
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6688
+ hash: "e35853e99cd205b7ccabdf632b238584"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 199; y: 192
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6704
+ hash: "15a70a0196227c6bce50ed70cd6383c8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 204; y: 201
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 211; y: 210
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6720
+ image: "drag.6.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 217; y: 217
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6736
+ hash: "5e951eb6017a060287e398fcaf4aeba9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 224; y: 223
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6752
+ hash: "ddd0f27027e23a45aef131296c781865"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 235; y: 228
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 246; y: 232
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6768
+ hash: "715102a252756e5a8c4f459d808aec6a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 257; y: 235
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6784
+ hash: "42b9c1b894247ddbd85f4a4aca5695f1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 267; y: 239
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6800
+ hash: "b67b4bdd412ed5160901803c60c6f19e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 275; y: 239
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 280; y: 239
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6816
+ hash: "3490cc41c2b1f9301c209bdb8f052add"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 281; y: 239
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6832
+ hash: "df32868d564ebbc41c359409b5a69e7d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 282; y: 239
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6848
+ hash: "b9cb430a6f677e67c87322e0aff53fb1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 282; y: 239
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6864
+ hash: "b9cb430a6f677e67c87322e0aff53fb1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 281; y: 239
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6880
+ hash: "df32868d564ebbc41c359409b5a69e7d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 280; y: 239
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6896
+ hash: "3490cc41c2b1f9301c209bdb8f052add"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 279; y: 240
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6912
+ hash: "e23a88f49a73cd2a9326095dd380ab55"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 277; y: 240
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6928
+ hash: "ffffc1aed27fe77c2fe5c035eab706a9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 277; y: 240
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6944
+ hash: "ffffc1aed27fe77c2fe5c035eab706a9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 276; y: 240
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6960
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 276; y: 240
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6976
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 6992
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 276; y: 240
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7008
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7024
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7040
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7056
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7072
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7088
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7104
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7120
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7136
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7152
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7168
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7184
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7200
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7216
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7232
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7248
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7264
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7280
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7296
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7312
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7328
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7344
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7360
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7376
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7392
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7408
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7424
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7440
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7456
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7472
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7488
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7504
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7520
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7536
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7552
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7568
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7584
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7600
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7616
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7632
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7648
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7664
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7680
+ image: "drag.7.png"
+ }
+ Frame {
+ msec: 7696
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7712
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7728
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7744
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7760
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7776
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7792
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7808
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7824
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7840
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7856
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7872
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7888
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7904
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7920
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7936
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7952
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7968
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 7984
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+ Frame {
+ msec: 8000
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.0.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.0.png
new file mode 100644
index 0000000..c249c21
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.1.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.1.png
new file mode 100644
index 0000000..a96bf1b
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.10.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.10.png
new file mode 100644
index 0000000..7420ca7
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.10.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.11.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.11.png
new file mode 100644
index 0000000..7420ca7
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.11.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.12.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.12.png
new file mode 100644
index 0000000..7420ca7
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.12.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.13.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.13.png
new file mode 100644
index 0000000..7420ca7
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.13.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.14.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.14.png
new file mode 100644
index 0000000..7420ca7
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.14.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.15.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.15.png
new file mode 100644
index 0000000..e797cc9
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.15.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.16.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.16.png
new file mode 100644
index 0000000..7951309
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.16.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.17.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.17.png
new file mode 100644
index 0000000..7951309
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.17.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.18.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.18.png
new file mode 100644
index 0000000..7951309
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.18.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.19.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.19.png
new file mode 100644
index 0000000..7951309
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.19.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.2.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.2.png
new file mode 100644
index 0000000..a96bf1b
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.20.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.20.png
new file mode 100644
index 0000000..7951309
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.20.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.21.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.21.png
new file mode 100644
index 0000000..7951309
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.21.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.22.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.22.png
new file mode 100644
index 0000000..7951309
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.22.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.3.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.3.png
new file mode 100644
index 0000000..a96bf1b
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.4.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.4.png
new file mode 100644
index 0000000..1fe365a
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.5.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.5.png
new file mode 100644
index 0000000..1fe365a
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.6.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.6.png
new file mode 100644
index 0000000..1fe365a
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.7.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.7.png
new file mode 100644
index 0000000..1fe365a
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.7.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.8.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.8.png
new file mode 100644
index 0000000..7420ca7
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.8.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.9.png b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.9.png
new file mode 100644
index 0000000..7420ca7
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.9.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.qml b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.qml
new file mode 100644
index 0000000..cc374fd
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/data/mouseregion.qml
@@ -0,0 +1,5867 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 32
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 48
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 64
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 80
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 96
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 112
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 128
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 144
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 160
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 176
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 192
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 208
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 224
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 240
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 256
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 272
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 288
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 304
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 320
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 336
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 352
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 368
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 384
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 400
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 416
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 432
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 448
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 464
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 480
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 496
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 512
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 528
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 544
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 560
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 576
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 592
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 608
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 624
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 640
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 656
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 672
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 688
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 704
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 720
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 736
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 752
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 768
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 784
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 800
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 816
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 832
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 848
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 864
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 880
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 896
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 912
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 928
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 944
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 960
+ image: "mouseregion.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 992
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1008
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1024
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1040
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1056
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1072
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1088
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1104
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1120
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1136
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1152
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1168
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1184
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1200
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1216
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1232
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1248
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1264
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1280
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1296
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1312
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1328
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1344
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1360
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1376
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1392
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1408
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1424
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1440
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1456
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1472
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1488
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1504
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1520
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1536
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1552
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1568
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1584
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1600
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1616
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1632
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1648
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Frame {
+ msec: 1664
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 2; y: 29
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 7; y: 32
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1680
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 19; y: 40
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 33; y: 48
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1696
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 49; y: 54
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1712
+ hash: "337f0f4af627bbdf8807135ce39d5070"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 67; y: 56
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 74; y: 56
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1728
+ hash: "337f0f4af627bbdf8807135ce39d5070"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 78; y: 57
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 81; y: 57
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1744
+ hash: "337f0f4af627bbdf8807135ce39d5070"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 82; y: 56
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 83; y: 55
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1760
+ hash: "337f0f4af627bbdf8807135ce39d5070"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 83; y: 54
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1776
+ hash: "337f0f4af627bbdf8807135ce39d5070"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 83; y: 53
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1792
+ hash: "337f0f4af627bbdf8807135ce39d5070"
+ }
+ Frame {
+ msec: 1808
+ hash: "337f0f4af627bbdf8807135ce39d5070"
+ }
+ Frame {
+ msec: 1824
+ hash: "337f0f4af627bbdf8807135ce39d5070"
+ }
+ Frame {
+ msec: 1840
+ hash: "337f0f4af627bbdf8807135ce39d5070"
+ }
+ Frame {
+ msec: 1856
+ hash: "337f0f4af627bbdf8807135ce39d5070"
+ }
+ Frame {
+ msec: 1872
+ hash: "337f0f4af627bbdf8807135ce39d5070"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 83; y: 52
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 82; y: 51
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1888
+ hash: "337f0f4af627bbdf8807135ce39d5070"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 80; y: 50
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 78; y: 48
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1904
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 75; y: 46
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 73; y: 45
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1920
+ image: "mouseregion.1.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 71; y: 43
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 68; y: 41
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1936
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 66; y: 40
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1952
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 64; y: 39
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 63; y: 37
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1968
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 61; y: 36
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 60; y: 36
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1984
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 58; y: 34
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 57; y: 33
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2000
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 56; y: 32
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2016
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 55; y: 30
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 54; y: 29
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2032
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2048
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2064
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2080
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2096
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2112
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2128
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 54; y: 29
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2144
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2160
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2176
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2192
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2208
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2224
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2240
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 54; y: 29
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2256
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2272
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2288
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2304
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2320
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2336
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2352
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2368
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2384
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2400
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2416
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2432
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2448
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2464
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2480
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2496
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2512
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2528
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2544
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2560
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2576
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2592
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2608
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2624
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2640
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 2
+ button: 2
+ buttons: 2
+ x: 54; y: 29
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2656
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2672
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2688
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2704
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2720
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2736
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2752
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 3
+ button: 2
+ buttons: 0
+ x: 54; y: 29
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2768
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2784
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2800
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2816
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2832
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2848
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2864
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 2880
+ image: "mouseregion.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 55; y: 29
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 58; y: 29
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2912
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 62; y: 29
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 67; y: 29
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2928
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 75; y: 30
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2944
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 91; y: 34
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 99; y: 34
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2960
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 107; y: 34
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 113; y: 34
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2976
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 119; y: 34
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 124; y: 33
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2992
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 128; y: 33
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 131; y: 32
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3008
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 132; y: 32
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 132; y: 31
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3024
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3040
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3056
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3072
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3088
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3104
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3120
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3136
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3152
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3168
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3184
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3200
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3216
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3232
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3248
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3264
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3280
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3296
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3312
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3328
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3344
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3360
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3376
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3392
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3408
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3424
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3440
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3456
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3472
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3488
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3504
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3520
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3536
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3552
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 133; y: 31
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3568
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3584
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 133; y: 31
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3600
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3616
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3632
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3648
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3664
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3680
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3696
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 133; y: 31
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3712
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3728
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3744
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3760
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3776
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3792
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3808
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3824
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3840
+ image: "mouseregion.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3872
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3888
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3904
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3920
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3936
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3952
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3968
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 3984
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4000
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4016
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4032
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4048
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4064
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4080
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4096
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4112
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4128
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4144
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4160
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4176
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4192
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4208
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4224
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4240
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4256
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4272
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4288
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4304
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4320
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 2
+ button: 2
+ buttons: 2
+ x: 133; y: 31
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4336
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4352
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4368
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4384
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4400
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4416
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Frame {
+ msec: 4432
+ hash: "73f1639b9e2164c7b974042934c0d151"
+ }
+ Mouse {
+ type: 3
+ button: 2
+ buttons: 0
+ x: 133; y: 31
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4448
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 4464
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 4480
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 4496
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 4512
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 4528
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 4544
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 4560
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 4576
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 4592
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 4608
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 4624
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 4640
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 4656
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 4672
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 4688
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 4704
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 4720
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 4736
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 133; y: 32
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 136; y: 32
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4752
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 142; y: 32
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 148; y: 32
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4768
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 155; y: 32
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 161; y: 32
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4784
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 166; y: 31
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4800
+ image: "mouseregion.4.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 168; y: 31
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 170; y: 30
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4816
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 171; y: 29
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4832
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 4848
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 4864
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 4880
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 172; y: 28
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 175; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4896
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 178; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4912
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 182; y: 24
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 187; y: 22
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4928
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 191; y: 22
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 195; y: 21
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4944
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 200; y: 21
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 206; y: 21
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4960
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 211; y: 21
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 215; y: 21
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4976
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 218; y: 21
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 221; y: 20
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4992
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 224; y: 20
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5008
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 225; y: 20
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 226; y: 20
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5024
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 227; y: 20
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5040
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5056
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5072
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 228; y: 20
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 229; y: 20
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5088
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 231; y: 20
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 232; y: 20
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5104
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 233; y: 20
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5120
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5136
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5152
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5168
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 233; y: 21
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 234; y: 22
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5184
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 237; y: 23
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5200
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 239; y: 24
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 242; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5216
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 244; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 245; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5232
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 247; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5248
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5264
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5280
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5296
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5312
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5328
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5344
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5360
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5376
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5392
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5408
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5424
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5440
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5456
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5472
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5488
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5504
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5520
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5536
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5552
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5568
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5584
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5600
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5616
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5632
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5648
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5664
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5680
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5696
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5712
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5728
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5744
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5760
+ image: "mouseregion.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5792
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5808
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5824
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5840
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 247; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5856
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5872
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5888
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5904
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5920
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5936
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 247; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5952
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5968
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 5984
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6000
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6016
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6032
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6048
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6064
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6080
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6096
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6112
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6128
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6144
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6160
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6176
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6192
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6208
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6224
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6240
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6256
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6272
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6288
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6304
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6320
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6336
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6352
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6368
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6384
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6400
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6416
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6432
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6448
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6464
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6480
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6496
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6512
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6528
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6544
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6560
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6576
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 247; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6592
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6608
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6624
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6640
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 247; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6656
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6672
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6688
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6704
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6720
+ image: "mouseregion.6.png"
+ }
+ Frame {
+ msec: 6736
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 4
+ button: 1
+ buttons: 1
+ x: 247; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6752
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6768
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6784
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6800
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6816
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6832
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 247; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6848
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6864
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6880
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6896
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6912
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6928
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6944
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6960
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6976
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 6992
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7008
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7024
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7040
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7056
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7072
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7088
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7104
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7120
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7136
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7152
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7168
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7184
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7200
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 247; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7216
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7232
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7248
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7264
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7280
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7296
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7312
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7328
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7344
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7360
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7376
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7392
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7408
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7424
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7440
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7456
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7472
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7488
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7504
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7520
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7536
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7552
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7568
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7584
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7600
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7616
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7632
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7648
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7664
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7680
+ image: "mouseregion.7.png"
+ }
+ Frame {
+ msec: 7696
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7712
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7728
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7744
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7760
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7776
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7792
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7808
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7824
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7840
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7856
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7872
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7888
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7904
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7920
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7936
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7952
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7968
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 7984
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 8000
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
+ }
+ Frame {
+ msec: 8016
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8032
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8048
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8064
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8080
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8096
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8112
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8128
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8144
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8160
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8176
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8192
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8208
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8224
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8240
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8256
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8272
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8288
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8304
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8320
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8336
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 247; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8352
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8368
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8384
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8400
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8416
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8432
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8448
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8464
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8480
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8496
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8512
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8528
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 248; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8544
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 254; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 259; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8560
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 264; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 268; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8576
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 273; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 277; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8592
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 281; y: 24
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 284; y: 24
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8608
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 287; y: 24
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 289; y: 24
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8624
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 292; y: 24
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8640
+ image: "mouseregion.8.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 294; y: 24
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 295; y: 24
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8656
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 297; y: 24
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 299; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8672
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 301; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 304; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8688
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 307; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8704
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 310; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 312; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8720
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 314; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 315; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8736
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 317; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 318; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8752
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 319; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8768
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 320; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8784
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 322; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 323; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8800
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 325; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 327; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8816
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 330; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 333; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8832
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 336; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 338; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8848
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 339; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8864
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 340; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8880
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 8896
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 340; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8912
+ hash: "d1f2fc2133f3d6554e41982196662c2a"
+ }
+ Frame {
+ msec: 8928
+ hash: "d1f2fc2133f3d6554e41982196662c2a"
+ }
+ Frame {
+ msec: 8944
+ hash: "d1f2fc2133f3d6554e41982196662c2a"
+ }
+ Frame {
+ msec: 8960
+ hash: "d1f2fc2133f3d6554e41982196662c2a"
+ }
+ Frame {
+ msec: 8976
+ hash: "d1f2fc2133f3d6554e41982196662c2a"
+ }
+ Frame {
+ msec: 8992
+ hash: "d1f2fc2133f3d6554e41982196662c2a"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 340; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9008
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9024
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9040
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9056
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9072
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9088
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9104
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9120
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9136
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9152
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9168
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9184
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9200
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9216
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9232
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9248
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9264
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9280
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9296
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9312
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9328
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9344
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9360
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9376
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9392
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9408
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9424
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9440
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9456
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9472
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9488
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9504
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9520
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9536
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9552
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9568
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9584
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 9600
+ image: "mouseregion.9.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 339; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9616
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 336; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9632
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 332; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 326; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9648
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 320; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 312; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9664
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 292; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 283; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9680
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 261; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9696
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 252; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 243; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9712
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 225; y: 29
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 207; y: 33
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9728
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 189; y: 35
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 169; y: 39
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9744
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 161; y: 40
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 145; y: 44
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9760
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 138; y: 45
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9776
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 133; y: 48
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 127; y: 50
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9792
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 122; y: 52
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 118; y: 56
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9808
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 114; y: 57
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 110; y: 60
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9824
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 109; y: 61
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9840
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 107; y: 62
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 106; y: 63
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9856
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 103; y: 63
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 100; y: 64
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9872
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 96; y: 64
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 92; y: 65
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9888
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 88; y: 65
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9904
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 85; y: 66
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 82; y: 67
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9920
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 79; y: 69
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 77; y: 70
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9936
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 74; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 70; y: 72
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9952
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 67; y: 74
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 64; y: 75
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9968
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 62; y: 76
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 9984
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 61; y: 76
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 60; y: 77
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10000
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Frame {
+ msec: 10016
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Frame {
+ msec: 10032
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 59; y: 77
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10048
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 58; y: 77
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 57; y: 77
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10064
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 56; y: 76
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10080
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Frame {
+ msec: 10096
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Frame {
+ msec: 10112
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Frame {
+ msec: 10128
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Frame {
+ msec: 10144
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Frame {
+ msec: 10160
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Frame {
+ msec: 10176
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Frame {
+ msec: 10192
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Frame {
+ msec: 10208
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Frame {
+ msec: 10224
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Frame {
+ msec: 10240
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 57; y: 76
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 59; y: 75
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10256
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 62; y: 75
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10272
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 65; y: 74
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 69; y: 74
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10288
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 72; y: 73
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 76; y: 73
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10304
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 80; y: 72
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 84; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10320
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 87; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 90; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10336
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 93; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10352
+ hash: "6627c7a1a4da7e642f4b4b24ca5e8e7a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 96; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 99; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10368
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 102; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 106; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10384
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 108; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 110; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10400
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 113; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 115; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10416
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 118; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 121; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10432
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 123; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10448
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 126; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 128; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10464
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 130; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 132; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10480
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 133; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10496
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 134; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10512
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10528
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 135; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 136; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10544
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 137; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 138; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10560
+ image: "mouseregion.10.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 140; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 10576
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10592
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10608
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10624
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10640
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10656
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10672
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10688
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10704
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10720
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10736
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10752
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10768
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10784
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10800
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10816
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10832
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10848
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10864
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10880
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10896
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10912
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10928
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10944
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10960
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10976
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 10992
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11008
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11024
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11040
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11056
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11072
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11088
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11104
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11120
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11136
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11152
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11168
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11184
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11200
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11216
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11232
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11248
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11264
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11280
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11296
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11312
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11328
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11344
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11360
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11376
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11392
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11408
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11424
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11440
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11456
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11472
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11488
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11504
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11520
+ image: "mouseregion.11.png"
+ }
+ Frame {
+ msec: 11536
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11552
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11568
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11584
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11600
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11616
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11632
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11648
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11664
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11680
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11696
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11712
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 2
+ button: 2
+ buttons: 2
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11728
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11744
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11760
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11776
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11792
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11808
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11824
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 3
+ button: 2
+ buttons: 0
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 11840
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11856
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11872
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11888
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11904
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11920
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11936
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11952
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11968
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 11984
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12000
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12016
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12032
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12048
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 4
+ button: 2
+ buttons: 2
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12064
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12080
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12096
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12112
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12128
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12144
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12160
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12176
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12192
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12208
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 3
+ button: 2
+ buttons: 0
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12224
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12240
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12256
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12272
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12288
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12304
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12320
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12336
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12352
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12368
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12384
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12400
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12416
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12432
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12448
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 2
+ button: 2
+ buttons: 3
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12464
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12480
+ image: "mouseregion.12.png"
+ }
+ Frame {
+ msec: 12496
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12512
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12528
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 3
+ button: 2
+ buttons: 1
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12544
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12560
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12576
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12592
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12608
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12624
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12640
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12656
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12672
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12688
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12704
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12720
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12736
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12752
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12768
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12784
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12800
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12816
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12832
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 4
+ button: 1
+ buttons: 1
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12848
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12864
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12880
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12896
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12912
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12928
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12944
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12960
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 12976
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 12992
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13008
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13024
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13040
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13056
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 13072
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13088
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 4
+ button: 1
+ buttons: 1
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 13104
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13120
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13136
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13152
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13168
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13184
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 13200
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13216
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13232
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13248
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13264
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13280
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13296
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 13312
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13328
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13344
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13360
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13376
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 13392
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13408
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13424
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13440
+ image: "mouseregion.13.png"
+ }
+ Frame {
+ msec: 13456
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13472
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13488
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13504
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13520
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13536
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13552
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13568
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13584
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13600
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13616
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13632
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 2
+ button: 2
+ buttons: 2
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 13648
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13664
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13680
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13696
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13712
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 3
+ button: 2
+ buttons: 0
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 13728
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13744
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13760
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13776
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13792
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13808
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 4
+ button: 2
+ buttons: 2
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 13824
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13840
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13856
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13872
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13888
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13904
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 3
+ button: 2
+ buttons: 0
+ x: 141; y: 71
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 13920
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13936
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13952
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13968
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 13984
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14000
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14016
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14032
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14048
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14064
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14080
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14096
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14112
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14128
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14144
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14160
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14176
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 141; y: 70
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 148; y: 68
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 14192
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 152; y: 68
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 158; y: 68
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 14208
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 164; y: 68
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 14224
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 171; y: 66
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 187; y: 62
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 205; y: 60
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 14240
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 223; y: 56
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 14256
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 239; y: 52
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 255; y: 46
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 14272
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 269; y: 40
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 285; y: 34
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 14288
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 299; y: 28
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 313; y: 20
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 14304
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 320; y: 18
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 326; y: 15
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 14320
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 340; y: 7
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 14336
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14352
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14368
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14384
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14400
+ image: "mouseregion.14.png"
+ }
+ Frame {
+ msec: 14416
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14432
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14448
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14464
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14480
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14496
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14512
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14528
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14544
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14560
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14576
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14592
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14608
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14624
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14640
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14656
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14672
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14688
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14704
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14720
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14736
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14752
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14768
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14784
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14800
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14816
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14832
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14848
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14864
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14880
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14896
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14912
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+ Frame {
+ msec: 14928
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlmouseregion/drag.qml b/tests/auto/declarative/visual/qmlmouseregion/drag.qml
new file mode 100644
index 0000000..ab4c280
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/drag.qml
@@ -0,0 +1,21 @@
+import Qt 4.6
+
+Rectangle{
+ width:400
+ height:440
+ color: "white"
+ Rectangle{
+ id: draggable
+ width:40; height:40; color: "lightsteelblue"
+ y:20
+ MouseRegion{
+ anchors.fill: parent
+ drag.target: draggable
+ drag.axis: "XandYAxis"
+ drag.minimumX: 0
+ drag.maximumX: 360
+ drag.minimumY: 20
+ drag.maximumY: 400
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlmouseregion/mouseregion.qml b/tests/auto/declarative/visual/qmlmouseregion/mouseregion.qml
new file mode 100644
index 0000000..ab4223d
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlmouseregion/mouseregion.qml
@@ -0,0 +1,124 @@
+import Qt 4.6
+
+Rectangle {
+ id: root
+ width: 400
+ height: 100
+
+ // Left click on me
+ Rectangle {
+ width: 98; height: 48
+ color: "red"
+ MouseRegion {
+ id: mr1
+ anchors.fill: parent
+ enabled: false
+ onClicked: { parent.color = "blue"; root.error = "mr1 should ignore presses"; }
+ }
+ }
+
+ // Left click, then right click
+ Rectangle {
+ x: 100
+ width: 98; height: 48
+ color: "red"
+ MouseRegion {
+ id: mr2
+ anchors.fill: parent
+ acceptedButtons: Qt.RightButton
+ onClicked: {
+ if (mouse.button == Qt.RightButton) {
+ parent.color = "blue";
+ } else {
+ parent.color = "green";
+ root.error = "mr1 should ignore presses";
+ }
+ }
+ }
+ }
+
+ // press and hold me
+ Rectangle {
+ x: 200
+ width: 98; height: 48
+ color: "red"
+ MouseRegion {
+ id: mr3
+ anchors.fill: parent
+ onPressAndHold: {
+ parent.color = "blue";
+ }
+ }
+ }
+
+ // click me
+ Rectangle {
+ x: 300
+ width: 98; height: 48
+ color: "red"
+ MouseRegion {
+ id: mr4
+ anchors.fill: parent
+ onPressed: {
+ parent.color = "blue";
+ }
+ onReleased: {
+ parent.color = "red";
+ }
+ }
+ }
+
+ // move into and out of me
+ Rectangle {
+ x: 0
+ y: 50
+ width: 98; height: 48
+ color: "red"
+ MouseRegion {
+ id: mr5
+ anchors.fill: parent
+ hoverEnabled: true
+ onEntered: {
+ parent.color = "blue";
+ }
+ onExited: {
+ parent.color = "green";
+ }
+ }
+ }
+
+ // click, then double click me
+ Rectangle {
+ x: 100
+ y: 50
+ width: 98; height: 48
+ color: "red"
+ MouseRegion {
+ id: mr6
+ anchors.fill: parent
+ onClicked: {
+ parent.color = "blue";
+ }
+ onDoubleClicked: {
+ parent.color = "green";
+ }
+ }
+ }
+
+ // click, then double click me - nothing should happen
+ Rectangle {
+ x: 100
+ y: 50
+ width: 98; height: 48
+ color: "red"
+ MouseRegion {
+ id: mr7
+ anchors.fill: parent
+ enabled: false
+ onClicked: { parent.color = "blue" }
+ onPressed: { parent.color = "yellow" }
+ onReleased: { parent.color = "cyan" }
+ onDoubleClicked: { parent.color = "green" }
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlspringfollow/clock.qml b/tests/auto/declarative/visual/qmlspringfollow/clock.qml
new file mode 100644
index 0000000..04bbabc
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/clock.qml
@@ -0,0 +1,64 @@
+import Qt 4.6
+
+Rectangle {
+ id: clock
+ color: "gray"
+ width: 200; height: 200
+
+ property var hours: 10
+ property var minutes: 28
+ property var seconds: 0
+
+ Timer {
+ interval: 1000; running: true; repeat: true; triggeredOnStart: true
+ onTriggered: seconds++
+ }
+
+ Image { id: background; source: "content/clock.png" }
+
+ Image {
+ x: 92.5; y: 27
+ source: "content/hour.png"
+ smooth: true
+ transform: Rotation {
+ id: hourRotation
+ origin.x: 7.5; origin.y: 73; angle: 0
+ angle: SpringFollow {
+ spring: 2; damping: 0.2; modulus: 360
+ source: (clock.hours * 30) + (clock.minutes * 0.5)
+ }
+ }
+ }
+
+ Image {
+ x: 93.5; y: 17
+ source: "content/minute.png"
+ smooth: true
+ transform: Rotation {
+ id: minuteRotation
+ origin.x: 6.5; origin.y: 83; angle: 0
+ angle: SpringFollow {
+ spring: 2; damping: 0.2; modulus: 360
+ source: clock.minutes * 6
+ }
+ }
+ }
+
+ Image {
+ x: 97.5; y: 20
+ source: "content/second.png"
+ smooth: true
+ transform: Rotation {
+ id: secondRotation
+ origin.x: 2.5; origin.y: 80; angle: 0
+ angle: SpringFollow {
+ spring: 5; damping: 0.25; modulus: 360
+ source: clock.seconds * 6
+ }
+ }
+ }
+
+ Image {
+ anchors.centerIn: background; source: "content/center.png"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlspringfollow/content/background.png b/tests/auto/declarative/visual/qmlspringfollow/content/background.png
new file mode 100644
index 0000000..a885950
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/content/background.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlspringfollow/content/center.png b/tests/auto/declarative/visual/qmlspringfollow/content/center.png
new file mode 100755
index 0000000..7fbd802
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/content/center.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlspringfollow/content/clock.png b/tests/auto/declarative/visual/qmlspringfollow/content/clock.png
new file mode 100755
index 0000000..462edac
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/content/clock.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlspringfollow/content/hour.png b/tests/auto/declarative/visual/qmlspringfollow/content/hour.png
new file mode 100755
index 0000000..f8061a1
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/content/hour.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlspringfollow/content/minute.png b/tests/auto/declarative/visual/qmlspringfollow/content/minute.png
new file mode 100755
index 0000000..1297ec7
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/content/minute.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlspringfollow/content/second.png b/tests/auto/declarative/visual/qmlspringfollow/content/second.png
new file mode 100755
index 0000000..4aa9fb5
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/content/second.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlspringfollow/data/clock.0.png b/tests/auto/declarative/visual/qmlspringfollow/data/clock.0.png
new file mode 100644
index 0000000..baf1d45
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/data/clock.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlspringfollow/data/clock.1.png b/tests/auto/declarative/visual/qmlspringfollow/data/clock.1.png
new file mode 100644
index 0000000..932f63f
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/data/clock.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlspringfollow/data/clock.2.png b/tests/auto/declarative/visual/qmlspringfollow/data/clock.2.png
new file mode 100644
index 0000000..a5cb437
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/data/clock.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlspringfollow/data/clock.3.png b/tests/auto/declarative/visual/qmlspringfollow/data/clock.3.png
new file mode 100644
index 0000000..62e895c
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/data/clock.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlspringfollow/data/clock.qml b/tests/auto/declarative/visual/qmlspringfollow/data/clock.qml
new file mode 100644
index 0000000..ffc6a5e
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/data/clock.qml
@@ -0,0 +1,1135 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "d17c9cd015b065adf7e36ad0d4f6c00c"
+ }
+ Frame {
+ msec: 32
+ hash: "e759f652c69a06d01837302cc0369a58"
+ }
+ Frame {
+ msec: 48
+ hash: "392855ef490903121fb894858961dfb0"
+ }
+ Frame {
+ msec: 64
+ hash: "5ba4248f606a3a35d840cb98eff30b46"
+ }
+ Frame {
+ msec: 80
+ hash: "3b97e1ab4054c20d19c1d05f795b71de"
+ }
+ Frame {
+ msec: 96
+ hash: "81904d248125cf35249f79da7e94d8d7"
+ }
+ Frame {
+ msec: 112
+ hash: "474179152aad4b64904c8b7c63581a89"
+ }
+ Frame {
+ msec: 128
+ hash: "583a7906d1dc41d8ce8d0c8f28c9b8c5"
+ }
+ Frame {
+ msec: 144
+ hash: "341437083f858e2dca36a8bb39559a1e"
+ }
+ Frame {
+ msec: 160
+ hash: "ed75a933c176ed6ac3fa5b2986cbfade"
+ }
+ Frame {
+ msec: 176
+ hash: "5494c10d3984a9be607b8b5ee659ebfc"
+ }
+ Frame {
+ msec: 192
+ hash: "7af8dfca43036ee69012cbb100d110ad"
+ }
+ Frame {
+ msec: 208
+ hash: "356b8185889e560b5a1a2d6436dac834"
+ }
+ Frame {
+ msec: 224
+ hash: "f601a66de5dc1a388e515ba4ff14be6e"
+ }
+ Frame {
+ msec: 240
+ hash: "4cfb9f3a72070533288b2e50820cbbbd"
+ }
+ Frame {
+ msec: 256
+ hash: "ddcb670af0806dadf5897bcd3fd65cd7"
+ }
+ Frame {
+ msec: 272
+ hash: "3fedf4aa340d7632359273b1eb71c5a3"
+ }
+ Frame {
+ msec: 288
+ hash: "3dab7e1eaccb68b14e30741775db6ff7"
+ }
+ Frame {
+ msec: 304
+ hash: "015ab6c080c2ffab8ac763681bf3f95c"
+ }
+ Frame {
+ msec: 320
+ hash: "74f438510f0d8f64120cc45bca7f4f5d"
+ }
+ Frame {
+ msec: 336
+ hash: "e57666fb224cdbf869e5be4ef3391be9"
+ }
+ Frame {
+ msec: 352
+ hash: "ff8b3dddd4d10b111b38801470fcbfd0"
+ }
+ Frame {
+ msec: 368
+ hash: "e547ee9f1e509d5db980cb91fce5f6ee"
+ }
+ Frame {
+ msec: 384
+ hash: "aaa9fb71bd47ad3a1c753d7ac918e399"
+ }
+ Frame {
+ msec: 400
+ hash: "54a335aac86669138730c0735ea99c8b"
+ }
+ Frame {
+ msec: 416
+ hash: "ff8f30aaa7afd8abfdd147b830e9d6c4"
+ }
+ Frame {
+ msec: 432
+ hash: "07f8fca270953cf815cb0e77534da824"
+ }
+ Frame {
+ msec: 448
+ hash: "30799c12182b2c3eb2f28b05d81ed6fc"
+ }
+ Frame {
+ msec: 464
+ hash: "6244e3b740218aec56c81c92dc57abcb"
+ }
+ Frame {
+ msec: 480
+ hash: "cb10a34e3d234043704e633b49184607"
+ }
+ Frame {
+ msec: 496
+ hash: "66de73779b5f86a6a1692eb74be24201"
+ }
+ Frame {
+ msec: 512
+ hash: "4c4c0b5e75f0f587ace8002720d78309"
+ }
+ Frame {
+ msec: 528
+ hash: "88c774ec272c72457b35b60306c2bc21"
+ }
+ Frame {
+ msec: 544
+ hash: "28ce64adc1d35d6bc34174765beda553"
+ }
+ Frame {
+ msec: 560
+ hash: "37238c3d6dc0c34bf4e00ba2a82ce3aa"
+ }
+ Frame {
+ msec: 576
+ hash: "d14dd306fec80f1a1ff9a85aa51b9a57"
+ }
+ Frame {
+ msec: 592
+ hash: "bfa2ec6fa546c75ee85e2ebeb3af8e3c"
+ }
+ Frame {
+ msec: 608
+ hash: "d1ec3faab47065f34e9397fd73f9edce"
+ }
+ Frame {
+ msec: 624
+ hash: "0b59b5dba365fff38872b520afc84edb"
+ }
+ Frame {
+ msec: 640
+ hash: "3c4ae01b5e878b85a2eea403f3ad478a"
+ }
+ Frame {
+ msec: 656
+ hash: "329111f7079230e8b3cfda1217e8fcdf"
+ }
+ Frame {
+ msec: 672
+ hash: "97761329ac9ba03ec41e3d5b35f245df"
+ }
+ Frame {
+ msec: 688
+ hash: "9d26e3a3357530e903ee89f7bf439357"
+ }
+ Frame {
+ msec: 704
+ hash: "1cf4c130ea3565547ff74280211f10c9"
+ }
+ Frame {
+ msec: 720
+ hash: "d60284711cb557b1dab4d27072c95597"
+ }
+ Frame {
+ msec: 736
+ hash: "98195e02405ee26c0a6a3177cebe9eaa"
+ }
+ Frame {
+ msec: 752
+ hash: "f0a776c39363e340ebfb7736f368f609"
+ }
+ Frame {
+ msec: 768
+ hash: "5a146b4b76f93e3064d5dfa13107b1c3"
+ }
+ Frame {
+ msec: 784
+ hash: "7f7fef3a7ff2047f598bfca0fc7d5935"
+ }
+ Frame {
+ msec: 800
+ hash: "85a2fd48605f8a77764bf96542db14c3"
+ }
+ Frame {
+ msec: 816
+ hash: "89bdc99d16e6605e2106dfa5f53d7c8e"
+ }
+ Frame {
+ msec: 832
+ hash: "d03754d56d85508b7c77959d1ab7b34a"
+ }
+ Frame {
+ msec: 848
+ hash: "8d330472a376b47d65cec0b8e3df25cb"
+ }
+ Frame {
+ msec: 864
+ hash: "401adaeecfd2c0a5598194e9ead4dd5d"
+ }
+ Frame {
+ msec: 880
+ hash: "5c600e940e0a01fec15505fba595df3d"
+ }
+ Frame {
+ msec: 896
+ hash: "b7940b041fbd3df5e6969130bf97da10"
+ }
+ Frame {
+ msec: 912
+ hash: "62314bb115c307eeff4c4c7c91ee74a2"
+ }
+ Frame {
+ msec: 928
+ hash: "54745a8a7ed96a4d5e2d4ec2de605882"
+ }
+ Frame {
+ msec: 944
+ hash: "a4145b63f59d060ac0e0dc32dd22c815"
+ }
+ Frame {
+ msec: 960
+ image: "clock.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "c420b1298329c7eb0d3ec6a90a7eb802"
+ }
+ Frame {
+ msec: 992
+ hash: "e63a5384cde6287c3cd8bdb823f35dca"
+ }
+ Frame {
+ msec: 1008
+ hash: "af708b5e4a2a706385afd43896eeff16"
+ }
+ Frame {
+ msec: 1024
+ hash: "32011e16d4b1c14619820ade020f6416"
+ }
+ Frame {
+ msec: 1040
+ hash: "fbf9f8f075b15922f7306e469075d3cf"
+ }
+ Frame {
+ msec: 1056
+ hash: "bf0fab116eae6e7fb5b3209220a3a52a"
+ }
+ Frame {
+ msec: 1072
+ hash: "7a21aee4bcb99feb12a2a2c6bb3fd893"
+ }
+ Frame {
+ msec: 1088
+ hash: "d721462af9c94e13f12374b2590dad1e"
+ }
+ Frame {
+ msec: 1104
+ hash: "70385b585c2cbf1b2d64f1b9ebb5fb56"
+ }
+ Frame {
+ msec: 1120
+ hash: "fc7adc3dd2f42bfe6cd74c2ee1ea9aa8"
+ }
+ Frame {
+ msec: 1136
+ hash: "232884da74c9843d1349e82a7300cc19"
+ }
+ Frame {
+ msec: 1152
+ hash: "c6790d9c8cbea7bf97cbedf443da330c"
+ }
+ Frame {
+ msec: 1168
+ hash: "1847875f98555ef46a103c107bd5bc37"
+ }
+ Frame {
+ msec: 1184
+ hash: "d7b35992b44a0220bd83a00b7f75dcdd"
+ }
+ Frame {
+ msec: 1200
+ hash: "fc9e1db602c34863088d82ed8f601364"
+ }
+ Frame {
+ msec: 1216
+ hash: "404e2d071f8a6409ba6c6bfd8450693c"
+ }
+ Frame {
+ msec: 1232
+ hash: "dc2b6be9bc4c32460797e94ec617406c"
+ }
+ Frame {
+ msec: 1248
+ hash: "5077b6afd808f7a2c319e66f0aef3002"
+ }
+ Frame {
+ msec: 1264
+ hash: "07f07a04ec7c864196faeb44eff65b4c"
+ }
+ Frame {
+ msec: 1280
+ hash: "5d9089a68ef0b8b78b68c33d3082b597"
+ }
+ Frame {
+ msec: 1296
+ hash: "d955c9f66eaf123351a19947240e8847"
+ }
+ Frame {
+ msec: 1312
+ hash: "f1821cbcb3883a041f22a114f7158532"
+ }
+ Frame {
+ msec: 1328
+ hash: "77f17db09c5a7125c42359c304f274de"
+ }
+ Frame {
+ msec: 1344
+ hash: "bc38a4c859f596f6cf3c399d3a04b1cd"
+ }
+ Frame {
+ msec: 1360
+ hash: "982c43a4a1c9fae8bf3980b5885cee2f"
+ }
+ Frame {
+ msec: 1376
+ hash: "c15bb9b7dd77d505ee9918eb36b75c31"
+ }
+ Frame {
+ msec: 1392
+ hash: "bda534fd941a6f8289bfbec9b8dde717"
+ }
+ Frame {
+ msec: 1408
+ hash: "7ad5c54b481525ace42ae8926a5c0556"
+ }
+ Frame {
+ msec: 1424
+ hash: "2399778158f63481eb8514245277b917"
+ }
+ Frame {
+ msec: 1440
+ hash: "6c200d090b34a0152c7eb233c97c3886"
+ }
+ Frame {
+ msec: 1456
+ hash: "7ba4500e81df31e3e2c5d165bacf771a"
+ }
+ Frame {
+ msec: 1472
+ hash: "c7e13f3d9bdfe35eb905c1d4ed6b73ac"
+ }
+ Frame {
+ msec: 1488
+ hash: "808b72766f5dce71fc983ffa01945665"
+ }
+ Frame {
+ msec: 1504
+ hash: "899ac513755476db1e1304317524a755"
+ }
+ Frame {
+ msec: 1520
+ hash: "27190dce033171966981672e52f07107"
+ }
+ Frame {
+ msec: 1536
+ hash: "5d9ef583b6b3cb5257cb044cf376eff2"
+ }
+ Frame {
+ msec: 1552
+ hash: "77b648fe26a942b246eec0fa018ad86f"
+ }
+ Frame {
+ msec: 1568
+ hash: "744a61493816338113ba4ba7c05f76de"
+ }
+ Frame {
+ msec: 1584
+ hash: "2eb0da64d5937c1a38754fd55ca684d0"
+ }
+ Frame {
+ msec: 1600
+ hash: "6f799c2c0c0e1ed419af03f8bbb9fae1"
+ }
+ Frame {
+ msec: 1616
+ hash: "5b84344f31d5e4d15be6b53ad3bf9c84"
+ }
+ Frame {
+ msec: 1632
+ hash: "997b5967e3e3a35d02f10e1eae417dbf"
+ }
+ Frame {
+ msec: 1648
+ hash: "c522369c836e8d08c56e2e332dd005ac"
+ }
+ Frame {
+ msec: 1664
+ hash: "22f4072da05d261cfcca232ea54d2cb4"
+ }
+ Frame {
+ msec: 1680
+ hash: "7081a90c33785306800b7a57a4a9a75c"
+ }
+ Frame {
+ msec: 1696
+ hash: "32a8bea14c92ce61ede89182765f0759"
+ }
+ Frame {
+ msec: 1712
+ hash: "4bafe476d5301974c616311073763ab4"
+ }
+ Frame {
+ msec: 1728
+ hash: "291188ca795d455ae293437c2fb2303d"
+ }
+ Frame {
+ msec: 1744
+ hash: "99d2658f863c82dd71fde0f0b93b4d62"
+ }
+ Frame {
+ msec: 1760
+ hash: "8a7183e11fde2846d5435847ad9add45"
+ }
+ Frame {
+ msec: 1776
+ hash: "34b6180b74f0653ce1f18c22022d333f"
+ }
+ Frame {
+ msec: 1792
+ hash: "34b6180b74f0653ce1f18c22022d333f"
+ }
+ Frame {
+ msec: 1808
+ hash: "34b6180b74f0653ce1f18c22022d333f"
+ }
+ Frame {
+ msec: 1824
+ hash: "34b6180b74f0653ce1f18c22022d333f"
+ }
+ Frame {
+ msec: 1840
+ hash: "34b6180b74f0653ce1f18c22022d333f"
+ }
+ Frame {
+ msec: 1856
+ hash: "34b6180b74f0653ce1f18c22022d333f"
+ }
+ Frame {
+ msec: 1872
+ hash: "34b6180b74f0653ce1f18c22022d333f"
+ }
+ Frame {
+ msec: 1888
+ hash: "34b6180b74f0653ce1f18c22022d333f"
+ }
+ Frame {
+ msec: 1904
+ hash: "34b6180b74f0653ce1f18c22022d333f"
+ }
+ Frame {
+ msec: 1920
+ image: "clock.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "34b6180b74f0653ce1f18c22022d333f"
+ }
+ Frame {
+ msec: 1952
+ hash: "34b6180b74f0653ce1f18c22022d333f"
+ }
+ Frame {
+ msec: 1968
+ hash: "34b6180b74f0653ce1f18c22022d333f"
+ }
+ Frame {
+ msec: 1984
+ hash: "34b6180b74f0653ce1f18c22022d333f"
+ }
+ Frame {
+ msec: 2000
+ hash: "34b6180b74f0653ce1f18c22022d333f"
+ }
+ Frame {
+ msec: 2016
+ hash: "34b6180b74f0653ce1f18c22022d333f"
+ }
+ Frame {
+ msec: 2032
+ hash: "150f511972394d8485979a6d9badcee5"
+ }
+ Frame {
+ msec: 2048
+ hash: "50b420f72479ec613fd443b5faa3cb94"
+ }
+ Frame {
+ msec: 2064
+ hash: "a51cbeea7ad5407b2784a3a3c8ca1ecf"
+ }
+ Frame {
+ msec: 2080
+ hash: "0f658f4c91f890cd252d0f9d9bbe064d"
+ }
+ Frame {
+ msec: 2096
+ hash: "c814c99815a91547eff01dc899c275f2"
+ }
+ Frame {
+ msec: 2112
+ hash: "f9dac59029008e52efe4225cf919f013"
+ }
+ Frame {
+ msec: 2128
+ hash: "b87bdcf09b425f2b2d6aed65f96ae8a3"
+ }
+ Frame {
+ msec: 2144
+ hash: "f353bf64e664166a542aa027dc625529"
+ }
+ Frame {
+ msec: 2160
+ hash: "12492b26c2f1c018e034c0fa936fa7b5"
+ }
+ Frame {
+ msec: 2176
+ hash: "33f04d25bced580f15590f12ddafef62"
+ }
+ Frame {
+ msec: 2192
+ hash: "cdd8ee656e4fec3ac6e72b6f7626de3b"
+ }
+ Frame {
+ msec: 2208
+ hash: "22a94ea46fb9ee78830eab79e4adc5c5"
+ }
+ Frame {
+ msec: 2224
+ hash: "64a10c9d4738c004c7f08f95b48a7a4d"
+ }
+ Frame {
+ msec: 2240
+ hash: "ff3300fb49a735e0a958362aead1905f"
+ }
+ Frame {
+ msec: 2256
+ hash: "8289dfdad12a8c13513175e5aad6a2d9"
+ }
+ Frame {
+ msec: 2272
+ hash: "49e5cbb94f7d8bc853ca3c9366d737c9"
+ }
+ Frame {
+ msec: 2288
+ hash: "76d2d8df4ad0359bb8ae102b225b3a68"
+ }
+ Frame {
+ msec: 2304
+ hash: "98d925b3306aa7dd1b1fb9e066cd8a02"
+ }
+ Frame {
+ msec: 2320
+ hash: "3911b53eb0346af1773ad991232e61ee"
+ }
+ Frame {
+ msec: 2336
+ hash: "8991c10234f9f286ebab39d72729525d"
+ }
+ Frame {
+ msec: 2352
+ hash: "ca2c8c6f23b30957a5cc20d9750a3ffe"
+ }
+ Frame {
+ msec: 2368
+ hash: "80abe9b146b31dbedf1fe2357d922dda"
+ }
+ Frame {
+ msec: 2384
+ hash: "0e34091d6bceab00bdabcec78e99e265"
+ }
+ Frame {
+ msec: 2400
+ hash: "ba04053c25e53b3dc790feac9a33e221"
+ }
+ Frame {
+ msec: 2416
+ hash: "cb6f7f2cce4f68ef1d35f765e00bbf7b"
+ }
+ Frame {
+ msec: 2432
+ hash: "1e63fb94f5fbf3b600ec9298cbb97c8a"
+ }
+ Frame {
+ msec: 2448
+ hash: "8991c10234f9f286ebab39d72729525d"
+ }
+ Frame {
+ msec: 2464
+ hash: "00531d4a5fe98bbb487ad835414e7d07"
+ }
+ Frame {
+ msec: 2480
+ hash: "7af9f861cb57c937c87b24eee9fbb558"
+ }
+ Frame {
+ msec: 2496
+ hash: "7ecd1a4a75753e70ad5937e5bc897e03"
+ }
+ Frame {
+ msec: 2512
+ hash: "557766fe964033f6a488574af7306cac"
+ }
+ Frame {
+ msec: 2528
+ hash: "bd0f7164dd0a84ce1a1b2a6acbc2157b"
+ }
+ Frame {
+ msec: 2544
+ hash: "d24ef664cf13519b99d6193bf98fcfd1"
+ }
+ Frame {
+ msec: 2560
+ hash: "6c3626248bbb41cab85ec2a908b7874b"
+ }
+ Frame {
+ msec: 2576
+ hash: "0f9bea8d474690164a09dfd3b13ff80b"
+ }
+ Frame {
+ msec: 2592
+ hash: "e5197674c91de893a970614e650547e5"
+ }
+ Frame {
+ msec: 2608
+ hash: "ce6861e9a7e75b809df026f078c8516b"
+ }
+ Frame {
+ msec: 2624
+ hash: "eb0539e30fd53fb905d7b28ff0bc6cfd"
+ }
+ Frame {
+ msec: 2640
+ hash: "45f70dda0d647119175457fb4d451e85"
+ }
+ Frame {
+ msec: 2656
+ hash: "ca6b75fa4ee612bf6bb1776ef4115b16"
+ }
+ Frame {
+ msec: 2672
+ hash: "c7d6bd687be6d5476300539411b97fc5"
+ }
+ Frame {
+ msec: 2688
+ hash: "27da9137b936d813d3c79a873053ed38"
+ }
+ Frame {
+ msec: 2704
+ hash: "4389a5758bf9df9553300c074aa7bb36"
+ }
+ Frame {
+ msec: 2720
+ hash: "30476b70a29716b359a046f99b6387e5"
+ }
+ Frame {
+ msec: 2736
+ hash: "b91c6f1e57d718e95ab05d1f386aedb9"
+ }
+ Frame {
+ msec: 2752
+ hash: "578b022173dcac39d227ffeb043e53d0"
+ }
+ Frame {
+ msec: 2768
+ hash: "fe8ffe202a5f58b184a65d0ebc9c5f32"
+ }
+ Frame {
+ msec: 2784
+ hash: "fe8ffe202a5f58b184a65d0ebc9c5f32"
+ }
+ Frame {
+ msec: 2800
+ hash: "fe8ffe202a5f58b184a65d0ebc9c5f32"
+ }
+ Frame {
+ msec: 2816
+ hash: "fe8ffe202a5f58b184a65d0ebc9c5f32"
+ }
+ Frame {
+ msec: 2832
+ hash: "fe8ffe202a5f58b184a65d0ebc9c5f32"
+ }
+ Frame {
+ msec: 2848
+ hash: "fe8ffe202a5f58b184a65d0ebc9c5f32"
+ }
+ Frame {
+ msec: 2864
+ hash: "fe8ffe202a5f58b184a65d0ebc9c5f32"
+ }
+ Frame {
+ msec: 2880
+ image: "clock.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "fe8ffe202a5f58b184a65d0ebc9c5f32"
+ }
+ Frame {
+ msec: 2912
+ hash: "fe8ffe202a5f58b184a65d0ebc9c5f32"
+ }
+ Frame {
+ msec: 2928
+ hash: "fe8ffe202a5f58b184a65d0ebc9c5f32"
+ }
+ Frame {
+ msec: 2944
+ hash: "fe8ffe202a5f58b184a65d0ebc9c5f32"
+ }
+ Frame {
+ msec: 2960
+ hash: "fe8ffe202a5f58b184a65d0ebc9c5f32"
+ }
+ Frame {
+ msec: 2976
+ hash: "fe8ffe202a5f58b184a65d0ebc9c5f32"
+ }
+ Frame {
+ msec: 2992
+ hash: "fe8ffe202a5f58b184a65d0ebc9c5f32"
+ }
+ Frame {
+ msec: 3008
+ hash: "fe8ffe202a5f58b184a65d0ebc9c5f32"
+ }
+ Frame {
+ msec: 3024
+ hash: "fe8ffe202a5f58b184a65d0ebc9c5f32"
+ }
+ Frame {
+ msec: 3040
+ hash: "294d542f880356b4cbb171170c28dcd7"
+ }
+ Frame {
+ msec: 3056
+ hash: "946b5937974e28ffd996ce132c8fad15"
+ }
+ Frame {
+ msec: 3072
+ hash: "bb61994ff1dc36d3933084b874073832"
+ }
+ Frame {
+ msec: 3088
+ hash: "ec337c7ae77deeb41f38adb1851720e5"
+ }
+ Frame {
+ msec: 3104
+ hash: "7691c6c048b78e1551b46a37b6e95b16"
+ }
+ Frame {
+ msec: 3120
+ hash: "b3116620d319ae4b681f4ca76c068b32"
+ }
+ Frame {
+ msec: 3136
+ hash: "ed5a27e5be3dbde3867715f877da41db"
+ }
+ Frame {
+ msec: 3152
+ hash: "8dcc220cc652f57aa8ac33364edc96a3"
+ }
+ Frame {
+ msec: 3168
+ hash: "a7832d86283e27ee1523c4808b42fc43"
+ }
+ Frame {
+ msec: 3184
+ hash: "fc90d18b072638f2df1bacee12fe1743"
+ }
+ Frame {
+ msec: 3200
+ hash: "cdd7b5598155eba57783ebe1872db818"
+ }
+ Frame {
+ msec: 3216
+ hash: "b45e32d12bbc2e56f4a3e7e473528d3e"
+ }
+ Frame {
+ msec: 3232
+ hash: "5762a693ea6287e8987c604ef9fac361"
+ }
+ Frame {
+ msec: 3248
+ hash: "2e46a8df5ec0c7070a374186a313f2c6"
+ }
+ Frame {
+ msec: 3264
+ hash: "e612134417f3f901661b658801a72848"
+ }
+ Frame {
+ msec: 3280
+ hash: "5de468fac915894ef34f3fee1c637e01"
+ }
+ Frame {
+ msec: 3296
+ hash: "e29c8713573e49fc98387311d80c7510"
+ }
+ Frame {
+ msec: 3312
+ hash: "6fce67b704f613e6fd9181ccb9ee237f"
+ }
+ Frame {
+ msec: 3328
+ hash: "bf499add3d91d751ffa1cce28bece380"
+ }
+ Frame {
+ msec: 3344
+ hash: "7d50cad7b18a4a37be6aac7796014195"
+ }
+ Frame {
+ msec: 3360
+ hash: "6695208c8d39373ff0846c821c819cb2"
+ }
+ Frame {
+ msec: 3376
+ hash: "0140ec2286b0fb94340d2dd6d418f539"
+ }
+ Frame {
+ msec: 3392
+ hash: "9f92a99737aa6a7da48af7e7a4ed7a6a"
+ }
+ Frame {
+ msec: 3408
+ hash: "8e593e8192d17d07c2265d6fa840f281"
+ }
+ Frame {
+ msec: 3424
+ hash: "ea70e72eb12d5595d9bf0d9cc77efd4d"
+ }
+ Frame {
+ msec: 3440
+ hash: "faeeb9e6e6a260a266ac8965f204b542"
+ }
+ Frame {
+ msec: 3456
+ hash: "d50987082d056997a8e7fe5940cb7968"
+ }
+ Frame {
+ msec: 3472
+ hash: "44089138e01bfee916306ae66ba43e9f"
+ }
+ Frame {
+ msec: 3488
+ hash: "60256356ca6fe8bd323ef36bc149a3ea"
+ }
+ Frame {
+ msec: 3504
+ hash: "6caae71d6bd897d755aeb22f10862171"
+ }
+ Frame {
+ msec: 3520
+ hash: "8ba18bf5df010718f83d6bb25aa1858b"
+ }
+ Frame {
+ msec: 3536
+ hash: "a903996370fb7efcaf295f00b9b4c4b6"
+ }
+ Frame {
+ msec: 3552
+ hash: "cc0b736c8b4d46d3d809dcfe82068c88"
+ }
+ Frame {
+ msec: 3568
+ hash: "037b2f65d162d44c39706d322cd6b6e5"
+ }
+ Frame {
+ msec: 3584
+ hash: "92c2b4f346329ffbcae07db74332ebbe"
+ }
+ Frame {
+ msec: 3600
+ hash: "3f9b2b5aade31333568a7cccf89e3176"
+ }
+ Frame {
+ msec: 3616
+ hash: "b40f9cce4cddf9fa5245276a105a3e0d"
+ }
+ Frame {
+ msec: 3632
+ hash: "74eb3e8a282693bd6bc92f381e380d61"
+ }
+ Frame {
+ msec: 3648
+ hash: "43d85dd9e0de49c639db0d91047c88bb"
+ }
+ Frame {
+ msec: 3664
+ hash: "563a07f4aa618252933e0356cc300bba"
+ }
+ Frame {
+ msec: 3680
+ hash: "73d1e5745154996fd245a91a831d5462"
+ }
+ Frame {
+ msec: 3696
+ hash: "7b2785b605c64135ea6914ad8388eb8f"
+ }
+ Frame {
+ msec: 3712
+ hash: "b2d989af972715a86ca374753d32f757"
+ }
+ Frame {
+ msec: 3728
+ hash: "96311aac52bc9167a7350af29741f3dc"
+ }
+ Frame {
+ msec: 3744
+ hash: "56e4b98816896f7353dddeac090f70d1"
+ }
+ Frame {
+ msec: 3760
+ hash: "7bd8ac36107e9e5db39e1aa37f2c5ca8"
+ }
+ Frame {
+ msec: 3776
+ hash: "b9545df89c8bec940678b65d5ef9ce04"
+ }
+ Frame {
+ msec: 3792
+ hash: "b9545df89c8bec940678b65d5ef9ce04"
+ }
+ Frame {
+ msec: 3808
+ hash: "b9545df89c8bec940678b65d5ef9ce04"
+ }
+ Frame {
+ msec: 3824
+ hash: "b9545df89c8bec940678b65d5ef9ce04"
+ }
+ Frame {
+ msec: 3840
+ image: "clock.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "b9545df89c8bec940678b65d5ef9ce04"
+ }
+ Frame {
+ msec: 3872
+ hash: "b9545df89c8bec940678b65d5ef9ce04"
+ }
+ Frame {
+ msec: 3888
+ hash: "b9545df89c8bec940678b65d5ef9ce04"
+ }
+ Frame {
+ msec: 3904
+ hash: "b9545df89c8bec940678b65d5ef9ce04"
+ }
+ Frame {
+ msec: 3920
+ hash: "b9545df89c8bec940678b65d5ef9ce04"
+ }
+ Frame {
+ msec: 3936
+ hash: "b9545df89c8bec940678b65d5ef9ce04"
+ }
+ Frame {
+ msec: 3952
+ hash: "b9545df89c8bec940678b65d5ef9ce04"
+ }
+ Frame {
+ msec: 3968
+ hash: "b9545df89c8bec940678b65d5ef9ce04"
+ }
+ Frame {
+ msec: 3984
+ hash: "b9545df89c8bec940678b65d5ef9ce04"
+ }
+ Frame {
+ msec: 4000
+ hash: "b9545df89c8bec940678b65d5ef9ce04"
+ }
+ Frame {
+ msec: 4016
+ hash: "b9545df89c8bec940678b65d5ef9ce04"
+ }
+ Frame {
+ msec: 4032
+ hash: "df3a1204f6243673d567724d27d07a9e"
+ }
+ Frame {
+ msec: 4048
+ hash: "7d0d3e92cb61d868d062bdf173924a4d"
+ }
+ Frame {
+ msec: 4064
+ hash: "29948b5d7807a6ed0076a9637ec3eb79"
+ }
+ Frame {
+ msec: 4080
+ hash: "2986b5e0a4a49bbe9f4ffada30433a48"
+ }
+ Frame {
+ msec: 4096
+ hash: "0d9e3813141a1ee15474380902d87815"
+ }
+ Frame {
+ msec: 4112
+ hash: "c5197a932430d498b7344c1f37454320"
+ }
+ Frame {
+ msec: 4128
+ hash: "c8ef8acf314486c157e74bdd2695ddb2"
+ }
+ Frame {
+ msec: 4144
+ hash: "adeb73de4b967912a9f2b04ba2b6fe4c"
+ }
+ Frame {
+ msec: 4160
+ hash: "da5fddd1e4ab8c096af0acc62114d69f"
+ }
+ Frame {
+ msec: 4176
+ hash: "5ef0784315603da196e66b4628524c5c"
+ }
+ Frame {
+ msec: 4192
+ hash: "1ff2a89c510953d71198056f5ac5b1a6"
+ }
+ Frame {
+ msec: 4208
+ hash: "f63d409e134e59b875099ab11b469d21"
+ }
+ Frame {
+ msec: 4224
+ hash: "e353748e0b0c49a217d6e2d06a9bfeb6"
+ }
+ Frame {
+ msec: 4240
+ hash: "a9d7470902a232d815bd2580e24fdc22"
+ }
+ Frame {
+ msec: 4256
+ hash: "eecbad718aa4eaf5bef7cd921b2ce9f9"
+ }
+ Frame {
+ msec: 4272
+ hash: "7a51cadbfb93eb4a66acc9cb150002ed"
+ }
+ Frame {
+ msec: 4288
+ hash: "2aa511fb96a51a50e3a45b784e349c15"
+ }
+ Frame {
+ msec: 4304
+ hash: "a1ad19593dc6b9f4c027f388e802dcbe"
+ }
+ Frame {
+ msec: 4320
+ hash: "ef6787f03bc1e33ea5f2a54aa1ba3a41"
+ }
+ Frame {
+ msec: 4336
+ hash: "3386337bbc1ab82374d9965b7b0ffdef"
+ }
+ Frame {
+ msec: 4352
+ hash: "c76afb4f412b4d5dd8eca74db6c54fb8"
+ }
+ Frame {
+ msec: 4368
+ hash: "f91ac74ec153152670d43f42b1e2a2db"
+ }
+ Frame {
+ msec: 4384
+ hash: "58f22723fa0c67379972238e0e7ed5e2"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4400
+ hash: "a4730b0a8d6e0dd9e7eb58b51fb631ec"
+ }
+ Frame {
+ msec: 4416
+ hash: "193bf624efefcad70af29f41eeab128e"
+ }
+ Frame {
+ msec: 4432
+ hash: "d692f262facf26c2be2b0f747903d476"
+ }
+ Frame {
+ msec: 4448
+ hash: "e59e43b5d4abebea0a55b1d072d148bc"
+ }
+ Frame {
+ msec: 4464
+ hash: "134ff829e91161146b5f048a50c7eef7"
+ }
+ Frame {
+ msec: 4480
+ hash: "07a80e45e70cb13f45e3858404c5f8dd"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlspringfollow/data/follow.0.png b/tests/auto/declarative/visual/qmlspringfollow/data/follow.0.png
new file mode 100644
index 0000000..3f42e75
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/data/follow.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlspringfollow/data/follow.1.png b/tests/auto/declarative/visual/qmlspringfollow/data/follow.1.png
new file mode 100644
index 0000000..d661df6
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/data/follow.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlspringfollow/data/follow.10.png b/tests/auto/declarative/visual/qmlspringfollow/data/follow.10.png
new file mode 100644
index 0000000..e8c96e1
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/data/follow.10.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlspringfollow/data/follow.2.png b/tests/auto/declarative/visual/qmlspringfollow/data/follow.2.png
new file mode 100644
index 0000000..35bfa43
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/data/follow.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlspringfollow/data/follow.3.png b/tests/auto/declarative/visual/qmlspringfollow/data/follow.3.png
new file mode 100644
index 0000000..74141cf
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/data/follow.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlspringfollow/data/follow.4.png b/tests/auto/declarative/visual/qmlspringfollow/data/follow.4.png
new file mode 100644
index 0000000..9544054
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/data/follow.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlspringfollow/data/follow.5.png b/tests/auto/declarative/visual/qmlspringfollow/data/follow.5.png
new file mode 100644
index 0000000..4b02c79
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/data/follow.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlspringfollow/data/follow.6.png b/tests/auto/declarative/visual/qmlspringfollow/data/follow.6.png
new file mode 100644
index 0000000..8ea8345
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/data/follow.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlspringfollow/data/follow.7.png b/tests/auto/declarative/visual/qmlspringfollow/data/follow.7.png
new file mode 100644
index 0000000..76a73e8
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/data/follow.7.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlspringfollow/data/follow.8.png b/tests/auto/declarative/visual/qmlspringfollow/data/follow.8.png
new file mode 100644
index 0000000..8824940
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/data/follow.8.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlspringfollow/data/follow.9.png b/tests/auto/declarative/visual/qmlspringfollow/data/follow.9.png
new file mode 100644
index 0000000..f954cc5
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/data/follow.9.png
Binary files differ
diff --git a/tests/auto/declarative/visual/qmlspringfollow/data/follow.qml b/tests/auto/declarative/visual/qmlspringfollow/data/follow.qml
new file mode 100644
index 0000000..fec5428
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/data/follow.qml
@@ -0,0 +1,1763 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "3561ebf22b19c7bd5a70947d36b50b63"
+ }
+ Frame {
+ msec: 32
+ hash: "3561ebf22b19c7bd5a70947d36b50b63"
+ }
+ Frame {
+ msec: 48
+ hash: "bd0006fc34f58ec1ea6aa4c4acbb0070"
+ }
+ Frame {
+ msec: 64
+ hash: "c25f9fb6aea93413bfef5eb176c02476"
+ }
+ Frame {
+ msec: 80
+ hash: "4ce0eb12fb41960e60e208dffb09ed3a"
+ }
+ Frame {
+ msec: 96
+ hash: "75b3375881969710b6eb21f2a93c36cc"
+ }
+ Frame {
+ msec: 112
+ hash: "91e9b13e332959e41a29c0b225675a05"
+ }
+ Frame {
+ msec: 128
+ hash: "8e04a31a953b42903dffe86b37b3f59f"
+ }
+ Frame {
+ msec: 144
+ hash: "837e0e646a2853d3fde571f9dd966fc7"
+ }
+ Frame {
+ msec: 160
+ hash: "7367e25ae1e3a3731d83da76d5795f8c"
+ }
+ Frame {
+ msec: 176
+ hash: "3621846fb85b286a886a02de442e76c4"
+ }
+ Frame {
+ msec: 192
+ hash: "ed20a4c3476b8bb5545d5343747c39c8"
+ }
+ Frame {
+ msec: 208
+ hash: "1fc73efb410e9beb3f791cbff8e814b3"
+ }
+ Frame {
+ msec: 224
+ hash: "199c99a4e3aa14fbc8c8a0d8baacf998"
+ }
+ Frame {
+ msec: 240
+ hash: "513ce5a2f57e40002a26b7722c8a10db"
+ }
+ Frame {
+ msec: 256
+ hash: "b80b51cd4e75bdc799bbe79e66b7d02b"
+ }
+ Frame {
+ msec: 272
+ hash: "e1531b6c5b3ac872563fdfaf49d32a27"
+ }
+ Frame {
+ msec: 288
+ hash: "6d7cfd78ebd56ae6adfc97aad5d11b13"
+ }
+ Frame {
+ msec: 304
+ hash: "4252ebb2fba165e39f025f631e0a676a"
+ }
+ Frame {
+ msec: 320
+ hash: "04d6ae51415b083bbb0eabd1b0304ca4"
+ }
+ Frame {
+ msec: 336
+ hash: "750df1f1626c8b84dd72a35bf081fe00"
+ }
+ Frame {
+ msec: 352
+ hash: "003d7a846e09ba23ee8a7ae6d473be9f"
+ }
+ Frame {
+ msec: 368
+ hash: "5cf3abdbb9a5b8cba6a8afe8abb60ced"
+ }
+ Frame {
+ msec: 384
+ hash: "0669f86043a0c84d0b4672cc5c1136b4"
+ }
+ Frame {
+ msec: 400
+ hash: "94f59435fe4f3ca06699c996b537ae8c"
+ }
+ Frame {
+ msec: 416
+ hash: "211c8ec42a6d6949253af71c6eeffa53"
+ }
+ Frame {
+ msec: 432
+ hash: "6de6c6d1b4a37a864b96c0293be8ebf5"
+ }
+ Frame {
+ msec: 448
+ hash: "468d67d069eaac1968a6ad52e56f3ab5"
+ }
+ Frame {
+ msec: 464
+ hash: "18d8de7a5c73d8c8188e6ae00a701820"
+ }
+ Frame {
+ msec: 480
+ hash: "4387c724ed49bfbbca238bf57a704a14"
+ }
+ Frame {
+ msec: 496
+ hash: "f317c59f65c7266765333048d8545748"
+ }
+ Frame {
+ msec: 512
+ hash: "6575d40c2f27f110443a2ede8a873c77"
+ }
+ Frame {
+ msec: 528
+ hash: "3e65cb675124dbd9db5116fa7584e223"
+ }
+ Frame {
+ msec: 544
+ hash: "df80612a74b33eca81db6f43aa33e411"
+ }
+ Frame {
+ msec: 560
+ hash: "6b2bc20397f3fb452ea14d81e9efd61d"
+ }
+ Frame {
+ msec: 576
+ hash: "e5b8a2476487f6cd9fd37e3b3f54f88d"
+ }
+ Frame {
+ msec: 592
+ hash: "e93f8156e2dc278a5e20d9e28b48d9fa"
+ }
+ Frame {
+ msec: 608
+ hash: "e524d5117888b0b68781ffaf1a3e7303"
+ }
+ Frame {
+ msec: 624
+ hash: "f3b777409534d87c59e60499fd6a3808"
+ }
+ Frame {
+ msec: 640
+ hash: "09d1fa8f1306eb6f51db97d04c2d7ad3"
+ }
+ Frame {
+ msec: 656
+ hash: "acebdcebe6880c8b3b94ad7606181b72"
+ }
+ Frame {
+ msec: 672
+ hash: "347945a94002cd44d7a2df47f82940a1"
+ }
+ Frame {
+ msec: 688
+ hash: "c716014d63ff2a22cab04dadc18b10c1"
+ }
+ Frame {
+ msec: 704
+ hash: "ced019e3f8b5ca079582d01f1f585a8e"
+ }
+ Frame {
+ msec: 720
+ hash: "d61d31de835ea8d1ffa56fd04c873ac1"
+ }
+ Frame {
+ msec: 736
+ hash: "2eec542c5af4c6eecc153cc0fcae7dd3"
+ }
+ Frame {
+ msec: 752
+ hash: "c13b9443e1c000a2877e4586428da308"
+ }
+ Frame {
+ msec: 768
+ hash: "c5c2e30b3dc3298afc201f6045e79e59"
+ }
+ Frame {
+ msec: 784
+ hash: "308f2ca66133d37c2fcb222e68698d25"
+ }
+ Frame {
+ msec: 800
+ hash: "bf820215986a35b56daf07c164fd2a79"
+ }
+ Frame {
+ msec: 816
+ hash: "a0bb21475100fb25b767d055d70b062f"
+ }
+ Frame {
+ msec: 832
+ hash: "bfb0927bcb23689820b0f96ea56426fc"
+ }
+ Frame {
+ msec: 848
+ hash: "8f294742ca9dd6ab10689f1f4ec2ed96"
+ }
+ Frame {
+ msec: 864
+ hash: "f60c232307570fb4ec6e74f18e243553"
+ }
+ Frame {
+ msec: 880
+ hash: "7411970ab72d8b2dbf48ee8d4e6503b3"
+ }
+ Frame {
+ msec: 896
+ hash: "d4d766038daeae2fbec290204ca3983b"
+ }
+ Frame {
+ msec: 912
+ hash: "f85525c3fd784ee7f9a3d9465e37d6f3"
+ }
+ Frame {
+ msec: 928
+ hash: "c5e63da86ddbd2a54c7cd3d03e5428a2"
+ }
+ Frame {
+ msec: 944
+ hash: "369a7405b1717ddf06c99ab1dd6d4cb0"
+ }
+ Frame {
+ msec: 960
+ image: "follow.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "18d5c4378f9daf63bf4cb76d76374548"
+ }
+ Frame {
+ msec: 992
+ hash: "f36e649db2e1ec9fbe15e7711ea13ab5"
+ }
+ Frame {
+ msec: 1008
+ hash: "f68515607dca1bda14b6afa6e05ebb6b"
+ }
+ Frame {
+ msec: 1024
+ hash: "bc5cc4c9050a5bd4c64debd12643fd73"
+ }
+ Frame {
+ msec: 1040
+ hash: "f053a18bca4d8c47a0f181fad8118e9a"
+ }
+ Frame {
+ msec: 1056
+ hash: "9a2218f51faed4fa891c507fe6828d2c"
+ }
+ Frame {
+ msec: 1072
+ hash: "ce671ff4dd1f343243f2fcc263d137f4"
+ }
+ Frame {
+ msec: 1088
+ hash: "8624f8d814094ad25a1482a11f424990"
+ }
+ Frame {
+ msec: 1104
+ hash: "324dad940b3adb54491d6cdd4e7d8aa7"
+ }
+ Frame {
+ msec: 1120
+ hash: "0cd7c53ec5b591053de6769967b8bad5"
+ }
+ Frame {
+ msec: 1136
+ hash: "e9e8f5e9c2dc179498943d0b5912af09"
+ }
+ Frame {
+ msec: 1152
+ hash: "5f1552ccd61f09335a88658ee1c4e97e"
+ }
+ Frame {
+ msec: 1168
+ hash: "866e01eed7e26dd1bd9af8aaddf4d7c0"
+ }
+ Frame {
+ msec: 1184
+ hash: "2efba3c33c4c7b6d89ce7efca2dc516a"
+ }
+ Frame {
+ msec: 1200
+ hash: "2de9d8a2ad64d2491b3444712be032dc"
+ }
+ Frame {
+ msec: 1216
+ hash: "84206972322eae033d05f71b178180c9"
+ }
+ Frame {
+ msec: 1232
+ hash: "8571d11da1a893edcbe5add1a9399d7a"
+ }
+ Frame {
+ msec: 1248
+ hash: "c0d65ecefa77ee7cb1c08a560e3ad572"
+ }
+ Frame {
+ msec: 1264
+ hash: "0f8a8523969713771a6c7984069b15e4"
+ }
+ Frame {
+ msec: 1280
+ hash: "2e80e4b54538b7b586f4a3be55eb6da3"
+ }
+ Frame {
+ msec: 1296
+ hash: "ae028381f311a60946ecd26eab95bb42"
+ }
+ Frame {
+ msec: 1312
+ hash: "ac5902d58bc116a002c093f55cf20278"
+ }
+ Frame {
+ msec: 1328
+ hash: "242f8617718048cfab9950b812eb1b26"
+ }
+ Frame {
+ msec: 1344
+ hash: "b642f2f0d3161f80a702b09a910c589b"
+ }
+ Frame {
+ msec: 1360
+ hash: "d1508034ecd908120c6f58cf08360c3c"
+ }
+ Frame {
+ msec: 1376
+ hash: "ad10a5ea8598616f2ffa633eecfbd43a"
+ }
+ Frame {
+ msec: 1392
+ hash: "1d2c3cfaac1cca868f31872bf4248de8"
+ }
+ Frame {
+ msec: 1408
+ hash: "28da57a6aec84318ff6aa029ac17f1dd"
+ }
+ Frame {
+ msec: 1424
+ hash: "6f9bf89843d5e40f6c282e69337e7d25"
+ }
+ Frame {
+ msec: 1440
+ hash: "1c5733ad9620805127372fb76f5b0228"
+ }
+ Frame {
+ msec: 1456
+ hash: "16f21041e9e475a37c478cf38cdc353b"
+ }
+ Frame {
+ msec: 1472
+ hash: "b39ea2e8a1991b3ea5be818a284ff69f"
+ }
+ Frame {
+ msec: 1488
+ hash: "4f5bdc935080707525a2b74936b41b2e"
+ }
+ Frame {
+ msec: 1504
+ hash: "a39426dc761df1d2ba398aa17d220ded"
+ }
+ Frame {
+ msec: 1520
+ hash: "2e965042273b377958b04190250d273e"
+ }
+ Frame {
+ msec: 1536
+ hash: "51f021c1d50291b425c98dee4894b330"
+ }
+ Frame {
+ msec: 1552
+ hash: "88fea2e6d6898084acb5897833adb182"
+ }
+ Frame {
+ msec: 1568
+ hash: "12f55e64c8ec9825bf6c5cfd5d50d2bb"
+ }
+ Frame {
+ msec: 1584
+ hash: "365b358eb7a678e1076774c36a82f452"
+ }
+ Frame {
+ msec: 1600
+ hash: "a992b326739bff87bf042c711a7fa65c"
+ }
+ Frame {
+ msec: 1616
+ hash: "083aa3c766a3b50492e51aab3ee128d0"
+ }
+ Frame {
+ msec: 1632
+ hash: "16a2db3b3a773e2612bc57f7a7d7fbbe"
+ }
+ Frame {
+ msec: 1648
+ hash: "32a28101a53d308b107d26a30ae7cdd9"
+ }
+ Frame {
+ msec: 1664
+ hash: "da3908e584542ff2f73cb22369f49c1c"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 195; y: 95
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1680
+ hash: "8ad535bb0c5decd8c970aa36286d57e7"
+ }
+ Frame {
+ msec: 1696
+ hash: "5bfbcab7607622486c350a9117ab0884"
+ }
+ Frame {
+ msec: 1712
+ hash: "17e13c8bfd81081f6400d3e71daecb4c"
+ }
+ Frame {
+ msec: 1728
+ hash: "9411a66b6c3ef9a98bc62dea282d6a51"
+ }
+ Frame {
+ msec: 1744
+ hash: "423cded80165ee13f903460e5396526b"
+ }
+ Frame {
+ msec: 1760
+ hash: "709cc55316e6702c1359b66c06676603"
+ }
+ Frame {
+ msec: 1776
+ hash: "27232931c000a2edb5c3d480a6692e6b"
+ }
+ Frame {
+ msec: 1792
+ hash: "22311fd0903b53f50df824ba345ca350"
+ }
+ Frame {
+ msec: 1808
+ hash: "9bb066e60e7e5b3eaa0a221b8ba1a431"
+ }
+ Frame {
+ msec: 1824
+ hash: "517000255d372d384773dff8c80f5a65"
+ }
+ Frame {
+ msec: 1840
+ hash: "329dbd77ae53ea8e4beb669a976033a8"
+ }
+ Frame {
+ msec: 1856
+ hash: "2acd5d3e878e1db5413270c1a50ffc83"
+ }
+ Frame {
+ msec: 1872
+ hash: "8eb5946ac5d53dfc2813d1f1c6a2b6c5"
+ }
+ Frame {
+ msec: 1888
+ hash: "375299e5b1067e02d5de3238a37659f2"
+ }
+ Frame {
+ msec: 1904
+ hash: "f385c90e585db5555e873996165f55af"
+ }
+ Frame {
+ msec: 1920
+ image: "follow.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "6c13bb69b6483c72463437e102a9dabb"
+ }
+ Frame {
+ msec: 1952
+ hash: "c1b5d10688681c3b2363bb6d4173deca"
+ }
+ Frame {
+ msec: 1968
+ hash: "b434649e4c9b2c184d2f9036f9d041bf"
+ }
+ Frame {
+ msec: 1984
+ hash: "ca32e9f9080983803bb37b7231ed1c84"
+ }
+ Frame {
+ msec: 2000
+ hash: "976eab47b2d6445fdd8293f2c73564c1"
+ }
+ Frame {
+ msec: 2016
+ hash: "e63daea8f3bc79cea7a6b8dcfd31a094"
+ }
+ Frame {
+ msec: 2032
+ hash: "626cbe5e6b79f2fd0ef57c943666b571"
+ }
+ Frame {
+ msec: 2048
+ hash: "4e07255ce12a21966eec33c0cc623d96"
+ }
+ Frame {
+ msec: 2064
+ hash: "94045005de77725c63c62575a6b06852"
+ }
+ Frame {
+ msec: 2080
+ hash: "3b6dcf783c5e9fe99ce3d9ca02bceff6"
+ }
+ Frame {
+ msec: 2096
+ hash: "e901ed7e831e2d012b97b98b3ab6fa1b"
+ }
+ Frame {
+ msec: 2112
+ hash: "74ef03f72d032daaff13114fde02b824"
+ }
+ Frame {
+ msec: 2128
+ hash: "9eb334d7dda3801c1fe292844040e014"
+ }
+ Frame {
+ msec: 2144
+ hash: "82bf8fb5e3a9bf167f3f00b1f6ab3c06"
+ }
+ Frame {
+ msec: 2160
+ hash: "df3a2bc7758d00d595347e62c7e53c4a"
+ }
+ Frame {
+ msec: 2176
+ hash: "e77ac04a6ad9f97226b45d202a0d5196"
+ }
+ Frame {
+ msec: 2192
+ hash: "37411333a28ea840c59cabd96fd1deba"
+ }
+ Frame {
+ msec: 2208
+ hash: "8d1eb90ffd080bcd078b69c9635108d1"
+ }
+ Frame {
+ msec: 2224
+ hash: "68ee5d58b2edeb6b5a64a714115e4499"
+ }
+ Frame {
+ msec: 2240
+ hash: "003ddf0a5dd3d4bb947a34bdd22ad8c1"
+ }
+ Frame {
+ msec: 2256
+ hash: "bf3c89d0a09ed2159a78f10124f5d7bb"
+ }
+ Frame {
+ msec: 2272
+ hash: "6ec994f41d4540db988846416c2f7b4f"
+ }
+ Frame {
+ msec: 2288
+ hash: "9ca7e3ca6ea26e8259d34a8c0f80f7a9"
+ }
+ Frame {
+ msec: 2304
+ hash: "edf5cea581d46400914610213c8503ea"
+ }
+ Frame {
+ msec: 2320
+ hash: "9b96aac3f98cd37a361788be8b81e308"
+ }
+ Frame {
+ msec: 2336
+ hash: "5d304a8398512ebc85bebf973ed6a4f4"
+ }
+ Frame {
+ msec: 2352
+ hash: "cf2a27a395f23f7976a48d69f5e8e120"
+ }
+ Frame {
+ msec: 2368
+ hash: "458323a37208ea14972d8f84cebc66a5"
+ }
+ Frame {
+ msec: 2384
+ hash: "da9c8e4d168b9cd32d5ec3f5857d2942"
+ }
+ Frame {
+ msec: 2400
+ hash: "5d6663be8e02b0a7a4701595c9c26663"
+ }
+ Frame {
+ msec: 2416
+ hash: "4190712a39ca07f810a6d84e15488393"
+ }
+ Frame {
+ msec: 2432
+ hash: "26b22be0a1c2fecec1e25a6513b19484"
+ }
+ Frame {
+ msec: 2448
+ hash: "3e623bc2b9e8cec49671571291cf6afb"
+ }
+ Frame {
+ msec: 2464
+ hash: "3e623bc2b9e8cec49671571291cf6afb"
+ }
+ Frame {
+ msec: 2480
+ hash: "2cb2968d16323af4659b3197d391bb91"
+ }
+ Frame {
+ msec: 2496
+ hash: "5376b1285647950428b29e75f2e27c4f"
+ }
+ Frame {
+ msec: 2512
+ hash: "baaacc3940c8d36f715d90e046346bed"
+ }
+ Frame {
+ msec: 2528
+ hash: "277719afea4c119f17c34c59ef0b7984"
+ }
+ Frame {
+ msec: 2544
+ hash: "00a172ff8afd1e8444fb84249a3af0fd"
+ }
+ Frame {
+ msec: 2560
+ hash: "bf8a0f939a5602a0a9f5a3bc7c8d0d86"
+ }
+ Frame {
+ msec: 2576
+ hash: "b22860751790b3113b2cb299c9f628b8"
+ }
+ Frame {
+ msec: 2592
+ hash: "fdda1e520457974443720bd44f21d929"
+ }
+ Frame {
+ msec: 2608
+ hash: "538af31f9463cd07163d54adc2721345"
+ }
+ Frame {
+ msec: 2624
+ hash: "2ca50398746c8fb1c936fd412c7556b4"
+ }
+ Frame {
+ msec: 2640
+ hash: "63cd898c3e22a29846489e5c47f455a1"
+ }
+ Frame {
+ msec: 2656
+ hash: "1e69cc765c3f2c27c2b6e7f3e47f515a"
+ }
+ Frame {
+ msec: 2672
+ hash: "9d7ce0df7bee9a387917ef228fd50652"
+ }
+ Frame {
+ msec: 2688
+ hash: "afa0b735a9dd0734362b3f3f7d7177c3"
+ }
+ Frame {
+ msec: 2704
+ hash: "91bee07133319a0adbf9a31c430e58ad"
+ }
+ Frame {
+ msec: 2720
+ hash: "6aee88b6391e524bafc15524825ada74"
+ }
+ Frame {
+ msec: 2736
+ hash: "655ce421faa628b3389f084fe675ad53"
+ }
+ Frame {
+ msec: 2752
+ hash: "367fd34b54f12e896839b0ef4fb06925"
+ }
+ Frame {
+ msec: 2768
+ hash: "0b3ac04504bfe876c4338a4dc3721280"
+ }
+ Frame {
+ msec: 2784
+ hash: "c6cdb77888f1a3cbfe4cfec28bfad12d"
+ }
+ Frame {
+ msec: 2800
+ hash: "ef01302544f4da4575035d3e4f2443c9"
+ }
+ Frame {
+ msec: 2816
+ hash: "53f01d26a75f7e91d14b8975c81638d5"
+ }
+ Frame {
+ msec: 2832
+ hash: "10fc7b3f7e5dff21edef4123d252cba0"
+ }
+ Frame {
+ msec: 2848
+ hash: "10fc7b3f7e5dff21edef4123d252cba0"
+ }
+ Frame {
+ msec: 2864
+ hash: "10fc7b3f7e5dff21edef4123d252cba0"
+ }
+ Frame {
+ msec: 2880
+ image: "follow.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "143970d31598c017d7f24e8b09fd0f0a"
+ }
+ Frame {
+ msec: 2912
+ hash: "fc6c38bfdcd2df7a928e83d57dc0b18d"
+ }
+ Frame {
+ msec: 2928
+ hash: "647c09aae23ea5ec7979775d3022cacf"
+ }
+ Frame {
+ msec: 2944
+ hash: "f1ed5cd564be1eed3242997c14a99887"
+ }
+ Frame {
+ msec: 2960
+ hash: "aec3d7f18d6c4002229ef1d36727c4b0"
+ }
+ Frame {
+ msec: 2976
+ hash: "3552e5a3923593a2c66ecd5e2cb2ee25"
+ }
+ Frame {
+ msec: 2992
+ hash: "55a72327b726a3c75383cc5a28ba9503"
+ }
+ Frame {
+ msec: 3008
+ hash: "c25ff06944f8c92006245452e07215ef"
+ }
+ Frame {
+ msec: 3024
+ hash: "cc0187a10a7ccf087838a481f667af6e"
+ }
+ Frame {
+ msec: 3040
+ hash: "ae9d7ff04066eb998d052c2e21b58327"
+ }
+ Frame {
+ msec: 3056
+ hash: "91707fa1aaa267e6d1d56d173a063bde"
+ }
+ Frame {
+ msec: 3072
+ hash: "c076a33b8afcaf915387375f065e49df"
+ }
+ Frame {
+ msec: 3088
+ hash: "c24390ec788b5f34356e7a6507507a93"
+ }
+ Frame {
+ msec: 3104
+ hash: "e42c9800379de3076d00802c68cc99e8"
+ }
+ Frame {
+ msec: 3120
+ hash: "a2d3ba5353b1c967da93d96b61f7927f"
+ }
+ Frame {
+ msec: 3136
+ hash: "fe719953aa3468d373801bb80ae93eff"
+ }
+ Frame {
+ msec: 3152
+ hash: "e89b9bed1ebc7ebdd37d6975ecb0601c"
+ }
+ Frame {
+ msec: 3168
+ hash: "7f3d84f49a7dd4fe39a1ba0ed7f5da3e"
+ }
+ Frame {
+ msec: 3184
+ hash: "b16c9e05f72e7c8fa59f80422b987600"
+ }
+ Frame {
+ msec: 3200
+ hash: "bd0606da0f7bc6c47a361462b3b2dede"
+ }
+ Frame {
+ msec: 3216
+ hash: "88f81db6d705b745c4d2ffe470cb6966"
+ }
+ Frame {
+ msec: 3232
+ hash: "4ac6769d3f725720bba6c125b43885cd"
+ }
+ Frame {
+ msec: 3248
+ hash: "4ac6769d3f725720bba6c125b43885cd"
+ }
+ Frame {
+ msec: 3264
+ hash: "4ac6769d3f725720bba6c125b43885cd"
+ }
+ Frame {
+ msec: 3280
+ hash: "4ac6769d3f725720bba6c125b43885cd"
+ }
+ Frame {
+ msec: 3296
+ hash: "88f81db6d705b745c4d2ffe470cb6966"
+ }
+ Frame {
+ msec: 3312
+ hash: "88f81db6d705b745c4d2ffe470cb6966"
+ }
+ Frame {
+ msec: 3328
+ hash: "1f112ff43280a208e967e373db8e3f34"
+ }
+ Frame {
+ msec: 3344
+ hash: "6d966dafdfd2cf1927c14f749e24a99c"
+ }
+ Frame {
+ msec: 3360
+ hash: "8ab4ce88e52d7cd2ec9059cdb973590d"
+ }
+ Frame {
+ msec: 3376
+ hash: "62d877f18b8d3fcf6b076946f2ce05f7"
+ }
+ Frame {
+ msec: 3392
+ hash: "efe3729cdeddc4bcee105b27e4062dcd"
+ }
+ Frame {
+ msec: 3408
+ hash: "a2eb63f12d434925d0780f4992155556"
+ }
+ Frame {
+ msec: 3424
+ hash: "5eee7ec87bb399e1395a8d337ede021b"
+ }
+ Frame {
+ msec: 3440
+ hash: "59769ae407be01b016df8d7fbf484243"
+ }
+ Frame {
+ msec: 3456
+ hash: "bbadb689ec5b76f76340905252b2376a"
+ }
+ Frame {
+ msec: 3472
+ hash: "97cd4f34259ac8370e8557ef3ecf5a96"
+ }
+ Frame {
+ msec: 3488
+ hash: "17c1513fe4c0132e15355378c6a6ee11"
+ }
+ Frame {
+ msec: 3504
+ hash: "7b19041638fc7d1cf60512f579f388dd"
+ }
+ Frame {
+ msec: 3520
+ hash: "4d23bbf68cb8b32638b73ac20551ee50"
+ }
+ Frame {
+ msec: 3536
+ hash: "3f0326db5a851887a534e80cc29dc21d"
+ }
+ Frame {
+ msec: 3552
+ hash: "df5902d22a31c4deac1428d2758a0ffa"
+ }
+ Frame {
+ msec: 3568
+ hash: "21badb1464775fa935c2619b91aa6e6e"
+ }
+ Frame {
+ msec: 3584
+ hash: "e8cf87f4a65f6915addc16de29c90108"
+ }
+ Frame {
+ msec: 3600
+ hash: "d3d4487b887695b7bba8e0af7756a0f8"
+ }
+ Frame {
+ msec: 3616
+ hash: "d7f52590e4f51621ad2d62c975a5d1ef"
+ }
+ Frame {
+ msec: 3632
+ hash: "9ebdc2b3ef05748e2cc8988f968f7a37"
+ }
+ Frame {
+ msec: 3648
+ hash: "74bb7974f9315e70e976c21955390b9e"
+ }
+ Frame {
+ msec: 3664
+ hash: "59e16a89e523160f2a482c22f003f87f"
+ }
+ Frame {
+ msec: 3680
+ hash: "d8284c216df0fdd37525f26b88707572"
+ }
+ Frame {
+ msec: 3696
+ hash: "d8711b4444eea59acc544652cea3c4ce"
+ }
+ Frame {
+ msec: 3712
+ hash: "12148c3f2b5f41a4ac4801e990b20114"
+ }
+ Frame {
+ msec: 3728
+ hash: "34429cbdfe581a524b1f9072cc404539"
+ }
+ Frame {
+ msec: 3744
+ hash: "1f6a17b91d73e10bcbdd166d97546822"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 195; y: 95
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3760
+ hash: "bccd4f135f27199b3a710576e0013c53"
+ }
+ Frame {
+ msec: 3776
+ hash: "6aa4db9ecb8fa4ad4d4f81434c369759"
+ }
+ Frame {
+ msec: 3792
+ hash: "a7f2951411d8f5322ce91b3da7e86d64"
+ }
+ Frame {
+ msec: 3808
+ hash: "25fe19f3398d3d1a74ad8ed4114149d7"
+ }
+ Frame {
+ msec: 3824
+ hash: "05c3dae68897a461de2923824bef9390"
+ }
+ Frame {
+ msec: 3840
+ image: "follow.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "db6265c30dd614720d1532ffc411a28f"
+ }
+ Frame {
+ msec: 3872
+ hash: "f5de8e4ba755bc0a1e4c3f36ed3e6a93"
+ }
+ Frame {
+ msec: 3888
+ hash: "ad68229e5fe9a2570074648005c5e5df"
+ }
+ Frame {
+ msec: 3904
+ hash: "02d894680766289fe659a86b02d6c9ca"
+ }
+ Frame {
+ msec: 3920
+ hash: "4f228534dd909207e8d149c74bd8fd90"
+ }
+ Frame {
+ msec: 3936
+ hash: "f0b5c64f6a50e156452caf6a352c11e1"
+ }
+ Frame {
+ msec: 3952
+ hash: "64d46ff443534dbdb3cca88b7fc3e758"
+ }
+ Frame {
+ msec: 3968
+ hash: "717ad4b8012a21c6ed38dee5ea978f36"
+ }
+ Frame {
+ msec: 3984
+ hash: "ed38c7b528bcbb3e291761104bf1e86e"
+ }
+ Frame {
+ msec: 4000
+ hash: "8cc8674d325a2c72c41654ffbe5bce1f"
+ }
+ Frame {
+ msec: 4016
+ hash: "ab66dd60cc0e58d23bef5c709fe901ad"
+ }
+ Frame {
+ msec: 4032
+ hash: "b3b824cae4ddaac4a224e84f0e282fa4"
+ }
+ Frame {
+ msec: 4048
+ hash: "ead7fe4bec7987c24c305e114797284c"
+ }
+ Frame {
+ msec: 4064
+ hash: "e5e9501f1ca61ea9f99aadfc5ca02214"
+ }
+ Frame {
+ msec: 4080
+ hash: "f74a00eb31e1604f13a6ffb29fbd91b7"
+ }
+ Frame {
+ msec: 4096
+ hash: "539aca62492408ccc1815c67b55cb399"
+ }
+ Frame {
+ msec: 4112
+ hash: "4f548ad0eb7c4ce88a777e3b7ce2d3a8"
+ }
+ Frame {
+ msec: 4128
+ hash: "b0190c5ed53ff812988dd7a2152ffa61"
+ }
+ Frame {
+ msec: 4144
+ hash: "48214bdfbdcba256043e2cec7f5e321b"
+ }
+ Frame {
+ msec: 4160
+ hash: "952614329111d1d83b0304aa919af177"
+ }
+ Frame {
+ msec: 4176
+ hash: "fd874a73062dedfe7b904ad4c9fbcbc9"
+ }
+ Frame {
+ msec: 4192
+ hash: "365b9a18cf37521718ef98589ac23933"
+ }
+ Frame {
+ msec: 4208
+ hash: "32bbbf93d78925ef12f830386f0dbe2b"
+ }
+ Frame {
+ msec: 4224
+ hash: "835d391a498b7d470b317e91453ba2f9"
+ }
+ Frame {
+ msec: 4240
+ hash: "07d0cd82a39bfea2567587745f1e330d"
+ }
+ Frame {
+ msec: 4256
+ hash: "9560a63581007038e1c463b906a4b346"
+ }
+ Frame {
+ msec: 4272
+ hash: "076d25daafe8b582aeff39e247653285"
+ }
+ Frame {
+ msec: 4288
+ hash: "f2e66dad3231250b951388396705c839"
+ }
+ Frame {
+ msec: 4304
+ hash: "f168773343e928b60aad5430b9ca739d"
+ }
+ Frame {
+ msec: 4320
+ hash: "99ed4dc4be1a0e8d98e1a54d51208da3"
+ }
+ Frame {
+ msec: 4336
+ hash: "23b3e73a966f52ce6166bc91955570a1"
+ }
+ Frame {
+ msec: 4352
+ hash: "00cdb999f3d2c6fcad708c37c3059c3d"
+ }
+ Frame {
+ msec: 4368
+ hash: "96f1bef93ba1768afcc42924145d49ff"
+ }
+ Frame {
+ msec: 4384
+ hash: "0a76f6d5ec710e4046f32f76be8e0d68"
+ }
+ Frame {
+ msec: 4400
+ hash: "98f97a6c7eac1a493e81e79956177668"
+ }
+ Frame {
+ msec: 4416
+ hash: "9424ca6ba64d0d0c0bd1ee9da1b5085a"
+ }
+ Frame {
+ msec: 4432
+ hash: "2049a22079ac590aad3c9f6496879bcb"
+ }
+ Frame {
+ msec: 4448
+ hash: "f70f9f6bd3abf3bdcb70038cda5ed311"
+ }
+ Frame {
+ msec: 4464
+ hash: "48d6d01e1d80fea8eb05572ca26b692c"
+ }
+ Frame {
+ msec: 4480
+ hash: "af152dc6de929a8231687611cc301f28"
+ }
+ Frame {
+ msec: 4496
+ hash: "2ec869cd61570b570586870f80ba3832"
+ }
+ Frame {
+ msec: 4512
+ hash: "42be0431c015dcd0f5f6dd59ba7c2d7d"
+ }
+ Frame {
+ msec: 4528
+ hash: "abc112f396c5e504a19dce255437720c"
+ }
+ Frame {
+ msec: 4544
+ hash: "a371c4f49af16bdacc5ab5abbfc99e99"
+ }
+ Frame {
+ msec: 4560
+ hash: "1ebfd139bfabbbaf522acd63e3f47462"
+ }
+ Frame {
+ msec: 4576
+ hash: "b36086718a3dd89500adbf67aa7b0f1d"
+ }
+ Frame {
+ msec: 4592
+ hash: "e3ea2ad4955cb2ab8d503b331b3594c3"
+ }
+ Frame {
+ msec: 4608
+ hash: "4214c9f474d7f11bed74e32f5b3a0e9f"
+ }
+ Frame {
+ msec: 4624
+ hash: "f290e1dbf13ae399a2644eea3715804a"
+ }
+ Frame {
+ msec: 4640
+ hash: "6538c60446e3303dc1126c3c9c47ae42"
+ }
+ Frame {
+ msec: 4656
+ hash: "5319667f181eb5647710ccc6eddf43c9"
+ }
+ Frame {
+ msec: 4672
+ hash: "b98b68ea99d5a107115b50c32aa45c35"
+ }
+ Frame {
+ msec: 4688
+ hash: "2cc38e2915f77a46082c32c9393ae0c5"
+ }
+ Frame {
+ msec: 4704
+ hash: "40c695b17834cbba86d4dde0729f620b"
+ }
+ Frame {
+ msec: 4720
+ hash: "e8d5a95cfc726ce2626951ef1c68a948"
+ }
+ Frame {
+ msec: 4736
+ hash: "ab96c1668890ceffba74219d83e15e99"
+ }
+ Frame {
+ msec: 4752
+ hash: "4d69a73b3940911940b419028dabd223"
+ }
+ Frame {
+ msec: 4768
+ hash: "281043e3c045df177cbfae1abf51a8d1"
+ }
+ Frame {
+ msec: 4784
+ hash: "8adf6d8154d7950efe6b5bd7e2b760b6"
+ }
+ Frame {
+ msec: 4800
+ image: "follow.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "7fba4249c76b7f81c2b88cf906ce8ce6"
+ }
+ Frame {
+ msec: 4832
+ hash: "50b3c89d4d783469843b3acacb9690dd"
+ }
+ Frame {
+ msec: 4848
+ hash: "29f950ab7e6299036e78c8f37d114990"
+ }
+ Frame {
+ msec: 4864
+ hash: "3f8aecc5453406c9d8160eeb9691ed91"
+ }
+ Frame {
+ msec: 4880
+ hash: "ad7ff48fed4ca9e236271d169c3bf696"
+ }
+ Frame {
+ msec: 4896
+ hash: "2a2f872e4ef5c062a61fb59238df8794"
+ }
+ Frame {
+ msec: 4912
+ hash: "87cf2e21d7e56a82437a8ff3fa2bdc8c"
+ }
+ Frame {
+ msec: 4928
+ hash: "c3b04bb24d86d2aebd8fde7845f114cf"
+ }
+ Frame {
+ msec: 4944
+ hash: "3ad95d59a1f1841e3ff2324055ca23c0"
+ }
+ Frame {
+ msec: 4960
+ hash: "b91068fdce1fb2be9a64902a3dfa6b0d"
+ }
+ Frame {
+ msec: 4976
+ hash: "30f0118eb0bba40927a8038da03b652b"
+ }
+ Frame {
+ msec: 4992
+ hash: "ce5f3d15d3536be16b960f02a7335b99"
+ }
+ Frame {
+ msec: 5008
+ hash: "85b853c3f48b915ed6e80815709e8ac2"
+ }
+ Frame {
+ msec: 5024
+ hash: "c3511a76aa6dc2f1422a473ca4d80d0f"
+ }
+ Frame {
+ msec: 5040
+ hash: "deb1df70b4e1801c635356c65c0a5a46"
+ }
+ Frame {
+ msec: 5056
+ hash: "d04983df9b0ffc45e629af55a8e5cc95"
+ }
+ Frame {
+ msec: 5072
+ hash: "2a55c97509819657f5f8604d4789d9d4"
+ }
+ Frame {
+ msec: 5088
+ hash: "94589d594fa2e5ed621459ec2c8bd7e8"
+ }
+ Frame {
+ msec: 5104
+ hash: "a8a1bd7c15a5bdfe15d6580d719bdba6"
+ }
+ Frame {
+ msec: 5120
+ hash: "b4e1a4b1b649820be217c46b5086c8a4"
+ }
+ Frame {
+ msec: 5136
+ hash: "4de7d7ce85717eb9a67c61745ea26c0a"
+ }
+ Frame {
+ msec: 5152
+ hash: "c8ee53b7e659e10c7dbcf44e1a45f794"
+ }
+ Frame {
+ msec: 5168
+ hash: "f46ce03bc5a932c39862577c5a5cd24c"
+ }
+ Frame {
+ msec: 5184
+ hash: "d417370ed6fb99ccfa443eb97e6de331"
+ }
+ Frame {
+ msec: 5200
+ hash: "336af06572992960c829d4a209048263"
+ }
+ Frame {
+ msec: 5216
+ hash: "4066e8eef292abf9b58bc89b4b5f3ce9"
+ }
+ Frame {
+ msec: 5232
+ hash: "360f037a02bf4a337b278886266ff2f1"
+ }
+ Frame {
+ msec: 5248
+ hash: "79e9f387b0ce164057640c0caab8d10d"
+ }
+ Frame {
+ msec: 5264
+ hash: "ee8741d1810303cfe5ecff39c7d52fdd"
+ }
+ Frame {
+ msec: 5280
+ hash: "4cba1c857f0af49d7fe68584f99c89d7"
+ }
+ Frame {
+ msec: 5296
+ hash: "c0ae482a2fbb9f15a2c2ff631cc85c2c"
+ }
+ Frame {
+ msec: 5312
+ hash: "3b6bf6d6a0aeebdc92eff4e336fd3b6e"
+ }
+ Frame {
+ msec: 5328
+ hash: "43033eb8aeba6b49c135a1702f6b8f47"
+ }
+ Frame {
+ msec: 5344
+ hash: "1319c7e3a84484723891ee43a80bc765"
+ }
+ Frame {
+ msec: 5360
+ hash: "838ec693c923565d77b060f262beb1e8"
+ }
+ Frame {
+ msec: 5376
+ hash: "74306669836425de03cec617d4ed849a"
+ }
+ Frame {
+ msec: 5392
+ hash: "c063f4951755c8939399d0d560a0f762"
+ }
+ Frame {
+ msec: 5408
+ hash: "512c739e0ff25f7d6b983a193f7fc2c3"
+ }
+ Frame {
+ msec: 5424
+ hash: "6c5f69cc2ce2992fd2ecb0ea3691e2b8"
+ }
+ Frame {
+ msec: 5440
+ hash: "f5dbc5ce0ba00eafb9379ee86de67150"
+ }
+ Frame {
+ msec: 5456
+ hash: "f62bb7d8d9749272ca3e2bd1931598fb"
+ }
+ Frame {
+ msec: 5472
+ hash: "052fdac05286edcdd7fcd4d6d9582f39"
+ }
+ Frame {
+ msec: 5488
+ hash: "ac4702306e5be156fe7b069cb90e1038"
+ }
+ Frame {
+ msec: 5504
+ hash: "127e94c79f4d33e5f223a0853629245f"
+ }
+ Frame {
+ msec: 5520
+ hash: "dd77216b0a90c46dd5c264d38ab0fd74"
+ }
+ Frame {
+ msec: 5536
+ hash: "a4e50b39aa367d4cd7650d088d186856"
+ }
+ Frame {
+ msec: 5552
+ hash: "6e14946b9b23f0fc137bd61c02af1ca5"
+ }
+ Frame {
+ msec: 5568
+ hash: "8c550d5e4cfbcee2c7bd6c20dba53f41"
+ }
+ Frame {
+ msec: 5584
+ hash: "9f2385fb614bdaafe022712148f786d2"
+ }
+ Frame {
+ msec: 5600
+ hash: "c87903c96ae5a4b91c5bda524bfd4a4f"
+ }
+ Frame {
+ msec: 5616
+ hash: "9a98de9b4237b7c0ccb4468344d410bc"
+ }
+ Frame {
+ msec: 5632
+ hash: "7ff448f395ff50cde1f6e6cfaf0c1541"
+ }
+ Frame {
+ msec: 5648
+ hash: "ab7a6998a5b26e3d58bd1d0a949f3709"
+ }
+ Frame {
+ msec: 5664
+ hash: "ab7a6998a5b26e3d58bd1d0a949f3709"
+ }
+ Frame {
+ msec: 5680
+ hash: "2e1b5636ab75af91bd5b0d48c04828f5"
+ }
+ Frame {
+ msec: 5696
+ hash: "0976b605c78f6f8512acdfb61b9d123a"
+ }
+ Frame {
+ msec: 5712
+ hash: "bb816bfd8bd3972c80c3a76c9ddf785e"
+ }
+ Frame {
+ msec: 5728
+ hash: "c3518990fc7aa5660a9e86034cf4c46f"
+ }
+ Frame {
+ msec: 5744
+ hash: "b27230d8aeb214e18b43de167213ef7b"
+ }
+ Frame {
+ msec: 5760
+ image: "follow.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "fc55f00ae456c2687ed05ab4b6906a33"
+ }
+ Frame {
+ msec: 5792
+ hash: "50051a48d1fae3bc9c9d1f0a964d9561"
+ }
+ Frame {
+ msec: 5808
+ hash: "279a38d7261241c744c2317ea9843567"
+ }
+ Frame {
+ msec: 5824
+ hash: "0b3ed3960713dbda36326b7de492c42e"
+ }
+ Frame {
+ msec: 5840
+ hash: "fff5737541317406c4a0ef06f1cdc041"
+ }
+ Frame {
+ msec: 5856
+ hash: "47aef0d79da45139a3981a75290cc9b8"
+ }
+ Frame {
+ msec: 5872
+ hash: "d79f9f9371c76a855ea4f2cdeed97acd"
+ }
+ Frame {
+ msec: 5888
+ hash: "66610a0d5b926d419da26e20b04b55a5"
+ }
+ Frame {
+ msec: 5904
+ hash: "9891ad954da8535b44cc234bb2588f30"
+ }
+ Frame {
+ msec: 5920
+ hash: "b53056146701fae1598ab49e6399db01"
+ }
+ Frame {
+ msec: 5936
+ hash: "064799027a3f60458a3797c6c87d3e29"
+ }
+ Frame {
+ msec: 5952
+ hash: "81ad252f10e6f8f2a08e7df1d25e8a47"
+ }
+ Frame {
+ msec: 5968
+ hash: "09fbd923da02844f50ad25059f82560c"
+ }
+ Frame {
+ msec: 5984
+ hash: "f41d8370afdce8a154ab42204ca8d92d"
+ }
+ Frame {
+ msec: 6000
+ hash: "748b2d020c28b3ac36b08377b4a2544b"
+ }
+ Frame {
+ msec: 6016
+ hash: "748b2d020c28b3ac36b08377b4a2544b"
+ }
+ Frame {
+ msec: 6032
+ hash: "d8c02a54c0d1df20127025d547c741af"
+ }
+ Frame {
+ msec: 6048
+ hash: "d8c02a54c0d1df20127025d547c741af"
+ }
+ Frame {
+ msec: 6064
+ hash: "d7fd0dab22fec0f68ed01cfd6d32e7f5"
+ }
+ Frame {
+ msec: 6080
+ hash: "f0b035eda10c07f5c3c825784ad96437"
+ }
+ Frame {
+ msec: 6096
+ hash: "54b83800f8a01e1a4d57b8b1d371fb09"
+ }
+ Frame {
+ msec: 6112
+ hash: "19ad51c31e9cfdb314c76f323574806c"
+ }
+ Frame {
+ msec: 6128
+ hash: "dcf269a115781eb4df232a527de87a87"
+ }
+ Frame {
+ msec: 6144
+ hash: "95053206702a6118c23b541ff7fbef0d"
+ }
+ Frame {
+ msec: 6160
+ hash: "933a158398ee746c0465c2e7af9b6b4d"
+ }
+ Frame {
+ msec: 6176
+ hash: "ade4a4aa03f5787dce1331ed27ff9c6e"
+ }
+ Frame {
+ msec: 6192
+ hash: "9ecc7d4cb5cf0dd815e208e13e2c932a"
+ }
+ Frame {
+ msec: 6208
+ hash: "98e40cba2e717e57a5dcd3413e166f65"
+ }
+ Frame {
+ msec: 6224
+ hash: "f68f45b71f6d596eaa76fa2bc46cfe1b"
+ }
+ Frame {
+ msec: 6240
+ hash: "9230c9b1013b83b073ccb90d2633043f"
+ }
+ Frame {
+ msec: 6256
+ hash: "5d0fc4842b75703d29816fa0330624ba"
+ }
+ Frame {
+ msec: 6272
+ hash: "5d0fc4842b75703d29816fa0330624ba"
+ }
+ Frame {
+ msec: 6288
+ hash: "5d0fc4842b75703d29816fa0330624ba"
+ }
+ Frame {
+ msec: 6304
+ hash: "96008d5b8446f67e07129d02300d122d"
+ }
+ Frame {
+ msec: 6320
+ hash: "96008d5b8446f67e07129d02300d122d"
+ }
+ Frame {
+ msec: 6336
+ hash: "96008d5b8446f67e07129d02300d122d"
+ }
+ Frame {
+ msec: 6352
+ hash: "96008d5b8446f67e07129d02300d122d"
+ }
+ Frame {
+ msec: 6368
+ hash: "96008d5b8446f67e07129d02300d122d"
+ }
+ Frame {
+ msec: 6384
+ hash: "478be760047d33bd66017bdd304ff3ae"
+ }
+ Frame {
+ msec: 6400
+ hash: "478be760047d33bd66017bdd304ff3ae"
+ }
+ Frame {
+ msec: 6416
+ hash: "478be760047d33bd66017bdd304ff3ae"
+ }
+ Frame {
+ msec: 6432
+ hash: "478be760047d33bd66017bdd304ff3ae"
+ }
+ Frame {
+ msec: 6448
+ hash: "478be760047d33bd66017bdd304ff3ae"
+ }
+ Frame {
+ msec: 6464
+ hash: "8ff11dfe2642dc099c240e8aef8285df"
+ }
+ Frame {
+ msec: 6480
+ hash: "8ff11dfe2642dc099c240e8aef8285df"
+ }
+ Frame {
+ msec: 6496
+ hash: "8ff11dfe2642dc099c240e8aef8285df"
+ }
+ Frame {
+ msec: 6512
+ hash: "8ff11dfe2642dc099c240e8aef8285df"
+ }
+ Frame {
+ msec: 6528
+ hash: "8ff11dfe2642dc099c240e8aef8285df"
+ }
+ Frame {
+ msec: 6544
+ hash: "8ff11dfe2642dc099c240e8aef8285df"
+ }
+ Frame {
+ msec: 6560
+ hash: "8ff11dfe2642dc099c240e8aef8285df"
+ }
+ Frame {
+ msec: 6576
+ hash: "8ff11dfe2642dc099c240e8aef8285df"
+ }
+ Frame {
+ msec: 6592
+ hash: "8ff11dfe2642dc099c240e8aef8285df"
+ }
+ Frame {
+ msec: 6608
+ hash: "8ff11dfe2642dc099c240e8aef8285df"
+ }
+ Frame {
+ msec: 6624
+ hash: "8ff11dfe2642dc099c240e8aef8285df"
+ }
+ Frame {
+ msec: 6640
+ hash: "8ff11dfe2642dc099c240e8aef8285df"
+ }
+ Frame {
+ msec: 6656
+ hash: "8ff11dfe2642dc099c240e8aef8285df"
+ }
+ Frame {
+ msec: 6672
+ hash: "8ff11dfe2642dc099c240e8aef8285df"
+ }
+ Frame {
+ msec: 6688
+ hash: "8ff11dfe2642dc099c240e8aef8285df"
+ }
+ Frame {
+ msec: 6704
+ hash: "01ac8ff953f8f83c6fa2252fe6ff6698"
+ }
+ Frame {
+ msec: 6720
+ image: "follow.6.png"
+ }
+ Frame {
+ msec: 6736
+ hash: "01ac8ff953f8f83c6fa2252fe6ff6698"
+ }
+ Frame {
+ msec: 6752
+ hash: "01ac8ff953f8f83c6fa2252fe6ff6698"
+ }
+ Frame {
+ msec: 6768
+ hash: "01ac8ff953f8f83c6fa2252fe6ff6698"
+ }
+ Frame {
+ msec: 6784
+ hash: "01ac8ff953f8f83c6fa2252fe6ff6698"
+ }
+ Frame {
+ msec: 6800
+ hash: "01ac8ff953f8f83c6fa2252fe6ff6698"
+ }
+ Frame {
+ msec: 6816
+ hash: "01ac8ff953f8f83c6fa2252fe6ff6698"
+ }
+ Frame {
+ msec: 6832
+ hash: "96008d5b8446f67e07129d02300d122d"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 6848
+ hash: "5d0fc4842b75703d29816fa0330624ba"
+ }
+ Frame {
+ msec: 6864
+ hash: "5d0fc4842b75703d29816fa0330624ba"
+ }
+ Frame {
+ msec: 6880
+ hash: "5d0fc4842b75703d29816fa0330624ba"
+ }
+ Frame {
+ msec: 6896
+ hash: "5d0fc4842b75703d29816fa0330624ba"
+ }
+ Frame {
+ msec: 6912
+ hash: "5d0fc4842b75703d29816fa0330624ba"
+ }
+ Frame {
+ msec: 6928
+ hash: "5d0fc4842b75703d29816fa0330624ba"
+ }
+}
diff --git a/tests/auto/declarative/visual/qmlspringfollow/follow.qml b/tests/auto/declarative/visual/qmlspringfollow/follow.qml
new file mode 100644
index 0000000..8a713a2
--- /dev/null
+++ b/tests/auto/declarative/visual/qmlspringfollow/follow.qml
@@ -0,0 +1,71 @@
+import Qt 4.6
+
+Rectangle {
+ color: "#ffffff"
+ width: 320; height: 240
+ Rectangle {
+ id: rect
+ color: "#00ff00"
+ y: 200; width: 60; height: 20
+ y: SequentialAnimation {
+ repeat: true
+ NumberAnimation {
+ to: 20; duration: 500
+ easing: "easeInOutQuad"
+ }
+ NumberAnimation {
+ to: 200; duration: 2000
+ easing: "easeOutBounce"
+ }
+ PauseAnimation { duration: 1000 }
+ }
+ }
+
+ // Velocity
+ Rectangle {
+ color: "#ff0000"
+ x: rect.width; width: rect.width; height: 20
+ y: 200
+ y: SpringFollow { source: rect.y; velocity: 200 }
+ }
+
+ // Spring
+ Rectangle {
+ color: "#ff0000"
+ x: rect.width * 2; width: rect.width/2; height: 20
+ y: 200
+ y: SpringFollow { source: rect.y; spring: 1.0; damping: 0.2 }
+ }
+ Rectangle {
+ color: "#880000"
+ x: rect.width * 2.5; width: rect.width/2; height: 20
+ y: 200
+ y: SpringFollow { source: rect.y; spring: 1.0; damping: 0.2; mass: 3.0 } // "heavier" object
+ }
+
+ // Follow mouse
+ MouseRegion {
+ id: mouseRegion
+ anchors.fill: parent
+ Rectangle {
+ id: ball
+ width: 20; height: 20
+ radius: 10
+ color: "#0000ff"
+ x: SpringFollow { id: f1; source: mouseRegion.mouseX-10; spring: 1.0; damping: 0.05; epsilon: 0.25 }
+ y: SpringFollow { id: f2; source: mouseRegion.mouseY-10; spring: 1.0; damping: 0.05; epsilon: 0.25 }
+ states: [
+ State {
+ name: "following"
+ when: !f1.inSync || !f2.inSync
+ PropertyChanges { target: ball; color: "#ff0000" }
+ }
+ ]
+ transitions: [
+ Transition {
+ ColorAnimation { duration: 200 }
+ }
+ ]
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/rect/GradientRect.qml b/tests/auto/declarative/visual/rect/GradientRect.qml
new file mode 100644
index 0000000..1d3ec98
--- /dev/null
+++ b/tests/auto/declarative/visual/rect/GradientRect.qml
@@ -0,0 +1,25 @@
+import Qt 4.6
+
+Item {
+ id: rect
+ property color color
+ property color border : Qt.rgba(0,0,0,0)
+ property int rotation
+ property int radius
+ property int borderWidth
+ property bool smooth: false
+
+ width: 80; height: 80
+ Item {
+ anchors.centerIn: parent; rotation: rect.rotation;
+ Rectangle {
+ anchors.centerIn: parent; width: 80; height: 80
+ border.color: rect.border; border.width: rect.border != Qt.rgba(0,0,0,0) ? 2 : 0
+ radius: rect.radius; smooth: rect.smooth
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: rect.color }
+ GradientStop { position: 1.0; color: "white" }
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/rect/MyRect.qml b/tests/auto/declarative/visual/rect/MyRect.qml
new file mode 100644
index 0000000..22e0948
--- /dev/null
+++ b/tests/auto/declarative/visual/rect/MyRect.qml
@@ -0,0 +1,21 @@
+import Qt 4.6
+
+Item {
+ id: rect
+ property color color
+ property color border : Qt.rgba(0,0,0,0)
+ property int rotation
+ property int radius
+ property int borderWidth
+ property bool smooth: false
+
+ width: 80; height: 80
+ Item {
+ anchors.centerIn: parent; rotation: rect.rotation;
+ Rectangle {
+ anchors.centerIn: parent; width: 80; height: 80
+ color: rect.color; border.color: rect.border; border.width: rect.border != Qt.rgba(0,0,0,0) ? 2 : 0
+ radius: rect.radius; smooth: rect.smooth
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/rect/data/rect-painting.0.png b/tests/auto/declarative/visual/rect/data/rect-painting.0.png
new file mode 100644
index 0000000..3b7970d
--- /dev/null
+++ b/tests/auto/declarative/visual/rect/data/rect-painting.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/rect/data/rect-painting.qml b/tests/auto/declarative/visual/rect/data/rect-painting.qml
new file mode 100644
index 0000000..52acadf
--- /dev/null
+++ b/tests/auto/declarative/visual/rect/data/rect-painting.qml
@@ -0,0 +1,287 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 32
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 48
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 64
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 80
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 96
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 112
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 128
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 144
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 160
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 176
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 192
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 208
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 224
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 240
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 256
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 272
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 288
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 304
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 320
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 336
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 352
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 368
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 384
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 400
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 416
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 432
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 448
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 464
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 480
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 496
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 512
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 528
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 544
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 560
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 576
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 592
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 608
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 624
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 640
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 656
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 672
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 688
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 704
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 720
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 736
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 752
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 768
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 784
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 800
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 816
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 832
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 848
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 864
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 880
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 896
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 912
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 928
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 944
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 960
+ image: "rect-painting.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 992
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 1008
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 1024
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 1040
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 1056
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 1072
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+ Frame {
+ msec: 1088
+ hash: "79998980caccd4eb479fbd9f2a13c860"
+ }
+}
diff --git a/tests/auto/declarative/visual/rect/rect-painting.qml b/tests/auto/declarative/visual/rect/rect-painting.qml
new file mode 100644
index 0000000..93beeec
--- /dev/null
+++ b/tests/auto/declarative/visual/rect/rect-painting.qml
@@ -0,0 +1,55 @@
+import Qt 4.6
+
+Rectangle {
+ width: 900; height: 500
+ color: "white"
+
+ Rectangle {
+ anchors.top: parent.verticalCenter
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ color: "#eeeeee"
+ }
+
+ Grid {
+ anchors.centerIn: parent
+ columns: 8; rows:4; spacing: 30
+
+ MyRect { color: "lightsteelblue" }
+ MyRect { color: "lightsteelblue"; border: "gray" }
+ MyRect { color: "lightsteelblue"; radius: 10 }
+ MyRect { color: "lightsteelblue"; radius: 10; border: "gray" }
+ GradientRect { color: "lightsteelblue" }
+ GradientRect { color: "lightsteelblue"; border: "gray" }
+ GradientRect { color: "lightsteelblue"; radius: 10 }
+ GradientRect { color: "lightsteelblue"; radius: 10; border: "gray" }
+
+ MyRect { color: "thistle"; rotation: 10 }
+ MyRect { color: "thistle"; border: "gray"; rotation: 10 }
+ MyRect { color: "thistle"; radius: 10; rotation: 10 }
+ MyRect { color: "thistle"; radius: 10; border: "gray"; rotation: 10 }
+ GradientRect { color: "thistle"; rotation: 10 }
+ GradientRect { color: "thistle"; border: "gray"; rotation: 10 }
+ GradientRect { color: "thistle"; radius: 10; rotation: 10 }
+ GradientRect { color: "thistle"; radius: 10; border: "gray"; rotation: 10 }
+
+ MyRect { color: "lightsteelblue"; smooth: true }
+ MyRect { color: "lightsteelblue"; border: "gray"; smooth: true }
+ MyRect { color: "lightsteelblue"; radius: 10; smooth: true }
+ MyRect { color: "lightsteelblue"; radius: 10; border: "gray"; smooth: true }
+ GradientRect { color: "lightsteelblue"; smooth: true }
+ GradientRect { color: "lightsteelblue"; border: "gray"; smooth: true }
+ GradientRect { color: "lightsteelblue"; radius: 10; smooth: true }
+ GradientRect { color: "lightsteelblue"; radius: 10; border: "gray"; smooth: true }
+
+ MyRect { color: "thistle"; rotation: 10; smooth: true }
+ MyRect { color: "thistle"; border: "gray"; rotation: 10; smooth: true }
+ MyRect { color: "thistle"; radius: 10; rotation: 10; smooth: true }
+ MyRect { color: "thistle"; radius: 10; border: "gray"; rotation: 10; smooth: true }
+ GradientRect { color: "thistle"; rotation: 10; smooth: true }
+ GradientRect { color: "thistle"; border: "gray"; rotation: 10; smooth: true }
+ GradientRect { color: "thistle"; radius: 10; rotation: 10; smooth: true }
+ GradientRect { color: "thistle"; radius: 10; border: "gray"; rotation: 10; smooth: true }
+ }
+}
diff --git a/tests/auto/declarative/visual/repeater/basic1.qml b/tests/auto/declarative/visual/repeater/basic1.qml
new file mode 100644
index 0000000..acb669c
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/basic1.qml
@@ -0,0 +1,27 @@
+import Qt 4.6
+
+Rectangle {
+ color: "blue"
+ width: 300
+ height: 200
+ Row {
+ Repeater {
+ delegate: Rectangle {
+ color: "red"
+ width: 100
+ height: 100
+ Text {
+ text: name
+ }
+ }
+ model: ListModel {
+ ListElement {
+ name: "January"
+ }
+ ListElement {
+ name: "February"
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/repeater/basic2.qml b/tests/auto/declarative/visual/repeater/basic2.qml
new file mode 100644
index 0000000..3323da5
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/basic2.qml
@@ -0,0 +1,31 @@
+import Qt 4.6
+
+Rectangle {
+ color: "blue"
+ width: 300
+ height: 200
+ Component {
+ id: delegate
+ Rectangle {
+ color: "red"
+ width: 100
+ height: 100
+ Text {
+ text: name
+ }
+ }
+ }
+ Row {
+ Repeater {
+ delegate: delegate
+ model: ListModel {
+ ListElement {
+ name: "January"
+ }
+ ListElement {
+ name: "February"
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/repeater/basic3.qml b/tests/auto/declarative/visual/repeater/basic3.qml
new file mode 100644
index 0000000..cb57d49
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/basic3.qml
@@ -0,0 +1,29 @@
+import Qt 4.6
+
+Rectangle {
+ color: "blue"
+ width: 300
+ height: 200
+ ListModel {
+ id: dataSource
+ ListElement {
+ name: "January"
+ }
+ ListElement {
+ name: "February"
+ }
+ }
+ Row {
+ Repeater {
+ model: dataSource
+ delegate: Rectangle {
+ color: "red"
+ width: 100
+ height: 100
+ Text {
+ text: name
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/repeater/basic4.qml b/tests/auto/declarative/visual/repeater/basic4.qml
new file mode 100644
index 0000000..f31de2c
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/basic4.qml
@@ -0,0 +1,33 @@
+import Qt 4.6
+
+Rectangle {
+ color: "blue"
+ width: 300
+ height: 200
+ ListModel {
+ id: dataSource
+ ListElement {
+ name: "January"
+ }
+ ListElement {
+ name: "February"
+ }
+ }
+ Component {
+ id: delegate
+ Rectangle {
+ color: "red"
+ width: 100
+ height: 100
+ Text {
+ text: name
+ }
+ }
+ }
+ Row {
+ Repeater {
+ model: dataSource
+ delegate: delegate
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/repeater/data-MAC/basic1.0.png b/tests/auto/declarative/visual/repeater/data-MAC/basic1.0.png
new file mode 100644
index 0000000..2658b6b
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/data-MAC/basic1.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/repeater/data-MAC/basic1.qml b/tests/auto/declarative/visual/repeater/data-MAC/basic1.qml
new file mode 100644
index 0000000..5bc0d6b
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/data-MAC/basic1.qml
@@ -0,0 +1,323 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 32
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 48
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 64
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 80
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 96
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 112
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 128
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 144
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 160
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 176
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 192
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 208
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 224
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 240
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 256
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 272
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 288
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 304
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 320
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 336
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 352
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 368
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 384
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 400
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 416
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 432
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 448
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 464
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 480
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 496
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 512
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 528
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 544
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 560
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 576
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 592
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 608
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 624
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 640
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 656
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 672
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 688
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 704
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 720
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 736
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 752
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 768
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 784
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 800
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 816
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 832
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 848
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 864
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 880
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 896
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 912
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 928
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 944
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 960
+ image: "basic1.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 992
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1008
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1024
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1040
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1056
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1072
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1088
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1104
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1120
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1136
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1152
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1168
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1184
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1200
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1216
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1232
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+}
diff --git a/tests/auto/declarative/visual/repeater/data-MAC/basic2.0.png b/tests/auto/declarative/visual/repeater/data-MAC/basic2.0.png
new file mode 100644
index 0000000..2658b6b
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/data-MAC/basic2.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/repeater/data-MAC/basic2.qml b/tests/auto/declarative/visual/repeater/data-MAC/basic2.qml
new file mode 100644
index 0000000..64cf2ea
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/data-MAC/basic2.qml
@@ -0,0 +1,331 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 32
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 48
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 64
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 80
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 96
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 112
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 128
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 144
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 160
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 176
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 192
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 208
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 224
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 240
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 256
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 272
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 288
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 304
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 320
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 336
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 352
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 368
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 384
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 400
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 416
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 432
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 448
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 464
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 480
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 496
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 512
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 528
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 544
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 560
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 576
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 592
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 608
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 624
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 640
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 656
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 672
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 688
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 704
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 720
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 736
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 752
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 768
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 784
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 800
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 816
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 832
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 848
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 864
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 880
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 896
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 912
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 928
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 944
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 960
+ image: "basic2.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 992
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1008
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1024
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1040
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1056
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1072
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1088
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1104
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1120
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1136
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1152
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1168
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1184
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1200
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1216
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1232
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1248
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1264
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+}
diff --git a/tests/auto/declarative/visual/repeater/data-MAC/basic3.0.png b/tests/auto/declarative/visual/repeater/data-MAC/basic3.0.png
new file mode 100644
index 0000000..2658b6b
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/data-MAC/basic3.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/repeater/data-MAC/basic3.qml b/tests/auto/declarative/visual/repeater/data-MAC/basic3.qml
new file mode 100644
index 0000000..41e174a
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/data-MAC/basic3.qml
@@ -0,0 +1,347 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 32
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 48
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 64
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 80
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 96
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 112
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 128
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 144
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 160
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 176
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 192
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 208
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 224
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 240
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 256
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 272
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 288
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 304
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 320
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 336
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 352
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 368
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 384
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 400
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 416
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 432
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 448
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 464
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 480
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 496
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 512
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 528
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 544
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 560
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 576
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 592
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 608
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 624
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 640
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 656
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 672
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 688
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 704
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 720
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 736
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 752
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 768
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 784
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 800
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 816
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 832
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 848
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 864
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 880
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 896
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 912
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 928
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 944
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 960
+ image: "basic3.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 992
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1008
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1024
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1040
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1056
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1072
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1088
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1104
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1120
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1136
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1152
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1168
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1184
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1200
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1216
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1232
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1248
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1264
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1280
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1296
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1312
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1328
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+}
diff --git a/tests/auto/declarative/visual/repeater/data-MAC/basic4.0.png b/tests/auto/declarative/visual/repeater/data-MAC/basic4.0.png
new file mode 100644
index 0000000..2658b6b
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/data-MAC/basic4.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/repeater/data-MAC/basic4.qml b/tests/auto/declarative/visual/repeater/data-MAC/basic4.qml
new file mode 100644
index 0000000..fcf2504
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/data-MAC/basic4.qml
@@ -0,0 +1,419 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 32
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 48
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 64
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 80
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 96
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 112
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 128
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 144
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 160
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 176
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 192
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 208
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 224
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 240
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 256
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 272
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 288
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 304
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 320
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 336
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 352
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 368
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 384
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 400
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 416
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 432
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 448
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 464
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 480
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 496
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 512
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 528
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 544
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 560
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 576
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 592
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 608
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 624
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 640
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 656
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 672
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 688
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 704
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 720
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 736
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 752
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 768
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 784
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 800
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 816
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 832
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 848
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 864
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 880
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 896
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 912
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 928
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 944
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 960
+ image: "basic4.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 992
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1008
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1024
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1040
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1056
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1072
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1088
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1104
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1120
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1136
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1152
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1168
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1184
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1200
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1216
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1232
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1248
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1264
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1280
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1296
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1312
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1328
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1344
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1360
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1376
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1392
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1408
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1424
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1440
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1456
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1472
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1488
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1504
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1520
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1536
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1552
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1568
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1584
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1600
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+ Frame {
+ msec: 1616
+ hash: "2ab8ff9a9fb09111ac07d3966aac9d94"
+ }
+}
diff --git a/tests/auto/declarative/visual/repeater/data-X11/basic1.0.png b/tests/auto/declarative/visual/repeater/data-X11/basic1.0.png
new file mode 100644
index 0000000..18ab543
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/data-X11/basic1.0.png
Binary files differ
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
new file mode 100644
index 0000000..18ab543
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/data-X11/basic2.0.png
Binary files differ
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
new file mode 100644
index 0000000..18ab543
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/data-X11/basic3.0.png
Binary files differ
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
new file mode 100644
index 0000000..18ab543
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/data-X11/basic4.0.png
Binary files differ
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/repeater/data/basic1.0.png b/tests/auto/declarative/visual/repeater/data/basic1.0.png
new file mode 100644
index 0000000..aea0e98
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/data/basic1.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/repeater/data/basic1.qml b/tests/auto/declarative/visual/repeater/data/basic1.qml
new file mode 100644
index 0000000..9535a2c
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/data/basic1.qml
@@ -0,0 +1,323 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 32
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 48
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 64
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 80
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 96
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 112
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 128
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 144
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 160
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 176
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 192
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 208
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 224
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 240
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 256
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 272
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 288
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 304
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 320
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 336
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 352
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 368
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 384
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 400
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 416
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 432
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 448
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 464
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 480
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 496
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 512
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 528
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 544
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 560
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 576
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 592
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 608
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 624
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 640
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 656
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 672
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 688
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 704
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 720
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 736
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 752
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 768
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 784
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 800
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 816
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 832
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 848
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 864
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 880
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 896
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 912
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 928
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 944
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 960
+ image: "basic1.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 992
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1008
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1024
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1040
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1056
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1072
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1088
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1104
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1120
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1136
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1152
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1168
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1184
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1200
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1216
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1232
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+}
diff --git a/tests/auto/declarative/visual/repeater/data/basic2.0.png b/tests/auto/declarative/visual/repeater/data/basic2.0.png
new file mode 100644
index 0000000..aea0e98
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/data/basic2.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/repeater/data/basic2.qml b/tests/auto/declarative/visual/repeater/data/basic2.qml
new file mode 100644
index 0000000..81bc1f7
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/data/basic2.qml
@@ -0,0 +1,331 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 32
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 48
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 64
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 80
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 96
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 112
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 128
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 144
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 160
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 176
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 192
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 208
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 224
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 240
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 256
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 272
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 288
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 304
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 320
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 336
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 352
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 368
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 384
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 400
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 416
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 432
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 448
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 464
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 480
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 496
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 512
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 528
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 544
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 560
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 576
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 592
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 608
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 624
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 640
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 656
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 672
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 688
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 704
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 720
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 736
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 752
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 768
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 784
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 800
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 816
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 832
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 848
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 864
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 880
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 896
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 912
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 928
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 944
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 960
+ image: "basic2.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 992
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1008
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1024
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1040
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1056
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1072
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1088
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1104
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1120
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1136
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1152
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1168
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1184
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1200
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1216
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1232
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1248
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1264
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+}
diff --git a/tests/auto/declarative/visual/repeater/data/basic3.0.png b/tests/auto/declarative/visual/repeater/data/basic3.0.png
new file mode 100644
index 0000000..aea0e98
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/data/basic3.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/repeater/data/basic3.qml b/tests/auto/declarative/visual/repeater/data/basic3.qml
new file mode 100644
index 0000000..417eaab
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/data/basic3.qml
@@ -0,0 +1,347 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 32
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 48
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 64
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 80
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 96
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 112
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 128
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 144
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 160
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 176
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 192
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 208
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 224
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 240
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 256
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 272
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 288
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 304
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 320
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 336
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 352
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 368
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 384
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 400
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 416
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 432
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 448
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 464
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 480
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 496
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 512
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 528
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 544
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 560
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 576
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 592
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 608
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 624
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 640
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 656
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 672
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 688
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 704
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 720
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 736
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 752
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 768
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 784
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 800
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 816
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 832
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 848
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 864
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 880
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 896
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 912
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 928
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 944
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 960
+ image: "basic3.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 992
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1008
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1024
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1040
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1056
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1072
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1088
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1104
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1120
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1136
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1152
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1168
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1184
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1200
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1216
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1232
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1248
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1264
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1280
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1296
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1312
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1328
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+}
diff --git a/tests/auto/declarative/visual/repeater/data/basic4.0.png b/tests/auto/declarative/visual/repeater/data/basic4.0.png
new file mode 100644
index 0000000..aea0e98
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/data/basic4.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/repeater/data/basic4.qml b/tests/auto/declarative/visual/repeater/data/basic4.qml
new file mode 100644
index 0000000..264d825
--- /dev/null
+++ b/tests/auto/declarative/visual/repeater/data/basic4.qml
@@ -0,0 +1,419 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 32
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 48
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 64
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 80
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 96
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 112
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 128
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 144
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 160
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 176
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 192
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 208
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 224
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 240
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 256
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 272
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 288
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 304
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 320
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 336
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 352
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 368
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 384
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 400
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 416
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 432
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 448
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 464
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 480
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 496
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 512
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 528
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 544
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 560
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 576
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 592
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 608
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 624
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 640
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 656
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 672
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 688
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 704
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 720
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 736
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 752
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 768
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 784
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 800
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 816
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 832
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 848
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 864
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 880
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 896
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 912
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 928
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 944
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 960
+ image: "basic4.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 992
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1008
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1024
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1040
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1056
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1072
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1088
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1104
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1120
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1136
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1152
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1168
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1184
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1200
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1216
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1232
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1248
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1264
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1280
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1296
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1312
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1328
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1344
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1360
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1376
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1392
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1408
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Key {
+ type: 6
+ key: 16777249
+ modifiers: 67108864
+ text: ""
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1424
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1440
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1456
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1472
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1488
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1504
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1520
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1536
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1552
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1568
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1584
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1600
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+ Frame {
+ msec: 1616
+ hash: "539de20cf149353d2677111ea3de5681"
+ }
+}
diff --git a/tests/auto/declarative/visual/selftest_noimages/data/selftest_noimages.qml b/tests/auto/declarative/visual/selftest_noimages/data/selftest_noimages.qml
new file mode 100644
index 0000000..3104906
--- /dev/null
+++ b/tests/auto/declarative/visual/selftest_noimages/data/selftest_noimages.qml
@@ -0,0 +1,470 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ }
+ Frame {
+ msec: 32
+ }
+ Frame {
+ msec: 48
+ }
+ Frame {
+ msec: 64
+ }
+ Frame {
+ msec: 80
+ }
+ Frame {
+ msec: 96
+ }
+ Frame {
+ msec: 112
+ }
+ Frame {
+ msec: 128
+ }
+ Frame {
+ msec: 144
+ }
+ Frame {
+ msec: 160
+ }
+ Frame {
+ msec: 176
+ }
+ Frame {
+ msec: 192
+ }
+ Frame {
+ msec: 208
+ }
+ Frame {
+ msec: 224
+ }
+ Frame {
+ msec: 240
+ }
+ Frame {
+ msec: 256
+ }
+ Frame {
+ msec: 272
+ }
+ Frame {
+ msec: 288
+ }
+ Frame {
+ msec: 304
+ }
+ Frame {
+ msec: 320
+ }
+ Frame {
+ msec: 336
+ }
+ Frame {
+ msec: 352
+ }
+ Frame {
+ msec: 368
+ }
+ Frame {
+ msec: 384
+ }
+ Frame {
+ msec: 400
+ }
+ Frame {
+ msec: 416
+ }
+ Frame {
+ msec: 432
+ }
+ Frame {
+ msec: 448
+ }
+ Frame {
+ msec: 464
+ }
+ Frame {
+ msec: 480
+ }
+ Frame {
+ msec: 496
+ }
+ Frame {
+ msec: 512
+ }
+ Frame {
+ msec: 528
+ }
+ Frame {
+ msec: 544
+ }
+ Frame {
+ msec: 560
+ }
+ Frame {
+ msec: 576
+ }
+ Frame {
+ msec: 592
+ }
+ Frame {
+ msec: 608
+ }
+ Frame {
+ msec: 624
+ }
+ Frame {
+ msec: 640
+ }
+ Frame {
+ msec: 656
+ }
+ Frame {
+ msec: 672
+ }
+ Frame {
+ msec: 688
+ }
+ Frame {
+ msec: 704
+ }
+ Frame {
+ msec: 720
+ }
+ Frame {
+ msec: 736
+ }
+ Frame {
+ msec: 752
+ }
+ Frame {
+ msec: 768
+ }
+ Frame {
+ msec: 784
+ }
+ Frame {
+ msec: 800
+ }
+ Frame {
+ msec: 816
+ }
+ Frame {
+ msec: 832
+ }
+ Frame {
+ msec: 848
+ }
+ Frame {
+ msec: 864
+ }
+ Frame {
+ msec: 880
+ }
+ Frame {
+ msec: 896
+ }
+ Frame {
+ msec: 912
+ }
+ Frame {
+ msec: 928
+ }
+ Frame {
+ msec: 944
+ }
+ Frame {
+ msec: 960
+ }
+ Frame {
+ msec: 976
+ }
+ Frame {
+ msec: 992
+ }
+ Frame {
+ msec: 1008
+ }
+ Frame {
+ msec: 1024
+ }
+ Frame {
+ msec: 1040
+ }
+ Frame {
+ msec: 1056
+ }
+ Frame {
+ msec: 1072
+ }
+ Frame {
+ msec: 1088
+ }
+ Frame {
+ msec: 1104
+ }
+ Frame {
+ msec: 1120
+ }
+ Frame {
+ msec: 1136
+ }
+ Frame {
+ msec: 1152
+ }
+ Frame {
+ msec: 1168
+ }
+ Frame {
+ msec: 1184
+ }
+ Frame {
+ msec: 1200
+ }
+ Frame {
+ msec: 1216
+ }
+ Frame {
+ msec: 1232
+ }
+ Frame {
+ msec: 1248
+ }
+ Frame {
+ msec: 1264
+ }
+ Frame {
+ msec: 1280
+ }
+ Frame {
+ msec: 1296
+ }
+ Frame {
+ msec: 1312
+ }
+ Frame {
+ msec: 1328
+ }
+ Frame {
+ msec: 1344
+ }
+ Frame {
+ msec: 1360
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 77; y: 7
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1376
+ }
+ Frame {
+ msec: 1392
+ }
+ Frame {
+ msec: 1408
+ }
+ Frame {
+ msec: 1424
+ }
+ Frame {
+ msec: 1440
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 77; y: 7
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1456
+ }
+ Frame {
+ msec: 1472
+ }
+ Frame {
+ msec: 1488
+ }
+ Frame {
+ msec: 1504
+ }
+ Frame {
+ msec: 1520
+ }
+ Frame {
+ msec: 1536
+ }
+ Frame {
+ msec: 1552
+ }
+ Frame {
+ msec: 1568
+ }
+ Frame {
+ msec: 1584
+ }
+ Frame {
+ msec: 1600
+ }
+ Frame {
+ msec: 1616
+ }
+ Frame {
+ msec: 1632
+ }
+ Frame {
+ msec: 1648
+ }
+ Frame {
+ msec: 1664
+ }
+ Frame {
+ msec: 1680
+ }
+ Frame {
+ msec: 1696
+ }
+ Frame {
+ msec: 1712
+ }
+ Frame {
+ msec: 1728
+ }
+ Frame {
+ msec: 1744
+ }
+ Frame {
+ msec: 1760
+ }
+ Frame {
+ msec: 1776
+ }
+ Frame {
+ msec: 1792
+ }
+ Frame {
+ msec: 1808
+ }
+ Frame {
+ msec: 1824
+ }
+ Frame {
+ msec: 1840
+ }
+ Frame {
+ msec: 1856
+ }
+ Frame {
+ msec: 1872
+ }
+ Frame {
+ msec: 1888
+ }
+ Frame {
+ msec: 1904
+ }
+ Frame {
+ msec: 1920
+ }
+ Frame {
+ msec: 1936
+ }
+ Frame {
+ msec: 1952
+ }
+ Frame {
+ msec: 1968
+ }
+ Frame {
+ msec: 1984
+ }
+ Frame {
+ msec: 2000
+ }
+ Frame {
+ msec: 2016
+ }
+ Frame {
+ msec: 2032
+ }
+ Frame {
+ msec: 2048
+ }
+ Frame {
+ msec: 2064
+ }
+ Frame {
+ msec: 2080
+ }
+ Frame {
+ msec: 2096
+ }
+ Frame {
+ msec: 2112
+ }
+ Frame {
+ msec: 2128
+ }
+ Frame {
+ msec: 2144
+ }
+ Frame {
+ msec: 2160
+ }
+ Frame {
+ msec: 2176
+ }
+ Frame {
+ msec: 2192
+ }
+ Frame {
+ msec: 2208
+ }
+ Frame {
+ msec: 2224
+ }
+ Frame {
+ msec: 2240
+ }
+ Frame {
+ msec: 2256
+ }
+ Frame {
+ msec: 2272
+ }
+ Frame {
+ msec: 2288
+ }
+ Frame {
+ msec: 2304
+ }
+ Frame {
+ msec: 2320
+ }
+ Frame {
+ msec: 2336
+ }
+ Frame {
+ msec: 2352
+ }
+ Frame {
+ msec: 2368
+ }
+ Frame {
+ msec: 2384
+ }
+}
diff --git a/tests/auto/declarative/visual/selftest_noimages/selftest_noimages.qml b/tests/auto/declarative/visual/selftest_noimages/selftest_noimages.qml
new file mode 100644
index 0000000..21a19bc
--- /dev/null
+++ b/tests/auto/declarative/visual/selftest_noimages/selftest_noimages.qml
@@ -0,0 +1,9 @@
+import Qt 4.6
+Text {
+ property string error: "not pressed"
+ text: (new Date()).valueOf()
+ MouseRegion {
+ anchors.fill: parent
+ onPressed: error=""
+ }
+}
diff --git a/tests/auto/declarative/visual/tst_visual.cpp b/tests/auto/declarative/visual/tst_visual.cpp
new file mode 100644
index 0000000..5a5318a
--- /dev/null
+++ b/tests/auto/declarative/visual/tst_visual.cpp
@@ -0,0 +1,370 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QmlView>
+#include <QApplication>
+#include <QLibraryInfo>
+#include <QDir>
+#include <QDebug>
+#include <QProcess>
+#include <QFile>
+
+enum Mode { Record, RecordNoVisuals, Play, TestVisuals, RemoveVisuals, UpdateVisuals, UpdatePlatformVisuals, Test };
+
+static QString testdir;
+class tst_visual : public QObject
+{
+ Q_OBJECT
+public:
+ tst_visual();
+
+ static QString toTestScript(const QString &, Mode=Test);
+ static QString viewer();
+
+ static QStringList findQmlFiles(const QDir &d);
+private slots:
+ void visual_data();
+ void visual();
+
+private:
+ QString qmlviewer;
+};
+
+
+tst_visual::tst_visual()
+{
+ qmlviewer = viewer();
+}
+
+QString tst_visual::viewer()
+{
+ QString binaries = QLibraryInfo::location(QLibraryInfo::BinariesPath);
+
+ QString qmlviewer;
+
+#if defined(Q_WS_MAC)
+ qmlviewer = QDir(binaries).absoluteFilePath("qmlviewer.app/Contents/MacOS/qmlviewer");
+#elif defined(Q_WS_WIN)
+ qmlviewer = QDir(binaries).absoluteFilePath("qmlviewer.exe");
+#else
+ qmlviewer = QDir(binaries).absoluteFilePath("qmlviewer");
+#endif
+
+ return qmlviewer;
+}
+
+void tst_visual::visual_data()
+{
+ QTest::addColumn<QString>("file");
+ QTest::addColumn<QString>("testdata");
+
+ QStringList files;
+ files << findQmlFiles(QDir(QT_TEST_SOURCE_DIR));
+
+ foreach (const QString &file, files) {
+ QString testdata = toTestScript(file);
+ if (testdata.isEmpty())
+ continue;
+
+ QTest::newRow(file.toLatin1().constData()) << file << testdata;
+ }
+}
+
+void tst_visual::visual()
+{
+ QFETCH(QString, file);
+ QFETCH(QString, testdata);
+
+ QStringList arguments;
+ arguments << "-script" << testdata
+ << "-scriptopts" << "play,testimages,testerror,exitoncomplete,exitonfailure"
+ << file;
+ QProcess p;
+ p.start(qmlviewer, arguments);
+ QVERIFY(p.waitForFinished());
+ if (p.exitCode() != 0)
+ qDebug() << p.readAllStandardError();
+ QCOMPARE(p.exitStatus(), QProcess::NormalExit);
+ QCOMPARE(p.exitCode(), 0);
+}
+
+QString tst_visual::toTestScript(const QString &file, Mode mode)
+{
+ if (!file.endsWith(".qml"))
+ return QString();
+
+ int index = file.lastIndexOf(QDir::separator());
+ 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");
+ QString testname = file.mid(index + 1, file.length() - index - 5);
+
+ if (platformsuffix && (mode == UpdatePlatformVisuals || QFile::exists(testdata+QLatin1String(platformsuffix)+QDir::separator()+testname+".qml"))) {
+ 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;
+}
+
+QStringList tst_visual::findQmlFiles(const QDir &d)
+{
+ QStringList rv;
+
+ QStringList files = d.entryList(QStringList() << QLatin1String("*.qml"),
+ QDir::Files);
+ foreach (const QString &file, files) {
+ if (file.at(0).isLower()) {
+ rv << d.absoluteFilePath(file);
+ }
+ }
+
+ QStringList dirs = d.entryList(QDir::Dirs | QDir::NoDotAndDotDot |
+ QDir::NoSymLinks);
+ foreach (const QString &dir, dirs) {
+ if (dir.left(4) == "data")
+ continue;
+
+ QDir sub = d;
+ sub.cd(dir);
+ rv << findQmlFiles(sub);
+ }
+
+ return rv;
+}
+
+void action(Mode mode, const QString &file)
+{
+ Q_ASSERT(mode != Test);
+
+ QString testdata = tst_visual::toTestScript(file,mode);
+
+ QStringList arguments;
+ switch (mode) {
+ case Test:
+ // Don't run qmlviewer
+ break;
+ case Record:
+ arguments << "-script" << testdata
+ << "-scriptopts" << "record,testimages,saveonexit"
+ << file;
+ break;
+ case RecordNoVisuals:
+ arguments << "-script" << testdata
+ << "-scriptopts" << "record,saveonexit"
+ << file;
+ break;
+ case Play:
+ arguments << "-script" << testdata
+ << "-scriptopts" << "play,testimages,testerror,exitoncomplete"
+ << file;
+ break;
+ case TestVisuals:
+ arguments << "-script" << testdata
+ << "-scriptopts" << "play"
+ << file;
+ break;
+ case UpdateVisuals:
+ case UpdatePlatformVisuals:
+ arguments << "-script" << testdata
+ << "-scriptopts" << "play,record,testimages,exitoncomplete,saveonexit"
+ << file;
+ break;
+ case RemoveVisuals:
+ arguments << "-script" << testdata
+ << "-scriptopts" << "play,record,exitoncomplete,saveonexit"
+ << file;
+ break;
+ }
+ if (!arguments.isEmpty()) {
+ QProcess p;
+ p.setProcessChannelMode(QProcess::ForwardedChannels);
+ p.start(tst_visual::viewer(), arguments);
+ p.waitForFinished();
+ }
+}
+
+void usage()
+{
+ fprintf(stderr, "\n");
+ fprintf(stderr, "QML related options\n");
+ fprintf(stderr, " -listtests : list all the tests seen by tst_visual, and then exit immediately\n");
+ fprintf(stderr, " -record file : record new test data for file\n");
+ fprintf(stderr, " -recordnovisuals file : record new test data for file, but ignore visuals\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");
+ fprintf(stderr, "\n"
+ "Visual tests are recordings of manual interactions with a QML test,\n"
+ "that can then be run automatically. To record a new test, run:\n"
+ "\n"
+ " tst_visual -record yourtestdir/yourtest.qml\n"
+ "\n"
+ "This records everything you do (try to keep it short).\n"
+ "To play back a test, run:\n"
+ "\n"
+ " tst_visual -play yourtestdir/yourtest.qml\n"
+ "\n"
+ "Your test may include QML code to test itself, reporting any error to an\n"
+ "'error' property on the root object - the test will fail if this property\n"
+ "gets set to anything non-empty.\n"
+ "\n"
+ "If your test changes slightly but is still correct (check with -play), you\n"
+ "can update the visuals by running:\n"
+ "\n"
+ " tst_visual -updatevisuals yourtestdir/yourtest.qml\n"
+ "\n"
+ "If your test includes platform-sensitive visuals (eg. text in system fonts),\n"
+ "you should create platform-specific visuals, using -updateplatformvisuals\n"
+ "instead.\n"
+ "\n"
+ "If you ONLY wish to use the 'error' property, you can record your test with\n"
+ "-recordnovisuals, or discard existing visuals with -removevisuals; the test\n"
+ "will then only fail on a syntax error, crash, or non-empty 'error' property.\n"
+ );
+}
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+
+ Mode mode = Test;
+ QString file;
+ bool showHelp = false;
+
+ int newArgc = 1;
+ char **newArgv = new char*[argc];
+ newArgv[0] = argv[0];
+
+ for (int ii = 1; ii < argc; ++ii) {
+ QString arg(argv[ii]);
+ if (arg == "-play" && (ii + 1) < argc) {
+ mode = Play;
+ file = argv[++ii];
+ } else if (arg == "-record" && (ii + 1) < argc) {
+ mode = Record;
+ file = argv[++ii];
+ } else if (arg == "-recordnovisuals" && (ii + 1) < argc) {
+ mode = RecordNoVisuals;
+ file = argv[++ii];
+ } else if (arg == "-testvisuals" && (ii + 1) < argc) {
+ mode = TestVisuals;
+ file = argv[++ii];
+ } else if (arg == "-removevisuals" && (ii + 1) < argc) {
+ mode = RemoveVisuals;
+ file = argv[++ii];
+ } 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];
+ }
+
+ if (arg == "-help" || arg == "-?" || arg == "--help") {
+ atexit(usage);
+ showHelp = true;
+ }
+
+ if (arg == "-listtests") {
+ QStringList list = tst_visual::findQmlFiles(QDir(QT_TEST_SOURCE_DIR));
+ foreach (QString test, list) {
+ qWarning() << qPrintable(test);
+ }
+ return 0;
+ }
+ }
+
+ if (mode == Test || showHelp) {
+ tst_visual tc;
+ return QTest::qExec(&tc, newArgc, newArgv);
+ } else {
+ if (!file.endsWith(QLatin1String(".qml"))) {
+ qWarning() << "Error: Invalid file name (must end in .qml)";
+ return -1;
+ }
+ QDir d = QDir::current();
+ QString absFile = d.absoluteFilePath(file);
+ if (!QFile::exists(absFile)) {
+ qWarning() << "Error: File does not exist";
+ return -1;
+ }
+
+ action(mode, absFile);
+ return 0;
+ }
+}
+
+#include "tst_visual.moc"
diff --git a/tests/auto/declarative/visual/visual.pro b/tests/auto/declarative/visual/visual.pro
new file mode 100644
index 0000000..7ae2bed
--- /dev/null
+++ b/tests/auto/declarative/visual/visual.pro
@@ -0,0 +1,7 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += declarative
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_visual.cpp
+
+DEFINES += QT_TEST_SOURCE_DIR=\"\\\"$$PWD\\\"\"
diff --git a/tests/auto/declarative/visual/webview/embedding/data/nesting.0.png b/tests/auto/declarative/visual/webview/embedding/data/nesting.0.png
new file mode 100644
index 0000000..57de710
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/embedding/data/nesting.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/embedding/data/nesting.qml b/tests/auto/declarative/visual/webview/embedding/data/nesting.qml
new file mode 100644
index 0000000..8d38ebe
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/embedding/data/nesting.qml
@@ -0,0 +1,363 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "5dc8dca7a73022fbf2116b654b709244"
+ }
+ Frame {
+ msec: 32
+ hash: "5dc8dca7a73022fbf2116b654b709244"
+ }
+ Frame {
+ msec: 48
+ hash: "34079c4076ab6aadd8b64fcba7d95e15"
+ }
+ Frame {
+ msec: 64
+ hash: "5ab5fc62b49e78d0609dcb4be6c9a157"
+ }
+ Frame {
+ msec: 80
+ hash: "063cc7438bbffae717648d98006021a8"
+ }
+ Frame {
+ msec: 96
+ hash: "c5cd16663e48639cbeade82c3bfa0403"
+ }
+ Frame {
+ msec: 112
+ hash: "ea7f8df84ddbad0f683fe97ddb0a0130"
+ }
+ Frame {
+ msec: 128
+ hash: "3c353e09bdb3a1e6ff388ad6020f55ea"
+ }
+ Frame {
+ msec: 144
+ hash: "5b6de430365d0c9824337011916b0c0b"
+ }
+ Frame {
+ msec: 160
+ hash: "48d353ac9e7ee1ce41361d0a2b47e008"
+ }
+ Frame {
+ msec: 176
+ hash: "c96e4d02d343ddd78e8d3dd6aa8e0198"
+ }
+ Frame {
+ msec: 192
+ hash: "543c63d77ec635b77672ba4c5160a3d4"
+ }
+ Frame {
+ msec: 208
+ hash: "2d56ad9c2352e555fef613d625e71151"
+ }
+ Frame {
+ msec: 224
+ hash: "18e433c3e3ee64510f875f674791d51c"
+ }
+ Frame {
+ msec: 240
+ hash: "56889122c1ddacdd8ebd88310c7410bc"
+ }
+ Frame {
+ msec: 256
+ hash: "d51c85458e0109bd5bf9528b741d98d0"
+ }
+ Frame {
+ msec: 272
+ hash: "ac54137afc29a3022c6f01df7cdf2fd6"
+ }
+ Frame {
+ msec: 288
+ hash: "c7a42b389bae3b729ba9e6cba7f54530"
+ }
+ Frame {
+ msec: 304
+ hash: "7583b55841e80891652c3472c658f989"
+ }
+ Frame {
+ msec: 320
+ hash: "95a7f8d47c3788261427727f82c9ff59"
+ }
+ Frame {
+ msec: 336
+ hash: "a87bad3e2f010680e16cd1e3f5e03e99"
+ }
+ Frame {
+ msec: 352
+ hash: "e16bc51653f21819e0eec412b99a069f"
+ }
+ Frame {
+ msec: 368
+ hash: "f1e869580ac148ae207141c5f0adc185"
+ }
+ Frame {
+ msec: 384
+ hash: "7e496e44363a16d7c62e4258af9ce087"
+ }
+ Frame {
+ msec: 400
+ hash: "19e97915c84d3554c66d5a9ad3aa6a3e"
+ }
+ Frame {
+ msec: 416
+ hash: "181181b48a1085d1850f18ca9b163549"
+ }
+ Frame {
+ msec: 432
+ hash: "4637cb04595a543867bd43b0c1c829ea"
+ }
+ Frame {
+ msec: 448
+ hash: "bd0a074fed5507f8556de6110bf56aa4"
+ }
+ Frame {
+ msec: 464
+ hash: "9547618923edac6f7f9a3ff324c4f2d8"
+ }
+ Frame {
+ msec: 480
+ hash: "a2f90c88eacb7c66878d45e33c2a787d"
+ }
+ Frame {
+ msec: 496
+ hash: "d5ffd3e35d0426887c106069310f84d8"
+ }
+ Frame {
+ msec: 512
+ hash: "6bc50a5b76e2a2ef0e6bee762abeb330"
+ }
+ Frame {
+ msec: 528
+ hash: "d4439933c842ed8432434d272fea2845"
+ }
+ Frame {
+ msec: 544
+ hash: "61699e6ec476ac3f090e4f485430421d"
+ }
+ Frame {
+ msec: 560
+ hash: "02d7fa9bcd697d2cab364d0a3ca4a0e2"
+ }
+ Frame {
+ msec: 576
+ hash: "914178cbf1f6a6822cc40f81823475e4"
+ }
+ Frame {
+ msec: 592
+ hash: "280f867ea27891ee764332998567d40d"
+ }
+ Frame {
+ msec: 608
+ hash: "ea0d00fe54a172a89c24eac781f7ae6d"
+ }
+ Frame {
+ msec: 624
+ hash: "4e910fb507964a710e26f318c62227bf"
+ }
+ Frame {
+ msec: 640
+ hash: "b0c3392eb739f270dd21f552ad999c23"
+ }
+ Frame {
+ msec: 656
+ hash: "f3698c83b0972bd66a53ad95d4fc301e"
+ }
+ Frame {
+ msec: 672
+ hash: "0d303a0d6a9b626943ac93cc6f3fb230"
+ }
+ Frame {
+ msec: 688
+ hash: "ba56d49e6f51aa6f1bd2a7500e3538fd"
+ }
+ Frame {
+ msec: 704
+ hash: "273ce89d5194168e5bfd1dcefad49be2"
+ }
+ Frame {
+ msec: 720
+ hash: "c2beef4fb7996dbccdaff4f54bdc33f1"
+ }
+ Frame {
+ msec: 736
+ hash: "1e1aa7d84f27158a8e61bd8698ddbf2a"
+ }
+ Frame {
+ msec: 752
+ hash: "24e82479802e710c673133ca0413be66"
+ }
+ Frame {
+ msec: 768
+ hash: "b77e935a690bcb396e15b942d772cf1b"
+ }
+ Frame {
+ msec: 784
+ hash: "7b729c74df1d15d6b0e8e1fc19c2d710"
+ }
+ Frame {
+ msec: 800
+ hash: "fd6cbdca3e481baaf35022dfea76e74c"
+ }
+ Frame {
+ msec: 816
+ hash: "c975f6eb592793aa81895ffcb74ca577"
+ }
+ Frame {
+ msec: 832
+ hash: "677c4039a650df53b4e885f37b049ab3"
+ }
+ Frame {
+ msec: 848
+ hash: "89563aae36552cb1749ec06567e46d9d"
+ }
+ Frame {
+ msec: 864
+ hash: "01f57402874de6608cc02937aaf91794"
+ }
+ Frame {
+ msec: 880
+ hash: "50c9c4e5eaaadee1ff230975390d34e3"
+ }
+ Frame {
+ msec: 896
+ hash: "20b7d277d398afad59afdf9e6b41a57e"
+ }
+ Frame {
+ msec: 912
+ hash: "8f9ea938a2375afeba419199de66dd52"
+ }
+ Frame {
+ msec: 928
+ hash: "b96745888ba954bcf304c0840a030f93"
+ }
+ Frame {
+ msec: 944
+ hash: "f5715e931274011123160f7ad10d6c52"
+ }
+ Frame {
+ msec: 960
+ image: "nesting.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "459fe967816c795a177a3926093fae75"
+ }
+ Frame {
+ msec: 992
+ hash: "c599a26083068b6db628c8d8416bab60"
+ }
+ Frame {
+ msec: 1008
+ hash: "e0aee7d1152c971b1beee9d36542acb7"
+ }
+ Frame {
+ msec: 1024
+ hash: "2af0facdf6412f7b06979aae25e4db26"
+ }
+ Frame {
+ msec: 1040
+ hash: "f147a92cb1826f95d4fdb7d011ba79b1"
+ }
+ Frame {
+ msec: 1056
+ hash: "12a1cb894b0fb8e44152cccacf855c1a"
+ }
+ Frame {
+ msec: 1072
+ hash: "c7500cf58b74fef2c3e9820d1de8f843"
+ }
+ Frame {
+ msec: 1088
+ hash: "3a031b2206835f8b2dc9837016df6ae6"
+ }
+ Frame {
+ msec: 1104
+ hash: "7a4796b419bbc04237764dea0b1d47d5"
+ }
+ Frame {
+ msec: 1120
+ hash: "151d350f0064e2faf0bfb9c58bc3e4f2"
+ }
+ Frame {
+ msec: 1136
+ hash: "d72c20a97e678908acc1d6c1f8114d9e"
+ }
+ Frame {
+ msec: 1152
+ hash: "22da1e645640a3c31b064ff757113197"
+ }
+ Frame {
+ msec: 1168
+ hash: "401f0bf370e2ecea5a84276fb72eb1da"
+ }
+ Frame {
+ msec: 1184
+ hash: "c6e00d7b0ac14a5c3860b6a29901c915"
+ }
+ Frame {
+ msec: 1200
+ hash: "f1f7dc55d7719fcb6e97157c0ca85fc0"
+ }
+ Frame {
+ msec: 1216
+ hash: "6a112e1d79c7128c235d093e4f1f9325"
+ }
+ Frame {
+ msec: 1232
+ hash: "14a2caf8cdca8d5147261a315059b69d"
+ }
+ Frame {
+ msec: 1248
+ hash: "5645243aa3cfd12b0b32442f063bedb2"
+ }
+ Frame {
+ msec: 1264
+ hash: "c7f72534a88e33c72a54cb8580534551"
+ }
+ Frame {
+ msec: 1280
+ hash: "6cd5e2e8e0128586a682b3c649ae0631"
+ }
+ Frame {
+ msec: 1296
+ hash: "67cefb4526b52d40a31811bc0dfaeb6a"
+ }
+ Frame {
+ msec: 1312
+ hash: "fbe2a43a27bf490719c8b9e2b094e34f"
+ }
+ Frame {
+ msec: 1328
+ hash: "e028aad6f51a47d8189efcf9c5d277ee"
+ }
+ Frame {
+ msec: 1344
+ hash: "2b4cc50c37c07289fa6f9309991d36da"
+ }
+ Frame {
+ msec: 1360
+ hash: "b67b2244cd0616d07e100d7b3b00bbe2"
+ }
+ Frame {
+ msec: 1376
+ hash: "4e4690cffc98c49e91bdb600f1e94c79"
+ }
+ Frame {
+ msec: 1392
+ hash: "e5215c727836a5547a170d42363bc5c8"
+ }
+ Frame {
+ msec: 1408
+ hash: "26868e91d1794bb3f42d51f508fef613"
+ }
+ Frame {
+ msec: 1424
+ hash: "1e5f431b125a66096ac9a4d5a211a2c4"
+ }
+}
diff --git a/tests/auto/declarative/visual/webview/embedding/egg.qml b/tests/auto/declarative/visual/webview/embedding/egg.qml
new file mode 100644
index 0000000..fe1bb70
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/embedding/egg.qml
@@ -0,0 +1,26 @@
+import Qt 4.6
+
+Item {
+ property var period : 250
+ property var color : "black"
+ id: root
+
+ Item {
+ x: root.width/2
+ y: root.height/2
+ Rectangle {
+ radius: width/2
+ color: root.color
+ x: -width/2
+ y: -height/2
+ width: root.width*1.5
+ height: root.height*1.5
+ }
+ rotation: NumberAnimation {
+ from: 0
+ to: 360
+ repeat: true
+ duration: root.period
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/webview/embedding/nesting.html b/tests/auto/declarative/visual/webview/embedding/nesting.html
new file mode 100644
index 0000000..6e81689
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/embedding/nesting.html
@@ -0,0 +1,9 @@
+<html>
+<head><title>Nesting</title>
+<link rel="icon" sizes="48x48" href="basic.png">
+</head>
+<body bgcolor="green">
+<h1>Nesting</h1>
+This is a test...
+<OBJECT data=egg.qml TYPE=application/x-qt-plugin width=50 height=70 period=2000 color=white></OBJECT>
+... with a spinning QML egg nested in it.
diff --git a/tests/auto/declarative/visual/webview/embedding/nesting.qml b/tests/auto/declarative/visual/webview/embedding/nesting.qml
new file mode 100644
index 0000000..0d76579
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/embedding/nesting.qml
@@ -0,0 +1,8 @@
+import Qt 4.6
+
+WebView {
+ width: 300
+ height: 200
+ url: "nesting.html"
+ settings.pluginsEnabled: true
+}
diff --git a/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.0.png b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.0.png
new file mode 100644
index 0000000..139aa9d
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.1.png b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.1.png
new file mode 100644
index 0000000..e2e1644
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.2.png b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.2.png
new file mode 100644
index 0000000..aa2fb82
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.3.png b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.3.png
new file mode 100644
index 0000000..1976430
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.4.png b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.4.png
new file mode 100644
index 0000000..c895a0a
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.5.png b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.5.png
new file mode 100644
index 0000000..c895a0a
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.5.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.6.png b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.6.png
new file mode 100644
index 0000000..c895a0a
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.6.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.7.png b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.7.png
new file mode 100644
index 0000000..c895a0a
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.7.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.8.png b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.8.png
new file mode 100644
index 0000000..c895a0a
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.8.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.qml b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.qml
new file mode 100644
index 0000000..957f9d5
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.qml
@@ -0,0 +1,3759 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 32
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 48
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 64
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 80
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 96
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 112
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 128
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 144
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 160
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 176
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 192
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 208
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 224
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 240
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 256
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 272
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 288
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 304
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 320
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 336
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 352
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 368
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 384
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 400
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 416
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 195; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 187; y: 35
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 432
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 153; y: 77
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 448
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 145; y: 87
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 139; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 464
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 135; y: 111
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 129; y: 121
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 480
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 125; y: 131
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 121; y: 139
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 117; y: 149
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 496
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 111; y: 157
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 512
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 107; y: 165
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 101; y: 171
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 528
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 97; y: 177
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 95; y: 185
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 544
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 91; y: 189
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 89; y: 195
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 560
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 85; y: 199
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 84; y: 201
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 576
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 83; y: 203
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 82; y: 204
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 81; y: 204
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 592
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 80; y: 204
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 608
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 79; y: 205
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 78; y: 206
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 624
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 77; y: 207
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 76; y: 208
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 75; y: 210
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 640
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 71; y: 216
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 656
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 70; y: 218
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 70; y: 220
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 672
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 69; y: 222
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 68; y: 224
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 688
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 67; y: 225
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 704
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 720
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 736
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 752
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 768
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 784
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 67; y: 225
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 800
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 66; y: 224
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 816
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 66; y: 222
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 832
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 65; y: 221
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 61; y: 217
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 848
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 60; y: 215
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 864
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 59; y: 214
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 57; y: 213
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 880
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 55; y: 213
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 896
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 912
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 928
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 944
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 960
+ image: "evaluateJavaScript.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 992
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1008
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 55; y: 213
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1024
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1040
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1056
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1072
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1088
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 55; y: 213
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1104
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1120
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1136
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1152
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1168
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1184
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1200
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1216
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1232
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1248
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1264
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1280
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1296
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 57; y: 212
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 63; y: 210
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1312
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 65; y: 210
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 67; y: 209
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1328
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 69; y: 208
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 71; y: 207
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1344
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 73; y: 207
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 74; y: 206
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 75; y: 206
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1360
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1376
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1392
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1408
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1424
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1440
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1456
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1472
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1488
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1504
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1520
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1536
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1552
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1568
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1584
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1600
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1616
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1632
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1648
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1664
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1680
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Frame {
+ msec: 1696
+ hash: "f35c69aed43a795ff02b46d7b01ef64a"
+ }
+ Key {
+ type: 6
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1712
+ hash: "244200622435603a75f58366496daf8b"
+ }
+ Frame {
+ msec: 1728
+ hash: "244200622435603a75f58366496daf8b"
+ }
+ Frame {
+ msec: 1744
+ hash: "244200622435603a75f58366496daf8b"
+ }
+ Frame {
+ msec: 1760
+ hash: "244200622435603a75f58366496daf8b"
+ }
+ Frame {
+ msec: 1776
+ hash: "244200622435603a75f58366496daf8b"
+ }
+ Key {
+ type: 7
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1792
+ hash: "244200622435603a75f58366496daf8b"
+ }
+ Frame {
+ msec: 1808
+ hash: "244200622435603a75f58366496daf8b"
+ }
+ Frame {
+ msec: 1824
+ hash: "244200622435603a75f58366496daf8b"
+ }
+ Frame {
+ msec: 1840
+ hash: "244200622435603a75f58366496daf8b"
+ }
+ Frame {
+ msec: 1856
+ hash: "244200622435603a75f58366496daf8b"
+ }
+ Frame {
+ msec: 1872
+ hash: "244200622435603a75f58366496daf8b"
+ }
+ Frame {
+ msec: 1888
+ hash: "244200622435603a75f58366496daf8b"
+ }
+ Frame {
+ msec: 1904
+ hash: "244200622435603a75f58366496daf8b"
+ }
+ Frame {
+ msec: 1920
+ image: "evaluateJavaScript.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "244200622435603a75f58366496daf8b"
+ }
+ Frame {
+ msec: 1952
+ hash: "244200622435603a75f58366496daf8b"
+ }
+ Frame {
+ msec: 1968
+ hash: "244200622435603a75f58366496daf8b"
+ }
+ Key {
+ type: 6
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 1984
+ hash: "44dc10a2914a391b57e68c2002a95adf"
+ }
+ Frame {
+ msec: 2000
+ hash: "44dc10a2914a391b57e68c2002a95adf"
+ }
+ Frame {
+ msec: 2016
+ hash: "44dc10a2914a391b57e68c2002a95adf"
+ }
+ Frame {
+ msec: 2032
+ hash: "44dc10a2914a391b57e68c2002a95adf"
+ }
+ Frame {
+ msec: 2048
+ hash: "44dc10a2914a391b57e68c2002a95adf"
+ }
+ Key {
+ type: 7
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2064
+ hash: "44dc10a2914a391b57e68c2002a95adf"
+ }
+ Frame {
+ msec: 2080
+ hash: "44dc10a2914a391b57e68c2002a95adf"
+ }
+ Frame {
+ msec: 2096
+ hash: "44dc10a2914a391b57e68c2002a95adf"
+ }
+ Frame {
+ msec: 2112
+ hash: "44dc10a2914a391b57e68c2002a95adf"
+ }
+ Frame {
+ msec: 2128
+ hash: "44dc10a2914a391b57e68c2002a95adf"
+ }
+ Frame {
+ msec: 2144
+ hash: "44dc10a2914a391b57e68c2002a95adf"
+ }
+ Frame {
+ msec: 2160
+ hash: "44dc10a2914a391b57e68c2002a95adf"
+ }
+ Frame {
+ msec: 2176
+ hash: "44dc10a2914a391b57e68c2002a95adf"
+ }
+ Frame {
+ msec: 2192
+ hash: "44dc10a2914a391b57e68c2002a95adf"
+ }
+ Key {
+ type: 6
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2208
+ hash: "c93921d0611e95373338c14cfcc17481"
+ }
+ Frame {
+ msec: 2224
+ hash: "c93921d0611e95373338c14cfcc17481"
+ }
+ Frame {
+ msec: 2240
+ hash: "c93921d0611e95373338c14cfcc17481"
+ }
+ Frame {
+ msec: 2256
+ hash: "c93921d0611e95373338c14cfcc17481"
+ }
+ Key {
+ type: 7
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2272
+ hash: "c93921d0611e95373338c14cfcc17481"
+ }
+ Frame {
+ msec: 2288
+ hash: "c93921d0611e95373338c14cfcc17481"
+ }
+ Frame {
+ msec: 2304
+ hash: "c93921d0611e95373338c14cfcc17481"
+ }
+ Frame {
+ msec: 2320
+ hash: "c93921d0611e95373338c14cfcc17481"
+ }
+ Frame {
+ msec: 2336
+ hash: "c93921d0611e95373338c14cfcc17481"
+ }
+ Frame {
+ msec: 2352
+ hash: "c93921d0611e95373338c14cfcc17481"
+ }
+ Frame {
+ msec: 2368
+ hash: "c93921d0611e95373338c14cfcc17481"
+ }
+ Frame {
+ msec: 2384
+ hash: "c93921d0611e95373338c14cfcc17481"
+ }
+ Frame {
+ msec: 2400
+ hash: "c93921d0611e95373338c14cfcc17481"
+ }
+ Frame {
+ msec: 2416
+ hash: "c93921d0611e95373338c14cfcc17481"
+ }
+ Key {
+ type: 6
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2432
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2448
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2464
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2480
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Key {
+ type: 7
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 2496
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2512
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2528
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2544
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2560
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2576
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2592
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2608
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2624
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2640
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2656
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2672
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2688
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2704
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2720
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2736
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2752
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2768
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2784
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2800
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2816
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2832
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2848
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2864
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2880
+ image: "evaluateJavaScript.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2912
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2928
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2944
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2960
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2976
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 2992
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3008
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3024
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3040
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3056
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3072
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3088
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3104
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3120
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3136
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3152
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3168
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3184
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3200
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3216
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3232
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3248
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3264
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3280
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3296
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3312
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 74; y: 206
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3328
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 72; y: 206
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3344
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 70; y: 206
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 68; y: 206
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 65; y: 206
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3360
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 63; y: 206
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3376
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 61; y: 206
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 59; y: 206
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3392
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 57; y: 206
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 55; y: 206
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3408
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 54; y: 206
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 53; y: 206
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3424
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3440
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3456
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3472
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3488
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3504
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Frame {
+ msec: 3520
+ hash: "9266775c7f2156977ff56fcd45246229"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 52; y: 206
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 52; y: 206
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3536
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3552
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3568
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3584
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3600
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3616
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3632
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3648
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 52; y: 206
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3664
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3680
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3696
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3712
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3728
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3744
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3760
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3776
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3792
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3808
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3824
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3840
+ image: "evaluateJavaScript.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3872
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3888
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3904
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3920
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3936
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3952
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3968
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Frame {
+ msec: 3984
+ hash: "b62d9027299daa6ab8304d812ed00f83"
+ }
+ Key {
+ type: 6
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4000
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4016
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4032
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4048
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4064
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4080
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4096
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4112
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Key {
+ type: 7
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4128
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4144
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4160
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4176
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4192
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4208
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4224
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4240
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4256
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4272
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4288
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4304
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4320
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4336
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4352
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4368
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4384
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4400
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4416
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4432
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4448
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4464
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4480
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4496
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4512
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4528
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4544
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4560
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4576
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4592
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4608
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4624
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4640
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4656
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4672
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4688
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4704
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4720
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4736
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4752
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4768
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Frame {
+ msec: 4784
+ hash: "6cea5b700e402072a9953c81b605ef22"
+ }
+ Key {
+ type: 6
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4800
+ image: "evaluateJavaScript.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 4832
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 4848
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 4864
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 4880
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 4896
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 4912
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 4928
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Key {
+ type: 7
+ key: 65
+ modifiers: 0
+ text: "61"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 4944
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 4960
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 4976
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 4992
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5008
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5024
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5040
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5056
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5072
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5088
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5104
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5120
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5136
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5152
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5168
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5184
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5200
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5216
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5232
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5248
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5264
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5280
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5296
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5312
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5328
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5344
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5360
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5376
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5392
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5408
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5424
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5440
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5456
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5472
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5488
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5504
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5520
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5536
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5552
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5568
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5584
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5600
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5616
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5632
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5648
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5664
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5680
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5696
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5712
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5728
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5744
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5760
+ image: "evaluateJavaScript.5.png"
+ }
+ Frame {
+ msec: 5776
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5792
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5808
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 5824
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 54; y: 206
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5840
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 56; y: 206
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 62; y: 204
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 65; y: 204
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5856
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 71; y: 202
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 79; y: 200
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5872
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 82; y: 200
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 90; y: 196
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5888
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 96; y: 192
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 102; y: 188
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5904
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 108; y: 182
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 112; y: 176
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5920
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 116; y: 168
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 120; y: 158
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5936
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 124; y: 148
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 128; y: 136
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5952
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 130; y: 124
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 134; y: 112
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5968
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 138; y: 100
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 142; y: 88
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 5984
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 144; y: 78
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6000
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 150; y: 68
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 154; y: 62
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 158; y: 56
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6016
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 162; y: 48
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6032
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 166; y: 44
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 168; y: 38
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 172; y: 32
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6048
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 174; y: 26
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 176; y: 20
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6064
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 177; y: 18
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6080
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 178; y: 16
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 178; y: 14
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6096
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 178; y: 12
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6112
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 178; y: 11
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6128
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 178; y: 10
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6144
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 179; y: 9
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6160
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 180; y: 7
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6176
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 181; y: 5
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 181; y: 4
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6192
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 182; y: 2
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 183; y: 1
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6208
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6224
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6240
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6256
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6272
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6288
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6304
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6320
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6336
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6352
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6368
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6384
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6400
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6416
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6432
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6448
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6464
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6480
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6496
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6512
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6528
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6544
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6560
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6576
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6592
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6608
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6624
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6640
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6656
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6672
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6688
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6704
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6720
+ image: "evaluateJavaScript.6.png"
+ }
+ Frame {
+ msec: 6736
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6752
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6768
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6784
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6800
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6816
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6832
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6848
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6864
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 176; y: 1
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 174; y: 15
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 172; y: 31
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6880
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 166; y: 47
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 162; y: 63
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6896
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 156; y: 81
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 150; y: 95
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6912
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 144; y: 107
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 138; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6928
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 132; y: 127
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 126; y: 133
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6944
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 122; y: 137
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 120; y: 138
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6960
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 120; y: 139
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 6976
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 6992
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7008
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7024
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7040
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7056
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7072
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 119; y: 137
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7088
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7104
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7120
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 117; y: 137
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7136
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 116; y: 139
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 115; y: 141
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7152
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 113; y: 149
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 109; y: 155
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7168
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 107; y: 165
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 103; y: 171
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7184
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 99; y: 179
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 98; y: 181
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7200
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 96; y: 187
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 95; y: 189
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7216
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 95; y: 190
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7232
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7248
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7264
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7280
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 96; y: 188
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7296
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 96; y: 187
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 96; y: 186
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7312
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 96; y: 185
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 97; y: 184
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7328
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 97; y: 183
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 97; y: 182
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7344
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 98; y: 180
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7360
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 98; y: 178
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7376
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 99; y: 177
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 99; y: 176
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 99; y: 174
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7392
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7408
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 100; y: 172
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 100; y: 171
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7424
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 100; y: 170
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7440
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 100; y: 169
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7456
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 101; y: 167
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7472
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7488
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7504
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 101; y: 167
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7520
+ hash: "04e2e16813a9cafc37077a675e279f5f"
+ }
+ Frame {
+ msec: 7536
+ hash: "04e2e16813a9cafc37077a675e279f5f"
+ }
+ Frame {
+ msec: 7552
+ hash: "04e2e16813a9cafc37077a675e279f5f"
+ }
+ Frame {
+ msec: 7568
+ hash: "04e2e16813a9cafc37077a675e279f5f"
+ }
+ Frame {
+ msec: 7584
+ hash: "04e2e16813a9cafc37077a675e279f5f"
+ }
+ Frame {
+ msec: 7600
+ hash: "04e2e16813a9cafc37077a675e279f5f"
+ }
+ Frame {
+ msec: 7616
+ hash: "04e2e16813a9cafc37077a675e279f5f"
+ }
+ Frame {
+ msec: 7632
+ hash: "04e2e16813a9cafc37077a675e279f5f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 101; y: 166
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 101; y: 166
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7648
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7664
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7680
+ image: "evaluateJavaScript.7.png"
+ }
+ Frame {
+ msec: 7696
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7712
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7728
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7744
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7760
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7776
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7792
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7808
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7824
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 103; y: 166
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7840
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 7856
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 105; y: 166
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7872
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 106; y: 165
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 107; y: 164
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7888
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 108; y: 164
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 109; y: 163
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7904
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 111; y: 163
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 112; y: 162
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7920
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 116; y: 158
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7936
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 118; y: 157
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 122; y: 153
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7952
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 128; y: 147
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 134; y: 139
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7968
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 140; y: 133
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 146; y: 125
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 150; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 7984
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 156; y: 109
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 160; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8000
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 164; y: 89
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 166; y: 77
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8016
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 170; y: 67
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 172; y: 55
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8032
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 176; y: 45
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8048
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 178; y: 35
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 178; y: 27
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 180; y: 19
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8064
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 180; y: 11
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 182; y: 5
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 8080
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8096
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8112
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8128
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8144
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8160
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8176
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8192
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8208
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8224
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8240
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8256
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8272
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8288
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8304
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8320
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8336
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8352
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8368
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8384
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8400
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8416
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8432
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8448
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8464
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8480
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8496
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8512
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8528
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8544
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8560
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8576
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8592
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8608
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8624
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8640
+ image: "evaluateJavaScript.8.png"
+ }
+ Frame {
+ msec: 8656
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+ Frame {
+ msec: 8672
+ hash: "792140067e09d04b31e78be1fc9a40a2"
+ }
+}
diff --git a/tests/auto/declarative/visual/webview/javascript/data/windowObjects.0.png b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.0.png
new file mode 100644
index 0000000..b5c35d2
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/javascript/data/windowObjects.1.png b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.1.png
new file mode 100644
index 0000000..b5c35d2
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/javascript/data/windowObjects.2.png b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.2.png
new file mode 100644
index 0000000..28403c8
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/javascript/data/windowObjects.3.png b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.3.png
new file mode 100644
index 0000000..241b9f8
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/javascript/data/windowObjects.4.png b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.4.png
new file mode 100644
index 0000000..1877cb2
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/javascript/data/windowObjects.qml b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.qml
new file mode 100644
index 0000000..7fce295
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.qml
@@ -0,0 +1,2643 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 32
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 48
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 64
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 80
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 96
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 112
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 128
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 144
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 160
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 176
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 192
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 208
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 224
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 240
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 256
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 272
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 288
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 304
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 320
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 336
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 352
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 368
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 384
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 400
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 416
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 432
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 448
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 464
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 480
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 496
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 512
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 528
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 544
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 560
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 576
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 592
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 608
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 624
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 640
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 656
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 672
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 688
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 704
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 720
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 736
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 752
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 768
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 784
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 800
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 816
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 832
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 848
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 864
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 880
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 896
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 912
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 928
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 944
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 960
+ image: "windowObjects.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 992
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1008
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1024
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1040
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 155; y: 9
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 145; y: 23
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1056
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 137; y: 37
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 127; y: 53
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1072
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 119; y: 67
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 111; y: 77
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1088
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 103; y: 87
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1104
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 97; y: 93
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 91; y: 101
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 87; y: 109
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1120
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 83; y: 117
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 81; y: 125
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1136
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 81; y: 133
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 79; y: 139
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1152
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 79; y: 142
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 79; y: 145
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1168
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 78; y: 146
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 78; y: 147
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1184
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1200
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1216
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1232
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1248
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 82; y: 143
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1264
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1280
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 83; y: 142
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 83; y: 141
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 84; y: 139
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1296
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 85; y: 138
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1312
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1328
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1344
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 86; y: 137
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 87; y: 137
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1360
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 88; y: 137
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1376
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 89; y: 138
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 89; y: 139
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1392
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 90; y: 141
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 90; y: 142
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1408
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 91; y: 144
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1424
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 91; y: 146
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 91; y: 148
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 91; y: 149
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1440
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 91; y: 151
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 91; y: 153
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1456
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 90; y: 154
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 90; y: 155
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1472
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 89; y: 156
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1488
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1504
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1520
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1536
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1552
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1568
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1584
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1600
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1616
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1632
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1648
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1664
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1680
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1696
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1712
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1728
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1744
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1760
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1776
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1792
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1808
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1824
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1840
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1856
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1872
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1888
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1904
+ hash: "b1a19797afefa71e30f4594064aa4951"
+ }
+ Frame {
+ msec: 1920
+ image: "windowObjects.1.png"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 89; y: 156
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1936
+ hash: "fca76207a4fa6f2c4bb01d28aa018f0c"
+ }
+ Frame {
+ msec: 1952
+ hash: "fca76207a4fa6f2c4bb01d28aa018f0c"
+ }
+ Frame {
+ msec: 1968
+ hash: "fca76207a4fa6f2c4bb01d28aa018f0c"
+ }
+ Frame {
+ msec: 1984
+ hash: "fca76207a4fa6f2c4bb01d28aa018f0c"
+ }
+ Frame {
+ msec: 2000
+ hash: "fca76207a4fa6f2c4bb01d28aa018f0c"
+ }
+ Frame {
+ msec: 2016
+ hash: "fca76207a4fa6f2c4bb01d28aa018f0c"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 89; y: 156
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2032
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2048
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2064
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2080
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2096
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2112
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2128
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2144
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2160
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2176
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2192
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2208
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2224
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2240
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2256
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2272
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2288
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 89; y: 157
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 88; y: 158
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 87; y: 160
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2304
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 87; y: 161
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 83; y: 167
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2320
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 82; y: 169
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 80; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2336
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 78; y: 183
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 74; y: 189
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2352
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 72; y: 195
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 68; y: 201
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2368
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 64; y: 207
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 62; y: 213
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2384
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 61; y: 215
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 59; y: 221
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2400
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 58; y: 222
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 57; y: 224
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2416
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2432
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2448
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2464
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2480
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2496
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2512
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2528
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2544
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2560
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2576
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2592
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2608
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2624
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2640
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2656
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2672
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2688
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2704
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2720
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2736
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 49; y: 225
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 50; y: 224
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2752
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 50; y: 223
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2768
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 51; y: 222
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2784
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 51; y: 221
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 52; y: 220
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2800
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 52; y: 218
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2816
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 53; y: 217
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2832
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2848
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2864
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 54; y: 216
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2880
+ image: "windowObjects.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 55; y: 215
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2912
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2928
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 56; y: 214
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2944
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2960
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 2976
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 57; y: 214
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 57; y: 214
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2992
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 3008
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 3024
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 3040
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 3056
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 3072
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 3088
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 3104
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 57; y: 214
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3120
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 3136
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 3152
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 3168
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 3184
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 3200
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 3216
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Frame {
+ msec: 3232
+ hash: "6927f81ca01ef75d204994aa82c60c4d"
+ }
+ Key {
+ type: 6
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3248
+ hash: "2165224e8f66a797ae5c991462fb56d8"
+ }
+ Frame {
+ msec: 3264
+ hash: "2165224e8f66a797ae5c991462fb56d8"
+ }
+ Frame {
+ msec: 3280
+ hash: "2165224e8f66a797ae5c991462fb56d8"
+ }
+ Frame {
+ msec: 3296
+ hash: "2165224e8f66a797ae5c991462fb56d8"
+ }
+ Key {
+ type: 7
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3312
+ hash: "2165224e8f66a797ae5c991462fb56d8"
+ }
+ Frame {
+ msec: 3328
+ hash: "2165224e8f66a797ae5c991462fb56d8"
+ }
+ Frame {
+ msec: 3344
+ hash: "2165224e8f66a797ae5c991462fb56d8"
+ }
+ Frame {
+ msec: 3360
+ hash: "2165224e8f66a797ae5c991462fb56d8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 57; y: 212
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3376
+ hash: "2165224e8f66a797ae5c991462fb56d8"
+ }
+ Frame {
+ msec: 3392
+ hash: "2165224e8f66a797ae5c991462fb56d8"
+ }
+ Frame {
+ msec: 3408
+ hash: "2165224e8f66a797ae5c991462fb56d8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 57; y: 211
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3424
+ hash: "2165224e8f66a797ae5c991462fb56d8"
+ }
+ Key {
+ type: 6
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3440
+ hash: "c6ac7e0be8b7b2a80966344389def97a"
+ }
+ Frame {
+ msec: 3456
+ hash: "c6ac7e0be8b7b2a80966344389def97a"
+ }
+ Frame {
+ msec: 3472
+ hash: "c6ac7e0be8b7b2a80966344389def97a"
+ }
+ Frame {
+ msec: 3488
+ hash: "40f333072bb9f1d334d5ae432d9641b9"
+ }
+ Frame {
+ msec: 3504
+ hash: "40f333072bb9f1d334d5ae432d9641b9"
+ }
+ Key {
+ type: 7
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3520
+ hash: "40f333072bb9f1d334d5ae432d9641b9"
+ }
+ Frame {
+ msec: 3536
+ hash: "40f333072bb9f1d334d5ae432d9641b9"
+ }
+ Frame {
+ msec: 3552
+ hash: "40f333072bb9f1d334d5ae432d9641b9"
+ }
+ Frame {
+ msec: 3568
+ hash: "40f333072bb9f1d334d5ae432d9641b9"
+ }
+ Frame {
+ msec: 3584
+ hash: "40f333072bb9f1d334d5ae432d9641b9"
+ }
+ Frame {
+ msec: 3600
+ hash: "40f333072bb9f1d334d5ae432d9641b9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 58; y: 210
+ modifiers: 0
+ sendToViewport: true
+ }
+ Key {
+ type: 6
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3616
+ hash: "96f727ef0dacfda9ea77fb5651493030"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 60; y: 209
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 61; y: 207
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3632
+ hash: "96f727ef0dacfda9ea77fb5651493030"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 62; y: 205
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3648
+ hash: "96f727ef0dacfda9ea77fb5651493030"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 62; y: 204
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 63; y: 203
+ modifiers: 0
+ sendToViewport: true
+ }
+ Key {
+ type: 7
+ key: 83
+ modifiers: 0
+ text: "73"
+ autorep: false
+ count: 1
+ }
+ Frame {
+ msec: 3664
+ hash: "96f727ef0dacfda9ea77fb5651493030"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 63; y: 202
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 64; y: 200
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3680
+ hash: "96f727ef0dacfda9ea77fb5651493030"
+ }
+ Frame {
+ msec: 3696
+ hash: "96f727ef0dacfda9ea77fb5651493030"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 65; y: 198
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 66; y: 197
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 67; y: 195
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3712
+ hash: "96f727ef0dacfda9ea77fb5651493030"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 68; y: 194
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 69; y: 192
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3728
+ hash: "96f727ef0dacfda9ea77fb5651493030"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 70; y: 190
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 70; y: 188
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3744
+ hash: "96f727ef0dacfda9ea77fb5651493030"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 70; y: 186
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 70; y: 185
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3760
+ hash: "96f727ef0dacfda9ea77fb5651493030"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 71; y: 183
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 71; y: 181
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3776
+ hash: "96f727ef0dacfda9ea77fb5651493030"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 72; y: 179
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 73; y: 178
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3792
+ hash: "96f727ef0dacfda9ea77fb5651493030"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 73; y: 176
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 73; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3808
+ hash: "96f727ef0dacfda9ea77fb5651493030"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 74; y: 174
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 74; y: 173
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3824
+ hash: "96f727ef0dacfda9ea77fb5651493030"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 74; y: 172
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3840
+ image: "windowObjects.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "96f727ef0dacfda9ea77fb5651493030"
+ }
+ Frame {
+ msec: 3872
+ hash: "96f727ef0dacfda9ea77fb5651493030"
+ }
+ Frame {
+ msec: 3888
+ hash: "96f727ef0dacfda9ea77fb5651493030"
+ }
+ Frame {
+ msec: 3904
+ hash: "96f727ef0dacfda9ea77fb5651493030"
+ }
+ Frame {
+ msec: 3920
+ hash: "96f727ef0dacfda9ea77fb5651493030"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 75; y: 171
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 76; y: 171
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3936
+ hash: "96f727ef0dacfda9ea77fb5651493030"
+ }
+ Frame {
+ msec: 3952
+ hash: "96f727ef0dacfda9ea77fb5651493030"
+ }
+ Frame {
+ msec: 3968
+ hash: "96f727ef0dacfda9ea77fb5651493030"
+ }
+ Frame {
+ msec: 3984
+ hash: "ed7b3d93d690df73be5cbee8c41a1931"
+ }
+ Frame {
+ msec: 4000
+ hash: "ed7b3d93d690df73be5cbee8c41a1931"
+ }
+ Frame {
+ msec: 4016
+ hash: "ed7b3d93d690df73be5cbee8c41a1931"
+ }
+ Frame {
+ msec: 4032
+ hash: "ed7b3d93d690df73be5cbee8c41a1931"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 76; y: 170
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4048
+ hash: "ed7b3d93d690df73be5cbee8c41a1931"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 77; y: 169
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 78; y: 168
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4064
+ hash: "ed7b3d93d690df73be5cbee8c41a1931"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 79; y: 168
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4080
+ hash: "ed7b3d93d690df73be5cbee8c41a1931"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 81; y: 167
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 81; y: 166
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4096
+ hash: "ed7b3d93d690df73be5cbee8c41a1931"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 82; y: 165
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4112
+ hash: "ed7b3d93d690df73be5cbee8c41a1931"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 83; y: 164
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4128
+ hash: "ed7b3d93d690df73be5cbee8c41a1931"
+ }
+ Frame {
+ msec: 4144
+ hash: "ed7b3d93d690df73be5cbee8c41a1931"
+ }
+ Frame {
+ msec: 4160
+ hash: "ed7b3d93d690df73be5cbee8c41a1931"
+ }
+ Frame {
+ msec: 4176
+ hash: "ed7b3d93d690df73be5cbee8c41a1931"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 83; y: 164
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4192
+ hash: "5b3505be865f704640e81cea092d35ba"
+ }
+ Frame {
+ msec: 4208
+ hash: "5b3505be865f704640e81cea092d35ba"
+ }
+ Frame {
+ msec: 4224
+ hash: "5b3505be865f704640e81cea092d35ba"
+ }
+ Frame {
+ msec: 4240
+ hash: "5b3505be865f704640e81cea092d35ba"
+ }
+ Frame {
+ msec: 4256
+ hash: "5b3505be865f704640e81cea092d35ba"
+ }
+ Frame {
+ msec: 4272
+ hash: "5b3505be865f704640e81cea092d35ba"
+ }
+ Frame {
+ msec: 4288
+ hash: "5b3505be865f704640e81cea092d35ba"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 83; y: 164
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4304
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4320
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4336
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4352
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4368
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4384
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4400
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4416
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4432
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4448
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4464
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 85; y: 158
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 85; y: 156
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4480
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 86; y: 154
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 86; y: 152
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4496
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 87; y: 150
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 89; y: 144
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4512
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 93; y: 138
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 99; y: 134
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4528
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 101; y: 128
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 105; y: 122
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4544
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 109; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 113; y: 108
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4560
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 114; y: 106
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 114; y: 105
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4576
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 115; y: 104
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 115; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4592
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 115; y: 100
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 116; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4608
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 120; y: 92
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 122; y: 86
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4624
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 126; y: 76
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 130; y: 66
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4640
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 132; y: 56
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 134; y: 46
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4656
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 136; y: 38
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 138; y: 30
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4672
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 140; y: 22
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 141; y: 20
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4688
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 143; y: 14
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 144; y: 12
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4704
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 144; y: 11
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 144; y: 9
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4720
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 144; y: 7
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 144; y: 6
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4736
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 143; y: 4
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 143; y: 2
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4752
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 143; y: 1
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4768
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4784
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4800
+ image: "windowObjects.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4832
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4848
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4864
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4880
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4896
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4912
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4928
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4944
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4960
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4976
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 4992
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5008
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5024
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5040
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5056
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5072
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5088
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5104
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5120
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5136
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5152
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5168
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5184
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5200
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5216
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5232
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5248
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5264
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5280
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5296
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5312
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5328
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5344
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5360
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5376
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5392
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5408
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5424
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5440
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5456
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5472
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5488
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5504
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5520
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5536
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5552
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5568
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+ Frame {
+ msec: 5584
+ hash: "cb5a42e7ab70e05a8bbecabb587f9e5e"
+ }
+}
diff --git a/tests/auto/declarative/visual/webview/javascript/evaluateJavaScript.qml b/tests/auto/declarative/visual/webview/javascript/evaluateJavaScript.qml
new file mode 100644
index 0000000..78d5cfc
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/javascript/evaluateJavaScript.qml
@@ -0,0 +1,31 @@
+import Qt 4.6
+
+Column {
+ WebView {
+ id: webview
+ width: 200
+ height: 200
+ url: "test-objects.html"
+ javaScriptWindowObjects:
+ QtObject {
+ property string text: btntext.text
+ WebView.windowObjectName: "qmltext"
+ onTextChanged: {
+ webview.evaluateJavaScript("{document.getElementById('button').value=window.qmltext.text}")
+ }
+ }
+ }
+ Row {
+ Text { text: "Input:" }
+ Rectangle {
+ width: btntext.width+10
+ height: btntext.height+10
+ border.color: "black"
+ TextInput {
+ id: btntext
+ text: "Blah"
+ cursorDelegate: Rectangle { width: 1; color: "red" }
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/webview/javascript/test-objects.html b/tests/auto/declarative/visual/webview/javascript/test-objects.html
new file mode 100644
index 0000000..ed7d2ea
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/javascript/test-objects.html
@@ -0,0 +1,12 @@
+<html>
+<head>
+</head>
+<body>
+<h1>Boring Document</h1>
+<p>
+This is a boring document.
+It gets the text on this button:
+<input id=button type=button value="click me"
+ onClick="{document.getElementById('button').value=window.qmltext.text}">
+from QML.
+<p>
diff --git a/tests/auto/declarative/visual/webview/javascript/windowObjects.qml b/tests/auto/declarative/visual/webview/javascript/windowObjects.qml
new file mode 100644
index 0000000..a41de9a
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/javascript/windowObjects.qml
@@ -0,0 +1,26 @@
+import Qt 4.6
+
+Column {
+ WebView {
+ width: 200
+ height: 200
+ url: "test-objects.html"
+ javaScriptWindowObjects:
+ QtObject {
+ property string text: btntext.text
+ WebView.windowObjectName: "qmltext"
+ }
+ }
+ Row {
+ Text { text: "Input:" }
+ Rectangle {
+ width: btntext.width+10
+ height: btntext.height+10
+ border.color: "black"
+ TextInput {
+ id: btntext
+ text: "Blah"
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/webview/settings/data/fontFamily.0.png b/tests/auto/declarative/visual/webview/settings/data/fontFamily.0.png
new file mode 100644
index 0000000..7721e75
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/settings/data/fontFamily.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/settings/data/fontFamily.qml b/tests/auto/declarative/visual/webview/settings/data/fontFamily.qml
new file mode 100644
index 0000000..195c3ba
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/settings/data/fontFamily.qml
@@ -0,0 +1,395 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 32
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 48
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 64
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 80
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 96
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 112
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 128
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 144
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 160
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 176
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 192
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 208
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 224
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 240
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 256
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 272
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 288
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 304
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 320
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 336
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 352
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 368
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 384
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 400
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 416
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 432
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 448
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 464
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 480
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 496
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 512
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 528
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 544
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 560
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 576
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 592
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 608
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 624
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 640
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 656
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 672
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 688
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 196; y: 25
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 194; y: 19
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 190; y: 13
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 704
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 720
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 736
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 752
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 768
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 784
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 800
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 816
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 832
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 848
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 864
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 880
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 896
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 912
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 928
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 944
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 960
+ image: "fontFamily.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 992
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1008
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1024
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1040
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1056
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1072
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1088
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1104
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1120
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1136
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1152
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1168
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1184
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1200
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1216
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1232
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1248
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1264
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1280
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1296
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1312
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1328
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1344
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1360
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1376
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1392
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1408
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1424
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1440
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+ Frame {
+ msec: 1456
+ hash: "5d66fdee6a0a96bb24e89244f02eacc9"
+ }
+}
diff --git a/tests/auto/declarative/visual/webview/settings/data/fontSize.0.png b/tests/auto/declarative/visual/webview/settings/data/fontSize.0.png
new file mode 100644
index 0000000..95196a1
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/settings/data/fontSize.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/settings/data/fontSize.qml b/tests/auto/declarative/visual/webview/settings/data/fontSize.qml
new file mode 100644
index 0000000..438ffa5
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/settings/data/fontSize.qml
@@ -0,0 +1,339 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 32
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 48
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 64
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 80
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 96
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 112
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 128
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 144
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 160
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 176
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 192
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 208
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 224
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 240
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 256
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 272
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 288
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 304
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 320
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 336
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 352
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 368
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 384
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 400
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 416
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 432
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 448
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 464
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 480
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 496
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 512
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 528
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 544
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 560
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 576
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 592
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 608
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 624
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 640
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 656
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 672
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 688
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 704
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 720
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 736
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 752
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 768
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 784
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 800
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 816
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 832
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 848
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 864
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 880
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 896
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 912
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 928
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 944
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 960
+ image: "fontSize.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 992
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 1008
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 1024
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 1040
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 1056
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 1072
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 1088
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 1104
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 1120
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 1136
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 1152
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 1168
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 1184
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 1200
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 1216
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 1232
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 1248
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 1264
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 1280
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 1296
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 1312
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+ Frame {
+ msec: 1328
+ hash: "962e77f522956d38f3b1b890df749f0a"
+ }
+}
diff --git a/tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.0.png b/tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.0.png
new file mode 100644
index 0000000..48920a2
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.1.png b/tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.1.png
new file mode 100644
index 0000000..48920a2
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.qml b/tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.qml
new file mode 100644
index 0000000..ead5c3b
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.qml
@@ -0,0 +1,595 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 32
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 48
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 64
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 80
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 96
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 112
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 128
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 144
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 160
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 176
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 192
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 208
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 224
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 240
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 256
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 272
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 288
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 304
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 320
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 336
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 352
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 368
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 384
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 400
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 416
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 432
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 448
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 464
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 480
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 496
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 512
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 528
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 544
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 560
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 576
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 592
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 608
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 624
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 640
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 656
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 672
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 688
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 704
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 720
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 736
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 752
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 768
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 784
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 800
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 816
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 832
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 848
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 864
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 880
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 896
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 912
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 928
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 944
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 960
+ image: "noAutoLoadImages.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 992
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1008
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1024
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1040
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1056
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1072
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1088
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1104
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1120
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1136
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1152
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1168
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1184
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1200
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1216
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1232
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1248
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1264
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1280
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1296
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1312
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1328
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1344
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1360
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1376
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1392
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1408
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1424
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1440
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1456
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1472
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1488
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1504
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1520
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1536
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1552
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1568
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1584
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1600
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1616
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1632
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1648
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1664
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1680
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1696
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1712
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1728
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1744
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1760
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1776
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1792
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1808
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1824
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1840
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1856
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1872
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1888
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1904
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1920
+ image: "noAutoLoadImages.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1952
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1968
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 1984
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2000
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2016
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2032
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2048
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2064
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2080
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2096
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2112
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2128
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2144
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2160
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2176
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2192
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2208
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2224
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2240
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2256
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2272
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2288
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2304
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2320
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2336
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+ Frame {
+ msec: 2352
+ hash: "5146cfbeefc51268eca7717d84775750"
+ }
+}
diff --git a/tests/auto/declarative/visual/webview/settings/data/setFontFamily.0.png b/tests/auto/declarative/visual/webview/settings/data/setFontFamily.0.png
new file mode 100644
index 0000000..f3c621a
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/settings/data/setFontFamily.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/settings/data/setFontFamily.qml b/tests/auto/declarative/visual/webview/settings/data/setFontFamily.qml
new file mode 100644
index 0000000..cf74d42
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/settings/data/setFontFamily.qml
@@ -0,0 +1,351 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 32
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 48
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 64
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 80
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 96
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 112
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 128
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 144
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 160
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 176
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 192
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 208
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 224
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 240
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 256
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 272
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 288
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 304
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 320
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 336
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 352
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 368
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 384
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 400
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 416
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 432
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 448
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 464
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 480
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 496
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 512
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 528
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 544
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 560
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 576
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 592
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 608
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 624
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 640
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 656
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 672
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 688
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 704
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 720
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 736
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 752
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 768
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 784
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 800
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 816
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 832
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 848
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 864
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 880
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 896
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 912
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 928
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 944
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 960
+ image: "setFontFamily.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 992
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1008
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1024
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1040
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1056
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1072
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1088
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1104
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1120
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1136
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1152
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1168
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1184
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1200
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1216
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1232
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1248
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1264
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1280
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1296
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1312
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1328
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1344
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1360
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+ Frame {
+ msec: 1376
+ hash: "7ef8bb83c146898bd75de8951a932b58"
+ }
+}
diff --git a/tests/auto/declarative/visual/webview/settings/fontFamily.qml b/tests/auto/declarative/visual/webview/settings/fontFamily.qml
new file mode 100644
index 0000000..2bb2a53
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/settings/fontFamily.qml
@@ -0,0 +1,16 @@
+import Qt 4.6
+
+WebView {
+ id: web
+ width: 200
+ height: 200
+ Column {
+ anchors.fill: parent
+ Text { text: "standard: " + web.settings.standardFontFamily }
+ Text { text: "fixed: " + web.settings.fixedFontFamily }
+ Text { text: "serif: " + web.settings.serifFontFamily }
+ Text { text: "sansserif: " + web.settings.sansSerifFontFamily }
+ Text { text: "cursive: " + web.settings.cursiveFontFamily }
+ Text { text: "fantasy: " + web.settings.fantasyFontFamily }
+ }
+}
diff --git a/tests/auto/declarative/visual/webview/settings/fontSize.qml b/tests/auto/declarative/visual/webview/settings/fontSize.qml
new file mode 100644
index 0000000..b970783
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/settings/fontSize.qml
@@ -0,0 +1,70 @@
+import Qt 4.6
+
+Grid {
+ columns: 3
+ Rectangle {
+ Text { color: "green"; text: "Normal" }
+ border.color: "black"
+ width: 200
+ height: 200
+ WebView {
+ anchors.fill: parent
+ url: "test.html"
+ }
+ }
+ Rectangle {
+ Text { color: "green"; text: "Big" }
+ border.color: "black"
+ width: 200
+ height: 200
+ WebView {
+ anchors.fill: parent
+ url: "test.html"
+ settings.minimumFontSize: 20
+ }
+ }
+ Rectangle {
+ Text { color: "green"; text: "Big (logical)" }
+ border.color: "black"
+ width: 200
+ height: 200
+ WebView {
+ anchors.fill: parent
+ url: "test.html"
+ settings.minimumLogicalFontSize: 20
+ }
+ }
+ Rectangle {
+ Text { color: "green"; text: "Bigger" }
+ border.color: "black"
+ width: 200
+ height: 200
+ WebView {
+ anchors.fill: parent
+ url: "test.html"
+ settings.minimumFontSize: 30
+ }
+ }
+ Rectangle {
+ Text { color: "green"; text: "Small (except fixed)" }
+ border.color: "black"
+ width: 200
+ height: 200
+ WebView {
+ anchors.fill: parent
+ url: "test.html"
+ settings.defaultFontSize: 8
+ }
+ }
+ Rectangle {
+ Text { color: "green"; text: "Small fixed" }
+ border.color: "black"
+ width: 200
+ height: 200
+ WebView {
+ anchors.fill: parent
+ url: "test.html"
+ settings.defaultFixedFontSize: 8
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/webview/settings/noAutoLoadImages.qml b/tests/auto/declarative/visual/webview/settings/noAutoLoadImages.qml
new file mode 100644
index 0000000..2478932
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/settings/noAutoLoadImages.qml
@@ -0,0 +1,20 @@
+import Qt 4.6
+
+Grid {
+ columns: 2
+ Rectangle {
+ Text { id: label; x:10; y:170; color: "green"; text: "No image" }
+ border.color: "black"
+ width: 200
+ height: 200
+ WebView {
+ anchors.fill: parent
+ settings.autoLoadImages: false
+ url: "test-img.html"
+ MouseRegion {
+ anchors.fill: parent
+ onClicked: { parent.settings.autoLoadImages=true; label.text=""; parent.reload.trigger() }
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/webview/settings/qtlogo.png b/tests/auto/declarative/visual/webview/settings/qtlogo.png
new file mode 100644
index 0000000..399bd0b
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/settings/qtlogo.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/settings/setFontFamily.qml b/tests/auto/declarative/visual/webview/settings/setFontFamily.qml
new file mode 100644
index 0000000..26deed8
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/settings/setFontFamily.qml
@@ -0,0 +1,10 @@
+import Qt 4.6
+
+WebView {
+ url: "test.html"
+ width: 300
+ height: 300
+ settings.standardFontFamily: font.name
+ // WebKit doesn't seem to honour any other FontFamily settings
+ FontLoader { id: font; source: "tarzeau_ocr_a.ttf" }
+}
diff --git a/tests/auto/declarative/visual/webview/settings/tarzeau_ocr_a.ttf b/tests/auto/declarative/visual/webview/settings/tarzeau_ocr_a.ttf
new file mode 100644
index 0000000..cf93f96
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/settings/tarzeau_ocr_a.ttf
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/settings/test-img.html b/tests/auto/declarative/visual/webview/settings/test-img.html
new file mode 100644
index 0000000..cdd63ac
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/settings/test-img.html
@@ -0,0 +1,6 @@
+<html>
+<body>
+<h1>Boring Document</h1>
+<p>
+This is a boring document.
+With a picture: <img src="qtlogo.png">
diff --git a/tests/auto/declarative/visual/webview/settings/test.html b/tests/auto/declarative/visual/webview/settings/test.html
new file mode 100644
index 0000000..3265e20
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/settings/test.html
@@ -0,0 +1,9 @@
+<html>
+<body>
+<h1>Boring Document</h1>
+<p>
+This is a boring document.
+</p>
+<i>This is italic.</i>
+<b>This is bold.</b>
+<tt>This is fixed.</tt>
diff --git a/tests/auto/declarative/visual/webview/zooming/data/pageWidth.qml b/tests/auto/declarative/visual/webview/zooming/data/pageWidth.qml
new file mode 100644
index 0000000..1a993e1
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/data/pageWidth.qml
@@ -0,0 +1,227 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 32
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 48
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 64
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 80
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 96
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 112
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 128
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 144
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 160
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 176
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 192
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 208
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 224
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 240
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 256
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 272
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 288
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 304
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 320
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 336
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 352
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 368
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 384
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 400
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 416
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 432
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 448
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 464
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 480
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 496
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 512
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 528
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 544
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 560
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 576
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 592
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 608
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 624
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 640
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 656
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 672
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 688
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 704
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 720
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 736
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 752
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 768
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 784
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 800
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 816
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 832
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 848
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 864
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+ Frame {
+ msec: 880
+ hash: "9a2554b1b322ea71115fa91d0100d2ff"
+ }
+}
diff --git a/tests/auto/declarative/visual/webview/zooming/data/renderControl.0.png b/tests/auto/declarative/visual/webview/zooming/data/renderControl.0.png
new file mode 100644
index 0000000..38df70e
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/data/renderControl.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/zooming/data/renderControl.qml b/tests/auto/declarative/visual/webview/zooming/data/renderControl.qml
new file mode 100644
index 0000000..d3c5890
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/data/renderControl.qml
@@ -0,0 +1,415 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "4f999826cd5ebe4f58bfd255e1c22be0"
+ }
+ Frame {
+ msec: 32
+ hash: "3aa9bd1bd75219f82578689ac6d81c7e"
+ }
+ Frame {
+ msec: 48
+ hash: "19d5f48f1c73d52483be96c887d3fd76"
+ }
+ Frame {
+ msec: 64
+ hash: "9b85eef4e0746cc43aaefd442efdd824"
+ }
+ Frame {
+ msec: 80
+ hash: "fca0034fb720e40198ede95a0ab0fadb"
+ }
+ Frame {
+ msec: 96
+ hash: "9f63ddbd927a4b08242f3410a9ed7283"
+ }
+ Frame {
+ msec: 112
+ hash: "4f5804c3c3ee195470a462293307cfd5"
+ }
+ Frame {
+ msec: 128
+ hash: "d0434f08a8097b97b76c1194317a38ba"
+ }
+ Frame {
+ msec: 144
+ hash: "921880d300e56f9605923a13fcd8b967"
+ }
+ Frame {
+ msec: 160
+ hash: "f5dc87abf36332c68fd4450a6236dcb4"
+ }
+ Frame {
+ msec: 176
+ hash: "c54f220cd5768afa1c12579007e17eff"
+ }
+ Frame {
+ msec: 192
+ hash: "e1c70c3896d5a937296f205b09991b31"
+ }
+ Frame {
+ msec: 208
+ hash: "d135f70f761add1358062a0386c62d18"
+ }
+ Frame {
+ msec: 224
+ hash: "53cb2ed2b65e77cf0cd70530f32854ad"
+ }
+ Frame {
+ msec: 240
+ hash: "2ff4feb61d958a800b38b282c3400293"
+ }
+ Frame {
+ msec: 256
+ hash: "59f5585ec472efa29c5eba8b972ab3bd"
+ }
+ Frame {
+ msec: 272
+ hash: "3aef5e1ff6da15e0e9f2e620dbabbab2"
+ }
+ Frame {
+ msec: 288
+ hash: "2931299f667752efe9fca727534385e1"
+ }
+ Frame {
+ msec: 304
+ hash: "2ed90e61c41b994ccea924191b66fc71"
+ }
+ Frame {
+ msec: 320
+ hash: "1424c634067c896973c2c10793957933"
+ }
+ Frame {
+ msec: 336
+ hash: "c4d30d511053a7caeefdae753236cf5b"
+ }
+ Frame {
+ msec: 352
+ hash: "32300e07e34e8f316770c790a5ef9f6d"
+ }
+ Frame {
+ msec: 368
+ hash: "95312dc2a4d88a48605fea170712354d"
+ }
+ Frame {
+ msec: 384
+ hash: "3d146357d1532640cefb64fbae75bc0d"
+ }
+ Frame {
+ msec: 400
+ hash: "5b78740511a456a3647d8392b2008f7f"
+ }
+ Frame {
+ msec: 416
+ hash: "dddb065cefa27a862d108429c9984191"
+ }
+ Frame {
+ msec: 432
+ hash: "0857067a0ee381e0f462ef8aceb0b696"
+ }
+ Frame {
+ msec: 448
+ hash: "1f5e7e064cc62ff2e0585c98875351df"
+ }
+ Frame {
+ msec: 464
+ hash: "c7f6bb852bdb2b99cbb5a8ca34f1585a"
+ }
+ Frame {
+ msec: 480
+ hash: "f2284dea5812f167cae08c687fc1a3e9"
+ }
+ Frame {
+ msec: 496
+ hash: "deec54bc32c46921e5032bce7daa1dad"
+ }
+ Frame {
+ msec: 512
+ hash: "1271d3704de17bfe463c76fd73c3132b"
+ }
+ Frame {
+ msec: 528
+ hash: "0568b0ecd47cd1c34b9de477e68e5751"
+ }
+ Frame {
+ msec: 544
+ hash: "f070dd88e42697a9e43573f9f41b3540"
+ }
+ Frame {
+ msec: 560
+ hash: "f5ced2827b06ea514f05866f1e4099f0"
+ }
+ Frame {
+ msec: 576
+ hash: "59f5585ec472efa29c5eba8b972ab3bd"
+ }
+ Frame {
+ msec: 592
+ hash: "2ff4feb61d958a800b38b282c3400293"
+ }
+ Frame {
+ msec: 608
+ hash: "53cb2ed2b65e77cf0cd70530f32854ad"
+ }
+ Frame {
+ msec: 624
+ hash: "d135f70f761add1358062a0386c62d18"
+ }
+ Frame {
+ msec: 640
+ hash: "e1c70c3896d5a937296f205b09991b31"
+ }
+ Frame {
+ msec: 656
+ hash: "c54f220cd5768afa1c12579007e17eff"
+ }
+ Frame {
+ msec: 672
+ hash: "f5dc87abf36332c68fd4450a6236dcb4"
+ }
+ Frame {
+ msec: 688
+ hash: "921880d300e56f9605923a13fcd8b967"
+ }
+ Frame {
+ msec: 704
+ hash: "d0434f08a8097b97b76c1194317a38ba"
+ }
+ Frame {
+ msec: 720
+ hash: "4f5804c3c3ee195470a462293307cfd5"
+ }
+ Frame {
+ msec: 736
+ hash: "9f63ddbd927a4b08242f3410a9ed7283"
+ }
+ Frame {
+ msec: 752
+ hash: "fca0034fb720e40198ede95a0ab0fadb"
+ }
+ Frame {
+ msec: 768
+ hash: "9b85eef4e0746cc43aaefd442efdd824"
+ }
+ Frame {
+ msec: 784
+ hash: "19d5f48f1c73d52483be96c887d3fd76"
+ }
+ Frame {
+ msec: 800
+ hash: "3aa9bd1bd75219f82578689ac6d81c7e"
+ }
+ Frame {
+ msec: 816
+ hash: "4f999826cd5ebe4f58bfd255e1c22be0"
+ }
+ Frame {
+ msec: 832
+ hash: "3aa9bd1bd75219f82578689ac6d81c7e"
+ }
+ Frame {
+ msec: 848
+ hash: "19d5f48f1c73d52483be96c887d3fd76"
+ }
+ Frame {
+ msec: 864
+ hash: "9b85eef4e0746cc43aaefd442efdd824"
+ }
+ Frame {
+ msec: 880
+ hash: "fca0034fb720e40198ede95a0ab0fadb"
+ }
+ Frame {
+ msec: 896
+ hash: "9f63ddbd927a4b08242f3410a9ed7283"
+ }
+ Frame {
+ msec: 912
+ hash: "4f5804c3c3ee195470a462293307cfd5"
+ }
+ Frame {
+ msec: 928
+ hash: "d0434f08a8097b97b76c1194317a38ba"
+ }
+ Frame {
+ msec: 944
+ hash: "921880d300e56f9605923a13fcd8b967"
+ }
+ Frame {
+ msec: 960
+ image: "renderControl.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "c54f220cd5768afa1c12579007e17eff"
+ }
+ Frame {
+ msec: 992
+ hash: "e1c70c3896d5a937296f205b09991b31"
+ }
+ Frame {
+ msec: 1008
+ hash: "d135f70f761add1358062a0386c62d18"
+ }
+ Frame {
+ msec: 1024
+ hash: "53cb2ed2b65e77cf0cd70530f32854ad"
+ }
+ Frame {
+ msec: 1040
+ hash: "2ff4feb61d958a800b38b282c3400293"
+ }
+ Frame {
+ msec: 1056
+ hash: "59f5585ec472efa29c5eba8b972ab3bd"
+ }
+ Frame {
+ msec: 1072
+ hash: "3aef5e1ff6da15e0e9f2e620dbabbab2"
+ }
+ Frame {
+ msec: 1088
+ hash: "2931299f667752efe9fca727534385e1"
+ }
+ Frame {
+ msec: 1104
+ hash: "2ed90e61c41b994ccea924191b66fc71"
+ }
+ Frame {
+ msec: 1120
+ hash: "1424c634067c896973c2c10793957933"
+ }
+ Frame {
+ msec: 1136
+ hash: "c4d30d511053a7caeefdae753236cf5b"
+ }
+ Frame {
+ msec: 1152
+ hash: "32300e07e34e8f316770c790a5ef9f6d"
+ }
+ Frame {
+ msec: 1168
+ hash: "95312dc2a4d88a48605fea170712354d"
+ }
+ Frame {
+ msec: 1184
+ hash: "3d146357d1532640cefb64fbae75bc0d"
+ }
+ Frame {
+ msec: 1200
+ hash: "5b78740511a456a3647d8392b2008f7f"
+ }
+ Frame {
+ msec: 1216
+ hash: "dddb065cefa27a862d108429c9984191"
+ }
+ Frame {
+ msec: 1232
+ hash: "0857067a0ee381e0f462ef8aceb0b696"
+ }
+ Frame {
+ msec: 1248
+ hash: "1f5e7e064cc62ff2e0585c98875351df"
+ }
+ Frame {
+ msec: 1264
+ hash: "c7f6bb852bdb2b99cbb5a8ca34f1585a"
+ }
+ Frame {
+ msec: 1280
+ hash: "f2284dea5812f167cae08c687fc1a3e9"
+ }
+ Frame {
+ msec: 1296
+ hash: "deec54bc32c46921e5032bce7daa1dad"
+ }
+ Frame {
+ msec: 1312
+ hash: "1271d3704de17bfe463c76fd73c3132b"
+ }
+ Frame {
+ msec: 1328
+ hash: "0568b0ecd47cd1c34b9de477e68e5751"
+ }
+ Frame {
+ msec: 1344
+ hash: "f070dd88e42697a9e43573f9f41b3540"
+ }
+ Frame {
+ msec: 1360
+ hash: "f5ced2827b06ea514f05866f1e4099f0"
+ }
+ Frame {
+ msec: 1376
+ hash: "59f5585ec472efa29c5eba8b972ab3bd"
+ }
+ Frame {
+ msec: 1392
+ hash: "2ff4feb61d958a800b38b282c3400293"
+ }
+ Frame {
+ msec: 1408
+ hash: "53cb2ed2b65e77cf0cd70530f32854ad"
+ }
+ Frame {
+ msec: 1424
+ hash: "d135f70f761add1358062a0386c62d18"
+ }
+ Frame {
+ msec: 1440
+ hash: "e1c70c3896d5a937296f205b09991b31"
+ }
+ Frame {
+ msec: 1456
+ hash: "c54f220cd5768afa1c12579007e17eff"
+ }
+ Frame {
+ msec: 1472
+ hash: "f5dc87abf36332c68fd4450a6236dcb4"
+ }
+ Frame {
+ msec: 1488
+ hash: "921880d300e56f9605923a13fcd8b967"
+ }
+ Frame {
+ msec: 1504
+ hash: "d0434f08a8097b97b76c1194317a38ba"
+ }
+ Frame {
+ msec: 1520
+ hash: "4f5804c3c3ee195470a462293307cfd5"
+ }
+ Frame {
+ msec: 1536
+ hash: "9f63ddbd927a4b08242f3410a9ed7283"
+ }
+ Frame {
+ msec: 1552
+ hash: "fca0034fb720e40198ede95a0ab0fadb"
+ }
+ Frame {
+ msec: 1568
+ hash: "9b85eef4e0746cc43aaefd442efdd824"
+ }
+ Frame {
+ msec: 1584
+ hash: "19d5f48f1c73d52483be96c887d3fd76"
+ }
+ Frame {
+ msec: 1600
+ hash: "3aa9bd1bd75219f82578689ac6d81c7e"
+ }
+ Frame {
+ msec: 1616
+ hash: "4f999826cd5ebe4f58bfd255e1c22be0"
+ }
+ Frame {
+ msec: 1632
+ hash: "3aa9bd1bd75219f82578689ac6d81c7e"
+ }
+}
diff --git a/tests/auto/declarative/visual/webview/zooming/data/resolution.0.png b/tests/auto/declarative/visual/webview/zooming/data/resolution.0.png
new file mode 100644
index 0000000..7e989c6
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/data/resolution.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/zooming/data/resolution.1.png b/tests/auto/declarative/visual/webview/zooming/data/resolution.1.png
new file mode 100644
index 0000000..60ccc0b
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/data/resolution.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/zooming/data/resolution.2.png b/tests/auto/declarative/visual/webview/zooming/data/resolution.2.png
new file mode 100644
index 0000000..6c22494
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/data/resolution.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/zooming/data/resolution.3.png b/tests/auto/declarative/visual/webview/zooming/data/resolution.3.png
new file mode 100644
index 0000000..71dd56f
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/data/resolution.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/zooming/data/resolution.4.png b/tests/auto/declarative/visual/webview/zooming/data/resolution.4.png
new file mode 100644
index 0000000..ce03cb6
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/data/resolution.4.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/zooming/data/resolution.qml b/tests/auto/declarative/visual/webview/zooming/data/resolution.qml
new file mode 100644
index 0000000..0a2b8db
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/data/resolution.qml
@@ -0,0 +1,1319 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "ac1d9c1cc13813b5e94c692a209a4e36"
+ }
+ Frame {
+ msec: 32
+ hash: "1f189a436cf74ae83a03c3bb63c24ec2"
+ }
+ Frame {
+ msec: 48
+ hash: "369f761053d5910e00672aa866f698ba"
+ }
+ Frame {
+ msec: 64
+ hash: "30a191ae899121ae22d10acee6593415"
+ }
+ Frame {
+ msec: 80
+ hash: "7af041898748bb5950643b057ca59eea"
+ }
+ Frame {
+ msec: 96
+ hash: "e0a2ed91e78ff9a994deb9649a8afc16"
+ }
+ Frame {
+ msec: 112
+ hash: "649ad1a3fb57fb088e4e5cfd749bf2e5"
+ }
+ Frame {
+ msec: 128
+ hash: "9053a92e343ebb79bd2831f5ab94a1b5"
+ }
+ Frame {
+ msec: 144
+ hash: "dc78b09e27bbc0a2cfec83436eef4446"
+ }
+ Frame {
+ msec: 160
+ hash: "2aaa3749f93734dd203e1fea91a9f24a"
+ }
+ Frame {
+ msec: 176
+ hash: "8df8dd33eada434231332b81e03430ce"
+ }
+ Frame {
+ msec: 192
+ hash: "b5b1beb4dd4720eaa8b888fbef1ba875"
+ }
+ Frame {
+ msec: 208
+ hash: "e531d33ef14b58ad843a6be6d7cb0961"
+ }
+ Frame {
+ msec: 224
+ hash: "011c0bcca7717b08bc53738718203f7e"
+ }
+ Frame {
+ msec: 240
+ hash: "412a630348aa44d56f36f04982035e36"
+ }
+ Frame {
+ msec: 256
+ hash: "45528cdc62622b6d01e44466cd85bd38"
+ }
+ Frame {
+ msec: 272
+ hash: "0901c99f959d6c10a0b6ea46a282d8fd"
+ }
+ Frame {
+ msec: 288
+ hash: "3f200fca4815d555f22912d9fcdc20ee"
+ }
+ Frame {
+ msec: 304
+ hash: "5e3c58e2f3a57f4ea48f4315d37ed813"
+ }
+ Frame {
+ msec: 320
+ hash: "e8d98ec2d13ef4324feba11be95d0735"
+ }
+ Frame {
+ msec: 336
+ hash: "4f3b79b341b63499a20f1e1e2cd979f9"
+ }
+ Frame {
+ msec: 352
+ hash: "5ddbc3bc10292bec41531e83c0921c59"
+ }
+ Frame {
+ msec: 368
+ hash: "9bc9801e83267689cd2750226f2b08ce"
+ }
+ Frame {
+ msec: 384
+ hash: "f87195f2393914a0bbed9a454de01ff5"
+ }
+ Frame {
+ msec: 400
+ hash: "4e0fd7f45e53a8d44c416eb9235ec877"
+ }
+ Frame {
+ msec: 416
+ hash: "a579d6324fb4bf9ac5ceaba2aa708764"
+ }
+ Frame {
+ msec: 432
+ hash: "b9f3f08168fb55ba01e56e670db565de"
+ }
+ Frame {
+ msec: 448
+ hash: "cbd63ec868578e295a83170f42b23678"
+ }
+ Frame {
+ msec: 464
+ hash: "2ed9d0e09b61dee8b2703e580007d7a5"
+ }
+ Frame {
+ msec: 480
+ hash: "92fa2d9ef05140eb9d0fcf78b55f202e"
+ }
+ Frame {
+ msec: 496
+ hash: "9a3f9dc04a900020f0e488309d7b4757"
+ }
+ Frame {
+ msec: 512
+ hash: "93b4876c3e185ff4875a7447b0bf4f0f"
+ }
+ Frame {
+ msec: 528
+ hash: "41b40e36f77d04e62f72ad34aa50709a"
+ }
+ Frame {
+ msec: 544
+ hash: "2ea69aeb32fee61b61aa9c4efb2834bf"
+ }
+ Frame {
+ msec: 560
+ hash: "0971ac1e05ea2ba387c78d4d103f5ea1"
+ }
+ Frame {
+ msec: 576
+ hash: "98e46dff678f293fd6a4e9313ab3aec7"
+ }
+ Frame {
+ msec: 592
+ hash: "82b94393071d6c32dd8028e1ee69e7fb"
+ }
+ Frame {
+ msec: 608
+ hash: "240df67aa72a24546eb6e043e0d3d205"
+ }
+ Frame {
+ msec: 624
+ hash: "56c4113cc341c254ccab66f3bc313154"
+ }
+ Frame {
+ msec: 640
+ hash: "20d758c1537ed1a9aff657414b50926c"
+ }
+ Frame {
+ msec: 656
+ hash: "ae252d835a05e01c2a12ae820335049a"
+ }
+ Frame {
+ msec: 672
+ hash: "4d53256fbb012e738ba3868e2482250d"
+ }
+ Frame {
+ msec: 688
+ hash: "261a341cab38986fb2f53b8e430f04a3"
+ }
+ Frame {
+ msec: 704
+ hash: "1030f795d310f742ba491a2a90ff52d8"
+ }
+ Frame {
+ msec: 720
+ hash: "59d24ebfedd2a87bdbd755d06c4361d2"
+ }
+ Frame {
+ msec: 736
+ hash: "a6eaa480b3f93d33ae23bb36b7691b92"
+ }
+ Frame {
+ msec: 752
+ hash: "cb6cf1e6e89da3fcbad323f744aef18d"
+ }
+ Frame {
+ msec: 768
+ hash: "33a4f07cf7f5d16f006541c61ae2e4ee"
+ }
+ Frame {
+ msec: 784
+ hash: "6e857b106486ea0aaa5321d4a7a07eae"
+ }
+ Frame {
+ msec: 800
+ hash: "0f80edaf3eecf7a8c015d3fcecc0a494"
+ }
+ Frame {
+ msec: 816
+ hash: "24b45d00d70904694c30ebd422c739ce"
+ }
+ Frame {
+ msec: 832
+ hash: "c0ca66fefb19294852b9be0c4ba36481"
+ }
+ Frame {
+ msec: 848
+ hash: "047846d243e7613193a8ddd526c4268e"
+ }
+ Frame {
+ msec: 864
+ hash: "ca85f90e450ccda6b76e6a29a3187a63"
+ }
+ Frame {
+ msec: 880
+ hash: "fcd803f5640d054190c2ddc9a6406bb9"
+ }
+ Frame {
+ msec: 896
+ hash: "f81152b8a464bfa8343f52efcb0c8b8c"
+ }
+ Frame {
+ msec: 912
+ hash: "e86be73d83699584dca986dfdb030b36"
+ }
+ Frame {
+ msec: 928
+ hash: "d9798e4ebaf72c35b19a56b336d2ea93"
+ }
+ Frame {
+ msec: 944
+ hash: "460f13d8e05b529c0e4fba39b1449ff1"
+ }
+ Frame {
+ msec: 960
+ image: "resolution.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "8b2f13580c6de9ec231809330d2d0362"
+ }
+ Frame {
+ msec: 992
+ hash: "94a2cc520340573557e6a310f2ea125e"
+ }
+ Frame {
+ msec: 1008
+ hash: "a8df78ab2e800349ec887ea6b1f5dcb8"
+ }
+ Frame {
+ msec: 1024
+ hash: "0f3a56dbe26d453847ed4847c0e81d1a"
+ }
+ Frame {
+ msec: 1040
+ hash: "96c89325862a982235b4b75922ec4669"
+ }
+ Frame {
+ msec: 1056
+ hash: "ead6352a4ca47da59422e8d6a5844aa4"
+ }
+ Frame {
+ msec: 1072
+ hash: "b50a6b14f15882e2c1ae6e3babeecdf8"
+ }
+ Frame {
+ msec: 1088
+ hash: "2f32245c3388b86194e8183a290e99b8"
+ }
+ Frame {
+ msec: 1104
+ hash: "2b54d49d30ccbf11ccb5ba8d62ba7d83"
+ }
+ Frame {
+ msec: 1120
+ hash: "495b25d87cb6d1d4bdea4d5ec62c698e"
+ }
+ Frame {
+ msec: 1136
+ hash: "3d45b061939783b6359fa4cdb908ecc0"
+ }
+ Frame {
+ msec: 1152
+ hash: "e9e601c2a65a09b6354fff2c162106d6"
+ }
+ Frame {
+ msec: 1168
+ hash: "8cfba8a724e85403b573caf7bbac9d83"
+ }
+ Frame {
+ msec: 1184
+ hash: "5910765354645b724e14681cbdea227e"
+ }
+ Frame {
+ msec: 1200
+ hash: "4358af7f2ccfc0919614351bfd5a7405"
+ }
+ Frame {
+ msec: 1216
+ hash: "032e064336b458a6de03fdc98684cc34"
+ }
+ Frame {
+ msec: 1232
+ hash: "c81d87bf83ee7e834a4b15dd103f7082"
+ }
+ Frame {
+ msec: 1248
+ hash: "9d4416b55ed3b9e45a2314e9be5a5f2d"
+ }
+ Frame {
+ msec: 1264
+ hash: "5b96da1a52a0413f9e8edbc9291a2502"
+ }
+ Frame {
+ msec: 1280
+ hash: "aaa4008281ebc60b15616c818816e195"
+ }
+ Frame {
+ msec: 1296
+ hash: "81ebf882aeb89648300dfc2e8e2cf11b"
+ }
+ Frame {
+ msec: 1312
+ hash: "4e686e6cee12902f92e0ece915386fb3"
+ }
+ Frame {
+ msec: 1328
+ hash: "6ff8d9bd6ec4dce414cdc7330646156e"
+ }
+ Frame {
+ msec: 1344
+ hash: "dac6334e8b221527ef74b4f93eeef7c3"
+ }
+ Frame {
+ msec: 1360
+ hash: "e58dbf419d1831e001e802600803aaa5"
+ }
+ Frame {
+ msec: 1376
+ hash: "e8685f9b12c9ccb9d0e471946f1f6f9c"
+ }
+ Frame {
+ msec: 1392
+ hash: "0936715ff8d38c2c813ebef0683a3246"
+ }
+ Frame {
+ msec: 1408
+ hash: "37ad0a5532af8b083a7d4c4b044075ca"
+ }
+ Frame {
+ msec: 1424
+ hash: "52ae25414d353d994cba36918644949a"
+ }
+ Frame {
+ msec: 1440
+ hash: "07719485f9a7d0012eb0f3f211f0f21b"
+ }
+ Frame {
+ msec: 1456
+ hash: "2d1a4f2c8d4a8d6316a31a81a2d20c61"
+ }
+ Frame {
+ msec: 1472
+ hash: "3b279fb9e7b3efe05becc1651ba59493"
+ }
+ Frame {
+ msec: 1488
+ hash: "4b9c126dcdf499f9de4e09d4f6ab86bf"
+ }
+ Frame {
+ msec: 1504
+ hash: "6a1b8d8ea46949cb65e8f4155ab94819"
+ }
+ Frame {
+ msec: 1520
+ hash: "6dbd2106b91ffbbb8a845e6cddbd47d7"
+ }
+ Frame {
+ msec: 1536
+ hash: "8244eda92302f2b5cff01f05d438bf20"
+ }
+ Frame {
+ msec: 1552
+ hash: "f939bd80ae865e365e554a532ade38f5"
+ }
+ Frame {
+ msec: 1568
+ hash: "92d135616eee6737333b3d86d0aa5956"
+ }
+ Frame {
+ msec: 1584
+ hash: "ca75854d6e5a77c8e609d65971b5671a"
+ }
+ Frame {
+ msec: 1600
+ hash: "b0a113800cd05768b57bac6b9a338b1d"
+ }
+ Frame {
+ msec: 1616
+ hash: "7af1a2aa6a201e36c3a969be4330af04"
+ }
+ Frame {
+ msec: 1632
+ hash: "e54e8a2cfb0e6678b2a7cc64b8ae08bc"
+ }
+ Frame {
+ msec: 1648
+ hash: "5d212c7efd9cf7d3eb5219b0bbe766d7"
+ }
+ Frame {
+ msec: 1664
+ hash: "f4f2c95380c0f76c9e89820cdbeb5b31"
+ }
+ Frame {
+ msec: 1680
+ hash: "b8eefbf5ade1a6b9eef9608f66a46474"
+ }
+ Frame {
+ msec: 1696
+ hash: "d699ace9babbb152aad2fa852114c099"
+ }
+ Frame {
+ msec: 1712
+ hash: "ceb3dea0d2b93cc5882a2b38ab3d1b95"
+ }
+ Frame {
+ msec: 1728
+ hash: "08175810bfb80e1c5816b0d0aebbac4a"
+ }
+ Frame {
+ msec: 1744
+ hash: "86abce93f50e7e7ebbd90690cfb20dd2"
+ }
+ Frame {
+ msec: 1760
+ hash: "2918979f2682bd32beb5eaf7ecb3e463"
+ }
+ Frame {
+ msec: 1776
+ hash: "b165ab96b0d51d41578bf99cbf7f6d02"
+ }
+ Frame {
+ msec: 1792
+ hash: "d56cfdb2c65372cb36aeb13fd9c73deb"
+ }
+ Frame {
+ msec: 1808
+ hash: "c53f0e4dc8204e5892ed4f367a6bade3"
+ }
+ Frame {
+ msec: 1824
+ hash: "b3ae62e13149160f3695ed5c116411aa"
+ }
+ Frame {
+ msec: 1840
+ hash: "057e4a0428ea2ff9893becd40e6d2977"
+ }
+ Frame {
+ msec: 1856
+ hash: "10c050131093cc0d3f4b80c44eb1218b"
+ }
+ Frame {
+ msec: 1872
+ hash: "17ce5a6dace37f4eb316f37ea26a8a2c"
+ }
+ Frame {
+ msec: 1888
+ hash: "6e00c7e74bfaed5cf06aba54c8b73e57"
+ }
+ Frame {
+ msec: 1904
+ hash: "5a03b1b698ca28d2afd9c67aef3bc2e9"
+ }
+ Frame {
+ msec: 1920
+ image: "resolution.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "0fab102a33521e8893afdb6a11a3c5c9"
+ }
+ Frame {
+ msec: 1952
+ hash: "232e8f1b060ef55e37a372bec4435d11"
+ }
+ Frame {
+ msec: 1968
+ hash: "2107724eac0d1b8735060876f80d303a"
+ }
+ Frame {
+ msec: 1984
+ hash: "cf5d12d2707975ad364750d5ba787944"
+ }
+ Frame {
+ msec: 2000
+ hash: "2457c88828c2cb39feb1d34556077139"
+ }
+ Frame {
+ msec: 2016
+ hash: "5f08d6dab8199b3f0f57d32cf2da4d67"
+ }
+ Frame {
+ msec: 2032
+ hash: "2457c88828c2cb39feb1d34556077139"
+ }
+ Frame {
+ msec: 2048
+ hash: "cf5d12d2707975ad364750d5ba787944"
+ }
+ Frame {
+ msec: 2064
+ hash: "2107724eac0d1b8735060876f80d303a"
+ }
+ Frame {
+ msec: 2080
+ hash: "232e8f1b060ef55e37a372bec4435d11"
+ }
+ Frame {
+ msec: 2096
+ hash: "0a93c515cd328978ebd8103539a2fd63"
+ }
+ Frame {
+ msec: 2112
+ hash: "63d6c7beac12e3bd83f9ef58c233c7d2"
+ }
+ Frame {
+ msec: 2128
+ hash: "5a03b1b698ca28d2afd9c67aef3bc2e9"
+ }
+ Frame {
+ msec: 2144
+ hash: "6e00c7e74bfaed5cf06aba54c8b73e57"
+ }
+ Frame {
+ msec: 2160
+ hash: "17ce5a6dace37f4eb316f37ea26a8a2c"
+ }
+ Frame {
+ msec: 2176
+ hash: "10c050131093cc0d3f4b80c44eb1218b"
+ }
+ Frame {
+ msec: 2192
+ hash: "057e4a0428ea2ff9893becd40e6d2977"
+ }
+ Frame {
+ msec: 2208
+ hash: "b3ae62e13149160f3695ed5c116411aa"
+ }
+ Frame {
+ msec: 2224
+ hash: "c53f0e4dc8204e5892ed4f367a6bade3"
+ }
+ Frame {
+ msec: 2240
+ hash: "d56cfdb2c65372cb36aeb13fd9c73deb"
+ }
+ Frame {
+ msec: 2256
+ hash: "b165ab96b0d51d41578bf99cbf7f6d02"
+ }
+ Frame {
+ msec: 2272
+ hash: "2918979f2682bd32beb5eaf7ecb3e463"
+ }
+ Frame {
+ msec: 2288
+ hash: "86abce93f50e7e7ebbd90690cfb20dd2"
+ }
+ Frame {
+ msec: 2304
+ hash: "08175810bfb80e1c5816b0d0aebbac4a"
+ }
+ Frame {
+ msec: 2320
+ hash: "ceb3dea0d2b93cc5882a2b38ab3d1b95"
+ }
+ Frame {
+ msec: 2336
+ hash: "d699ace9babbb152aad2fa852114c099"
+ }
+ Frame {
+ msec: 2352
+ hash: "b8eefbf5ade1a6b9eef9608f66a46474"
+ }
+ Frame {
+ msec: 2368
+ hash: "f4f2c95380c0f76c9e89820cdbeb5b31"
+ }
+ Frame {
+ msec: 2384
+ hash: "5d212c7efd9cf7d3eb5219b0bbe766d7"
+ }
+ Frame {
+ msec: 2400
+ hash: "e54e8a2cfb0e6678b2a7cc64b8ae08bc"
+ }
+ Frame {
+ msec: 2416
+ hash: "d9408487f747ffb8eff5e1da92207285"
+ }
+ Frame {
+ msec: 2432
+ hash: "e6b3fa1829535ac90d1548f45aadb9be"
+ }
+ Frame {
+ msec: 2448
+ hash: "ca75854d6e5a77c8e609d65971b5671a"
+ }
+ Frame {
+ msec: 2464
+ hash: "92d135616eee6737333b3d86d0aa5956"
+ }
+ Frame {
+ msec: 2480
+ hash: "f939bd80ae865e365e554a532ade38f5"
+ }
+ Frame {
+ msec: 2496
+ hash: "8244eda92302f2b5cff01f05d438bf20"
+ }
+ Frame {
+ msec: 2512
+ hash: "6dbd2106b91ffbbb8a845e6cddbd47d7"
+ }
+ Frame {
+ msec: 2528
+ hash: "6a1b8d8ea46949cb65e8f4155ab94819"
+ }
+ Frame {
+ msec: 2544
+ hash: "4b9c126dcdf499f9de4e09d4f6ab86bf"
+ }
+ Frame {
+ msec: 2560
+ hash: "3b279fb9e7b3efe05becc1651ba59493"
+ }
+ Frame {
+ msec: 2576
+ hash: "bb40b884b56defb61ad86757fd51b9e6"
+ }
+ Frame {
+ msec: 2592
+ hash: "07719485f9a7d0012eb0f3f211f0f21b"
+ }
+ Frame {
+ msec: 2608
+ hash: "52ae25414d353d994cba36918644949a"
+ }
+ Frame {
+ msec: 2624
+ hash: "37ad0a5532af8b083a7d4c4b044075ca"
+ }
+ Frame {
+ msec: 2640
+ hash: "0936715ff8d38c2c813ebef0683a3246"
+ }
+ Frame {
+ msec: 2656
+ hash: "e8685f9b12c9ccb9d0e471946f1f6f9c"
+ }
+ Frame {
+ msec: 2672
+ hash: "e58dbf419d1831e001e802600803aaa5"
+ }
+ Frame {
+ msec: 2688
+ hash: "dac6334e8b221527ef74b4f93eeef7c3"
+ }
+ Frame {
+ msec: 2704
+ hash: "6ff8d9bd6ec4dce414cdc7330646156e"
+ }
+ Frame {
+ msec: 2720
+ hash: "4e686e6cee12902f92e0ece915386fb3"
+ }
+ Frame {
+ msec: 2736
+ hash: "81ebf882aeb89648300dfc2e8e2cf11b"
+ }
+ Frame {
+ msec: 2752
+ hash: "aaa4008281ebc60b15616c818816e195"
+ }
+ Frame {
+ msec: 2768
+ hash: "5b96da1a52a0413f9e8edbc9291a2502"
+ }
+ Frame {
+ msec: 2784
+ hash: "9d4416b55ed3b9e45a2314e9be5a5f2d"
+ }
+ Frame {
+ msec: 2800
+ hash: "c81d87bf83ee7e834a4b15dd103f7082"
+ }
+ Frame {
+ msec: 2816
+ hash: "9fdf30d57c49a6644377ba40140b1969"
+ }
+ Frame {
+ msec: 2832
+ hash: "4358af7f2ccfc0919614351bfd5a7405"
+ }
+ Frame {
+ msec: 2848
+ hash: "5910765354645b724e14681cbdea227e"
+ }
+ Frame {
+ msec: 2864
+ hash: "8cfba8a724e85403b573caf7bbac9d83"
+ }
+ Frame {
+ msec: 2880
+ image: "resolution.2.png"
+ }
+ Frame {
+ msec: 2896
+ hash: "3d45b061939783b6359fa4cdb908ecc0"
+ }
+ Frame {
+ msec: 2912
+ hash: "495b25d87cb6d1d4bdea4d5ec62c698e"
+ }
+ Frame {
+ msec: 2928
+ hash: "2b54d49d30ccbf11ccb5ba8d62ba7d83"
+ }
+ Frame {
+ msec: 2944
+ hash: "2f32245c3388b86194e8183a290e99b8"
+ }
+ Frame {
+ msec: 2960
+ hash: "b50a6b14f15882e2c1ae6e3babeecdf8"
+ }
+ Frame {
+ msec: 2976
+ hash: "ead6352a4ca47da59422e8d6a5844aa4"
+ }
+ Frame {
+ msec: 2992
+ hash: "96c89325862a982235b4b75922ec4669"
+ }
+ Frame {
+ msec: 3008
+ hash: "0f3a56dbe26d453847ed4847c0e81d1a"
+ }
+ Frame {
+ msec: 3024
+ hash: "a8df78ab2e800349ec887ea6b1f5dcb8"
+ }
+ Frame {
+ msec: 3040
+ hash: "94a2cc520340573557e6a310f2ea125e"
+ }
+ Frame {
+ msec: 3056
+ hash: "8b2f13580c6de9ec231809330d2d0362"
+ }
+ Frame {
+ msec: 3072
+ hash: "5f76ef4f6b8e703fd0822859cd9a1353"
+ }
+ Frame {
+ msec: 3088
+ hash: "460f13d8e05b529c0e4fba39b1449ff1"
+ }
+ Frame {
+ msec: 3104
+ hash: "d9798e4ebaf72c35b19a56b336d2ea93"
+ }
+ Frame {
+ msec: 3120
+ hash: "e86be73d83699584dca986dfdb030b36"
+ }
+ Frame {
+ msec: 3136
+ hash: "f81152b8a464bfa8343f52efcb0c8b8c"
+ }
+ Frame {
+ msec: 3152
+ hash: "fcd803f5640d054190c2ddc9a6406bb9"
+ }
+ Frame {
+ msec: 3168
+ hash: "ca85f90e450ccda6b76e6a29a3187a63"
+ }
+ Frame {
+ msec: 3184
+ hash: "047846d243e7613193a8ddd526c4268e"
+ }
+ Frame {
+ msec: 3200
+ hash: "c0ca66fefb19294852b9be0c4ba36481"
+ }
+ Frame {
+ msec: 3216
+ hash: "d4a075656790c4f2c50addcd2cc660b5"
+ }
+ Frame {
+ msec: 3232
+ hash: "0f80edaf3eecf7a8c015d3fcecc0a494"
+ }
+ Frame {
+ msec: 3248
+ hash: "6e857b106486ea0aaa5321d4a7a07eae"
+ }
+ Frame {
+ msec: 3264
+ hash: "33a4f07cf7f5d16f006541c61ae2e4ee"
+ }
+ Frame {
+ msec: 3280
+ hash: "cb6cf1e6e89da3fcbad323f744aef18d"
+ }
+ Frame {
+ msec: 3296
+ hash: "a6eaa480b3f93d33ae23bb36b7691b92"
+ }
+ Frame {
+ msec: 3312
+ hash: "59d24ebfedd2a87bdbd755d06c4361d2"
+ }
+ Frame {
+ msec: 3328
+ hash: "1030f795d310f742ba491a2a90ff52d8"
+ }
+ Frame {
+ msec: 3344
+ hash: "261a341cab38986fb2f53b8e430f04a3"
+ }
+ Frame {
+ msec: 3360
+ hash: "4d53256fbb012e738ba3868e2482250d"
+ }
+ Frame {
+ msec: 3376
+ hash: "ae252d835a05e01c2a12ae820335049a"
+ }
+ Frame {
+ msec: 3392
+ hash: "20d758c1537ed1a9aff657414b50926c"
+ }
+ Frame {
+ msec: 3408
+ hash: "56c4113cc341c254ccab66f3bc313154"
+ }
+ Frame {
+ msec: 3424
+ hash: "240df67aa72a24546eb6e043e0d3d205"
+ }
+ Frame {
+ msec: 3440
+ hash: "82b94393071d6c32dd8028e1ee69e7fb"
+ }
+ Frame {
+ msec: 3456
+ hash: "98e46dff678f293fd6a4e9313ab3aec7"
+ }
+ Frame {
+ msec: 3472
+ hash: "0971ac1e05ea2ba387c78d4d103f5ea1"
+ }
+ Frame {
+ msec: 3488
+ hash: "2ea69aeb32fee61b61aa9c4efb2834bf"
+ }
+ Frame {
+ msec: 3504
+ hash: "41b40e36f77d04e62f72ad34aa50709a"
+ }
+ Frame {
+ msec: 3520
+ hash: "93b4876c3e185ff4875a7447b0bf4f0f"
+ }
+ Frame {
+ msec: 3536
+ hash: "9a3f9dc04a900020f0e488309d7b4757"
+ }
+ Frame {
+ msec: 3552
+ hash: "92fa2d9ef05140eb9d0fcf78b55f202e"
+ }
+ Frame {
+ msec: 3568
+ hash: "2ed9d0e09b61dee8b2703e580007d7a5"
+ }
+ Frame {
+ msec: 3584
+ hash: "cbd63ec868578e295a83170f42b23678"
+ }
+ Frame {
+ msec: 3600
+ hash: "b9f3f08168fb55ba01e56e670db565de"
+ }
+ Frame {
+ msec: 3616
+ hash: "a579d6324fb4bf9ac5ceaba2aa708764"
+ }
+ Frame {
+ msec: 3632
+ hash: "4e0fd7f45e53a8d44c416eb9235ec877"
+ }
+ Frame {
+ msec: 3648
+ hash: "f87195f2393914a0bbed9a454de01ff5"
+ }
+ Frame {
+ msec: 3664
+ hash: "9bc9801e83267689cd2750226f2b08ce"
+ }
+ Frame {
+ msec: 3680
+ hash: "5ddbc3bc10292bec41531e83c0921c59"
+ }
+ Frame {
+ msec: 3696
+ hash: "4f3b79b341b63499a20f1e1e2cd979f9"
+ }
+ Frame {
+ msec: 3712
+ hash: "e8d98ec2d13ef4324feba11be95d0735"
+ }
+ Frame {
+ msec: 3728
+ hash: "5e3c58e2f3a57f4ea48f4315d37ed813"
+ }
+ Frame {
+ msec: 3744
+ hash: "3f200fca4815d555f22912d9fcdc20ee"
+ }
+ Frame {
+ msec: 3760
+ hash: "0901c99f959d6c10a0b6ea46a282d8fd"
+ }
+ Frame {
+ msec: 3776
+ hash: "a186b8e984c999e8609472a7a5fa0610"
+ }
+ Frame {
+ msec: 3792
+ hash: "412a630348aa44d56f36f04982035e36"
+ }
+ Frame {
+ msec: 3808
+ hash: "011c0bcca7717b08bc53738718203f7e"
+ }
+ Frame {
+ msec: 3824
+ hash: "e531d33ef14b58ad843a6be6d7cb0961"
+ }
+ Frame {
+ msec: 3840
+ image: "resolution.3.png"
+ }
+ Frame {
+ msec: 3856
+ hash: "8df8dd33eada434231332b81e03430ce"
+ }
+ Frame {
+ msec: 3872
+ hash: "2aaa3749f93734dd203e1fea91a9f24a"
+ }
+ Frame {
+ msec: 3888
+ hash: "dc78b09e27bbc0a2cfec83436eef4446"
+ }
+ Frame {
+ msec: 3904
+ hash: "9053a92e343ebb79bd2831f5ab94a1b5"
+ }
+ Frame {
+ msec: 3920
+ hash: "649ad1a3fb57fb088e4e5cfd749bf2e5"
+ }
+ Frame {
+ msec: 3936
+ hash: "3579849956c1101000ef09949aa4c0f9"
+ }
+ Frame {
+ msec: 3952
+ hash: "7af041898748bb5950643b057ca59eea"
+ }
+ Frame {
+ msec: 3968
+ hash: "30a191ae899121ae22d10acee6593415"
+ }
+ Frame {
+ msec: 3984
+ hash: "369f761053d5910e00672aa866f698ba"
+ }
+ Frame {
+ msec: 4000
+ hash: "1f189a436cf74ae83a03c3bb63c24ec2"
+ }
+ Frame {
+ msec: 4016
+ hash: "ac1d9c1cc13813b5e94c692a209a4e36"
+ }
+ Frame {
+ msec: 4032
+ hash: "f0e0b5c041bcf38d8d9144d466ad74a9"
+ }
+ Frame {
+ msec: 4048
+ hash: "38a35c94ebcf33f6720fea33821a54e1"
+ }
+ Frame {
+ msec: 4064
+ hash: "061d139f43a3dd63daf887b82721f42f"
+ }
+ Frame {
+ msec: 4080
+ hash: "623747b5fe99e5ffaa62f4daa3f840ef"
+ }
+ Frame {
+ msec: 4096
+ hash: "4dd5081a387ffda296811b64b9235d7d"
+ }
+ Frame {
+ msec: 4112
+ hash: "1598cf2fe996f99ab4c15f84d89cd7bd"
+ }
+ Frame {
+ msec: 4128
+ hash: "30cac85bf1a622d438a64b6ccb59a8ca"
+ }
+ Frame {
+ msec: 4144
+ hash: "114e54ae3e1493750a022f1c019e7f77"
+ }
+ Frame {
+ msec: 4160
+ hash: "a585efc3aae3a426e6af5f4a8cc23b10"
+ }
+ Frame {
+ msec: 4176
+ hash: "c0f315549baad93dd885d58b185e7ed7"
+ }
+ Frame {
+ msec: 4192
+ hash: "3a00f5f034bef58ca341bf9e1056f46f"
+ }
+ Frame {
+ msec: 4208
+ hash: "b3022d07dee989499a35aea21e07e4c1"
+ }
+ Frame {
+ msec: 4224
+ hash: "e722464809e94fb7d8c752506f0d3ac2"
+ }
+ Frame {
+ msec: 4240
+ hash: "82ea3d06367ce9dc582dbdbc186cc70a"
+ }
+ Frame {
+ msec: 4256
+ hash: "359040facbe531c7f6b805b8bfc5b17a"
+ }
+ Frame {
+ msec: 4272
+ hash: "264c7b65bae7e3945d87c17edfda6889"
+ }
+ Frame {
+ msec: 4288
+ hash: "d941ec8e363942af02f36d4672521801"
+ }
+ Frame {
+ msec: 4304
+ hash: "e46e145b4d07d1697c1d9efce80c80de"
+ }
+ Frame {
+ msec: 4320
+ hash: "d8bed5c42bc5725d811db4dacdab1581"
+ }
+ Frame {
+ msec: 4336
+ hash: "aa221160b4a11b30cb73eaa8ccaa9dfd"
+ }
+ Frame {
+ msec: 4352
+ hash: "f411483477906d83f872b306cd021406"
+ }
+ Frame {
+ msec: 4368
+ hash: "d9c52e4f99416fa1043a9c34a1c29f5a"
+ }
+ Frame {
+ msec: 4384
+ hash: "ec2890446f34b8a5d47ae97ba2853d0f"
+ }
+ Frame {
+ msec: 4400
+ hash: "6a3e6ef7d832fa7ec813b38171cb3602"
+ }
+ Frame {
+ msec: 4416
+ hash: "6dfd75b6cb780f7d80466f3450d0b255"
+ }
+ Frame {
+ msec: 4432
+ hash: "170774843dc6f28f51f07c445e046bd8"
+ }
+ Frame {
+ msec: 4448
+ hash: "eab348bef656739d9723d3bd659c43ff"
+ }
+ Frame {
+ msec: 4464
+ hash: "f06e546bb710002cdf1cefd51ffa47c4"
+ }
+ Frame {
+ msec: 4480
+ hash: "52f7ff1348d9aa7cdf43cd81f0a71625"
+ }
+ Frame {
+ msec: 4496
+ hash: "55a5b1befa3b7a4674a62d492b5527ea"
+ }
+ Frame {
+ msec: 4512
+ hash: "699c093fddc6b9293a011d8d6eccd36d"
+ }
+ Frame {
+ msec: 4528
+ hash: "b988e1ad7dc7d26ffeea8f71a69a9abf"
+ }
+ Frame {
+ msec: 4544
+ hash: "8dea2b47492f83f961a47536a10aad0c"
+ }
+ Frame {
+ msec: 4560
+ hash: "925ea8105779ffd801a3c62129d64bed"
+ }
+ Frame {
+ msec: 4576
+ hash: "aa5d957c4f452b1f1c70ea672ce4a0b9"
+ }
+ Frame {
+ msec: 4592
+ hash: "85d3ea97a1fb152ae8ad65a17693a16d"
+ }
+ Frame {
+ msec: 4608
+ hash: "069b2bc8b86f822c5e7ceca3664e78a6"
+ }
+ Frame {
+ msec: 4624
+ hash: "209071b7f72d8c25b9ce27c05397fe56"
+ }
+ Frame {
+ msec: 4640
+ hash: "068dea708612620d34bd57c6affb44b1"
+ }
+ Frame {
+ msec: 4656
+ hash: "36b53a0845220645059fed803a6ffcbc"
+ }
+ Frame {
+ msec: 4672
+ hash: "2c84e15006a39a554eb2047bae9d4f6f"
+ }
+ Frame {
+ msec: 4688
+ hash: "1bdab31534f4b5a7e9d27ede3e9acb57"
+ }
+ Frame {
+ msec: 4704
+ hash: "688689eeb584b0c74f0322af35857dd5"
+ }
+ Frame {
+ msec: 4720
+ hash: "024939fea5b6c6f9d3e26a0abf42ae3c"
+ }
+ Frame {
+ msec: 4736
+ hash: "2efb2f47c6f0be3743f0f4dc7a66b08e"
+ }
+ Frame {
+ msec: 4752
+ hash: "4631f3756af880693d3654c16cbe47bb"
+ }
+ Frame {
+ msec: 4768
+ hash: "2fd77649c1e1ade97534ef530ad05612"
+ }
+ Frame {
+ msec: 4784
+ hash: "5d13517bac111c8af49c444d41a42ea1"
+ }
+ Frame {
+ msec: 4800
+ image: "resolution.4.png"
+ }
+ Frame {
+ msec: 4816
+ hash: "8bd8efe405a42730304dcc120a6e718c"
+ }
+ Frame {
+ msec: 4832
+ hash: "a83c543977e3f1dd4c020375eb3273fd"
+ }
+ Frame {
+ msec: 4848
+ hash: "c52f38469fec77afc7f0a44b992e3d0d"
+ }
+ Frame {
+ msec: 4864
+ hash: "af645449d6ec3f42449ffc59193aaaa4"
+ }
+ Frame {
+ msec: 4880
+ hash: "2eb982cf754c77c109158076957775ae"
+ }
+ Frame {
+ msec: 4896
+ hash: "9bf2fd4a4e45f302b34b7f038937d3d7"
+ }
+ Frame {
+ msec: 4912
+ hash: "5520e309d68c8eedf76a9392714a6150"
+ }
+ Frame {
+ msec: 4928
+ hash: "9dcd043a25e33b788729c0a0531301e7"
+ }
+ Frame {
+ msec: 4944
+ hash: "1475b9bcfe08c66135673f4284c9bbcd"
+ }
+ Frame {
+ msec: 4960
+ hash: "9af1f355bcf4d5f05b42040ebba75e09"
+ }
+ Frame {
+ msec: 4976
+ hash: "8b6e04980ea60ca2ff06053d35c06881"
+ }
+ Frame {
+ msec: 4992
+ hash: "def466e377a44afc4b2a9a9ebb258f86"
+ }
+ Frame {
+ msec: 5008
+ hash: "18f6d6f5a3fdaee0037580df0f4f9ef0"
+ }
+ Frame {
+ msec: 5024
+ hash: "ae2579498558f6f93489999c7c82cbcd"
+ }
+ Frame {
+ msec: 5040
+ hash: "623d8e756c2c131150554272df231bf9"
+ }
+ Frame {
+ msec: 5056
+ hash: "c13146576229848b8a1e1b382fbf749d"
+ }
+ Frame {
+ msec: 5072
+ hash: "f963a399aeea1d34ec3bd30a5b991035"
+ }
+ Frame {
+ msec: 5088
+ hash: "45a4db021ba0a53ad783c14a3b66aa38"
+ }
+ Frame {
+ msec: 5104
+ hash: "2031618470e3bb3a3435fe0e270a15d4"
+ }
+ Frame {
+ msec: 5120
+ hash: "f7cc01c301f29110db8364fecc8751f1"
+ }
+ Frame {
+ msec: 5136
+ hash: "2d366fa500257ec0a12863f3637d0c47"
+ }
+ Frame {
+ msec: 5152
+ hash: "4ba700e7f9ffba4889ca26d903a63029"
+ }
+ Frame {
+ msec: 5168
+ hash: "329bec5e3d6a131b4bd9a056659bdb3e"
+ }
+ Frame {
+ msec: 5184
+ hash: "48f7356707cdbcb401c135207ee38821"
+ }
+ Frame {
+ msec: 5200
+ hash: "5314e448affe60d193d07a784035ecce"
+ }
+ Frame {
+ msec: 5216
+ hash: "c87e98becdf99c214ad4987985b4af07"
+ }
+ Frame {
+ msec: 5232
+ hash: "ea81d2a967b619980d7e42937ec74668"
+ }
+ Frame {
+ msec: 5248
+ hash: "845319d4e0f6ee97697e59c606220e7a"
+ }
+}
diff --git a/tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.0.png b/tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.0.png
new file mode 100644
index 0000000..4b9abb4
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.1.png b/tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.1.png
new file mode 100644
index 0000000..5ce9787
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.qml b/tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.qml
new file mode 100644
index 0000000..aaa7583
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.qml
@@ -0,0 +1,655 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "4e401b5ebff6e442fa108e94a5dba668"
+ }
+ Frame {
+ msec: 32
+ hash: "c2f8551d0442d0736b71c54fc965562b"
+ }
+ Frame {
+ msec: 48
+ hash: "4fc1ef611b24ec5737310859b12c83d3"
+ }
+ Frame {
+ msec: 64
+ hash: "7df07aea83bc5c3213e7871854661820"
+ }
+ Frame {
+ msec: 80
+ hash: "0ae4ee18cc675749f008b897fe35cc40"
+ }
+ Frame {
+ msec: 96
+ hash: "0ae4ee18cc675749f008b897fe35cc40"
+ }
+ Frame {
+ msec: 112
+ hash: "f5c917c7ca26bb916dd4df84eafc8e94"
+ }
+ Frame {
+ msec: 128
+ hash: "0696257de0441666bd264f8db6383d15"
+ }
+ Frame {
+ msec: 144
+ hash: "0b43fdee23346c30c60b822a20131cc3"
+ }
+ Frame {
+ msec: 160
+ hash: "98dbd004cf4809dbc90bfa9272378644"
+ }
+ Frame {
+ msec: 176
+ hash: "32d0e9005ebb9dfd410d348e336bcd93"
+ }
+ Frame {
+ msec: 192
+ hash: "8a64b18006ad0bd2c373a2a9395ce52e"
+ }
+ Frame {
+ msec: 208
+ hash: "7dc26fd658f626b8fe18545cf93dc4ec"
+ }
+ Frame {
+ msec: 224
+ hash: "6712be93cf1ed2b7b202367418b6d2d7"
+ }
+ Frame {
+ msec: 240
+ hash: "524840a3453af4e97ac82b559308cce3"
+ }
+ Frame {
+ msec: 256
+ hash: "11436091b24c02af94dfa75a5fd1a001"
+ }
+ Frame {
+ msec: 272
+ hash: "d3689b53474b4b26630d70ba01c057b4"
+ }
+ Frame {
+ msec: 288
+ hash: "16e2b66f28ed80d80d9b5264d89624d5"
+ }
+ Frame {
+ msec: 304
+ hash: "87636076959de7e5a0a8bd8b31354ed4"
+ }
+ Frame {
+ msec: 320
+ hash: "a6916da6bfac27aa87d75da2bbb73f31"
+ }
+ Frame {
+ msec: 336
+ hash: "58cfba3aae4bf54a5b445e0e34571d2d"
+ }
+ Frame {
+ msec: 352
+ hash: "1475ae722afd169cc0c8e1fde39eb6b7"
+ }
+ Frame {
+ msec: 368
+ hash: "14d08c2ca430631af8ede1013f4f4da0"
+ }
+ Frame {
+ msec: 384
+ hash: "ace9db9112d147569dc0cf1a1b680d6c"
+ }
+ Frame {
+ msec: 400
+ hash: "08bc6815601417f3731eaae398d0861d"
+ }
+ Frame {
+ msec: 416
+ hash: "809870dfd9b05ce07170edd945348ddf"
+ }
+ Frame {
+ msec: 432
+ hash: "5784deb0f3270cf7a0d0964cd9d31458"
+ }
+ Frame {
+ msec: 448
+ hash: "2f06ee407e5175d4b954e31c39c9522c"
+ }
+ Frame {
+ msec: 464
+ hash: "48a7dbed293fbbd5ea202190837a411f"
+ }
+ Frame {
+ msec: 480
+ hash: "abf3d90803cfa12d35d2752be7ea02d8"
+ }
+ Frame {
+ msec: 496
+ hash: "a60edcf8d792f93a839e6ddbafbf993f"
+ }
+ Frame {
+ msec: 512
+ hash: "7e8dfe86ea0849022355b12578d4cb1a"
+ }
+ Frame {
+ msec: 528
+ hash: "3c84122b0933ee870f178d39469e51e2"
+ }
+ Frame {
+ msec: 544
+ hash: "25f463e91febf5b6d8819fd5010bc1c2"
+ }
+ Frame {
+ msec: 560
+ hash: "d423a9bc912237d0f20b924849ba0cb1"
+ }
+ Frame {
+ msec: 576
+ hash: "5bd3cc309a5fce6183654975543250b2"
+ }
+ Frame {
+ msec: 592
+ hash: "4e401b5ebff6e442fa108e94a5dba668"
+ }
+ Frame {
+ msec: 608
+ hash: "9a4bf1400da038f2088dd4c49403d852"
+ }
+ Frame {
+ msec: 624
+ hash: "a37024356613bd5d678e0b2f7b8f5959"
+ }
+ Frame {
+ msec: 640
+ hash: "4f37d72c10e51f68a2359086094da249"
+ }
+ Frame {
+ msec: 656
+ hash: "6093bcb7673f8e58fe5a7b0143638822"
+ }
+ Frame {
+ msec: 672
+ hash: "c272aeea2b9c450fbd732305ccc01b93"
+ }
+ Frame {
+ msec: 688
+ hash: "6a4e2ee45b26037421e2a5f2d6ee517e"
+ }
+ Frame {
+ msec: 704
+ hash: "d912afcbce6c9d879a07ffc3c51b36d1"
+ }
+ Frame {
+ msec: 720
+ hash: "2578335ac6f21c8aec2c87515562c321"
+ }
+ Frame {
+ msec: 736
+ hash: "5b77af55f0a723ba762d283f41e91c98"
+ }
+ Frame {
+ msec: 752
+ hash: "b420fc71b22fa608a9c0cdbbbc61c447"
+ }
+ Frame {
+ msec: 768
+ hash: "3f7a9cecf2a590e8728137fabfd3f5f3"
+ }
+ Frame {
+ msec: 784
+ hash: "c51f12a2f438f137785c70e3af4922fd"
+ }
+ Frame {
+ msec: 800
+ hash: "5d97175fc4d986e5b21758d4ac785025"
+ }
+ Frame {
+ msec: 816
+ hash: "94f922f3460ad76cd05cb5b321977a94"
+ }
+ Frame {
+ msec: 832
+ hash: "5747adbc4f0b22ed359793d72d3e7d1f"
+ }
+ Frame {
+ msec: 848
+ hash: "255d1d45d3343972f156dfab7d13ce41"
+ }
+ Frame {
+ msec: 864
+ hash: "e5b54132ffb83acad30622e969405bc0"
+ }
+ Frame {
+ msec: 880
+ hash: "2c05cf00e3417883e789f58c2728dc97"
+ }
+ Frame {
+ msec: 896
+ hash: "9d66290b1aae1de3025d24d3efc4ca1c"
+ }
+ Frame {
+ msec: 912
+ hash: "5e9b0783b1b4221145a4febbae56b30f"
+ }
+ Frame {
+ msec: 928
+ hash: "21eea497c26600b03d868661232b3ebe"
+ }
+ Frame {
+ msec: 944
+ hash: "2383c415170ac6444f1c193ed698f682"
+ }
+ Frame {
+ msec: 960
+ image: "zoomTextOnly.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "4ed0f85dec4eb0bb740ac3780b6872c0"
+ }
+ Frame {
+ msec: 992
+ hash: "0a18bccca4efeadfced8e5cb1715a1f3"
+ }
+ Frame {
+ msec: 1008
+ hash: "823e65df9075eb0e9a3aad6b15ec3342"
+ }
+ Frame {
+ msec: 1024
+ hash: "823e65df9075eb0e9a3aad6b15ec3342"
+ }
+ Frame {
+ msec: 1040
+ hash: "0a18bccca4efeadfced8e5cb1715a1f3"
+ }
+ Frame {
+ msec: 1056
+ hash: "4ed0f85dec4eb0bb740ac3780b6872c0"
+ }
+ Frame {
+ msec: 1072
+ hash: "fae77663566351fa3bb506b459496a9d"
+ }
+ Frame {
+ msec: 1088
+ hash: "2383c415170ac6444f1c193ed698f682"
+ }
+ Frame {
+ msec: 1104
+ hash: "2e05365256bebbdf3229f99b94263b6c"
+ }
+ Frame {
+ msec: 1120
+ hash: "5e9b0783b1b4221145a4febbae56b30f"
+ }
+ Frame {
+ msec: 1136
+ hash: "9d66290b1aae1de3025d24d3efc4ca1c"
+ }
+ Frame {
+ msec: 1152
+ hash: "2c05cf00e3417883e789f58c2728dc97"
+ }
+ Frame {
+ msec: 1168
+ hash: "e5b54132ffb83acad30622e969405bc0"
+ }
+ Frame {
+ msec: 1184
+ hash: "255d1d45d3343972f156dfab7d13ce41"
+ }
+ Frame {
+ msec: 1200
+ hash: "5747adbc4f0b22ed359793d72d3e7d1f"
+ }
+ Frame {
+ msec: 1216
+ hash: "94f922f3460ad76cd05cb5b321977a94"
+ }
+ Frame {
+ msec: 1232
+ hash: "5d97175fc4d986e5b21758d4ac785025"
+ }
+ Frame {
+ msec: 1248
+ hash: "c51f12a2f438f137785c70e3af4922fd"
+ }
+ Frame {
+ msec: 1264
+ hash: "3f7a9cecf2a590e8728137fabfd3f5f3"
+ }
+ Frame {
+ msec: 1280
+ hash: "b420fc71b22fa608a9c0cdbbbc61c447"
+ }
+ Frame {
+ msec: 1296
+ hash: "5b77af55f0a723ba762d283f41e91c98"
+ }
+ Frame {
+ msec: 1312
+ hash: "2578335ac6f21c8aec2c87515562c321"
+ }
+ Frame {
+ msec: 1328
+ hash: "a9b5438bd48dbafd307d571877416003"
+ }
+ Frame {
+ msec: 1344
+ hash: "6a4e2ee45b26037421e2a5f2d6ee517e"
+ }
+ Frame {
+ msec: 1360
+ hash: "c272aeea2b9c450fbd732305ccc01b93"
+ }
+ Frame {
+ msec: 1376
+ hash: "37c7e50c270e8feb4dd9018580284a85"
+ }
+ Frame {
+ msec: 1392
+ hash: "4f37d72c10e51f68a2359086094da249"
+ }
+ Frame {
+ msec: 1408
+ hash: "a37024356613bd5d678e0b2f7b8f5959"
+ }
+ Frame {
+ msec: 1424
+ hash: "9a4bf1400da038f2088dd4c49403d852"
+ }
+ Frame {
+ msec: 1440
+ hash: "4e401b5ebff6e442fa108e94a5dba668"
+ }
+ Frame {
+ msec: 1456
+ hash: "5bd3cc309a5fce6183654975543250b2"
+ }
+ Frame {
+ msec: 1472
+ hash: "d423a9bc912237d0f20b924849ba0cb1"
+ }
+ Frame {
+ msec: 1488
+ hash: "25f463e91febf5b6d8819fd5010bc1c2"
+ }
+ Frame {
+ msec: 1504
+ hash: "3c84122b0933ee870f178d39469e51e2"
+ }
+ Frame {
+ msec: 1520
+ hash: "7e8dfe86ea0849022355b12578d4cb1a"
+ }
+ Frame {
+ msec: 1536
+ hash: "a60edcf8d792f93a839e6ddbafbf993f"
+ }
+ Frame {
+ msec: 1552
+ hash: "abf3d90803cfa12d35d2752be7ea02d8"
+ }
+ Frame {
+ msec: 1568
+ hash: "48a7dbed293fbbd5ea202190837a411f"
+ }
+ Frame {
+ msec: 1584
+ hash: "2f06ee407e5175d4b954e31c39c9522c"
+ }
+ Frame {
+ msec: 1600
+ hash: "5784deb0f3270cf7a0d0964cd9d31458"
+ }
+ Frame {
+ msec: 1616
+ hash: "809870dfd9b05ce07170edd945348ddf"
+ }
+ Frame {
+ msec: 1632
+ hash: "08bc6815601417f3731eaae398d0861d"
+ }
+ Frame {
+ msec: 1648
+ hash: "ace9db9112d147569dc0cf1a1b680d6c"
+ }
+ Frame {
+ msec: 1664
+ hash: "14d08c2ca430631af8ede1013f4f4da0"
+ }
+ Frame {
+ msec: 1680
+ hash: "1475ae722afd169cc0c8e1fde39eb6b7"
+ }
+ Frame {
+ msec: 1696
+ hash: "58cfba3aae4bf54a5b445e0e34571d2d"
+ }
+ Frame {
+ msec: 1712
+ hash: "a6916da6bfac27aa87d75da2bbb73f31"
+ }
+ Frame {
+ msec: 1728
+ hash: "87636076959de7e5a0a8bd8b31354ed4"
+ }
+ Frame {
+ msec: 1744
+ hash: "16e2b66f28ed80d80d9b5264d89624d5"
+ }
+ Frame {
+ msec: 1760
+ hash: "d3689b53474b4b26630d70ba01c057b4"
+ }
+ Frame {
+ msec: 1776
+ hash: "11436091b24c02af94dfa75a5fd1a001"
+ }
+ Frame {
+ msec: 1792
+ hash: "524840a3453af4e97ac82b559308cce3"
+ }
+ Frame {
+ msec: 1808
+ hash: "6712be93cf1ed2b7b202367418b6d2d7"
+ }
+ Frame {
+ msec: 1824
+ hash: "7dc26fd658f626b8fe18545cf93dc4ec"
+ }
+ Frame {
+ msec: 1840
+ hash: "8a64b18006ad0bd2c373a2a9395ce52e"
+ }
+ Frame {
+ msec: 1856
+ hash: "32d0e9005ebb9dfd410d348e336bcd93"
+ }
+ Frame {
+ msec: 1872
+ hash: "98dbd004cf4809dbc90bfa9272378644"
+ }
+ Frame {
+ msec: 1888
+ hash: "0b43fdee23346c30c60b822a20131cc3"
+ }
+ Frame {
+ msec: 1904
+ hash: "0696257de0441666bd264f8db6383d15"
+ }
+ Frame {
+ msec: 1920
+ image: "zoomTextOnly.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "0ae4ee18cc675749f008b897fe35cc40"
+ }
+ Frame {
+ msec: 1952
+ hash: "0ae4ee18cc675749f008b897fe35cc40"
+ }
+ Frame {
+ msec: 1968
+ hash: "7df07aea83bc5c3213e7871854661820"
+ }
+ Frame {
+ msec: 1984
+ hash: "4fc1ef611b24ec5737310859b12c83d3"
+ }
+ Frame {
+ msec: 2000
+ hash: "c2f8551d0442d0736b71c54fc965562b"
+ }
+ Frame {
+ msec: 2016
+ hash: "4ec29787e437f9619ce0f0a0f4889d0f"
+ }
+ Frame {
+ msec: 2032
+ hash: "c2f8551d0442d0736b71c54fc965562b"
+ }
+ Frame {
+ msec: 2048
+ hash: "4fc1ef611b24ec5737310859b12c83d3"
+ }
+ Frame {
+ msec: 2064
+ hash: "7df07aea83bc5c3213e7871854661820"
+ }
+ Frame {
+ msec: 2080
+ hash: "0ae4ee18cc675749f008b897fe35cc40"
+ }
+ Frame {
+ msec: 2096
+ hash: "0ae4ee18cc675749f008b897fe35cc40"
+ }
+ Frame {
+ msec: 2112
+ hash: "f5c917c7ca26bb916dd4df84eafc8e94"
+ }
+ Frame {
+ msec: 2128
+ hash: "0696257de0441666bd264f8db6383d15"
+ }
+ Frame {
+ msec: 2144
+ hash: "0b43fdee23346c30c60b822a20131cc3"
+ }
+ Frame {
+ msec: 2160
+ hash: "98dbd004cf4809dbc90bfa9272378644"
+ }
+ Frame {
+ msec: 2176
+ hash: "32d0e9005ebb9dfd410d348e336bcd93"
+ }
+ Frame {
+ msec: 2192
+ hash: "8a64b18006ad0bd2c373a2a9395ce52e"
+ }
+ Frame {
+ msec: 2208
+ hash: "7dc26fd658f626b8fe18545cf93dc4ec"
+ }
+ Frame {
+ msec: 2224
+ hash: "6712be93cf1ed2b7b202367418b6d2d7"
+ }
+ Frame {
+ msec: 2240
+ hash: "524840a3453af4e97ac82b559308cce3"
+ }
+ Frame {
+ msec: 2256
+ hash: "11436091b24c02af94dfa75a5fd1a001"
+ }
+ Frame {
+ msec: 2272
+ hash: "d3689b53474b4b26630d70ba01c057b4"
+ }
+ Frame {
+ msec: 2288
+ hash: "16e2b66f28ed80d80d9b5264d89624d5"
+ }
+ Frame {
+ msec: 2304
+ hash: "87636076959de7e5a0a8bd8b31354ed4"
+ }
+ Frame {
+ msec: 2320
+ hash: "a6916da6bfac27aa87d75da2bbb73f31"
+ }
+ Frame {
+ msec: 2336
+ hash: "58cfba3aae4bf54a5b445e0e34571d2d"
+ }
+ Frame {
+ msec: 2352
+ hash: "1475ae722afd169cc0c8e1fde39eb6b7"
+ }
+ Frame {
+ msec: 2368
+ hash: "14d08c2ca430631af8ede1013f4f4da0"
+ }
+ Frame {
+ msec: 2384
+ hash: "ace9db9112d147569dc0cf1a1b680d6c"
+ }
+ Frame {
+ msec: 2400
+ hash: "08bc6815601417f3731eaae398d0861d"
+ }
+ Frame {
+ msec: 2416
+ hash: "809870dfd9b05ce07170edd945348ddf"
+ }
+ Frame {
+ msec: 2432
+ hash: "5784deb0f3270cf7a0d0964cd9d31458"
+ }
+ Frame {
+ msec: 2448
+ hash: "2f06ee407e5175d4b954e31c39c9522c"
+ }
+ Frame {
+ msec: 2464
+ hash: "48a7dbed293fbbd5ea202190837a411f"
+ }
+ Frame {
+ msec: 2480
+ hash: "abf3d90803cfa12d35d2752be7ea02d8"
+ }
+ Frame {
+ msec: 2496
+ hash: "a60edcf8d792f93a839e6ddbafbf993f"
+ }
+ Frame {
+ msec: 2512
+ hash: "7e8dfe86ea0849022355b12578d4cb1a"
+ }
+ Frame {
+ msec: 2528
+ hash: "3c84122b0933ee870f178d39469e51e2"
+ }
+ Frame {
+ msec: 2544
+ hash: "25f463e91febf5b6d8819fd5010bc1c2"
+ }
+ Frame {
+ msec: 2560
+ hash: "d423a9bc912237d0f20b924849ba0cb1"
+ }
+ Frame {
+ msec: 2576
+ hash: "5bd3cc309a5fce6183654975543250b2"
+ }
+ Frame {
+ msec: 2592
+ hash: "4e401b5ebff6e442fa108e94a5dba668"
+ }
+}
diff --git a/tests/auto/declarative/visual/webview/zooming/data/zooming.0.png b/tests/auto/declarative/visual/webview/zooming/data/zooming.0.png
new file mode 100644
index 0000000..aaab35d
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/data/zooming.0.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/zooming/data/zooming.1.png b/tests/auto/declarative/visual/webview/zooming/data/zooming.1.png
new file mode 100644
index 0000000..aaab35d
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/data/zooming.1.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/zooming/data/zooming.2.png b/tests/auto/declarative/visual/webview/zooming/data/zooming.2.png
new file mode 100644
index 0000000..aaab35d
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/data/zooming.2.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/zooming/data/zooming.3.png b/tests/auto/declarative/visual/webview/zooming/data/zooming.3.png
new file mode 100644
index 0000000..aaab35d
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/data/zooming.3.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/zooming/data/zooming.qml b/tests/auto/declarative/visual/webview/zooming/data/zooming.qml
new file mode 100644
index 0000000..ad83800
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/data/zooming.qml
@@ -0,0 +1,2115 @@
+import Qt.VisualTest 4.6
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 32
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 48
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 64
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 80
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 96
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 112
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 128
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 144
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 160
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 176
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 192
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 208
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 224
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 240
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 256
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 272
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 288
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 304
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 320
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 336
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 352
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 197; y: 34
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 185; y: 34
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 368
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 169; y: 38
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 384
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 161; y: 40
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 400
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 155; y: 44
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 147; y: 46
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 416
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 141; y: 48
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 138; y: 48
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 432
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 130; y: 48
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 127; y: 48
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 448
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 125; y: 48
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 123; y: 48
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 464
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 480
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 121; y: 49
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 496
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 512
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 117; y: 53
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 116; y: 53
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 528
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 115; y: 54
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 544
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 113; y: 54
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 560
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 111; y: 53
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 111; y: 52
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 576
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 110; y: 50
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 592
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 109; y: 48
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 608
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 108; y: 46
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 624
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 108; y: 45
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 107; y: 44
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 640
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 106; y: 43
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 656
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 105; y: 42
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 672
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 105; y: 41
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 688
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 704
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 720
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 736
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 105; y: 40
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 752
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 105; y: 39
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 768
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 105; y: 37
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 105; y: 36
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 784
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 105; y: 35
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 105; y: 34
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 800
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 816
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 106; y: 33
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 832
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 848
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 864
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 880
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 896
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 106; y: 33
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 912
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 928
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 944
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 960
+ image: "zooming.0.png"
+ }
+ Frame {
+ msec: 976
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 106; y: 33
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 992
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1008
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1024
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1040
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1056
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 4
+ button: 1
+ buttons: 1
+ x: 106; y: 33
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1072
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1088
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1104
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1120
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 106; y: 33
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1136
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1152
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1168
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1184
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 106; y: 34
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 106; y: 36
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1200
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 105; y: 38
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1216
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 103; y: 44
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1232
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 102; y: 46
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 98; y: 50
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1248
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 94; y: 56
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 90; y: 62
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1264
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 88; y: 70
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 84; y: 78
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1280
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 84; y: 86
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 84; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1296
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 84; y: 104
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 86; y: 114
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1312
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 88; y: 124
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 92; y: 136
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1328
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 94; y: 146
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 96; y: 156
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1344
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 96; y: 164
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 96; y: 172
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1360
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 96; y: 180
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 96; y: 188
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1376
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 96; y: 190
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 96; y: 193
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1392
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 95; y: 195
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 95; y: 197
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1408
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 95; y: 198
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 95; y: 200
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1424
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 94; y: 201
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 94; y: 202
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1440
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 94; y: 204
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1456
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 93; y: 205
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1472
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 92; y: 206
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1488
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 92; y: 208
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1504
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 92; y: 210
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1520
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 92; y: 211
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 91; y: 212
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1536
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1552
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1568
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1584
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1600
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1616
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1632
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 91; y: 213
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1648
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1664
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1680
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1696
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1712
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 91; y: 214
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 91; y: 214
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1728
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1744
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1760
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1776
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 91; y: 214
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1792
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1808
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1824
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1840
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 4
+ button: 1
+ buttons: 1
+ x: 91; y: 214
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1856
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1872
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1888
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1904
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1920
+ image: "zooming.1.png"
+ }
+ Frame {
+ msec: 1936
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 91; y: 214
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1952
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1968
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 1984
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2000
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2016
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2032
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2048
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2064
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2080
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2096
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2112
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2128
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 91; y: 212
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2144
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2160
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2176
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2192
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 89; y: 211
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2208
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 88; y: 211
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2224
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2240
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 86; y: 211
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2256
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 85; y: 211
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 84; y: 211
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2272
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 82; y: 211
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 80; y: 211
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2288
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 77; y: 211
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 75; y: 211
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2304
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 69; y: 213
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 66; y: 213
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2320
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 64; y: 213
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 62; y: 213
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2336
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 60; y: 213
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 58; y: 213
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2352
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 56; y: 213
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 55; y: 212
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2368
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2384
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2400
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2416
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2432
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2448
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2464
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2480
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 56; y: 213
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2496
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 58; y: 214
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 59; y: 214
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2512
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 61; y: 215
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 62; y: 216
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2528
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 63; y: 216
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2544
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2560
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2576
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2592
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 64; y: 216
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 64; y: 216
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2608
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2624
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2640
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2656
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2672
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 63; y: 216
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 63; y: 216
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2688
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 62; y: 216
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2704
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2720
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2736
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2752
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 4
+ button: 1
+ buttons: 1
+ x: 62; y: 216
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2768
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2784
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2800
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2816
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 62; y: 216
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2832
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2848
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 2864
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 62; y: 215
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2880
+ image: "zooming.2.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 62; y: 214
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2896
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 62; y: 213
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2912
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 62; y: 212
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 63; y: 211
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2928
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 63; y: 209
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 64; y: 208
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2944
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 66; y: 202
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 70; y: 198
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2960
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 72; y: 192
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 74; y: 186
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2976
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 76; y: 180
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 80; y: 170
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 2992
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 84; y: 162
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 88; y: 152
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3008
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 94; y: 142
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 98; y: 130
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3024
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 102; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 108; y: 108
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3040
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 112; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 114; y: 90
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3056
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 120; y: 80
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 122; y: 72
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3072
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 126; y: 66
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 128; y: 58
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3088
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 132; y: 52
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 134; y: 46
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3104
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 136; y: 40
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 140; y: 32
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3120
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 144; y: 24
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 150; y: 18
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3136
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 154; y: 10
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 0
+ x: 160; y: 4
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3152
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3168
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3184
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3200
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3216
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3232
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3248
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3264
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3280
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3296
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3312
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3328
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3344
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3360
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3376
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3392
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3408
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3424
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3440
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3456
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3472
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3488
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3504
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3520
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3536
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3552
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3568
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3584
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3600
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3616
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3632
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3648
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3664
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3680
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3696
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3712
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3728
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3744
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3760
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3776
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+ Frame {
+ msec: 3792
+ hash: "c98df558c41f1837398eead42392b780"
+ }
+}
diff --git a/tests/auto/declarative/visual/webview/zooming/pageWidth.qml b/tests/auto/declarative/visual/webview/zooming/pageWidth.qml
new file mode 100644
index 0000000..86dd7d2
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/pageWidth.qml
@@ -0,0 +1,9 @@
+import Qt 4.6
+
+WebView {
+ width: 200
+ height: 250
+ url: "resolution.html"
+ webPageWidth: 400
+ preferredWidth: 200
+}
diff --git a/tests/auto/declarative/visual/webview/zooming/qtlogo.png b/tests/auto/declarative/visual/webview/zooming/qtlogo.png
new file mode 100644
index 0000000..399bd0b
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/qtlogo.png
Binary files differ
diff --git a/tests/auto/declarative/visual/webview/zooming/renderControl.html b/tests/auto/declarative/visual/webview/zooming/renderControl.html
new file mode 100644
index 0000000..1a01a33
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/renderControl.html
@@ -0,0 +1,7 @@
+<html>
+<body>
+<h1>Render Control</h1>
+<p>
+This test shows how zooming and panning can be
+optimized for speed over quality by delaying rendering.
+<img src="qtlogo.png">
diff --git a/tests/auto/declarative/visual/webview/zooming/renderControl.qml b/tests/auto/declarative/visual/webview/zooming/renderControl.qml
new file mode 100644
index 0000000..0c8bb3b
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/renderControl.qml
@@ -0,0 +1,20 @@
+import Qt 4.6
+
+Rectangle {
+ width: 200
+ height: 250
+ clip: true
+ WebView {
+ id: webview
+ width: 400
+ url: "renderControl.html"
+ x: SequentialAnimation {
+ repeat: true
+ NumberAnimation { from: 100; to: 0; duration: 200 }
+ PropertyAction { target: webview; property: "renderingEnabled"; value: false }
+ NumberAnimation { from: 0; to: -100; duration: 200 }
+ PropertyAction { target: webview; property: "renderingEnabled"; value: true }
+ NumberAnimation { from: -100; to: 100; duration: 400 }
+ }
+ }
+}
diff --git a/tests/auto/declarative/visual/webview/zooming/resolution.html b/tests/auto/declarative/visual/webview/zooming/resolution.html
new file mode 100644
index 0000000..75b1e3f
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/resolution.html
@@ -0,0 +1,6 @@
+<html>
+<body>
+<h1>Resolution</h1>
+<p>
+This test shows how zooming can include different resolutions.
+<img src="qtlogo.png">
diff --git a/tests/auto/declarative/visual/webview/zooming/resolution.qml b/tests/auto/declarative/visual/webview/zooming/resolution.qml
new file mode 100644
index 0000000..a9d4e3a
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/resolution.qml
@@ -0,0 +1,16 @@
+import Qt 4.6
+
+WebView {
+ width: 200 * zoomFactor
+ height: 250 * zoomFactor
+ scale: 1/zoomFactor
+ url: "resolution.html"
+ zoomFactor:
+ SequentialAnimation {
+ repeat: true
+ NumberAnimation { from: 1; to: 0.25; duration: 2000 }
+ NumberAnimation { from: 0.25; to: 1; duration: 2000 }
+ NumberAnimation { from: 1; to: 5; duration: 2000 }
+ NumberAnimation { from: 5; to: 1; duration: 2000 }
+ }
+}
diff --git a/tests/auto/declarative/visual/webview/zooming/zoomTextOnly.html b/tests/auto/declarative/visual/webview/zooming/zoomTextOnly.html
new file mode 100644
index 0000000..4997712
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/zoomTextOnly.html
@@ -0,0 +1,7 @@
+<html>
+<body>
+<h1>Zoom Text Only</h1>
+<p>
+This test shows how zooming can be done just
+on text, not images.
+<img src="qtlogo.png">
diff --git a/tests/auto/declarative/visual/webview/zooming/zoomTextOnly.qml b/tests/auto/declarative/visual/webview/zooming/zoomTextOnly.qml
new file mode 100644
index 0000000..4455b43
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/zoomTextOnly.qml
@@ -0,0 +1,14 @@
+import Qt 4.6
+
+WebView {
+ width: 200
+ height: 250
+ url: "zoomTextOnly.html"
+ settings.zoomTextOnly: true
+ zoomFactor:
+ SequentialAnimation {
+ repeat: true
+ NumberAnimation { from: 2; to: 0.25; duration: 1000 }
+ NumberAnimation { from: 0.25; to: 2; duration: 1000 }
+ }
+}
diff --git a/tests/auto/declarative/visual/webview/zooming/zooming.html b/tests/auto/declarative/visual/webview/zooming/zooming.html
new file mode 100644
index 0000000..4e91035
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/zooming.html
@@ -0,0 +1,6 @@
+<html>
+<body>
+<h1>Zooming</h1>
+<p>
+This test shows how zooming can be to HTML elements.</p>
+<img src="qtlogo.png">
diff --git a/tests/auto/declarative/visual/webview/zooming/zooming.qml b/tests/auto/declarative/visual/webview/zooming/zooming.qml
new file mode 100644
index 0000000..0ea9131
--- /dev/null
+++ b/tests/auto/declarative/visual/webview/zooming/zooming.qml
@@ -0,0 +1,17 @@
+import Qt 4.6
+
+// Note that zooming is better done using zoomFactor and careful
+// control of rendering to avoid excessive re-rendering during
+// zoom animations. This test is written for simplicity.
+WebView {
+ width: 200
+ height: 250
+ x: Behavior { NumberAnimation { } }
+ y: Behavior { NumberAnimation { } }
+ scale: Behavior { NumberAnimation { } }
+ url: "zooming.html"
+ preferredWidth: width
+ preferredHeight: height
+ onDoubleClick: {console.log(clickX,clickY);heuristicZoom(clickX,clickY,2)}
+ onZoomTo: {console.log(zoom);scale=zoom;x=width/2-centerX;y=height/2-centerY}
+}